AI Agent(智能体)这个概念听起来很高大上,但拆开看其实就是一句话:让大模型不再只是聊天,而是能够自己规划步骤、调用外部工具、根据反馈调整行动的执行系统。过去两年,从最早提出ReAct范式的论文,到爆火的AutoGPT,再到微软的AutoGen和阿里的QwenAgent,智能体框架经历了从概念验证到工程落地的完整演变。这篇文章就按照这条时间线,带你把每个关键节点搞明白,并且给出可以直接跑起来的代码。

一、先搞懂地基:ReAct模式到底在做什么
ReAct这个词是Reasoning和Acting的拼接,2022年由普林斯顿大学和谷歌的研究者提出。它解决的核心问题是:早期的语言模型要么只会思考(Chain of Thought,输出一大段推理但无法执行动作),要么只会照指令行动(输出动作但缺乏推理过程,容易瞎调工具)。ReAct把两者合在一个循环里,让模型每一步都先思考再行动,然后观察环境的反馈,再决定下一步。
一个典型的ReAct循环包含三个阶段。第一是Thought,模型用自然语言分析当前处境,判断需要做什么;第二是Action,模型输出一个结构化的工具调用指令,比如搜索某个关键词或者查询某个API;第三是Observation,系统把工具的执行结果喂回给模型,作为下一轮思考的依据。这个循环一直持续,直到模型判断任务完成,输出Final Answer。
用伪代码表示整个流程其实非常简单:
prompt = """你是一个能使用工具的助手。
可用工具:
1. search: 搜索互联网
2. calculator: 计算数学表达式
请严格按照以下格式输出:
Thought: 你的思考过程
Action: 工具名
Action Input: 工具输入
...(收到 Observation 后继续下一轮)
Thought: 我认为信息已足够
Final Answer: 最终答案
"""
messages = [{"role": "user", "content": "2023年世界杯冠军是谁?他多大年纪?"}]
while True:
response = llm.chat(prompt + str(messages))
if "Final Answer" in response:
break # 任务完成
action, action_input = parse_action(response) # 解析出工具调用
observation = tools[action](action_input) # 执行工具
messages.append({"role": "assistant", "content": response})
messages.append({"role": "user", "content": "Observation: " + observation})
理解了这段循环,你就理解了几乎所有智能体框架的核心。AutoGPT、QwenAgent本质上是把这个循环工程化,加上任务拆解、记忆管理、工具注册等模块。所以ReAct必须先学透,后面看任何框架源码都会觉得眼熟。另外要注意一个常见误区:ReAct并不是模型自带的能力,而是通过提示词工程引导出来的行为,模型输出的Thought和Action都是普通文本,需要你自己写解析器去提取。不过现在的主流大模型已经原生支持Function Calling,工具调用从文本解析变成了结构化输出,稳定性提升了一大截。
二、AutoGPT:全自动智能体的第一次大胆尝试
AutoGPT在2023年上半年红极一时,它的思路很激进:给模型一个总目标,比如帮我调研某个市场并写一份报告,然后让模型自己把目标拆成子任务列表,自动逐个执行,执行过程中还能自己给自己创建新任务、删除无用任务,全程尽量不需要人干预。它还引入了文件系统作为长期记忆,模型可以把中间结果写到磁盘上,下次启动还能读取。
它的架构大致分为五个部分:任务规划器负责把目标拆解成任务队列;执行器对每个任务调用大模型生成具体动作;工具集预置了搜索网页、读写文件、执行Python代码等能力;记忆模块用向量数据库存储历史;反馈模块在任务失败时让模型自我批评并修正方案。这个设计在当时非常超前,很多后来的框架都能看到它的影子。
但AutoGPT的实际体验暴露了纯自主模式的天生缺陷:第一,模型在复杂任务上容易陷入死循环,反复搜索同样的关键词,烧掉大量token却毫无进展;第二,任务拆解质量高度依赖模型能力,一旦某个子任务理解偏了,后面全盘皆错;第三,安全风险大,让模型自主执行代码和写文件,一旦提示词被注入恶意内容后果严重。因此AutoGPT更适合作为学习案例,让你理解完全自主的智能体长什么样,而不建议直接拿来做生产项目。它的历史价值在于证明了这条路可行,也证明了完全放开人类监督并不可行,这正是后来人类在环(Human-in-the-loop)设计成为主流的原因。
三、AutoGen与QwenAgent:多智能体协作与中文生态实践
AutoGen是微软推出的框架,它的核心创新是把智能体协作抽象成对话。框架里预定义了几种角色:AssistantAgent负责推理和生成方案,UserProxyAgent代表人类,可以自动执行代码、请求人工确认。你可以让多个不同人设的Agent坐在一起开会,比如一个写代码、一个审代码、一个提需求,通过多轮对话把任务推进下去。这种模式特别适合需要多角度验证的任务,比如代码生成加审查的流程,写代码的Agent提交方案后,审查Agent会指出问题,写代码的Agent再修改,循环直到通过。
一个最小的AutoGen示例如下:
from autogen import AssistantAgent, UserProxyAgent
config_list = [{"model": "gpt-4o", "api_key": "你的密钥"}]
assistant = AssistantAgent("coder", llm_config={"config_list": config_list})
user = UserProxyAgent(
"user",
code_execution_config={"work_dir": "coding", "use_docker": False},
human_input_mode="NEVER", # 不需要人工介入,全自动执行
)
user.initiate_chat(
assistant,
message="写一个Python脚本,统计当前目录下所有py文件的总行数并保存为result.txt",
)
这段代码跑起来后,你会看到助手Agent生成代码,UserProxy自动执行,如果报错会把错误信息回传给助手重新修改,整个过程不需要你动手,这就是代码执行反馈闭环的威力。
QwenAgent则是阿里围绕通义千问系列模型打造的智能体框架,对中文场景和开源模型的支持是它的强项。它内置了多个工具,最实用的是代码解释器(Code Interpreter),模型遇到计算、画图、处理文件的任务时会自动生成Python代码并在沙箱里执行。它的文档解析工具可以读取PDF和Word,做中文知识问答效果不错。安装也简单:
pip install qwen-agent
from qwen_agent.agents import Assistant
bot = Assistant(
llm={"model": "qwen-max", "api_key": "你的密钥", "model_server": "dashscope"},
system_message="你是一个乐于助人的助手,遇到计算问题请调用代码解释器。",
function_list=["code_interpreter"], # 注册代码解释器工具
)
messages = [{"role": "user", "content": "帮我计算2的100次方是多少"}]
for resp in bot.run(messages=messages):
pass
print(resp[-1]["content"])
选型建议可以这样记:如果做多智能体协作和自动化代码任务,优先AutoGen;如果主打中文场景、用千问系列模型、需要文档问答,QwenAgent更顺手;如果只是想理解原理做原型,手写一个ReAct循环就够了,几百行代码足够覆盖核心逻辑。
四、动手入门的正确路线和避坑建议
学习顺序上,建议按原理到工程的路径走:第一周手写ReAct循环,不用任何框架,接一个搜索API,让模型完成一个多步问答任务,把Thought、Action、Observation的日志打印出来逐条看,你会对智能体的运行机制有肌肉记忆;第二周跑通AutoGPT,观察它的任务列表变化,理解自主模式的局限;第三四周在AutoGen和QwenAgent中选一个深入,做出一个解决自己实际需求的小项目,比如自动整理周报的助手或者文档问答机器人。
几个高频踩坑点提前说一下。一是token消耗问题,智能体是多轮循环,上下文会越滚越长,一个任务跑几十轮是常事,务必设置最大迭代次数和token预算,否则账单会很难看。二是工具描述要写得足够清楚,模型选择工具完全依赖描述文本,描述含糊它就会频繁选错。三是解析要留容错,即使模型支持Function Calling,偶尔也会输出不合规的结构,重试机制和格式校验不能省。四是沙箱隔离,凡是让模型执行代码的功能,一定要放在容器或独立环境里,直接在宿主机跑等于把系统控制权交给了模型。
最后保持一个清醒认知:智能体的能力上限取决于底层模型,框架只是把模型能力组织起来的脚手架。模型升级后,很多以前需要复杂提示词工程才能实现的效果会变得轻而易举,所以把精力放在理解ReAct范式、工具设计和人机协作模式上,比死记某个框架的API更有长期价值。