AutoGen多角色、多用戶、多智能體對話系統

2023-03-11-AutoGen

使用【autoGen+chainlit+deepSeek】實現【多角色、多用戶、多智能體對話系統】


1-核心思路

  • 01)技術要點:autoGen+chainlit+deepSeek
  • 02)什么是autoGen->autogen是微軟旗下的多智能體的框架
  • 03)什么是chainlit->模型前端展示框架
  • 04)要做什么?->快速實現多角色、多用戶、多智能體對話系統
  • 05)什么是RoundRobinGroupChat?->反復調用
  • 06)單智能體-nurses_station_ai ->進行大模型問題咨詢
  • 07)智能體與FunctionCall-> 大模型調用FunctionCall
  • 08)多智能體自動選擇-> Selector Group Chat
  • 09)為什么設置TextMentionTermination->終止符
  • 10)什么是AutoGen Studio工作流UI->上面都是python代碼實現,有沒有拖拖拽拽就可以的UI編排
  • 11)最終目標->3分鐘復刻Manus智能體!AutoGen+MCP Server+Cline構建最強AI智能體https://www.bilibili.com/video/BV119RHYmEPF

2-參考網址

  • AutoGen入門——快速實現多角色、多用戶、多智能體對話系統
  • autogen-Github倉庫地址
  • 個人代碼實現倉庫地址

3-上手實操

1-安裝依賴

# 版本說明
- python,3.11
- AutoGen,0.4.2
- chainlit,2.0.2
- 大模型,deepseek# 安裝依賴-autogen
pip install -U "autogen-agentchat" "autogen-ext[openai]"# 安裝依賴-UI交互界面
pip install chainlit# 運行腳本
chainlit run .\a_01_nurses_station_ai.py -w


2-a_01_nurses_station_ai內容如下

import chainlit as cl
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClient@cl.on_chat_start
async def main():await cl.Message(content="您好,這里是超級無敵大醫院,有什么可以幫您?").send()async def run_team(query: str):model_client = OpenAIChatCompletionClient(model="deepseek-chat", base_url="https://api.deepseek.com",api_key="sk-6d775065fa8c405caebed674c125e67e",model_info={"vision": False,"function_calling": False,"json_output": True,"family": "unknown",}, )assistant_agent = AssistantAgent("assistant", model_client=model_client,system_message="你是一所口腔醫院的導診臺機器人,負責解答用戶的掛號問題,用戶描述癥狀需求,你回答應該掛的科室。""在本醫院中有以下科室:牙體牙髓科、口腔修復科、口腔外科、口腔種植科、兒童口腔專科。""如果用戶的問題與掛號咨詢不符合,回答:“您的描述與癥狀無關,暫不支持”")team = RoundRobinGroupChat(participants=[assistant_agent], max_turns=1)response_stream = team.run_stream(task=query)async for msg in response_stream:if hasattr(msg, "source") and msg.source != "user" and hasattr(msg, "content"):msg = cl.Message(content=msg.content, author="Agent Team")await msg.send()@cl.on_message
async def main(message: cl.Message):await run_team(message.content)

3-智能體與FunctionCall

