導讀
本文描述了關於智慧體(Agents)和多智慧體系統(Multi-Agent Systems, MAS)的詳盡介紹,涵蓋了從定義、分類到具體實現框架的多個方面。
一、介紹
1.1 什麼是智慧體
關於智慧體的定義比較多,這裡結合下anthropic與Google關於Agent的定義:
智慧體(Agent)是可以感知和理解環境並使用工具來實現目標的應用程式。
從架構上,可以將智慧體系統分為兩類:
-
工作流系統(Workflows) – 人做整體規劃的決策,LLM是鏈路的一個節點
-
LLM和各類工具透過預定義的程式碼路徑進行編排
-
提供可預測性和一致性
-
適用於明確定義的任務
2. 智慧體系統(Agents) – LLM做決策,決定任務要怎麼做
-
LLM能夠動態指導自己的過程和工具使用
-
保持對任務完成方式的控制
-
適用於需要靈活性和模型驅動決策的場景
兩者的主要區別:
特徵
|
工作流系統
|
智慧體系統
|
執行路徑
|
預定義、固定
|
動態、靈活
|
決策方式
|
基於規則
|
基於LLM推理
|
確定性
|
高
|
相對較低
|
可預測性
|
強
|
相對較弱
|
適應性
|
低
|
高
|
複雜度
|
相對簡單
|
相對複雜
|
維護成本
|
較低
|
較高
|
應用場景
|
明確、重複性任務
|
不確定、創造性任務
|

在設計到智慧體系統的開發實現時,可以考慮遵循的策略:
-
簡單優先:從最簡單的解決方案開始,根據需要增加複雜度,避免過度工程 -
漸進式發展:先最佳化單一LLM呼叫,新增檢索和上下文示例 -
必要時使用智慧體系統: 從Workflow到Agents,Workflow為明確定義的任務提供可預測性和一致性,而當大規模需要靈活性和模型驅動的決策時,可以考慮Agents。
參考:https://www.anthropic.com/research/building-effective-agents
接下來我們討論的智慧體統一是Agents,由LLM驅動決策的智慧體系統。
1.2 為什麼需要多智慧體
單智慧體本身就是為了解決足夠複雜的任務,為什麼還需要多智慧體?

隨著任務複雜度增加,單一智慧體需要理解的語境和工具使用面臨上下文視窗限制,導致效能下降。
多智慧體協作透過動態任務分解、專業化分工和協同工作克服這一挑戰。
在處理複雜任務時,系統會將任務分解為多個子任務。每個子任務由專門的智慧體處理,這些智慧體在特定領域具有專長。
智慧體之間透過持續的資訊交換和任務協調來實現整體目標,這種協作方法可能產生智慧湧現,即系統整體表現超越單個智慧體能力之和。

在當前的現實中,在開發一個單智慧體系統時會遇到的問題:
-
智慧體可用的工具過多,在決定下一步呼叫哪個工具時效果不佳 -
上下文過多對於單個智慧體來說過於複雜,難以跟蹤 -
系統中需要多個專業領域(如規劃器、研究員、數學專家等) -
…
為了解決上述的問題,可以考慮將應用拆分為多個更小的獨立智慧體,並將它們組合成一個多智慧體系統,期望達到的效果
-
模組化:獨立的智慧體使開發、測試和維護變得更容易; -
專業化:可以建立專注於特定領域的專家智慧體,這有助於提高整個系統的效能。 -
控制:可以明確控制智慧體之間的通訊方式(而不是依賴於函式呼叫)。
智慧體透過共同協作解決使用者的問題,協作的模式:

