多智能體框架

多個不同的角色的Agent,共同完成一份復雜的工作。由一個統籌管理的智能體,自主規劃多個智能體分別做什么,以及執行的順序。

agent 應該包含的屬性

執行特定任務

根據其角色和目標做出決策

能夠使用工具來實現目標

與其他代理溝通和協作

保留互動記憶

在允許的情況下委派任務

如何協作是關鍵

  1. 條件自主:通過編碼,順序執行。
  2. 高度自主:能夠自行決定不同角色Agent的是否要執行,以及執行順序。

主要關注的點:

1、自主性

2、開發人員能夠控制的精度 (可編碼改造)

一、匯總

特性

AutoGen

agentScope

Swarm

CrewAI

LangGraph

時間 & star

2023.05

star 36.4k

2024.02

star 5.6k

2024.10

star 17.2k

2024年

star 22.9k

2023.01

star 7.5k

框架類型

對話智能體

角色智能體

角色智能體

角色智能體

基于圖的智能體

自主性

高度自主

條件自主

條件自主

高度自主

條件自主

協作

集中式群聊

群聊

任務傳遞

具有角色和目標的自主智能體

基于條件的循環圖

執行

由專用智能體管理

任務傳遞

動態委托,但可以定義層次化流程

所有智能體都可以執行

適用場景

原型設計

從開發到生產

詳細控制場景

二、已有多智能體框架

2.1 AutoGen (微軟)

2023.05

star 36.4k

GitHub - microsoft/autogen: A programming framework for agentic AI 🤖 PyPi: autogen-agentchat Discord: https://aka.ms/autogen-discord Office Hour: https://aka.ms/autogen-officehour

AutoGen 專注于對話智能體,提供對話作為多智能體協作的能力。它的設計理念圍繞著模擬小組討論,智能體發送和接收消息以啟動或繼續對話。

AutoGen 是一個用于構建 AI 代理系統的開源框架。它簡化了事件驅動、分布式、可擴展且具有彈性的代理應用程序的創建。它允許您快速構建 AI 代理協作并自主或在人工監督下執行任務的系統。

autoGen 中定義的多智能體的模式

并發:通過傳遞消息給多種智能體。來執行

Concurrent Agents — AutoGen

順序工作流,按順序執行

Sequential Workflow — AutoGen

群聊:多個智能體,還有一個群聊管理器,群聊管理器,決定誰來發言。

群聊是一種設計模式,其中一組代理共享一個共同的消息線程:他們都訂閱并發布同一主題。每個參與代理都專門負責一項特定任務,例如在協作寫作任務中擔任作家、插畫師和編輯。您還可以添加一個代理來代表人類用戶,以便在需要時幫助指導代理。在群聊中,參與者輪流發布消息,并且該過程是連續的——每次只有一個代理在工作。在后臺,輪流順序由群聊管理器代理維護,該代理在收到消息后選擇下一個發言的代理。選擇下一個代理的具體算法可能因您的應用程序要求而異。通常,使用循環算法或具有 LLM 模型的選擇器。群聊可用于將復雜任務動態分解為較小的任務,這些任務可以由具有明確角色的專門代理來處理。還可以將群聊嵌套成層次結構,每個參與者都是一個遞歸群聊。

Group Chat — AutoGen

多智能體辯論

Multi-Agent Debate — AutoGen

2.2 AgentScope

2024.02

star 5.6k

文檔:

AgentScope 文檔 — AgentScope 文檔

實現狼人殺的示例代碼

樣例:狼人殺游戲 — AgentScope 文檔

https://img.alicdn.com/imgextra/i3/O1CN01n2Q2tR1aCFD2gpTdu_!!6000000003293-1-tps-960-482.gif

2.3 Swarm (openAI)

2024.10

star 17.2k

Swarm框架本身并不具備自我感知任務變化的能力。它依賴于開發者定義的智能體(Agent)和交接(Handoff)機制來管理和協調任務。智能體可以封裝指令和工具,并能夠獨立執行任務或與其他智能體協作。當一個智能體遇到無法獨立處理的任務時,它可以通過交接機制將任務傳遞給另一個智能體。這種設計允許智能體之間根據任務需求和能力匹配進行動態調整,確保任務能夠以最高效的方式完成,但這需要開發者預先定義智能體的行為和交接邏輯。因此,Swarm框架的靈活性和適應性取決于開發者如何設計和實現智能體及其交互,而不是框架自身具備感知任務變化的能力。

