Kordan Ou
9 min readDec 29, 2024

解鎖 Multi-Agent AI:OpenAI Swarm 新手入門指南

你有沒有想過,讓一群 AI 代理人一起合作解決複雜的問題?OpenAI 的 Swarm 這個實驗性的框架,讓這個想法變得超乎想像的簡單!如果你正在找一個輕量級、可以動手實作的方式來學習多代理人協調,Swarm 可能會很適合你喔!這篇文章會帶你了解 Swarm 是什麼、它怎麼運作,還會教你一個基礎範例讓你快速上手。

什麼是 OpenAI Swarm?

Swarm 是 OpenAI 開發的一個教育性質的框架,讓你可以建立多代理人系統。它不是靠單一一個大型 AI 來做所有事情,而是建立一群各有專長的「代理人 (Agent)」,每個都有自己的指令和工具。這些代理人可以透過「交接 (Handoff)」任務來一起合作。

你可以想像成一家公司,裡面有不同的部門,每個部門都專注在特定的工作。一個 Agent 可能擅長摘要文字,另一個擅長抓取資訊,還有一個擅長訂機票 — 他們一起就能完成複雜的任務。Swarm 的設計目標是:

  • 輕量級 (Lightweight): 它是一個功能很少的框架,沒有複雜的功能,所以很容易理解和學習。
  • 符合人體工學 (Ergonomic): 它專注在簡單明瞭的介面,讓你可以輕鬆定義和連接不同的 Agents。
  • 教育性 (Educational): 它的主要目的是用來學習和實驗,而不是用在生產環境。

重要提醒: Swarm 並不是像 Langchain 或 CrewAI 那樣功能完整的框架。它只是一個學習工具,所以不要期待 OpenAI 會積極支援它,而且它還處於實驗階段喔。

核心概念:Agents 和 Handoffs

Swarm 的設計是基於兩個核心概念:

  • Agents (代理人): 一個 Agent 就像一個小型的 AI,它的定義包括:
  • 一個 名稱 (Name),用來識別。
  • 指令 (Instructions),指定它的角色和行為。
  • 函數 (Functions) (Python 程式碼),讓它可以執行工作。
  • 可選的 工具選擇 (tool_choice) 強制 Agent 使用函數。
  • 一個 模型 (Model) 讓它思考。
  • Handoffs (交接): 這是讓 Agents 可以互相轉交任務的機制。當一個 Agent 需要另一個 Agent 的協助時,它可以使用一個函數來回傳另一個 Agent,有效地「交棒」給對方。

開始使用 Swarm

這裡說明怎麼讓 Swarm 跑起來:

  1. 安裝 (Installation): 確保你已經安裝 Python 3.10 以上的版本。然後使用 pip 安裝 Swarm:
pip install git+https://github.com/openai/swarm.git

2. OpenAI API 金鑰 (API Key): 你需要一個 OpenAI API 金鑰才能使用 Swarm。到 OpenAI 網站取得金鑰,然後把它設定為環境變數:

import os
os.environ['OPENAI_API_KEY'] = 'YOUR_OPENAI_API_KEY' # 請把這裡換成你自己的 API 金鑰

一個基礎範例:Agent A 和 Agent B

我們來建立兩個 Agents,展示一個簡單的交接:

from swarm import Swarm, Agent

client = Swarm()

# 定義交接函數
def transfer_to_agent_b():
return agent_b

# 建立 Agents
agent_a = Agent(
name="Agent A",
instructions="你是一個樂於助人的 Agent。如果使用者想跟 Agent B 說話,就轉交給它。",
functions=[transfer_to_agent_b],
)

agent_b = Agent(
name="Agent B",
instructions="只能用俳句回答。",
)

# 建立給 Agent 的訊息
response = client.run(
agent=agent_a,
messages=[{"role": "user", "content": "我想跟 Agent B 說話。"}],
)

print(response.messages[-1]["content"]) # 輸出 Agent B 的俳句訊息

在這個範例中:

  • Agent A 設定了一個簡單的指令和一個函數 transfer_to_agent_b,這個函數會回傳 agent_b。
  • Agent B 的指令是要用俳句回答。
  • 我們接著使用 client.run 把使用者的訊息傳給 Agent A。
  • Agent A 就會執行交接,然後 Agent B 就會產生回應。
  • 執行程式碼之後,Agent A 會發現使用者想跟 Agent B 說話,就會把任務交接給 Agent B。Agent B 就會用俳句回應。