import chainlit as cl
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClient@cl.password_auth_callback
def auth_callback(username: str, password: str):if (username, password) == ("admin", "admin"):return cl.User(identifier="admin", metadata={"role": "admin", "provider": "credentials"})elif (username, password) == ("puhaiyang", "123456"):return cl.User(identifier="puhaiyang", metadata={"role": "admin", "provider": "credentials"})else:return None@cl.on_chat_start
async def main():await cl.Message(content="您好,這里是牙體牙髓科,您牙齒哪里不適?").send()async def x_p_search(tooth_position: str) -> str:"""Find information on the web"""app_user = cl.user_session.get("user")print(f"模擬查詢{app_user.identifier}的{tooth_position}牙片數據")if tooth_position == "46":return "牙根尖處有陰影,疑似感染,需要進一步分析診斷"else:return f"{tooth_position}無影像"async def run_team(query: str):model_client = OpenAIChatCompletionClient(model="deepseek-chat", base_url="https://api.deepseek.com",api_key="sk-6d775065fa8c405caebed674c125e67e",model_info={"vision": False,"function_calling": True,"json_output": True,"family": "unknown",})assistant_agent = AssistantAgent("assistant", model_client=model_client, tools=[x_p_search],system_message="你是一個牙體牙髓科的病情診斷機器人,負責對用戶輸入的癥狀描述分析原因,在分析病因前先詢問出用戶是具體哪一顆牙齒需要治療。""在知道了具體的牙位號后,再調用x_p_search工具進行問題回答,傳入給x_p_search工具的參數需要自動轉為牙位號,如:28""如果用戶的問題與病情咨詢無關,回答:“您的描述與癥狀無關,暫不支持”")team = RoundRobinGroupChat(participants=[assistant_agent], max_turns=1)response_stream = team.run_stream(task=query)async for msg in response_stream:if hasattr(msg, "source") and (msg.type == "ToolCallExecutionEvent" or msg.type == "ToolCallRequestEvent"):# functionCall事件消息不顯示給用戶continueif hasattr(msg, "source") and msg.source != "user" and hasattr(msg, "content"):if msg.content.endswith("無影像"):res = await cl.AskActionMessage(content=f"{msg.content},是否需要幫您申請拍攝此牙的CT影像?",actions=[cl.Action(name="continue", payload={"value": "申請"}, label="? 申請牙片"),cl.Action(name="cancel", payload={"value": "取消"}, label="? 取消"),],).send()if res and res.get("payload").get("value") == "申請":await cl.Message(content="牙片申請已提交!待審核通過后前往第3影像室進行拍攝。",).send()else:msg = cl.Message(content=msg.content, author="Agent Team")await msg.send()@cl.on_message
async def main(message: cl.Message):await run_team(message.content)
  • 執行腳本
# 1-因為添加了chainlit認證配置
conda activate AutoGen3_11
chainlit create-secret# 2-配置JWT-創建.env文件
CHAINLIT_AUTH_SECRET="-Nj%Z@l^x0FQcEKYuNBxJ@mYr~2L>_ua6EU$zSsR6M~Fd.ssav5GFANVyR4%S$Zf"# 3-執行腳本
chainlit run .\a_02_endodontics_dentistry_ai.py -w
  • 觸發大模型的FunctionCall功能

4-如何解決chainlit報錯

ValueError: You must provide a JWT secret in the environment to use authentication. Run chainlit create-secret to
generate one.

這個錯誤信息表明,在使用需要身份驗證的功能時,你沒有在環境變量中提供 JWT(JSON Web Token)密鑰。JWT
是一種用于在網絡應用中安全傳輸信息的開放標準,通常用于身份驗證和授權。下面為你詳細分析和解決這個問題:

1. 生成 JWT 密鑰

依據錯誤提示,你可以運行 chainlit create-secret 命令來生成一個 JWT 密鑰。打開命令行終端,激活你的 Python
虛擬環境(AutoGen3_11),然后執行以下命令:

conda activate AutoGen3_11
chainlit create-secret

執行該命令后,會輸出一個隨機生成的 JWT 密鑰,類似如下:

CHAINLIT_AUTH_SECRET="-Nj%Z@l^x0FQcEKYuNBxJ@mYr~2L>_ua6EU$zSsR6M~Fd.ssav5GFANVyR4%S$Zf"
2. 根目錄創建.env文件

將剛才的生成的信息復制進去

CHAINLIT_AUTH_SECRET="-Nj%Z@l^x0FQcEKYuNBxJ@mYr~2L>_ua6EU$zSsR6M~Fd.ssav5GFANVyR4%S$Zf"

5-多智能體自動選擇

核心代碼:創建多個AssistantAgent放入到SelectorGroupChat供大模型根據上線文進行選擇