swarm 集成了langchain的工具

示例:

from swarm import Agent# 定義一個函數用于處理指定商品的退款
def process_refund(item_id, reason="NOT SPECIFIED"):"""
    處理商品退款。    參數:
        item_id (str): 要退款的商品唯一標識。
        reason (str): 退款原因,默認值為 "NOT SPECIFIED"。    返回:
        str: 表示退款成功的消息。
    """print(f"[mock] Refunding item {item_id} because {reason}...")return "Success!"# 定義一個函數用于對用戶的購物車應用折扣
def apply_discount():"""
    對用戶的購物車應用折扣。    返回:
        str: 表示折扣成功應用的消息。
    """print("[mock] Applying discount...")return "Applied discount of 11%"# 創建一個分診代理,用于將用戶請求分配給合適的代理
triage_agent = Agent(
    name="Triage Agent",
    instructions="判斷哪個代理最適合處理用戶的請求,并將對話轉移到該代理。",
)# 創建一個銷售代理,用于處理與銷售相關的用戶請求
sales_agent = Agent(
    name="Sales Agent",
    instructions="對銷售蜜蜂表現出極大的熱情。",
)# 創建一個退款代理,用于處理與退款相關的用戶請求
refunds_agent = Agent(
    name="Refunds Agent",
    instructions=("幫助用戶處理退款。如果退款原因是價格太貴,提供用戶一個退款代碼。""如果用戶堅持,則處理退款。"),
    functions=[process_refund, apply_discount],
)# 定義一個函數,如果用戶提到的主題不在當前代理的職責范圍內,則調用該函數將請求轉回分診代理
def transfer_back_to_triage():"""
    當用戶的請求超出當前代理的處理范圍時調用此函數,將請求轉回分診代理。    返回:
        Agent: 分診代理實例。
    """return triage_agent# 定義一個函數,用于將請求轉移到銷售代理
def transfer_to_sales():"""
    將請求轉移到銷售代理。    返回:
        Agent: 銷售代理實例。
    """return sales_agent# 定義一個函數,用于將請求轉移到退款代理
def transfer_to_refunds():"""
    將請求轉移到退款代理。    返回:
        Agent: 退款代理實例。
    """return refunds_agent# 為分診代理添加轉移到銷售和退款代理的功能
triage_agent.functions = [transfer_to_sales, transfer_to_refunds]# 為銷售代理添加轉移回分診代理的功能
sales_agent.functions.append(transfer_back_to_triage)# 為退款代理添加轉移回分診代理的功能
refunds_agent.functions.append(transfer_back_to_triage)

2.4 CrewAI

2024年

star 22.9k

文檔:Introduction - CrewAI

CrewAI 是一個用于協調角色扮演、自主 AI 代理的框架。它使代理能夠無縫協作,通過協作智能處理復雜任務。

crewAI中支持的任務執行順序,順序執行,分層執行

串行執行示例

from crewai import Crew, Process, Agent, Task, TaskOutput, CrewOutput# Define your agents
researcher = Agent(
  role='Researcher',
  goal='Conduct foundational research',
  backstory='An experienced researcher with a passion for uncovering insights'
)
analyst = Agent(
  role='Data Analyst',
  goal='Analyze research findings',
  backstory='A meticulous analyst with a knack for uncovering patterns'
)
writer = Agent(
  role='Writer',
  goal='Draft the final report',
  backstory='A skilled writer with a talent for crafting compelling narratives'
)# Define your tasks
research_task = Task(
  description='Gather relevant data...', 
  agent=researcher, 
  expected_output='Raw Data'
)
analysis_task = Task(
  description='Analyze the data...', 
  agent=analyst, 
  expected_output='Data Insights'
)
writing_task = Task(
  description='Compose the report...', 
  agent=writer, 
  expected_output='Final Report'
)# Form the crew with a sequential process
report_crew = Crew(
  agents=[researcher, analyst, writer],# 任務的順序
  tasks=[research_task, analysis_task, writing_task],# 任務的執行順序 順序執行
  process=Process.sequential
)# Execute the crew
result = report_crew.kickoff()# Accessing the type-safe output
task_output: TaskOutput = result.tasks[0].output
crew_output: CrewOutput = result.output