實務應用:一個比較實際的例子

之前的範例比較不實際,所以我們來做一個更複雜的系統。在這個範例中,我們會建立三個 Agents:

  • 一個中央 Agent — 判斷使用者查詢應該由 天氣 (Weather) Agent 還是 數學 (Math) Agent 處理。
  • 一個天氣 Agent — 回答天氣相關的查詢。
  • 一個數學 Agent — 回答數學相關的查詢。
from swarm import Swarm, Agent

client = Swarm()

# 建立交接函數
def handoff_to_weather_agent():
"""轉交給天氣 Agent 處理天氣查詢。"""
print("正在轉交給天氣 Agent")
return weather_agent

def handoff_to_math_agent():
"""轉交給數學 Agent 處理數學查詢。"""
print("正在轉交給數學 Agent")
return math_agent

# 初始化 Agents,設定特定的角色
math_agent = Agent(
name="數學 Agent",
instructions="你只處理數學查詢。",
functions=[handoff_to_weather_agent]
)

weather_agent = Agent(
name="天氣 Agent",
instructions="你只處理天氣相關的查詢。",
functions=[handoff_to_math_agent]
)
central_agent = Agent(
name="中央 Agent",
instructions="判斷查詢是關於天氣還是數學,然後轉發給適當的 Agent。",
functions=[handoff_to_math_agent,handoff_to_weather_agent]

)

# 測試交接:向中央 Agent 詢問數學問題
messages = [{"role": "user", "content": "2+2 等於多少?"}]
handoff_response = client.run(agent=central_agent, messages=messages)
print(handoff_response.messages[-1]["content"])

# 測試交接:向中央 Agent 詢問天氣問題
messages = [{"role": "user", "content": "今天天氣怎麼樣?"}]
handoff_response = client.run(agent=central_agent, messages=messages)
print(handoff_response.messages[-1]["content"])

在這個範例中:

  • 我們建立了 math_agent 和 weather_agent,各有特定的指令和交接函數。
  • 我們也建立了 central_agent,它的功能是判斷哪個 Agent 應該接收任務。
  • 然後我們使用 client.run 把使用者的訊息傳給 central_agent。
  • central_agent 就會根據查詢內容,把任務交給 math_agent 或 weather_agent。

幾個重點

  • 無狀態 (No State): Swarm 不會儲存每次呼叫之間的對話歷史。你需要把之前的訊息傳回去才能維持對話。
  • 函數 (Functions): Swarm 可以直接呼叫 Python 函數。函數應該回傳一個 str,如果回傳一個 Agent,就會執行交接。
  • 上下文 (Context): 你可以把上下文變數傳給你的 Agent,讓它們在指令和函數中使用。
  • 串流 (Streaming): Swarm 支援輸出串流。
  • 評估 (Evaluations): 你需要自己實作評估,因為 Swarm 沒有提供這個功能。
  • 限制 (Limitations): Swarm 還在實驗階段,所以可能不適合用在生產系統。它也只支援 OpenAI 模型,不過有些使用者已經建立了自己的分叉版本,支援其他模型供應商。

什麼時候可以考慮使用 Swarm?

  • 學習多代理人概念: 如果你是多代理人系統的新手,想要一個簡單的起點,Swarm 是一個不錯的選擇。
  • 探索基本的交接模式: 如果你想了解 Agents 怎麼轉交任務,交接函數會很有用。
  • 輕量級的實驗: 如果你想要一個沒有太多功能負擔的框架,Swarm 會很理想。

結論

OpenAI Swarm 是探索多代理人概念的一個好方法。它簡單明瞭的設計,讓你可以輕鬆上手建立基本的多代理人系統。雖然它目前可能不適合複雜的應用,但對於任何想學習多代理人 AI 的人來說,它是一個很有價值的資源。記得,這是一個實驗性的專案,所以可能會有一些不足之處,而且不會有積極的支援。這個框架可以幫助你學習基礎概念,然後再轉向其他更複雜的框架,像是 Langchain 或 CrewAI。

Kordan Ou
Kordan Ou

Written by Kordan Ou

我是 KryptoGO 的創辦人,同時也是一位加密貨幣的投資者和愛好者。我非常熱愛加密金融科技,並一直關注著行業監管的最新發展。如果你對這個領域感興趣,或是對加密貨幣和區塊鏈有疑問,歡迎關注我!我們可以一起探討這個迅速發展的領域,了解更多有趣的資訊。更多關於我:https://kordan.me

No responses yet