參考:https://www.salesforce.com/blog/the-agentic-ai-era-after-the-dawn-heres-what-to-expect/
二、多智慧體框架
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
受限於微信篇幅,這裡僅介紹兩個有代表性的多智慧體框架。
Swarm
OpenAI Swarm是一個實驗性的教育框架,旨在探索輕量級的多智慧體協調方式,它不是作為一個獨立的庫來使用,而是主要用於教育目的。Swarm框架的核心目標是展示在《Orchestrating Agents: Handoffs & Routines》文章中的提到的模式。
https://cookbook.openai.com/examples/orchestrating_agents
設計原則
-
輕量級和可擴充套件性:通過幾個核心的概念抽象,來實現智慧體的協調和執行,使其輕量、高度可控且易於測試。
-
代理(Agent):代理是Swarm框架中的基本單元,它封裝了一組指令和工具,並可以選擇將對話移交給另一個代理。代理可以被看作是一個獨立的實體,負責執行特定的任務。 -
交接(Handoff):交接是指代理之間轉移執行控制權的過程。當一個代理完成其任務後,它可以將控制權移交給另一個代理,以便繼續執行任務。 -
例程(Routines):Swarm框架透過例程來定義代理的行為模式。例程是代理在處理任務時應遵循的步驟,它們允許代理透過一系列預定義的指令來響應特定的輸入或情況。 -
工具呼叫(Tool Calls):Swarm允許代理呼叫Python函式,並支援透過函式返回值更新上下文變數和進行代理交接,這增加了框架的靈活性和可定製性。
-
高度可定製性:Swarm的設計允許開發者根據需要定製智慧體的行為和互動。 -
教育目的:Swarm主要用於教育和展示多智慧體協調的概念,而不是用於生產環境。 -
無狀態性:Swarm完全由Chat Completions API驅動,因此在呼叫之間不儲存狀態。
Swarm的核心程式碼非常的精簡,還是比較容易理解的,可以閱讀下其程式碼,核心原始碼300行左右,配合官方的cookbook一起看:https://cookbook.openai.com/examples/orchestrating_agents
透過一個案例來理解其設計原則,官方給出最簡單的案例,當然官方還給出了更多其它的案例都可以看下:
from swarm import Swarm
# 初始化Swarm客戶端:
client = Swarm()
def transfer_to_agent_b():
return agent_b
# 智慧體(Agent)是Swarm中的核心構建塊,它封裝了一組指令和函式,
# 並且可以在任何時候選擇將對話交接給另一個智慧體
agent_a = Agent(
name="Agent A",
instructions="You are a helpful agent.",
functions=[transfer_to_agent_b],
)
agent_b = Agent(
name="Agent B",
instructions="Only speak in Haikus.",
)
# 執行智慧體:這個方法類似於Chat Completions API中的chat.completions.create()函式,
# 它接受messages並返回messages,並且在呼叫之間不儲存狀態。
response = client.run(
agent=agent_a,
messages=[{"role": "user", "content": "I want to talk to agent B."}],
)
print(response.messages[-1]["content"])
其它特性:智慧體交接和上下文變數更新,智慧體可以透過返回另一個智慧體的函式來實現交接。同時,它也可以透過返回一個更完整的Result物件來更新上下文變數。例如:
from swarm import Swarm, Agent
from swarm.types import Result
# 初始化Swarm客戶端:
client = Swarm()
sales_agent = Agent(name="Sales Agent")
def talk_to_sales():
print("Hello, World!")
return Result(
value="Done",
agent=sales_agent,
context_variables={"department": "sales"}
)
agent = Agent(functions=[talk_to_sales])
response = client.run(
agent=agent,
messages=[{"role": "user", "content": "Transfer me to sales"}],
context_variables={"user_name": "John"}
)
print(response.agent.name)
print(response.context_variables)
執行日誌:
[2024-11-2620:51:30] Getting chat completion for...: [{'role': 'system', 'content': 'You are a helpful agent.'}, {'role': 'user', 'content': 'Transfer me to sales'}]
[2024-11-2620:51:31] Received completion: ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_zuGIzKeyEVkJ2pAsLrqOec1o', function=Function(arguments='{}', name='talk_to_sales'), type='function')], refusal=None)
[2024-11-2620:51:31] Processing tool call: talk_to_sales with arguments {}
Hello, World!
[2024-11-2620:51:31] Getting chat completion for...: [{'role': 'system', 'content': 'You are a helpful agent.'}, {'role': 'user', 'content': 'Transfer me to sales'}, {'content': None, 'role': 'assistant', 'function_call': None, 'tool_calls': [{'id': 'call_zuGIzKeyEVkJ2pAsLrqOec1o', 'function': {'arguments': '{}', 'name': 'talk_to_sales'}, 'type': 'function'}], 'refusal': None, 'sender': 'Agent'}, {'role': 'tool', 'tool_call_id': 'call_zuGIzKeyEVkJ2pAsLrqOec1o', 'tool_name': 'talk_to_sales', 'content': 'Done'}]
[2024-11-2620:51:32] Received completion: ChatCompletionMessage(content="I've transferred you to the sales team. They should be able to assist you shortly!", role='assistant', function_call=None, tool_calls=None, refusal=None)
[2024-11-2620:51:32] Ending turn.
Sales Agent
{'user_name': 'John', 'department': 'sales'}


流式響應:Swarm支援流式響應,可以透過設定stream=True來啟用。例如:
stream = client.run(agent, messages,stream=True)
for chunk in stream:
print(chunk)
Swarm提供了一些示例方便學習,包括:
-
basic:基礎示例,包括設定、函式呼叫、交接和上下文變數等基本要素。 -
triage_agent:設定基本的分診步驟以將任務交接給正確的智慧體的簡單示例。 -
weather_agent:函式呼叫的簡單示例。 -
airline:處理航空公司不同客戶服務請求的多智慧體設定。 -
support_bot:包括使用者介面智慧體和幫助中心智慧體以及多個工具的客戶服務機器人。 -
personal_shopper:可以幫助處理銷售和退款訂單的個人購物智慧體。
核心概念
智慧體(Agent)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
函式(Functions)
Swarm中的智慧體可以直接呼叫Python函式。函式通常應該返回一個字串(值將嘗試被轉換為字串)。如果函式返回一個智慧體,執行將轉移到該智慧體。如果函式定義了一個context_variables引數,它將被client.run()中傳遞的context_variables填充。
交接(Handoffs)
智慧體可以透過返回另一個智慧體的函式來實現交接。例如,一個智慧體可以將執行權交接給銷售智慧體:
def transfer_to_sales():
return sales_agent
智慧體還可以透過返回一個更完整的Result物件來更新上下文變數。這個物件還可以包含一個值和一個智慧體,如果你想要一個單一函式返回一個值、更新智慧體以及更新上下文變數(或三者的任何子集)。

時序圖
-
同一時間只有一個Agent在提供服務,這個Agent是啟用狀態的Agent; -
透過持續的問答形式幫助使用者解決對應的問題;適合和使用者互動比較強的場景;
https://cookbook.openai.com/examples/orchestrating_agents

總結
OpenAI Swarm是一個實驗性的多智慧體框架,它透過輕量級的設計和交接機制,使得多智慧體系統的構建和協調變得簡單。雖然Swarm目前主要用於教育目的,但是其靈活性可以讓開發者可以探索和實驗多智慧體系統的設計和實現。
https://cookbook.openai.com/examples/orchestrating_agents
https://github.com/openai/swarm
Magentic-One
Autogen-Magentic-One 是一個基於 Microsoft AutoGen 框架的增強版本,專注於提供更強大、更靈活的多代理協作系統。該專案透過引入賬本(Ledger)機制來協調多個 AI 代理之間的互動,使得複雜任務的處理更加高效和可控。
核心特性
-
智慧代理協調:透過 LedgerOrchestrator 實現多個 AI 代理之間的智慧協調 -
動態任務規劃:支援任務執行過程中的動態規劃和調整 -
靈活的程式碼執行:整合 Docker 環境,支援安全的程式碼執行
核心元件
-
LedgerOrchestrator(賬本編排器)
-
負責協調多個代理的工作 -
跟蹤任務進度和狀態 -
動態分配下一個行動代理 -
處理任務重規劃和失敗恢復
-
代理系統(Agents)
-
支援多種專門化代理 -
每個代理都有特定的職責和能力 -
可以進行代理間的訊息傳遞和協作
-
程式碼執行器(Code Executor)
-
基於 Docker 的安全程式碼執行環境 -
支援多種程式語言 -
提供隔離的執行環境
透過程式碼的結構也可以看出來,最核心的幾個類:

核心流程
1、Orchestrator 和其他 Agent 都繼承自 MagenticOneBaseAgent,對所有智慧體一個統一的抽象;內部實現了幾個案例智慧體,Coder、WebSurfer、FileSurfer、UserProxy、Executor(執行程式碼)、LedgerOrchestrator(負責任務編排和決策)
2、任務的編排:Orchestrator 維護一個 ledger(賬本),用於
-
記錄任務進展
-
判斷是否需要重新規劃
-
檢測任務是否陷入迴圈
-
決定下一個執行的智慧體
-
編排過程:
-
初始化時建立任務計劃
-
每次收到廣播訊息後更新 ledger 狀態
-
根據 ledger(賬本) 狀態決定:
-
是否任務完成
-
是否需要重新規劃
-
選擇下一個合適的智慧體
3、訊息的處理機制,定義了四種不同型別的訊息
-
RequestReplyMessage:觸發智慧體呼叫大模型生成回覆,當針對某個智慧體發生訊息時會使用這個。 -
BroadcastMessage:智慧體產生回覆後,會發生廣播訊息,Orchestrator收到廣播訊息後,會進行任務編排。更新 ledger、評估任務狀態、選擇下一個智慧體。普通智慧體:將訊息加入對話歷史 -
ResetMessage:清空智慧體的對話歷史 -
DeactivateMessage:將智慧體置於非啟用狀態,非啟用狀態下忽略所有incoming訊息。



-
初始化階段 (_initialize_task):
-
收集任務相關事實
-
基於團隊組成建立執行計劃
-
向所有代理廣播綜合資訊
-
任務執行迴圈 (_select_next_agent):
-
透過 ledger 跟蹤任務狀態
-
決定下一步行動
-
處理三種主要情況:
-
任務完成
-
任務停滯需要重新規劃
-
繼續正常執行
-
狀態監控 (update_ledger):
-
跟蹤任務是否完成
-
檢測是否陷入迴圈
-
評估是否在取得進展
-
決定下一個發言的代理
-
生成下一步指令
-
重新規劃機制 (_update_facts_and_plan):
-
在任務停滯時觸發 -
更新已知事實 -
制定新的執行計劃 -
重置對話歷史 -
向所有代理廣播新計劃
-
最終答案生成 (_prepare_final_answer):
-
在任務完成時觸發
-
總結整個對話過程
-
生成針對原始請求的最終答案
-
max_rounds: 最大執行輪數(預設20輪)
-
max_stalls_before_replan: 觸發重新規劃前的最大停滯次數(預設3次)
-
max_replans: 最大重新規劃次數(預設3次)
-
return_final_answer: 是否生成最終答案總結
在處理廣播訊息的時候,選擇新的智慧體,然後把訊息發給新選擇的智慧體:

編排者在收到廣播訊息之後,還是選擇下一個智慧體

普通的Agent廣播訊息是直接加入到自己的聊天曆史:

基本使用
import asyncio
from autogen_magentic_one import LedgerOrchestrator, DockerCommandLineCodeExecutor
async def main():
# 初始化程式碼執行器
async with DockerCommandLineCodeExecutor(work_dir="./logs") as code_executor:
# 建立編排器
orchestrator = LedgerOrchestrator(
agents=[agent1, agent2], # 配置你的代理
model_client=your_model_client # 配置你的模型客戶端
)
# 執行任務
result = await orchestrator.run("你的任務描述")
# 執行主程式
asyncio.run(main())
其它可以:
-
可以建立專門的代理來處理特定任務
-
透過日誌系統監控任務執行狀態
-
支援任務失敗後的自動重試和重規劃
執行效果
官方的案例使用方式:
# Specify logs directory
python examples/example.py --logs_dir ./logs
# Enable human-in-the-loop mode
python examples/example.py --logs_dir ./logs --hil_mode
# Save screenshots of browser
python examples/example.py --logs_dir ./logs --save_screenshots
–hil_mode模式的作用



