Consilium:多個人工智慧語言模型協作

釋出於 2025 年 7 月 17 日
在 GitHub 上更新

想象一下:四位人工智慧專家圍坐在牌桌旁,即時討論你最棘手的決策。這正是 Consilium,我在 Gradio Agents & MCP 駭客馬拉松期間搭建的多語言模型平臺所做的。它能讓AI模型討論複雜問題,並透過結構化辯論達成共識。

該平臺既可作為視覺化 Gradio 介面執行,也可作為 MCP(模型上下文協議)伺服器直接與 Cline 等應用程式整合(Claude Desktop 存在超時無法調整的問題)。核心思想始終是讓 LLM 透過討論達成共識;這也是 Consilium 這個名字的由來。後來,又添加了多數投票和排序選擇等其他決策模式,以使協作更加複雜。

從概念到架構

這並非我最初的駭客松想法。我最初想構建一個簡單的 MCP 伺服器,與 RevenueCat 中的專案進行互動。但後來我重新考慮了,因為我意識到一個多語言模型平臺,讓這些模型討論問題並返回有充分理由的答案,將更具吸引力。

時機恰到好處。駭客馬拉松結束後不久,微軟釋出了他們的 AI 診斷編排器 (MAI-DxO),它本質上是一個由不同角色(如“挑戰者醫生代理”)組成的人工智慧醫生小組,用於迭代診斷患者。在他們使用 OpenAI o3 的設定中,他們正確解決了 85.5% 的醫學診斷基準案例,而執業醫師的準確率僅為 20%。這恰恰驗證了 Consilium 所展示的:多個人工智慧視角協作可以顯著優於個體分析。

在確定了概念之後,我需要一個既能作為 MCP 伺服器又能作為引人入勝的 Hugging Face 空間演示的東西。最初我考慮使用標準的 Gradio Chat 元件,但我希望我的提交能夠脫穎而出。我的想法是讓語言模型圍坐在會議室的桌子旁,並顯示語音氣泡,這樣既能捕捉協作討論,又能使其在視覺上引人入勝。由於我未能很好地設計一個標準表格,使其真正被識別為表格,我選擇了撲克式圓桌會議。這種方法也讓我能夠透過構建自定義 Gradio 元件和 MCP 伺服器來提交到兩個駭客松賽道。

構建視覺基礎

自定義 Gradio 元件成為提交的核心;撲克風格的圓桌會議,參與者圍坐其中,顯示出他們的回答、思考狀態和研究活動的語音氣泡,立即吸引了訪問該空間的人的目光。由於 Gradio 出色的開發者體驗,元件開發非常順利,儘管我在 PyPI 釋出方面遇到了一個文件空白,導致我首次為 Gradio 專案做出了貢獻。

# The visual component integration
roundtable = consilium_roundtable(
    label="AI Expert Roundtable",
    label_icon="https://huggingface.co/front/assets/huggingface_logo-noborder.svg",
    value=json.dumps({
        "participants": [],
        "messages": [],
        "currentSpeaker": None,
        "thinking": [],
        "showBubbles": [],
        "avatarImages": avatar_images
    })
)

在整個駭客馬拉松期間,視覺設計被證明是穩健的;在初始實現之後,只添加了使用者定義的頭像和中心表格文字等功能,而核心互動模型保持不變。

如果您有興趣建立自己的自定義 Gradio 元件,您應該看看 5 分鐘建立自定義元件,是的,標題沒有撒謊;基本設定確實只需要 5 分鐘。

會話狀態管理

視覺化圓桌會議透過基於會話的字典系統維護狀態,每個使用者透過 user_sessions[session_id] 獲得獨立的儲存。核心狀態物件跟蹤 participantsmessagescurrentSpeakerthinkingshowBubbles 陣列,這些陣列透過 update_visual_state() 回撥進行更新。當模型思考、發言或執行研究時,引擎透過向訊息陣列追加並切換髮言者/思考狀態,向前端推送增量狀態更新,從而建立即時視覺化流程,而無需複雜的有限狀態機——只需後端處理和前端渲染之間同步的直接 JSON 狀態突變。

讓語言模型真正進行討論

在實現過程中,我意識到LLM之間並沒有真正的討論,因為它們缺乏明確的角色。它們接收到持續討論的完整上下文,但不知道如何有意義地參與。我引入了不同的角色來建立富有成效的辯論動態,經過幾次調整,最終形成了以下形式:

self.roles = {
    'standard': "Provide expert analysis with clear reasoning and evidence.",
    'expert_advocate': "You are a PASSIONATE EXPERT advocating for your specialized position. Present compelling evidence with conviction.",
    'critical_analyst': "You are a RIGOROUS CRITIC. Identify flaws, risks, and weaknesses in arguments with analytical precision.",
    'strategic_advisor': "You are a STRATEGIC ADVISOR. Focus on practical implementation, real-world constraints, and actionable insights.",
    'research_specialist': "You are a RESEARCH EXPERT with deep domain knowledge. Provide authoritative analysis and evidence-based insights.",
    'innovation_catalyst': "You are an INNOVATION EXPERT. Challenge conventional thinking and propose breakthrough approaches."
}

