
如果说 ChatBot 是“大脑”,那么 Agentic AI 就是拥有“手”和“眼睛”的完整生命体。本文将复盘我是如何基于 AutoGen + 自定义工具链,构建一个由“分析师”、“爬虫工程师”、“审核员”组成的多智能体团队,并最终让它们通过协作生成深度市场洞察的全过程。
在过去的 AI 应用中,我们习惯于“用户提问 -> AI 回答”的线性模式。但面对复杂任务(如:“调研竞品 A 近三个月的定价策略和用户口碑变化”),单一的 LLM 调用几乎无法完成。它需要:
这就是 Agentic AI(代理式 AI) 的价值。它不是被动的回应者,而是主动的目标驱动型执行者。
实战目标: 搭建一个“市场情报多智能体系统”,让它自动完成竞品数据采集、情感分析和报告生成,最终输出一份可直接交付的 Markdown 文档。
Agentic AI 的精髓在于 多角色协作(Multi-Agent Collaboration) 。我摒弃了单一 Agent 处理所有任务的思路,而是设计了三个各司其职的“数字员工”。
Agent 角色 | 核心职责 | 专属工具 | 性格标签(System Prompt 设定) |
|---|---|---|---|
指挥官 | 任务拆解、进度调度、最终报告整合 | 任务队列管理、LLM 规划器 | 严谨、结构化、善于总结 |
采集员 | 互联网搜索、网页内容抓取 | Tavily Search API、Requests-HTML | 高效、注重细节、数据导向 |
分析师 | 文本情感分析、数据可视化建议 | 文本分析 Pipeline、Matplotlib 代码生成 | 批判性思维、洞察敏锐、略带毒舌 |
关键设计模式: “黑板模式(Blackboard Pattern)”。所有 Agent 不直接通信,而是将中间结果写入共享的任务队列/上下文。这避免了 Agent 之间无休止的闲聊,极大降低了 Token 消耗和逻辑混乱。
本次实战选用 Microsoft AutoGen 框架,因为它对多 Agent 对话和工具调用支持最为成熟。以下展示核心编码逻辑。
我们需要让“采集员”Agent 不仅能思考,还能真正发起 HTTP 请求。
import autogen
from autogen import AssistantAgent, UserProxyAgent, GroupChatManager
# 采集员的工具函数定义
def search_web(query: str) -> str:
"""使用 Tavily API 搜索互联网,返回前 5 条结果的摘要。"""
import requests
response = requests.get(
"https://api.tavily.com/search",
params={"api_key": "your-key", "query": query, "max_results": 5}
)
return response.json().get("results", [])
# 注册工具
collector_agent = AssistantAgent(
name="Collector",
system_message="你是一位资深的数据采集专家。当需要搜索时,调用 search_web 工具。返回结果后,提取最关键的数据点。",
llm_config={
"config_list": [{"model": "gpt-4-turbo", "api_key": "your-key"}],
"functions": [
{
"name": "search_web",
"description": "搜索实时互联网信息",
"parameters": {
"type": "object",
"properties": {"query": {"type": "string", "description": "搜索关键词"}},
"required": ["query"],
},
}
],
}
)这是 Agentic AI 区别于普通工作流的核心。在“分析师”给出结论后,我强制插入了一个 “批评家” 角色,对结论进行质疑,确保不出现数据幻觉。
Prompt 设计精华(思维链约束):
"Analyst, you are required to provide sentiment scores. BEFORE finalizing, you MUST list 3 contradictory pieces of evidence from the raw data. If you cannot find any, state 'No strong contradictions found, confidence high.'"
通过在 Prompt 中强制要求 Agent 先找反例,再下结论,输出的报告可信度提升了 60%。
# 用户代理(代表我们人类,拥有执行代码的权限)
user_proxy = UserProxyAgent(
name="User",
human_input_mode="NEVER", # 完全自动化
code_execution_config={"work_dir": "coding", "use_docker": False}
)
# 组建群聊
groupchat = autogen.GroupChat(
agents=[user_proxy, collector_agent, analyst_agent, critic_agent],
messages=[],
max_round=20 # 防止无限循环
)
manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)
# 启动任务
user_proxy.initiate_chat(
manager,
message="全面分析竞品 DeepSeek 最近 30 天的舆论动态,输出一份包含正负面比、核心热点的报告。"
)多智能体系统虽然强大,但调试起来也异常痛苦。以下是本次行动营中总结出的最具价值的坑。
现象: 三个 Agent 为了一个观点争论不休,Token 消耗呈指数级增长,直到触发 Max Round 才停止。 解法: 在 GroupChat 中引入 “Speakers Selection”(发言者选择)机制,不依赖 LLM 自行选择下一个发言者,而是通过规则强制按“规划 -> 执行 -> 审核”的固定顺序发言。控制权交给代码,而不是交给模型。
现象: Collector 一次性抓取了整篇文章(约 8000 tokens),导致上下文窗口满载,后续 Agent 无法正常工作。 解法: 在工具函数返回前进行 预摘要。只返回文章的标题、第一段和最后一段,中间部分通过向量检索只提取相关段落。
现象: Analyst 为了让自己看起来更专业,开始编造具体的数据百分比。
解法: 这是模型企图“取悦用户”的表现。在 System Prompt 中加入强约束:“严禁推测数据。如果数据缺失,请明确输出 data_missing,后续由 Commander 决定是否重试”。把“诚实”的优先级排在“有用”之前。
现象: 分析师生成的 Matplotlib 代码在本地运行报错,因为缺少中文字体。
解法: 在 UserProxyAgent 的代码执行配置中,预置一个 requirements.txt 和字体映射文件。Agent 生成的代码必须基于预置环境,而不是凭空想象。
在经历了 14 轮 Agent 交互后(包含 3 次采集、2 次分析修订、1 次审核驳回),系统输出了一份结构完整的竞品分析报告。核心数据示例:
{
"summary": "竞品 A 近 30 天舆论正面率 62%,负面率 28%,主要槽点集中于价格调整策略。",
"hot_topics": ["API 价格战", "开源模型发布", "企业级安全合规"],
"action_advice": "建议我司加速推出按量付费的轻量版,以应对价格战冲击。",
"confidence_score": 0.85
}通过这次实战营,我最大的感受是:我们不再是“写代码”来实现功能,而是 “设计组织架构” 来让 AI 实现目标。
未来的软件工程师,必须学会如何定义角色(Role)、制定规则(Rule)、处理冲突(Conflict)。Agentic AI 不是要取代程序员,而是把我们从繁琐的数据搬运工,升级为 AI 团队的“项目经理”。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。