{"timestamp": "2025-01-06T11:15:12.921838", "source": "UserProxy", "message": "你好啊,你能做什麼?", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:15.949531", "prompt_tokens": 323, "completion_tokens": 113, "type": "LLMCallEvent"}
{"timestamp": "2025-01-06T11:15:17.452977", "prompt_tokens": 654, "completion_tokens": 74, "type": "LLMCallEvent"}
{"timestamp": "2025-01-06T11:15:17.453443", "source": "Orchestrator (thought)", "message": "Initial plan:\n\nWe are working to address the following user request:\n\n你好啊,你能做什麼?\n\n\nTo answer this request we have assembled the following team:\n\nWebSurfer: A helpful assistant with access to a web browser. Ask them to perform web searches, open pages, and interact with content (e.g., clicking links, scrolling the viewport, etc., filling in form fields, etc.) It can also summarize the entire page, or answer questions based on the content of the page. It can also be asked to sleep and wait for pages to load, in cases where the pages seem to be taking a while to load.\nCoder: A helpful and general-purpose AI assistant that has strong language skills, Python skills, and Linux command line skills.\nExecutor: A agent for executing code\nfile_surfer: An agent that can handle local files.\n\n\n\nHere is an initial fact sheet to consider:\n\n1. GIVEN OR VERIFIED FACTS\n - The request is written in Chinese, indicating the user likely speaks Chinese.\n\n2. FACTS TO LOOK UP\n - None. The question is straightforward and does not require external information.\n\n3. FACTS TO DERIVE\n - The possible capabilities of the assistant, which include providing information, answering questions, assisting with problem-solving, and other general conversational or task-related capabilities.\n\n4. EDUCATED GUESSES\n - The user is asking about the abilities or functions available through interaction with the assistant.\n\n\n\n\nHere is the plan to follow as best as possible:\n\n- Respond directly to the user's query in Chinese, outlining the capabilities of the assistant.\n- Highlight the main functions, including answering questions, providing information, assisting with problem-solving, and offering conversational support.\n- Make sure the response is concise and easy to understand.\n\nNote: There is no requirement for web searches, code execution, or local file handling for this request.\n", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:21.726491", "prompt_tokens": 961, "completion_tokens": 236, "type": "LLMCallEvent"}
{"timestamp": "2025-01-06T11:15:21.726640", "source": "Orchestrator (thought)", "message": "Updated Ledger:\n{\n \"is_request_satisfied\": {\n \"reason\": \"The user asked what the assistant can do, and the response has not yet been provided.\",\n \"answer\": false\n },\n \"is_in_loop\": {\n \"reason\": \"This is the initial response development, and no repetitive action has been taken.\",\n \"answer\": false\n },\n \"is_progress_being_made\": {\n \"reason\": \"The initial analysis and planning of the user's request have been completed, and the response is yet to be formulated.\",\n \"answer\": true\n },\n \"next_speaker\": {\n \"reason\": \"The next logical step is to utilize the Coder to respond directly to the user's question about the assistant's capabilities.\",\n \"answer\": \"Coder\"\n },\n \"instruction_or_question\": {\n \"reason\": \"The Coder should generate a response in Chinese explaining the capabilities of the assistant as requested by the user.\",\n \"answer\": \"\\u8bf7\\u7528\\u4e2d\\u6587\\u7b80\\u8981\\u63cf\\u8ff0\\u8fd9\\u4f4d\\u52a9\\u624b\\u53ef\\u4ee5\\u505a\\u7684\\u4e8b\\u60c5\\uff0c\\u5305\\u62ec\\u56de\\u7b54\\u95ee\\u9898\\u3001\\u63d0\\u4f9b\\u4fe1\\u606f\\u3001\\u5e2e\\u52a9\\u89e3\\u51b3\\u95ee\\u9898\\u548c\\u63d0\\u4f9b\\u5bf9\\u8bdd\\u652f\\u6301\\u3002\"\n }\n}", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:21.726763", "source": "Orchestrator (-> Coder)", "message": "請用中文簡要描述這位助手可以做的事情,包括回答問題、提供資訊、幫助解決問題和提供對話支援。", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:21.726922", "source": "Orchestrator (thought)", "message": "Next speaker Coder", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:23.828462", "prompt_tokens": 893, "completion_tokens": 157, "type": "LLMCallEvent"}
{"timestamp": "2025-01-06T11:15:23.830580", "source": "Coder", "message": "你好!我是一個智慧助手,可以幫助你完成很多工。以下是我的一些功能:\n\n1. **回答問題**:無論是關於特定主題的問題,還是一般性的知識,我都會盡力解答。\n\n2. **提供資訊**:我可以為你提供各種資訊和建議,比如新聞,天氣預報,或者關於某個主題的詳細資料。\n\n3. **幫助解決問題**:我可以指導你如何解決技術問題、學習新技能或完成特定任務。\n\n4. **提供對話支援**:如果你需要聊天或有任何想法需要交流,我會隨時傾聽並回應你的需求。\n\n如果你有具體的需求或問題,請告訴我,我會盡力幫助你! \n\nTERMINATE", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:27.079104", "prompt_tokens": 1161, "completion_tokens": 186, "type": "LLMCallEvent"}
{"timestamp": "2025-01-06T11:15:27.079653", "source": "Orchestrator (thought)", "message": "Updated Ledger:\n{\n \"is_request_satisfied\": {\n \"reason\": \"The user's question about the assistant's capabilities has been answered with a concise and clear explanation in Chinese.\",\n \"answer\": true\n },\n \"is_in_loop\": {\n \"reason\": \"There is no repetition of requests or responses indicating a loop.\",\n \"answer\": false\n },\n \"is_progress_being_made\": {\n \"reason\": \"The task was completed successfully by providing a detailed response to the user's query.\",\n \"answer\": true\n },\n \"next_speaker\": {\n \"reason\": \"The request has been fully satisfied, so no further action is required.\",\n \"answer\": \"Coder\"\n },\n \"instruction_or_question\": {\n \"reason\": \"No further action is needed as the user's query was successfully addressed.\",\n \"answer\": \"No further instructions needed.\"\n }\n}", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:27.079895", "source": "Orchestrator (thought)", "message": "Request satisfied.", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:29.529069", "prompt_tokens": 679, "completion_tokens": 153, "type": "LLMCallEvent"}
{"timestamp": "2025-01-06T11:15:29.529221", "source": "Orchestrator (final answer)", "message": "\n你好!我是一個智慧助手,可以幫助你完成許多工。以下是我的一些功能:\n\n1. **回答問題**:無論是關於特定主題的問題,還是一般性的知識,我都會盡力解答。\n\n2. **提供資訊**:我可以提供各種資訊和建議,比如新聞、天氣預報或者某個主題的詳細資料。\n\n3. **幫助解決問題**:我可以指導你如何解決技術問題、學習新技能或完成特定任務。\n\n4. **提供對話支援**:如果你需要聊天或有任何想法需要交流,我會隨時傾聽並回應你的需求。\n\n如果你有具體的需求或問題,請隨時告訴我,我會盡力幫助你!", "type": "OrchestrationEvent"}
{"timestamp": "2025-01-06T11:15:29.529306", "source": "Orchestrator (termination condition)", "message": "No agent selected.", "type": "OrchestrationEvent"}
python examples/example.py --logs_dir ./
User input('exit' to quit): 你好啊,你能做什麼?
---------------------------------------------------------------------------
[2025-01-06T11:15:12.921838], UserProxy:
你好啊,你能做什麼?
---------------------------------------------------------------------------
[2025-01-06T11:15:17.453443], Orchestrator(thought):
Initial plan:
We are working to address the following user request:
你好啊,你能做什麼?
To answer this request we have assembled the following team:
WebSurfer: A helpful assistant with access to a web browser. Ask them to perform web searches, open pages, and interact with content(e.g., clicking links, scrolling the viewport, etc., filling in form fields, etc.) It can also summarize the entire page, or answer questions based on the content of the page. It can also be asked to sleep and wait for pages to load, in cases where the pages seem to be taking a while to load.
Coder: A helpful and general-purpose AI assistant that has strong language skills, Python skills, and Linux command line skills.
Executor: A agent for executing code
file_surfer: An agent that can handle local files.
Here is an initial fact sheet to consider:
1. GIVEN OR VERIFIED FACTS
- The request is written in Chinese, indicating the user likely speaks Chinese.
2. FACTS TO LOOK UP
- None. The question is straightforward and does not require external information.
3. FACTS TO DERIVE
- The possible capabilities of the assistant, which include providing information, answering questions, assisting with problem-solving, and other general conversational or task-related capabilities.
4. EDUCATED GUESSES
- The user is asking about the abilities or functions available through interaction with the assistant.
Here is the plan to follow as best as possible:
- Respond directly to the user's query in Chinese, outlining the capabilities of the assistant.
- Highlight the main functions, including answering questions, providing information, assisting with problem-solving, and offering conversational support.
- Make sure the response is concise and easy to understand.
Note: There is no requirement for web searches, code execution, or local file handling forthis request.
---------------------------------------------------------------------------
[2025-01-06T11:15:21.726640], Orchestrator(thought):
Updated Ledger:
{
"is_request_satisfied": {
"reason": "The user asked what the assistant can do, and the response has not yet been provided.",
"answer": false
},
"is_in_loop": {
"reason": "This is the initial response development, and no repetitive action has been taken.",
"answer": false
},
"is_progress_being_made": {
"reason": "The initial analysis and planning of the user's request have been completed, and the response is yet to be formulated.",
"answer": true
},
"next_speaker": {
"reason": "The next logical step is to utilize the Coder to respond directly to the user's question about the assistant's capabilities.",
"answer": "Coder"
},
"instruction_or_question": {
"reason": "The Coder should generate a response in Chinese explaining the capabilities of the assistant as requested by the user.",
"answer": "\u8bf7\u7528\u4e2d\u6587\u7b80\u8981\u63cf\u8ff0\u8fd9\u4f4d\u52a9\u624b\u53ef\u4ee5\u505a\u7684\u4e8b\u60c5\uff0c\u5305\u62ec\u56de\u7b54\u95ee\u9898\u3001\u63d0\u4f9b\u4fe1\u606f\u3001\u5e2e\u52a9\u89e3\u51b3\u95ee\u9898\u548c\u63d0\u4f9b\u5bf9\u8bdd\u652f\u6301\u3002"
}
}
---------------------------------------------------------------------------
[2025-01-06T11:15:21.726763], Orchestrator (-> Coder):
請用中文簡要描述這位助手可以做的事情,包括回答問題、提供資訊、幫助解決問題和提供對話支援。
---------------------------------------------------------------------------
[2025-01-06T11:15:21.726922], Orchestrator (thought):
Next speaker Coder
---------------------------------------------------------------------------
[2025-01-06T11:15:23.830580], Coder:
你好!我是一個智慧助手,可以幫助你完成很多工。以下是我的一些功能:
1. **回答問題**:無論是關於特定主題的問題,還是一般性的知識,我都會盡力解答。
2. **提供資訊**:我可以為你提供各種資訊和建議,比如新聞,天氣預報,或者關於某個主題的詳細資料。
3. **幫助解決問題**:我可以指導你如何解決技術問題、學習新技能或完成特定任務。
4. **提供對話支援**:如果你需要聊天或有任何想法需要交流,我會隨時傾聽並回應你的需求。
如果你有具體的需求或問題,請告訴我,我會盡力幫助你!
TERMINATE
---------------------------------------------------------------------------
[2025-01-06T11:15:27.079653], Orchestrator (thought):
Updated Ledger:
{
"is_request_satisfied": {
"reason": "The user's question about the assistant's capabilities has been answered with a concise and clear explanation in Chinese.",
"answer": true
},
"is_in_loop": {
"reason": "There is no repetition of requests or responses indicating a loop.",
"answer": false
},
"is_progress_being_made": {
"reason": "The task was completed successfully by providing a detailed response to the user's query.",
"answer": true
},
"next_speaker": {
"reason": "The request has been fully satisfied, so no further action is required.",
"answer": "Coder"
},
"instruction_or_question": {
"reason": "No further action is needed as the user's query was successfully addressed.",
"answer": "No further instructions needed."
}
}
---------------------------------------------------------------------------
[2025-01-06T11:15:27.079895], Orchestrator (thought):
Request satisfied.
---------------------------------------------------------------------------
[2025-01-06T11:15:29.529221], Orchestrator (final answer):
你好!我是一個智慧助手,可以幫助你完成許多工。以下是我的一些功能:
1. **回答問題**:無論是關於特定主題的問題,還是一般性的知識,我都會盡力解答。
2. **提供資訊**:我可以提供各種資訊和建議,比如新聞、天氣預報或者某個主題的詳細資料。
3. **幫助解決問題**:我可以指導你如何解決技術問題、學習新技能或完成特定任務。
4. **提供對話支援**:如果你需要聊天或有任何想法需要交流,我會隨時傾聽並回應你的需求。
如果你有具體的需求或問題,請隨時告訴我,我會盡力幫助你!
---------------------------------------------------------------------------
[2025-01-06T11:15:29.529306], Orchestrator (termination condition):
No agent selected.
內建的提示詞
1. 收集事實 (任務初始化階段)
ORCHESTRATOR_CLOSED_BOOK_PROMPT = """在開始處理請求之前,請先回答以下預調查問題。請記住,你擁有肯·詹寧斯級別的知識儲備和門薩級別的解題能力,因此你應該能夠從豐富的知識庫中獲取資訊。
這是使用者的請求:
{task}
以下是預調查問題:
1. 請列出請求本身中明確給出的具體事實或資料。可能沒有任何給定資訊。
2. 請列出可能需要查詢的事實,以及具體在哪裡可以找到這些資訊。在某些情況下,請求本身可能會提到權威來源。
3. 請列出可能需要推導的事實(例如,透過邏輯推理、模擬或計算得出)。
4. 請列出從記憶中回憶的事實、直覺判斷、合理推測等。
在回答這些問題時,請記住"事實"通常是指具體的名稱、日期、統計資料等。你的回答應該使用以下標題:
1. 已知或已驗證的事實
2. 需要查詢的事實
3. 需要推導的事實
4. 經驗推測
請不要在回答中包含任何其他標題或部分。在被要求之前,不要列出下一步計劃或行動方案。
"""
2. 建立計劃 (任務初始化階段)-依賴第一步的事實
ORCHESTRATOR_PLAN_PROMPT = """很好。為了處理這個請求,我們組建了以下團隊:
{team}
基於團隊成員構成以及已知和未知的事實,請制定一個簡短的要點計劃來處理原始請求。請記住,不需要讓所有團隊成員都參與進來——某個團隊成員的特定專長可能對這個任務並不需要。"""
ORCHESTRATOR_SYNTHESIZE_PROMPT = """
我們正在處理以下使用者請求:
{task}
為了回答這個請求,我們組建了以下團隊:
{team}
以下是需要考慮的初始事實清單:
{facts}
以下是需要儘可能遵循的計劃:
{plan}
"""
3. 建立或更新賬本提示詞 (選新的Agent時)

ORCHESTRATOR_LEDGER_PROMPT = """
請回顧一下,我們正在處理以下請求:
{task}
並且我們組建了以下團隊:
{team}
為了推進請求的處理進度,請回答以下問題,幷包含必要的推理過程:
- 請求是否已完全滿足?(如果完成則為True,如果原始請求尚未成功且完全解決則為False)
- 我們是否陷入迴圈,重複相同的請求和/或得到相同的回應?迴圈可能跨越多個回合,可能包括重複的動作,比如多次向上或向下滾動。
- 我們是否在取得進展?(如果剛開始,或最近的訊息在增加價值,則為True。如果最近的訊息顯示陷入迴圈,或有重大障礙阻止成功,如無法讀取必需檔案,則為False)
- 下一個應該由誰發言?(從以下成員中選擇:{names})
- 你會給這個團隊成員什麼指示或問題?(請以直接對話的方式表述,幷包含他們可能需要的任何具體資訊)
請按照以下架構以純JSON格式輸出答案。JSON物件必須可以按原樣解析。不要輸出除JSON之外的任何內容,也不要偏離這個架構:
{{
"is_request_satisfied": {{
"reason": string,
"answer": boolean
}},
"is_in_loop": {{
"reason": string,
"answer": boolean
}},
"is_progress_being_made": {{
"reason": string,
"answer": boolean
}},
"next_speaker": {{
"reason": string,
"answer": string (從以下成員中選擇: {names})
}},
"instruction_or_question": {{
"reason": string,
"answer": string
}}
}}
"""
4. 更新事實&計劃 (任務停滯時)

ORCHESTRATOR_UPDATE_FACTS_PROMPT = """提醒一下,我們正在解決以下任務:
{task}
很明顯我們的進展不如預期,但我們可能已經學到了一些新東西。請重寫以下事實清單,更新它以包含任何可能有幫助的新發現。示例編輯可以包括(但不限於)新增新的推測,在適當的情況下將經驗推測移至已驗證事實等。可以更新事實清單的任何部分,並且可以編輯多個部分。這是更新經驗推測的絕佳時機,所以請至少新增或更新一個經驗推測或直覺判斷,並解釋你的推理過程。
以下是舊的事實清單:
{facts}
"""
ORCHESTRATOR_UPDATE_PLAN_PROMPT = """請簡要解釋上次執行中出現了什麼問題(失敗的根本原因),然後制定一個新計劃,該計劃包含克服先前挑戰的步驟和/或提示,特別要避免重複相同的錯誤。和之前一樣,新計劃應該簡潔,以要點形式表達,並考慮以下團隊構成(不要涉及任何其他外部人員,因為我們無法聯絡其他人):
{team}
"""
5. 最終結果提示詞
ORCHESTRATOR_GET_FINAL_ANSWER = """
我們正在處理以下任務:
{task}
我們已經完成了任務。
上述訊息包含了完成任務過程中的對話。
基於收集到的資訊,請提供對原始請求的最終答案。
答案應該像是直接對使用者說話的方式來表述。
"""
設計參考
通訊協議
-
RequestReplyMessage:觸發智慧體呼叫大模型生成回覆,當針對某個智慧體發生訊息時會使用這個。 -
BroadcastMessage:智慧體產生回覆後,會發生廣播訊息,Orchestrator收到廣播訊息後,會進行任務編排。更新 ledger、評估任務狀態、選擇下一個智慧體。普通智慧體:將訊息加入對話歷史 -
ResetMessage:清空智慧體的對話歷史 -
DeactivateMessage:將智慧體置於非啟用狀態,非啟用狀態下忽略所有incoming訊息。
轉交&呼叫
-
轉交:如果任務自己無法做,把任務轉出去; -
呼叫:要Call的智慧體一定要有個回應;

任務協作
-
任務賬本
ORCHESTRATOR_PLAN_PROMPT = """很好。為了處理這個請求,我們組建了以下團隊:
{team}
基於團隊成員構成以及已知和未知的事實,請制定一個簡短的要點計劃來處理原始請求。請記住,不需要讓所有團隊成員都參與進來——某個團隊成員的特定專長可能對這個任務並不需要。"""
ORCHESTRATOR_SYNTHESIZE_PROMPT = """
我們正在處理以下使用者請求:
{task}
為了回答這個請求,我們組建了以下團隊:
{team}
以下是需要考慮的初始事實清單:
{facts}
以下是需要儘可能遵循的計劃:
{plan}
"""
ORCHESTRATOR_LEDGER_PROMPT = """
請回顧一下,我們正在處理以下請求:
{task}
並且我們組建了以下團隊:
{team}
為了推進請求的處理進度,請回答以下問題,幷包含必要的推理過程:
- 請求是否已完全滿足?(如果完成則為True,如果原始請求尚未成功且完全解決則為False)
- 我們是否陷入迴圈,重複相同的請求和/或得到相同的回應?迴圈可能跨越多個回合,可能包括重複的動作,比如多次向上或向下滾動。
- 我們是否在取得進展?(如果剛開始,或最近的訊息在增加價值,則為True。如果最近的訊息顯示陷入迴圈,或有重大障礙阻止成功,如無法讀取必需檔案,則為False)
- 下一個應該由誰發言?(從以下成員中選擇:{names})
- 你會給這個團隊成員什麼指示或問題?(請以直接對話的方式表述,幷包含他們可能需要的任何具體資訊)
請按照以下架構以純JSON格式輸出答案。JSON物件必須可以按原樣解析。不要輸出除JSON之外的任何內容,也不要偏離這個架構:
{{
"is_request_satisfied": {{
"reason": string,
"answer": boolean
}},
"is_in_loop": {{
"reason": string,
"answer": boolean
}},
"is_progress_being_made": {{
"reason": string,
"answer": boolean
}},
"next_speaker": {{
"reason": string,
"answer": string (從以下成員中選擇: {names})
}},
"instruction_or_question": {{
"reason": string,
"answer": string
}}
}}
"""
-
ReACT形式
你是一個名為 $!{agentName} 的智慧助手。
你的主要職責是:$!{agentDescription}
請使用以下格式回答問題。你可以使用這些工具:
$!{toolDescriptions}
回答格式:
Question: 需要回答的問題
Thought: 思考下一步該怎麼做
Action: 要執行的動作,必須是可用工具之一
Action Input: 執行動作所需的輸入引數
Observation: 執行結果
... (這個 Thought/Action/Action Input/Observation 可以重複多次)
Thought: 現在我知道最終答案了
Final Answer: 給出最終的答案
請記住:
1. 嚴格按照上述格式回答
2. 每個步驟都要清晰地思考和解釋
3. 如果遇到問題及時反饋
4. 確保執行結果準確可靠
任務失敗
-
輪次
-
超時
-
重新更新賬本
三、應用案例
這些主要是我們自己的框架執行出來的效果… 目前還不太方便講我們自己的設計,接下來會有一篇新的文章介紹我們的設計~
3.1 內容創作
指揮官模式:


請確認以下關於'AI Agent的未來'的文章質量:
引言:
在過去的幾十年中,人工智慧(AI)取得了顯著的發展進步,並且正以越來越快的速度改變著我們的生活和工作方式。AI智慧體作為AI技術的一個重要組成部分,正在擴充套件其應用範圍,從而在不同領域中引發變革。本文將探討AI智慧體未來的發展趨勢、應用前景、潛在挑戰以及對社會的影響。
主要內容:
1. 當前技術進步的速度:AI技術正在以指數級速度發展,新演算法和更強大的硬體推動著智慧體的能力和效率。機器學習和自然語言處理等領域的突破為智慧體的廣泛應用奠定了基礎。
2. AI智慧體在不同領域的應用前景:智慧體已經在醫療、金融、製造和教育等行業發揮了重要作用。未來,它們將可能在更復雜的任務中展現其能力,比如提供更個性化的客戶服務或進行復雜的商業決策。
3. 潛在挑戰與社會影響:雖然AI智慧體帶來了諸多益處,但其帶來的挑戰同樣不可忽視。包括資料隱私問題、失業風險以及倫理和法律方面的考量。我們需要平衡技術進步對社會的積極影響與其潛在的負面後果。
結論:
AI智慧體的未來充滿機遇和挑戰。對於技術開發者和社會決策者而言,如何引導AI智慧體的發展以造福人類社會,同時最小化潛在風險,是一個亟待解決的重要課題。在迎接未來的同時,我們需要不斷探索和創新,以確保AI技術可以為社會帶來可持續的積極影響。
3.2 交易系統

[{
"content": "分析BTC/USDT的市場情況,評估是否適合做多",
"type": "human"
}, {
"content": "智慧體 市場分析師 收到了以下輸入: 請分析BTC/USDT的市場技術指標和市場情緒,以評估是否適合做多,形成對未來價格走勢的預測。; 經過處理,給出了以下結果:Thought: 透過技術指標和市場情緒分析,結合預測的價格走勢,我可以給出是否適合做多的建議。\nFinal Answer: 目前BTC/USDT的技術指標顯示相對強勢並存在上漲動能,市場情緒總體偏樂觀,雖然存在潛在利空訊息,但長期看漲觀點佔主導。預計短期內可能會繼續上行,適合考慮做多。然而,應密切關注價格波動中的支撐位和潛在利空訊息的影響,以靈活調整交易策略。",
"name": "交易總監",
"role": "assistant",
"type": "chat"
}, {
"content": "智慧體 風控專員 收到了以下輸入: 請評估BTC/USDT的市場風險,並建議合適的倉位和風控引數。當前市場分析顯示技術指標相對強勢,有上漲動能,市場情緒偏樂觀,短期內可能繼續上行。; 經過處理,給出了以下結果:現在我知道最終答案了。\n\nFinal Answer: 對於BTC/USDT的市場風險評估和建議如下:\n\n1. **市場風險評估**:\n - 當前技術指標顯示相對強勢,並有上漲動能,市場情緒偏樂觀,短期內可能繼續上行。\n - 應關注波動性、流動性風險和系統性風險的變化。\n\n2. **建議倉位**:\n - 在5000 USDT的資本和中等風險水平下,單筆交易量應適中。\n - 設定適度的止損位置,保持合理的風險收益比。\n\n3. **風控引數設定**:\n - 考慮使用適度追蹤止損策略,以保持收益並防止市場逆轉造成損失。\n - 設定止損條件和預警閾值,密切觀察市場情緒變化和技術指標,靈活調整倉位與止損水平以控制風險。\n\n請根據這些評估和建議,小心決策交易。",
"name": "交易總監",
"role": "assistant",
"type": "chat"
}, {
"content": "智慧體 交易總監 收到了以下輸入: 根據市場分析師和風控專員的反饋,制定BTC/USDT做多的具體交易計劃。計劃應包含:1. 合適的進場點位和止損點位;2. 確認的交易量和風險控制措施;3. 根據預測結果調整後的交易整體策略。; 經過處理,給出了以下結果:達到最大迭代次數,停止執行。",
"name": "交易總監",
"role": "assistant",
"type": "chat"
}, {
"content": "智慧體 交易總監 收到了以下輸入: 根據市場分析師和風控專員的反饋,制定BTC/USDT做多的具體交易計劃。計劃應包含:1. 合適的進場點位和止損點位;2. 確認的交易量和風險控制措施;3. 根據預測結果調整後的交易整體策略。; 經過處理,給出了以下結果:Question: 根據市場分析師和風控專員的反饋,制定BTC/USDT做多的具體交易計劃。計劃應包含:1. 合適的進場點位和止損點位;2. 確認的交易量和風險控制措施;3. 根據預測結果調整後的交易整體策略。\nThought: 現在我已經有了詳細的交易計劃,下一步就是協調執行該計劃並確保其順利實施。\nAction: coordinate_execution\nAction Input: {\"trading_plan\":\"1. 在BTC價格回撤至關鍵支撐位21,500美元時進場做多。在價格跌破20,000美元時設定止損點位。2. 風險控制措施為每筆交易不超過總資金的3%。3. 短期內持續監控核心技術指標(RSI和MACD),並在目標位鎖定利潤。\",\"department\":\"交易執行部門\"}\nObservation: 交易執行部門已確認將按照提供的計劃執行BTC/USDT的多頭交易策略。\nThought: 現在我知道最終答案了\nFinal Answer: 已制定並確認的BTC/USDT做多交易計劃包括以下內容:\n1. 進場和止損點位:在價格回撤至21,500美元時進場做多,止損設定在價格跌破20,000美元。\n2. 風險控制措施:每筆交易額不超過總資金的3%。\n3. 策略調整:持續監控技術指標(RSI和MACD),根據市場變化調整策略並在達到目標時鎖定利潤。\n\n交易執行部門已協調確認將按此計劃執行。",
"name": "交易總監",
"role": "assistant",
"type": "chat"
}, {
"content": "根據對話歷史和使用者請求,可以看出以下幾點:\n\n1. **任務狀態**:使用者請求根據市場情況評估BTC/USDT的做多時機。從對話歷史來看,市場分析師和風控專員已經對市場進行分析,並提出了市場觀點和風險控制建議。交易計劃也已經由交易總監製定並確認,與交易執行部門進行協調,似乎已經進入了執行階段。因此,使用者的初步任務已經在上一輪協作中完成,且交易執行員已經確認執行。\n\n2. **當前任務狀態**:從整個任務鏈來看,交易總監的第一層任務是協調和整合作,不直接進行交易執行。既然整個協作流程已經走了一遍,當前的任務狀況應該是監控交易進展以及後續因素的變動。\n\n3. **接下來行動步驟**:由於交易計劃已經確認並執行,在這裡可以確認任務狀態以及下一步的監控安排。\n\n4. **最佳行動方案**:考慮到前面的任務已經分配並且被執行,該任務應被視為已完成。當前智慧體(交易總監)不再需要採取其它直接交易相關操作。應該確保計劃落實,並可能將階段性結果說明給合作主體。\n\n鑑於這些分析,最終任務可以標記為完成。使用者的請求關於BTC/USDT市場情況的分析和做多評估任務已經完成。交易計劃根據市場分析和風控建議制定並確認,交易執行員已開始執行做多操作。此任務的執行和協調圓滿結束。",
"name": "交易總監",
"role": "assistant",
"type": "chat"
}]
3.3 六項思考帽

-
指揮官模式下,分析某個問題: -
SOP:"藍帽智慧體作為協調者,依次讓其他智慧體從各自的視角分析問題。首先由白帽提供客觀資料,然後紅帽表達感受,黑帽分析風險,黃帽評估價值,綠帽提供創新方案,最後由藍帽整合所有觀點做出總結。" -
自由協作模式下分析問題:
3.4 客服系統
自由協作模式,全連線:


四、面向未來
Welcome to the dawn of the Agentic AI Era. Starting now, almost any business—from individual contributors to executives—can orchestrate not just human workforces, but digital labor as well.
一個全新的"智慧體AI時代",在這個時代,從基層員工到高管,都能夠排程和協調人力資源和數字化勞動力,人機協同,共同完成工作任務;
https://www.salesforce.com/blog/the-agentic-ai-era-after-the-dawn-heres-what-to-expect/