這解決了討論問題,但又提出了一個新問題:如何確定共識或識別最強的論點?我實施了一個首席分析師系統,使用者選擇一個LLM來綜合最終結果並評估是否達成共識。

我還希望使用者能夠控制通訊結構。除了預設的完整上下文共享之外,我還添加了兩種備用模式:

  • 環形:每個語言模型只接收上一個參與者的回覆。
  • 星形:所有訊息都透過主分析師作為中央協調器。

最後,討論需要終點。我實現了可配置的回合數(1-5),測試表明更多回合會增加達成共識的可能性(儘管計算成本更高)。

語言模型選擇與研究整合

當前的模型選擇包括 Mistral Large、DeepSeek-R1、Meta-Llama-3.3-70B 和 QwQ-32B。雖然 Claude Sonnet 和 OpenAI 的 o3 等知名模型缺席,但這反映了駭客馬拉松學分可用性和贊助商獎項考慮,而非技術限制。

self.models = {
    'mistral': {
        'name': 'Mistral Large',
        'api_key': mistral_key,
        'available': bool(mistral_key)
    },
    'sambanova_deepseek': {
        'name': 'DeepSeek-R1',
        'api_key': sambanova_key,
        'available': bool(sambanova_key)
    }
    ...
}

對於支援函式呼叫的模型,我整合了一個專門的研究代理,它以另一個圓桌會議參與者的身份出現。這種代理方法沒有直接賦予模型網路訪問許可權,而是提供了關於外部資源可用性的視覺清晰度,並確保了所有函式呼叫模型的一致訪問。

def handle_function_calls(self, completion, original_prompt: str, calling_model: str) -> str:
    """UNIFIED function call handler with enhanced research capabilities"""
    
    message = completion.choices[0].message
    
    # If no function calls, return regular response
    if not hasattr(message, 'tool_calls') or not message.tool_calls:
        return message.content
    
    # Process each function call
    for tool_call in message.tool_calls:
        function_name = tool_call.function.name
        arguments = json.loads(tool_call.function.arguments)
        
        # Execute research and show progress
        result = self._execute_research_function(function_name, arguments, calling_model_name)

研究代理訪問五個來源:網路搜尋、維基百科、arXiv、GitHub 和 SEC EDGAR。我將這些工具建立在一個可擴充套件的基類架構上,以備將來擴充套件,同時重點關注可免費嵌入的資源。

class BaseTool(ABC):
    """Base class for all research tools"""
    
    def __init__(self, name: str, description: str):
        self.name = name
        self.description = description
        self.last_request_time = 0
        self.rate_limit_delay = 1.0
    
    @abstractmethod
    def search(self, query: str, **kwargs) -> str:
        """Main search method - implemented by subclasses"""
        pass
    
    def score_research_quality(self, research_result: str, source: str = "web") -> Dict[str, float]:
        """Score research based on recency, authority, specificity, relevance"""
        quality_score = {
            "recency": self._check_recency(research_result),
            "authority": self._check_authority(research_result, source),
            "specificity": self._check_specificity(research_result),
            "relevance": self._check_relevance(research_result)
        }
        return quality_score

由於研究操作可能耗時,語音氣泡會顯示進度指示器和時間估算,以在較長的研究任務中保持使用者參與度。

發現開放式協議

駭客馬拉松之後,Deborah Dahl 向我介紹了 開放式協議,它與圓桌會議方式完美契合。該協議為跨平臺代理通訊提供了標準化的 JSON 訊息格式。與其他代理間協議的關鍵區別在於,所有代理都保持持續的對話意識,就像坐在同一張桌子旁一樣。我沒有在其他協議中見過的一個特點是,主持人可以動態地邀請和移除代理。

該協議的互動模式直接對映到 Consilium 的架構:

  • 委派:在代理之間轉移控制權
  • 通道:不修改地傳遞訊息
  • 調解:幕後協調
  • 編排:多個代理協作

我目前正在整合對開放式協議的支援,以便使用者可以將任何符合 OFP 的代理新增到他們的圓桌討論中。您可以在以下連結關注此開發:https://huggingface.co/spaces/azettl/consilium_ofp

經驗教訓與未來影響

本次駭客馬拉松讓我接觸到了之前從未遇到過的多智慧體辯論研究,其中包括 透過多智慧體辯論鼓勵大型語言模型中的發散思維等基礎研究。社群體驗非常出色;所有參與者都透過 Discord 反饋和協作積極相互支援。看到我的圓桌會議元件被整合到 另一個駭客馬拉松專案中,是我在 Consilium 工作期間的一大亮點。

我將繼續致力於 Consilium,透過擴充套件模型選擇、Open Floor Protocol 整合和可配置的代理角色,該平臺將能夠支援幾乎所有可以想象的多代理辯論場景。

構建 Consilium 再次堅定了我對人工智慧未來的信念,即未來不僅在於更強大的個體模型,更在於能實現有效人工智慧協作的系統。隨著專業化小型語言模型效率更高、資源更友好,我相信,針對特定任務的 SLM 圓桌會議與專用研究代理相結合,將為許多用例提供引人注目的替代方案,以取代通用大型語言模型。

社群

真是太棒的工作和文章了!

·
文章作者

謝謝 @Tonic

我一直在尋找這個概念,這是一篇很棒的文章!🤩

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.