import chainlit as clfrom autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.conditions import MaxMessageTermination, TextMentionTermination
from autogen_agentchat.teams import SelectorGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClientmodel_client = OpenAIChatCompletionClient(model="deepseek-chat", base_url="https://api.deepseek.com",api_key="sk-6d775065fa8c405caebed674c125e67e",model_info={"vision": False,"function_calling": True,"json_output": True,"family": "unknown",}, )planning_agent = AssistantAgent("PlanningAgent",description="用于規劃的Agent,當一個任務到達時此Agent是第一個參與者",model_client=model_client,system_message="""你是一個任務規劃智能體。你的工作是將復雜的任務分解為更小的、可管理的子任務。你的團隊成員有3個,分別是:DentalPulpAgent: 牙體牙髓科智能體RestorativeAgent: 牙齒修復科智能體DentalImplantAgent: 牙齒種植科智能體你只計劃和委派任務,而不自己執行它們分配任務時,請使用此格式:1. <agent> : <task>當所有智能體把任務完成后,再總結結果以"TERMINATE"結束。                        """)dental_pulp_agent = AssistantAgent("DentalPulpAgent",description="牙體牙髓科智能體",model_client=model_client,system_message="""你是一個口腔醫院的牙體牙髓科智能體。你可以解答關于牙體牙髓科中患者提出的問題,你的解答非常專業,且可靠。""")restorative_agent = AssistantAgent("RestorativeAgent",description="牙齒修復科智能體",model_client=model_client,system_message="""你是一個口腔醫院的牙齒修復科智能體。你可以解答關于牙齒修復中患者提出的問題,比如牙冠、烤瓷牙、嵌體修復等。你的解答非常專業,且可靠。""")dental_implant_agent = AssistantAgent("DentalImplantAgent",description="牙齒種植科智能體",model_client=model_client,system_message="""你是一個口腔醫院的牙齒種植科的智能體。你可以解答關于牙齒種植科中患者提出的問題,你的解答非常專業,且可靠。""")@cl.on_chat_start
async def main():await cl.Message(content="您好,這里是口腔醫院專家團隊,有什么可以幫您?").send()async def run_team(query: str):text_mention_termination = TextMentionTermination("TERMINATE")max_messages_termination = MaxMessageTermination(max_messages=25)termination = text_mention_termination | max_messages_terminationteam = SelectorGroupChat([planning_agent, dental_pulp_agent, restorative_agent, dental_implant_agent],model_client=model_client,termination_condition=termination,)response_stream = team.run_stream(task=query)async for msg in response_stream:if hasattr(msg, "source") and msg.source != "user" and hasattr(msg, "content"):msg = cl.Message(content=msg.content, author=msg.source)await msg.send()@cl.on_message
async def main(message: cl.Message):await run_team(message.content)
  • 執行腳本
chainlit run .\a_03_dentistry_selector_ai.py -w

  • 測試問題
什么是烤瓷牙?
什么是根管治療?

5-AutoGen Studio工作流UI

比較好的是AutoGen中也提供了與Dify類似UI界面操作的方式,即:AutoGen Studio。

  • 安裝命令
# 安裝autogenstudio
pip install -U autogenstudio# 運行腳本-指定一個文件夾進行數據存放
autogenstudio ui --port 8081 --appdir autogenstuido_test# 程序運行打印
2025-03-12 01:07:58.662 | INFO     | autogenstudio.web.app:lifespan:35 - Application startup complete. Navigate to http://127.0.0.1:8081

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

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

相關文章

問deepseek: OpenFOAM并行分區后,是如何實現ldumatrix矩陣向量乘法計算邏輯的?

在OpenFOAM中&#xff0c;lduMatrix 是用于存儲稀疏矩陣的類&#xff0c;支持并行計算。并行分區后&#xff0c;lduMatrix 的矩陣向量乘法通過以下步驟實現&#xff1a; 1. 矩陣分區 分區&#xff1a;將矩陣和向量分配到多個處理器上&#xff0c;每個處理器負責一部分。接口&…

