前言
大语言模型(LLM)非常擅长一件事:
理解问题并生成回答
例如:解释代码、回答技术问题、写文章、生成程序代码。
但是 LLM 本身无法直接感知或改变外部环境。例如它本身不能:
- 读取本地文件
- 写入文件
- 查看目录结构
- 执行终端命令
- 调用外部 API
换句话说:
LLM 只有"大脑",没有"手和脚"
如果希望 AI 能操作真实世界(读文件、写代码、运行命令等),就必须给它提供 工具(Tools),并由程序在模型决策后去真正执行这些工具。
这就是 Agent 的核心思想:
模型负责思考
程序负责执行
工具提供能力
很多人第一次接触 Agent 时会问:
模型只是聊天,怎么能读文件、写文件、执行命令?
答案其实很简单:
模型负责思考
程序负责执行
工具提供能力
Agent 的核心运行方式叫 ReAct。
ReAct(Reason + Act)最早来自一篇论文:
ReAct: Synergizing Reasoning and Acting in Language Models
该论文发表于 2022 年 10 月。
主要作者:
Shunyu Yao
Jeffrey Zhao
Dian Yu
Nan Du
Izhak Shafran
Karthik Narasimhan
Yuan Cao
机构:
Google Research
Princeton University
论文地址:
https://arxiv.org/abs/2210.03629
论文提出让大模型通过"推理 + 行动"的循环来调用工具解决复杂任务。
ReAct 的基本思想是:
Reason(推理) + Act(行动)
也可以简单理解为:
推理 + 行动
也就是:
思考 → 调工具 → 看结果 → 再思考
循环直到任务完成。
一、第一次发送给模型的完整内容
程序第一次调用模型时,会把 系统提示词 + 用户问题 一起发给模型。
例如:
xml
<System_Prompt>
你是一个文件助手。
你必须按照以下 XML 结构返回决策:
<Thought>你的思考</Thought>
<Action>调用的方法</Action>
<Parameters>
<path>文件路径</path>
<content>写入内容</content>
</Parameters>
可用工具:
1. list_files(path)
作用:列出目录文件
2. read_file(path)
作用:读取文件内容
3. write_file(path, content)
作用:写入文件
当任务完成时返回:
<Final_Answer>最终答案</Final_Answer>
</System_Prompt>
<User_Question>
帮我看看当前目录有没有 info.txt,
如果有就读取它,并把前10个字写入 brief.txt
</User_Question>
这里有两个关键部分:
System_Prompt → 告诉模型规则和工具
User_Question → 告诉模型任务
二、第一轮:Agent 思考并决定行动
模型会返回:
xml
<Thought>
用户想处理 info.txt,但我不能假设文件存在,
应该先查看目录。
</Thought>
<Action>
list_files
</Action>
<Parameters>
<path>.</path>
</Parameters>
注意:
模型并没有真的查看文件。
它只是说:
我想调用 list_files
三、程序执行工具
程序解析:
<Action>list_files</Action>
然后调用真实代码,例如:
python
os.listdir(".")
得到结果:
info.txt
main.py
README.md
程序再把结果发回模型:
xml
<Observation>
文件列表:
info.txt
main.py
README.md
</Observation>
四、第二轮:模型继续思考
模型看到 Observation 后继续判断:
xml
<Thought>
目录中存在 info.txt,
下一步应该读取它的内容。
</Thought>
<Action>
read_file
</Action>
<Parameters>
<path>info.txt</path>
</Parameters>
程序执行:
read_file("info.txt")
返回:
xml
<Observation>
内容:
人工智能正在改变世界的一切,从生活到工作。
</Observation>
五、第三轮:执行写入操作
模型继续:
xml
<Thought>
我已经获得文件内容,
前10个字是"人工智能正在改变世界",
现在需要写入 brief.txt。
</Thought>
<Action>
write_file
</Action>
<Parameters>
<path>brief.txt</path>
<content>人工智能正在改变世界</content>
</Parameters>
程序执行:
write_file("brief.txt","人工智能正在改变世界")
返回:
xml
<Observation>
写入成功
</Observation>
六、最终回答
模型判断任务完成:
xml
<Final_Answer>
任务完成:
已找到 info.txt
读取文件内容
并将前10个字写入 brief.txt
</Final_Answer>
程序看到 Final_Answer 后停止循环。
七、完整流程总结
整个 Agent 的运行流程其实就是:
用户提问
↓
模型思考
↓
模型请求调用工具
↓
程序执行工具
↓
工具结果返回
↓
模型继续思考
↓
循环
↓
最终回答
八、程序视角的核心逻辑
程序只需要做三件事:
1 调用模型
2 解析模型返回:
<Action>
3 执行对应工具
伪代码:
python
while True:
response = call_llm(messages)
if "Action" in response:
run_tool()
if "Final_Answer" in response:
break
九、一句话理解 Agent
Agent 本质就是:
模型负责思考
程序负责执行
工具提供能力
通过 ReAct 循环:
Thought → Action → Observation → Thought
不断执行任务。
所以 Agent 看起来像:
AI 拥有了"手"和"脚"。