实战四:多 Agent 调研团队
多 Agent 最适合用来做什么?我觉得“调研 + 成稿”就是一个非常典型的场景。因为这两件事虽然相关,但评价标准不一样:
- 调研更看重覆盖面、事实准确性和信息来源
- 写作更看重结构、可读性和表达节奏
把它们都交给一个 Agent,当然也能做,但经常会出现两种问题:要么搜得不够扎实,要么文章写得很顺,却没什么根据。这一节就用一个最小双角色团队,把这个分工跑通。
如果你后面想把它做成能被 Google 更容易索引的内容生产流程,这个分工也有现实意义:researcher 负责找可信来源,writer 负责把来源组织成结构清晰、主题明确的文章。搜索引擎更容易理解的,通常也是这种证据和结构都比较扎实的页面。
[LIVE_CHAT_BANNER]
1. 为什么用 CrewAI?
这里选 CrewAI,不是因为它一定最强,而是因为它很适合展示“角色分工”这件事。它的模型比较贴近大家对团队协作的直觉:谁负责查,谁负责写,任务怎么串起来。
pip install crewai crewai-tools
2. 定义 Agents
我们先只放两个角色,故意保持简单:
- Researcher:负责搜集和整理材料
- Writer:负责根据材料形成成稿
别一上来就上 5 个 Agent。多智能体系统最容易出现的问题之一,就是角色加太快,结果没人能说清每个 Agent 的边界。
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool
search_tool = SerperDevTool() # Google Search 工具
# 定义研究员
researcher = Agent(
role='Senior Research Analyst',
goal='Uncover cutting-edge developments in AI Agents',
backstory="""You work at a leading tech think tank.
Your expertise lies in identifying emerging trends.
You have a knack for dissecting complex data and presenting actionable insights.""",
verbose=True,
allow_delegation=False,
tools=[search_tool] # 只有研究员能用搜索工具
)
# 定义撰稿人
writer = Agent(
role='Tech Content Strategist',
goal='Craft compelling content on tech advancements',
backstory="""You are a renowned Content Strategist, known for your insightful and engaging articles.
You transform complex concepts into compelling narratives.""",
verbose=True,
allow_delegation=True
)
这里有个很值得注意的小点:只有 researcher 配了搜索工具,而 writer 没有。
这是故意的。因为如果 writer 也能自己上网搜,它就很容易绕过前面的调研结果,最后系统又退化成“两个都什么都做”的状态。角色分工只有在权限也分开时才真正成立。
我还会额外建议一件事:给 researcher 增加“来源字段”,明确记录每条结论从哪里来。这样 writer 在写成稿时,不只是拿到一堆观点,而是拿到“观点 + 来源 + 可信度”。
3. 定义 Tasks
任务描述不能太空。Multi-Agent 系统里,任务如果写得模糊,错误会一棒传一棒,最后很难知道问题出在哪一层。
所以 task 最好至少写清楚:
- 做什么
- 输出长什么样
- 成功标准是什么
- 有没有不能碰的边界
如果目标是产出能上线、能被搜索引擎长期收录的文章,task 里最好再多写两条:
- 尽量使用可验证来源,不要只引用二手摘要
- 标题和小节名称要能明确表达主题,不要全靠抽象概念
# 任务 1:调研
task1 = Task(
description="""Conduct a comprehensive analysis of the latest advancements in AI Agents in 2024.
Identify key trends, breakthrough technologies, and potential industry impacts.""",
expected_output="Full analysis report in bullet points",
agent=researcher
)
# 任务 2:写作
task2 = Task(
description="""Using the insights provided, develop an engaging blog post that highlights the most significant AI Agent trends.
Your post should be informative yet accessible to a general tech-savvy audience.
Avoid complex jargon.""",
expected_output="Full blog post of at least 4 paragraphs",
agent=writer
)
4. 组建 Crew 并运行
crew = Crew(
agents=[researcher, writer],
tasks=[task1, task2],
verbose=2, # 打印详细日志
process=Process.sequential # 顺序执行:先调研,后写作
)
result = crew.kickoff()
print("######################")
print(result)
这里用 Process.sequential 很重要,因为这类任务天然就是顺序型:
- 先研究
- 再写作
如果你让两个角色同时开始,writer 在没有材料的情况下很可能直接开始脑补。
这一步其实也是为了减少“AI 味”。很多 AI 生成内容之所以一眼看着像模板文,原因之一就是 writer 没拿到足够扎实的原始材料,只能靠通用语言把文章撑起来。
5. 观察运行过程
跑起来以后,你通常会看到这样一个节奏:
- Researcher 开始调用 Google Search,搜索 "AI Agent trends 2024"。
- 它会阅读搜索结果,提取关键点(如 AutoGen, BabyAGI)。
- 任务完成后,它把调研报告传递给下一棒。
- Writer 接收到报告,开始撰写文章。
- 最终输出一篇完整的博客。
6. 这个实验真正该观察什么
很多人做多 Agent demo 时,只看最后文章写得像不像。其实更有价值的是看中间链路:
研究员找到的资料质量如何
它是搜了一堆泛泛网页,还是找到了真正有信息量的来源?有没有明显过期内容?有没有把广告文当成事实来源?
交接物是不是足够结构化
如果 researcher 只是丢给 writer 一坨原始段落,writer 很容易自己乱总结。
更稳的交接格式通常会像这样:
- 关键趋势
- 每个趋势对应的来源
- 不确定的点
- 需要 writer 避免过度放大的地方
- 建议使用的关键词或主题短语
writer 有没有“越权发挥”
writer 最大的风险不是文笔差,而是为了让文章更顺,把原本没有证据支撑的内容补全了。你在真实系统里最好明确要求 writer:
- 只能基于调研结果写
- 不得补充未经验证的新事实
- 有争议的点要保留不确定性
如果是面向 Google 搜索的内容,我还会再加一条:正文里尽量保留可以被用户直接搜索到的问题表达,而不是把所有标题都写成很空泛的概念词。这样页面主题会更明确。
7. 把这个 demo 再做深一点
如果你觉得这个双角色版本已经跑顺了,可以继续往下加,但建议按顺序来:
- 给 researcher 增加“来源打分”
- 给 writer 增加“引用来源”要求
- 再加一个 reviewer,专门查事实和结构问题
- 最后再考虑 manager 统一调度
这个顺序很重要。很多团队一开始就上 manager、reviewer、editor、publisher 一整套,最后只是把复杂度提前引进来了。
而且角色一多,内容风格会越来越像“流程产物”。如果你想让页面读起来更像真人写的,通常不是不断加角色,而是让前面的 researcher 和 writer 交接更扎实。
小结
Multi-Agent 做得好的前提,不是角色数量多,而是分工清楚。
- Researcher 负责把事实找准
- Writer 负责把内容写顺
- 交接格式负责防止信息变形
这三件事做好了,两个 Agent 往往已经能超过一个“什么都想干”的通用 Agent。