數據類設計_圖片類設計之4_規則類圖形混合算法(前端架構)

前言 學的東西多了,要想辦法用出來.C和C是偏向底層的語言,直接與數據打交道.嘗試做一些和數據方面相關的內容 引入 接續上一篇,討論圖片類型設計出來后在場景中如何表達,以及圖片的混合算法.前面的內容屬于鋪墊和基礎,這篇內容和實際聯系起來了. 背景圖和前景圖 這里筆者想先…

【openwebui 搭建本地知識庫(RAG搭建本地知識庫)】

安裝準備 openwebui 這個本地安裝之前寫過使用python安裝。也可以直接用docker 命令 docker run --rm -d \-p 3080:8080 \-p 3081:8081 \-e WEBUI_AUTHtrue \-e DEFAULT_LOCALEcn \-e GLOBAL_LOG_LEVEL"INFO" \-e AIOHTTP_CLIENT_TIMEOUT100 \--privilegedtrue \-…

Nginx的流式響應配置詳解

現在大模型場景繁多&#xff0c;項目中涉及nginx轉發大模型的流式數據時&#xff0c;需配置nginx的轉發策略&#xff1a; location /streaming {proxy_pass http://backend_server;proxy_cache off; # 關閉緩存proxy_buffering off; # 關閉代理緩沖chunked_transfer_encoding …

git使用命令總結

文章目錄 Git 復制創建提交步驟Git 全局設置:創建 git 倉庫:已有倉庫? 遇到問題解決辦法&#xff1a;問題一先git pull一下&#xff0c;具體流程為以下幾步&#xff1a; 詳細步驟 Git 復制 git clone -b RobotModelSetting/develop https://gitlab.123/PROJECT/123.git創建提…

flutter 圖片資源路徑管理

1. 創建統一資源管理類 創建一個單獨的 Dart 文件&#xff08;比如 manager.dart&#xff09;&#xff0c;將所有圖片路徑集中管理。這樣在引用圖片時&#xff0c;不需要每次都手動輸入完整路徑&#xff0c;只需通過常量引用即可。 //manager.dartclass Manager { static co…

Android Retrofit 框架配置與構建模塊深入源碼分析(六)

一、引言 Retrofit 是一個在 Android 和 Java 開發中廣泛使用的類型安全的 HTTP 客戶端。它通過簡潔的 API 設計&#xff0c;使得網絡請求的處理變得高效且易于管理。配置與構建模塊作為 Retrofit 的基礎部分&#xff0c;承擔著初始化和定制 Retrofit 實例的重要任務。開發者可…

80.Dictionary 字典 C#例子

使用 C# 中的 Dictionary 數據結構 在 C# 中&#xff0c;Dictionary<TKey, TValue> 是一個非常強大的數據結構&#xff0c;用于存儲鍵值對。它提供了高效的查找、插入和刪除操作&#xff0c;適用于需要快速訪問數據的場景。本文將通過一個簡單的示例&#xff0c;介紹如何…

tomcat負載均衡配置

這里拿Nginx和之前做的Tomcat 多實例來實現tomcat負載均衡 1.準備多實例與nginx tomcat單機多實例部署-CSDN博客 2.配置nginx做負載均衡 upstream tomcat{ server 192.168.60.11:8081; server 192.168.60.11:8082; server 192.168.60.11:8083; } ser…

C語言中scanf(“%c“,s)會出現的問題

scanf("%c%c", &word[0], &word[1]);的行為與輸入緩沖區的內容密切相關。你提到輸入ab后&#xff0c;word[0]是\n&#xff0c;這通常是因為輸入緩沖區中殘留了換行符&#xff08;\n&#xff09;。 一、原因分析 換行符殘留 若在輸入ab之前有其他輸入操作&a…

SealOS部署k8s集群(單節點)