分層執行示例

from langchain_openai import ChatOpenAI
from crewai import Crew, Process, Agent# Agents are defined with attributes for backstory, cache, and verbose mode
researcher = Agent(
    role='Researcher',
    goal='Conduct in-depth analysis',
    backstory='Experienced data analyst with a knack for uncovering hidden trends.',
    cache=True,
    verbose=False,
    # tools=[]  # This can be optionally specified; defaults to an empty list
    use_system_prompt=True,  # Enable or disable system prompts for this agent
    max_rpm=30,  # Limit on the number of requests per minute
    max_iter=5  # Maximum number of iterations for a final answer
)
writer = Agent(
    role='Writer',
    goal='Create engaging content',
    backstory='Creative writer passionate about storytelling in technical domains.',
    cache=True,
    verbose=False,
    # tools=[]  # Optionally specify tools; defaults to an empty list
    use_system_prompt=True,  # Enable or disable system prompts for this agent
    max_rpm=30,  # Limit on the number of requests per minute
    max_iter=5  # Maximum number of iterations for a final answer
)# Establishing the crew with a hierarchical process and additional configurations
project_crew = Crew(
    tasks=[...],  # Tasks to be delegated and executed under the manager's supervision
    agents=[researcher, writer],
    manager_llm=ChatOpenAI(temperature=0, model="gpt-4"),  # Mandatory if manager_agent is not set
    process=Process.hierarchical,  # Specifies the hierarchical management approach
    respect_context_window=True,  # Enable respect of the context window for tasks
    memory=True,  # Enable memory usage for enhanced task execution
    manager_agent=None,  # Optional: explicitly set a specific agent as manager instead of the manager_llm
    planning=True,  # Enable planning feature for pre-execution strategy
)

三、超級經典的案例-最近火熱的deep-research

二月份初,從openai公布了deep-research開始,deep-research就開始變得非常火熱。其實這個就是一個非常典型的多智能體協作的案例。定義了web查詢智能體、代碼執行智能體、文件檢索智能體、寫作智能體,還有規劃問題的智能體。

auto-deep-research

特點

Auto-Deep-Research 是基于 AutoAgent多智能體框架構建的deep research產品。

評測效果

在通用AI助手評測GAIA中位列全球第三,是開源方案中的最優解。

多智能體框架

https://github.com/HKUDS/AutoAgent

系統采用模塊化多Agent架構,通過Orchestrator Agent動態調度任務

模塊功能技術特性
Web Agent深度網絡搜索與文獻抓取支持瀏覽器Cookies導入,突破學術資源訪問限制
Coding Agent代碼生成與優化(Python/R腳本調試、可視化優化、容器化部署)實現自動化編程與調試,支持Docker一鍵部署
Local File Agent多格式文件解析(PDF/CSV/XLSX等12種格式)自動轉換為Markdown統一處理,支持200+頁PDF深度解析

agent示例

