【保姆级教程】AutoGen多智能体协作实战:用DeepSeek打造你的AI金融分析团队
为了保证图表能稳定生成,我们定义一个专门的函数,并交给 Plotter 使用。# ... (省略具体绘图代码,使用 matplotlib) ...system_message="你是绘图师。调用 generate_chart 画图。",Analyst 不再需要自己写代码画图,而是专注于分析。system_message="""你是资深金融分析师。根据 Data_Fetcher 提供的新闻和 Plo

🤖 既然一个 AI 干不完活,那就雇一个“团队”吧:AutoGen 多智能体实战指南
关键词:AutoGen, Multi-Agent, 多智能体, AI 团队, 自动化工作流
大家好,我是飞哥!👋
上周我们讲了 LlamaIndex,它帮我们解决了“数据看不懂”的问题。
但这周,我们面临一个新的挑战:任务太复杂。
试想一下,如果你让 ChatGPT 帮你“写一份特斯拉的行业研报,要有最新新闻,还要有股价趋势图,最后生成 PDF”。
大概率它会回复你一段文字,但既没有实时数据,也没有图表,更别提 PDF 了。
为什么? 🤯
因为这不仅是一个“问答任务”,而是一个“复合工作流”。它需要:搜索、阅读、写代码、画图、排版。
让一个 AI 模型(比如 GPT-4)同时扮演这么多角色,它很容易“精神分裂”。
💡 解决方案:
如果一个实习生干不好,那就组建一个专家团队!
这就是 Multi-Agent (多智能体) 的核心思想。今天我们要用的神器,就是微软开源的 AutoGen。
1. 为什么你需要 AutoGen?(Why)
生动类比 🍎:
- Single Agent (单体 AI) = 全能实习生 🎓。什么都懂一点,但让他独立负责一个大项目,容易顾此失彼,做着做着就跑题了。
- Multi-Agent (AutoGen) = 正规军编制 💂♂️。
- 有 项目经理 (Planner) 📅 负责拆解任务。
- 有 情报员 (Data Fetcher) 🕵️♂️ 专门负责上网搜资料。
- 有 绘图师 (Plotter) 🎨 专门负责画股价走势图。
- 有 分析师 (Analyst) 🧠 专门负责深度分析。
- 有 主笔 (Writer) ✍️ 专门负责写文章。
- 有 校对员 (Proofreader) 🧐 负责检查质量。
- 还有 用户代理 (UserProxy) 👮♂️ —— 也就是你(或者你的替身),负责最后拍板和执行代码。
核心价值:
AutoGen 允许你定义这些角色,并且让它们在一个“微信群”里自动对话。你只需要发一句指令,它们就会自己开会、吵架(讨论)、干活,直到把任务完成。
2. 核心概念提炼 (Skeleton) 🦴
2.1 两个基本原子
在 AutoGen 的世界里,一切皆 Agent,但主要分为两类:
-
UserProxyAgent (人类代理) 🧑💼:
- 身份:代表“雇主”或“执行者”。
- 特技:能执行代码!当 AI 写出 Python 代码时,它负责运行并反馈结果。
- 比喻:带枪的监工。
-
AssistantAgent (AI 助理) 🤖:
- 身份:基于 LLM 的智能体。
- 特技:能思考、能写代码。
- 比喻:聪明的打工人。
2.2 聊天模式 (GroupChat) 💬
如果不加控制,5 个 AI 在群里可能会乱说话。
所以我们需要 GroupChatManager(群管理员)。
它就像“主持人”,根据当前的聊天记录,决定下一个该谁发言。
3. 准备工作:搭建舞台 🛠️
在开始指挥你的 AI 军团之前,我们需要先安装必要的“军需物资”。
3.1 安装依赖
打开终端,运行以下命令:
pip install "pyautogen<0.4" duckduckgo-search matplotlib pandas python-dotenv
依赖包大起底:
pyautogen:微软 AutoGen 的核心库,我们的“指挥部”,负责管理所有 Agent。duckduckgo-search:免费的搜索引擎工具,不需要 API Key 就能让 AI 上网,是 Data Fetcher 的“千里眼”。matplotlib:Python 最经典的绘图库,Plotter 用它来画股价走势图。pandas:数据处理神器,相当于“Python 版的 Excel”。我们用它来读取和清洗下载下来的股票数据。
3.2 配置“军费” (DeepSeek Config)
AutoGen 支持 OpenAI 格式的 API。飞哥强烈推荐使用 DeepSeek (深度求索),不仅代码能力强悍,最重要的是国内直连、无需魔法,获取 Key 非常方便!
我们需要定义一个 llm_config 字典,它就像是发给 AI 的“聘书”。
import os
# 💡 飞哥提示:生产环境请使用环境变量,不要把 Key 硬编码在代码里!
# export DEEPSEEK_API_KEY="sk-..."
llm_config = {
"model": "deepseek-chat", # DeepSeek V3 (或使用 deepseek-coder)
"api_key": os.environ.get("DEEPSEEK_API_KEY"),
"base_url": "https://api.deepseek.com", # 关键:指向 DeepSeek 的服务器
}
4. 实战项目:全自动“行业研报生成团队” 🚀
我们要搭建一个包含 4 个 AI 的精英团队,完成一份关于“特斯拉股价”的研报。
4.1 团队架构图
4.2 核心代码拆解
第一步:给 Data Fetcher 装备“武器” (联网搜索) 🔎
AI 自己是没法上网的,我们需要给它注册一个工具 (Tool)。
# 定义搜索函数
def search_web(query: str) -> str:
from duckduckgo_search import DDGS
with DDGS() as ddgs:
results = list(ddgs.text(query, max_results=5))
return str(results)
第二步:定义 Plotter (绘图专家) 🖌️
为了保证图表能稳定生成,我们定义一个专门的 generate_chart 函数,并交给 Plotter 使用。
def generate_chart(ticker: str) -> str:
# ... (省略具体绘图代码,使用 matplotlib) ...
return "Chart saved to coding/chart.png"
plotter = AssistantAgent(
name="Plotter",
system_message="你是绘图师。调用 generate_chart 画图。",
llm_config=llm_config,
)
第三步:定义 Analyst (大脑) 🧠
Analyst 不再需要自己写代码画图,而是专注于分析。
analyst = AssistantAgent(
name="Analyst",
system_message="""你是资深金融分析师。
根据 Data_Fetcher 提供的新闻和 Plotter 提供的图表数据摘要,进行深度分析。
""",
llm_config=llm_config,
)
第四步:组建群聊并开工 🗣️
# 拉群
groupchat = GroupChat(
agents=[user_proxy, planner, fetcher, plotter, analyst, writer, proofreader],
messages=[],
max_round=20
)
4.3 完整代码 (Copy & Run) 📋
为了方便大家直接上手,我把上面的碎片代码整合成了一个完整的、可运行的脚本。
注意:这里配置了 DeepSeek API,并使用了 AutoGen 最新版 (v0.2+) 推荐的工具注册写法。
复制保存为 autogen_team.py,确保配置好环境变量 DEEPSEEK_API_KEY 后运行:
import os
import pandas as pd
import matplotlib.pyplot as plt
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager, register_function
from duckduckgo_search import DDGS
# 1. 配置 LLM (DeepSeek)
llm_config = {
"model": "deepseek-chat",
"api_key": os.environ.get("DEEPSEEK_API_KEY"),
"base_url": "https://api.deepseek.com",
}
# 2. 定义工具函数
def search_web(query: str) -> str:
"""搜索互联网获取最新信息"""
print(f"\n🔍 [搜索中] {query}...")
with DDGS() as ddgs:
results = list(ddgs.text(query, max_results=5))
return str(results)
def generate_chart(ticker: str) -> str:
"""从 Stooq 获取数据并绘图"""
print(f"\n🎨 [绘图] {ticker}...")
try:
# 使用 Stooq 数据源 (无需 Key)
url = f"https://stooq.com/q/d/l/?s={ticker}.US&i=d"
df = pd.read_csv(url, parse_dates=["Date"], index_col="Date")
df = df.sort_index().tail(10) # 取最近10天
# 确保工作目录存在
work_dir = "coding"
os.makedirs(work_dir, exist_ok=True)
save_path = os.path.join(work_dir, "chart.png")
plt.figure(figsize=(10, 6))
plt.plot(df.index, df["Close"], marker="o")
plt.title(f"{ticker} Stock Price")
plt.grid(True)
plt.savefig(save_path)
plt.close()
return f"Chart saved to {save_path}"
except Exception as e:
return f"Error: {e}"
# 3. 定义 Agents
user_proxy = UserProxyAgent(
name="User_Proxy",
human_input_mode="NEVER",
max_consecutive_auto_reply=10,
is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
code_execution_config={"work_dir": "coding", "use_docker": False},
)
planner = AssistantAgent(
name="Planner",
system_message="你是任务规划师。指挥 Fetcher 搜新闻 -> Plotter 画图 -> Analyst 分析 -> Writer 写报告 -> Proofreader 校对。校对通过后回复 TERMINATE。",
llm_config=llm_config,
)
fetcher = AssistantAgent(
name="Data_Fetcher",
system_message="你是情报员。调用 search_web 搜新闻。",
llm_config=llm_config,
)
plotter = AssistantAgent(
name="Plotter",
system_message="你是绘图师。调用 generate_chart 画图。",
llm_config=llm_config,
)
analyst = AssistantAgent(
name="Analyst",
system_message="你是分析师。根据新闻和图表数据进行深度分析。",
llm_config=llm_config,
)
writer = AssistantAgent(
name="Writer",
system_message="你是主笔。撰写 Markdown 报告,必须插入图片 。",
llm_config=llm_config,
)
proofreader = AssistantAgent(
name="Proofreader",
system_message="你是校对员。检查 Markdown 格式和图片引用。合格回复“校对通过”。",
llm_config=llm_config,
)
# 4. 注册工具
register_function(search_web, caller=fetcher, executor=user_proxy, name="search_web", description="Search news")
register_function(generate_chart, caller=plotter, executor=user_proxy, name="generate_chart", description="Draw chart")
# 5. 组建团队
groupchat = GroupChat(
agents=[user_proxy, planner, fetcher, plotter, analyst, writer, proofreader],
messages=[],
max_round=20
)
manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)
# 6. 开始任务
print("🚀 AI 团队已就位...")
user_proxy.initiate_chat(
manager,
message="分析 Tesla (TSLA) 最近一周的股价趋势和新闻,生成图表和中文简报。"
)
4.4 运行效果预览 🎬
当你运行这段代码时,你会看到控制台里发生神奇的一幕:
- Planner 跳出来说:“我们要分三步走:先搜新闻,再画图,最后写报告。”
- Data Fetcher 说:“收到,我调用
search_web搜到了以下 5 条新闻…” - Plotter 说:“正在调用
generate_chart生成图表。”- (UserProxy 默默在后台运行了代码,生成了 chart.png)
- Analyst 说:“新闻和图表我都有了,我认为…”
- Writer 说:“根据分析,我写好了这篇报告…”
- Proofreader 说:“校对通过,报告完美。”
- UserProxy:任务结束。
5. 避坑指南 (Best Practices) ⚠️
-
模型智商很重要:
- AutoGen 极度依赖模型的指令遵循能力。
- DeepSeek V3 在代码生成和逻辑推理上表现优异,而且网络访问稳定,不用担心连不上 OpenAI 的问题。
- 尽量避免使用小参数模型(如 7B 以下),否则 Agent 经常会忘记调用工具。
-
无限循环死局:
- 有时候两个 Agent 会互相客气:“你先请”,“不不你先请”。
- 解决:在 System Message 里明确规定“终止条件”,比如“任务完成后回复 TERMINATE”。
-
Docker 保护:
- 因为 UserProxy 会真正在你的电脑上执行代码(包括删除文件!)。
- 生产环境务必开启
use_docker: True,把它们关在沙箱里。
6. 飞哥总结 📝
LlamaIndex 让我们拥有了“最强大脑”(知识库),而 AutoGen 让我们拥有了“三头六臂”(执行团队)。
现在的你,已经不是一个人在写代码了。你是一个AI 军团的指挥官。
下期预告:
团队有了,但怎么保证他们按公司规定的 SOP(标准作业程序)干活,而不是乱发挥?
下周我们将进入 LangGraph 的世界,学习如何构建有状态、可控的工作流!
关注飞哥,带你从“写代码”进化到“设计智能体”!🚀
创作不易,记得👇关注飞哥👇 ,点赞、收藏哦~~,下篇见👋
更多推荐


所有评论(0)