一、 先決條件 每個集群節點應該有不同的主機名。需要在 K8s 集群的第一個 master 節點上運行 sealos run 命令。建議使用干凈的操作系統來創建集群。不要自己裝 Docker&#xff01;支持大多數 Linux發行版&#xff0c;但內核版本建議5以上。例如&#xff1a;Ubuntu、CentOS、…

Linux 服務器安全配置:密碼復雜度與登錄超時設置

Linux服務器安全配置指南:密碼復雜度與登錄超時設置 一、密碼復雜度設置 通過PAM模塊pam_cracklib.so實現密碼強度策略,配置文件: system-auth該文件主要用于定義系統范圍內的認證策略,涵蓋了用戶登錄、su 命令切換用戶、sudo 權限提升等多種認證場景。當用戶嘗試進行系…

AI Agent開發框架分析:前端視角

1. Mastra (https://mastra.ai/docs) 優點&#xff1a; 提供直觀的界面構建器&#xff0c;適合無代碼/低代碼開發支持JavaScript/TypeScript&#xff0c;可直接集成到前端項目可視化工作流設計&#xff0c;降低入門門檻內置多種UI組件&#xff0c;加速前端開發 缺點&#xf…

linux上使用unsloth微調大模型的環境踩坑之路-4070ti、4090

我們實驗室有2套環境 一套&#xff1a;4070ti。安裝了cuda12.4 一套&#xff1a;3張4090.安裝了cuda12.4 現在開始給第一套裝能運行unsloth能運行的環境 第一步&#xff1a;開始創建虛擬環境 conda create -n test_env python3.11 第二步&#xff1a;進入虛擬環境 conda activa…

網絡安全演練有哪些形式

OPENVAS使用 1、確定指定IP是否能ping通 2、創建掃描目標 3、創建掃描任務&#xff08;scan management →newtask&#xff09; 4、開始任務start 5、查看掃描細節 6、查看掃描結果&#xff0c;包含漏洞詳細信息&#xff0c;亦可到處PDF文件 7、導出掃描結果報告 8、為…

ConcurrentModificationException:檢測到并發修改完美解決方法

&#x1f6a6; ConcurrentModificationException&#xff1a;檢測到并發修改完美解決方法 &#x1f4a1; 摘要 1. 什么是ConcurrentModificationException&#xff1f;&#x1f914; 2. ConcurrentModificationException的常見場景 &#x1f6a6; 2.1 使用for-each循環遍歷集合…

電路原理(電容 集成電路NE555)

電容 1.特性&#xff1a;充放電&#xff0c;隔直流&#xff0c;通交流 2.電容是通過聚集正負電荷來存儲電能的 3.電容充放電過程可等效為導通回路 4.多電容并聯可以把容量疊加&#xff0c;但是多電容串聯就不會&#xff0c;只會疊加電容的耐壓值。 6.電容充放電時相當于通路&a…

深入解析 React 最新特性:革新、應用與最佳實踐

深入解析 React 最新特性&#xff1a;革新、應用與最佳實踐 1. 引言 React 作為前端開發的核心技術之一&#xff0c;近年來不斷推出 新的 API 和優化機制&#xff0c;從 Concurrent Rendering&#xff08;并發模式&#xff09; 到 Server Components&#xff08;服務器組件&a…

【氮化鎵】高輸入功率應力誘導的GaN 在下的退化LNA退化

2019年,中國工程物理研究院電子工程研究所的Tong等人基于實驗與第一性原理計算方法,研究了Ka波段GaN低噪聲放大器(LNA)在高輸入功率應力下的退化機制。實驗結果表明,在27 GHz下施加1 W連續波(CW)輸入功率應力后,LNA的增益下降約1 dB,噪聲系數(NF)增加約0.7 dB。進一…

C#程序員接口調用工具與方法

作為專注于接口調用的C#軟件工程師&#xff0c;以下工具和方法能顯著提升開發效率與代碼質量&#xff1a; 一、接口開發與測試自動化工具 1. API測試與Mock工具 Postman Newman 支持RESTful/GraphQL接口調試與自動化測試&#xff0c;通過集合&#xff08;Collection&#xf…