def get_filesurfer_agent(model: str = "gpt-4o", **kwargs):def handle_mm_func(tool_name, tool_args):return f"After using tool {tool_name}({tool_args}), I have opened the image I want to see and prepared a question according to the image. Please answer the question based on the image."def instructions(context_variables):file_env: RequestsMarkdownBrowser = context_variables.get("file_env", None)assert file_env is not None, "file_env is required"return \
f"""
You are a file surfer agent that can handle local files.You can only access the files in the folder `{file_env.docker_workplace}` and when you want to open a file, you should use absolute path from root like `{file_env.docker_workplace}/...`.Note that `open_local_file` can read a file as markdown text and ask questions about it. And `open_local_file` can handle the following file extensions: [".html", ".htm", ".xlsx", ".pptx", ".wav", ".mp3", ".flac", ".pdf", ".docx"], and all other types of text files. But IT DOES NOT HANDLE IMAGES, you should use `visual_question_answering` to see the image. If the converted markdown text has more than 1 page, you can use `page_up`, `page_down`, `find_on_page_ctrl_f`, `find_next` to navigate through the pages.When you think you have completed the task the `System Triage Agent` asked you to do, you should use `transfer_back_to_triage_agent` to transfer the conversation back to the `System Triage Agent`. And you should not stop to try to solve the user's request by transferring to `System Triage Agent` only until the task is completed.If you are unable to open the file, you can transfer the conversation back to the `System Triage Agent`, and let the `Coding Agent` try to solve the problem by coding.
"""tool_list = [open_local_file, page_up_markdown, page_down_markdown, find_on_page_ctrl_f, find_next, visual_question_answering]return Agent(name="File Surfer Agent",model=model, instructions=instructions,functions=tool_list,handle_mm_func=handle_mm_func,tool_choice = "required", parallel_tool_calls = False)

優勢

在多智能體框架下,有非常好的擴展性,只需要定義和實現一些具有特色功能的agent,就能擴展功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70753.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70753.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70753.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

wifi5和wifi6,WiFi 2.4G、5G,五類網線和六類網線,4G和5G的區別

wifi5和wifi6的區別 是Wi-Fi 5和Wi-Fi 6的選擇與路由器密切相關。路由器是創建和管理無線網絡的設備,它決定了網絡的類型和性能。具體來說: 路由器的標準支持:路由器可以支持不同的Wi-Fi標準,如Wi-Fi 5(802.11ac)和Wi-Fi 6(802.11ax)。支持Wi-Fi 6的路由器能夠提供更高…

Metal 學習筆記四:頂點函數

到目前為止,您已經完成了 3D 模型和圖形管道。現在,是時候看看 Metal 中兩個可編程階段中的第一個階段,即頂點階段,更具體地說,是頂點函數。 著色器函數 定義著色器函數時,可以為其指定一個屬性。您將在本…

什么是零拷貝?

零拷貝是一種優化技術,用于減少數據在計算機系統中的拷貝次數,從而提高性能和效率。在傳統的數據傳輸中,數據通常會在多個緩沖區之間進行多次拷貝,而零拷貝技術通過減少這些不必要的拷貝操作,顯著降低了CPU和內存的開銷…

【LeetCode20】有效的括號

題目描述 給定一個只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 每…

算法訓練(leetcode)二刷第三十七天 | *300. 最長遞增子序列、674. 最長連續遞增序列、*718. 最長重復子數組

刷題記錄 *300. 最長遞增子序列674. 最長連續遞增序列基礎解法(非動規)動態規劃 718. 最長重復子數組滾動數組 *300. 最長遞增子序列 leetcode題目地址 dp數組含義: dp[i]表示以nums[i]結尾的最長遞增子序列長度,即以nums[i]結尾…

Elasticsearch 相關面試題

1. Elasticsearch基礎 Elasticsearch是什么? Elasticsearch是一個分布式搜索引擎,基于Lucene實現。 Mapping是什么?ES中有哪些數據類型? Mapping:定義字段的類型和屬性。 數據類型:text、keyword、integer、…

TCP/IP的分層結構、各層的典型協議,以及與ISO七層模型的差別

1. TCP/IP的分層結構 TCP/IP模型是一個四層模型,主要用于網絡通信的設計和實現。它的分層結構如下: (1) 應用層(Application Layer) 功能:提供應用程序之間的通信服務,處理特定的應用細節。 典型協議&am…

pycharm技巧--鼠標滾輪放大或縮小 Pycharm 字體大小

1、鼠標滾輪調整字體 設置 Ctrl 鼠標滾輪調整字體大小 備注: 第一個是活動窗口,即縮放當前窗口 第二個是所有編輯器窗口,即縮放所有窗口的字體 2、插件 漢化包: Chinese Simplified 包

硬件工程師入門教程

1.歐姆定律 測電壓并聯使用萬用表測電流串聯使用萬用表,紅入黑出 2.電阻的阻值識別 直插電阻 貼片電阻 3.電阻的功率 4.電阻的限流作用 限流電阻阻值的計算 單位換算關系 5.電阻的分流功能 6.電阻的分壓功能 7.電容 電容簡單來說是兩塊不連通的導體加上中間的絕…

edge瀏覽器將書簽欄頂部顯示

追求效果,感覺有點丑,但總歸方便多了 操作路徑:設置-外觀-顯示收藏夾欄-始終

【SPIE出版,見刊快速,EI檢索穩定,浙江水利水電學院主辦】2025年物理學與量子計算國際學術會議(ICPQC 2025)

2025年物理學與量子計算國際學術會議(ICPQC 2025)將于2025年4月18-20日在中國杭州舉行。本次會議旨在匯聚全球的研究人員、學者和業界專家,共同探討物理學與量子計算領域的最新進展與前沿挑戰。隨著量子技術的快速發展,其在信息處…

谷歌瀏覽器更新后導致的刷新數據無法顯示

這幾天突然出現的問題,就是我做了一個網站,一直用Google展示,前兩天突然就是刷新會丟失數據,然后再刷新幾次吧又有了,之前一直好好的,后端也做了一些配置添加了CrossOrigin注解,然而換了edge瀏覽…

UE5從入門到精通之多人游戲編程常用函數

文章目錄 前言一、權限與身份判斷函數1. 服務器/客戶端判斷2. 網絡角色判斷二、網絡同步與復制函數1. 變量同步2. RPC調用三、連接與會話管理函數1. 玩家連接控制2. 網絡模式判斷四、實用工具函數前言 UE5給我們提供了非常強大的多人網路系統,讓我們可以很方便的開發多人游戲…

軟件需求管理辦法,軟件開發管理指南(Word原件)

1. 目的 2. 適用范圍 3. 參考文件 4. 術語和縮寫 5. 需求獲取的方式 5.1. 與用戶交談向用戶提問題 5.1.1. 訪談重點注意事項 5.1.2. 訪談指南 5.2. 參觀用戶的工作流程 5.3. 向用戶群體發調查問卷 5.4. 已有軟件系統調研 5.5. 資料收集 5.6. 原型系統調研 5.6.1. …

利用python和gpt寫一個conda環境可視化管理工具

最近在學習python,由于不同的版本之間的差距較大,如果是用環境變量來配置python的話,會需要來回改,于是請教得知可以用conda來管理,但是conda在管理的時候老是要輸入命令,感覺也很煩,于是讓gpt幫…

【復習】計算機網絡

網絡模型 OSI 應用層:給應用程序提供統一的接口表示層:把數據轉換成兼容另一個系統能識別的格式會話層:負責建立、管理、終止表示層實體之間的通信會話傳輸層:負責端到端的數據傳輸網絡層:負責數據的路由、轉發、分片…

圖書館系統源碼詳解

本項目是一個基于Scala語言開發的圖書館管理系統。系統主要由以下幾個部分組成:數據訪問層(DAO)、數據模型層(Models)、服務層(Service)以及用戶界面層(UI)。以下是對項目…

Redis——用戶簽到BitMap,UV統計

目錄 BitMap 使用場景 1. 用戶簽到系統 2. 用戶行為標記 3. 布隆過濾器(Bloom Filter) BitMap介紹 Redis中的使用 Redis功能示例 添加: 獲取: 批量獲取: java中實現 統計本月連續簽到次數 UV統計 UV 統計…

【數據庫】【MySQL】索引

MySQL中索引的概念 索引(MySQL中也叫做"鍵(key)")是一種數據結構,用于存儲引擎快速定找到記錄。 簡單來說,它類似于書籍的目錄,通過索引可以快速找到對應的數據行,而無需…

【SpringBoot AI 集成DeepSeek 大模型API調用】

當DeepSeek開始盛行,提供強大的大語言模型,界面調用不能滿足我們的需要,同時提供API接口供我們在服務中調用,來實現各種AI場景。 我們通過將DeepSeek的AI能力與SpringBoot AI相結合,實現智能聊天、問答機器人&#xf…