大语言模型 vs 人类
大语言模型(LLM)非常强大,如同拥有思考能力的大脑。然而,仅凭大脑无法与世界互动。如果给 LLM 配备上四肢和工具,它是否能打破次元壁,从数字世界走向现实世界?
LLM 可以接受输入、分析推理、输出文字或代码。但其缺乏人类的规划思考能力、运用工具与物理世界互动的能力,以及记忆能力。
- LLM:接受输入、思考、输出
- 人类:LLM + 记忆 + 工具 + 规划
若为 LLM 配备与物理世界互动的工具、记忆能力及规划思考能力,它将能像人类一样自主思考并规划任务过程,检索记忆,使用工具提高效率,最终完成复杂任务。
智能体是什么
智能体的英文是 Agent。业界对其有多种定义,个人理解,智能体是一种通用问题解决器。从软件工程角度看,智能体是一种基于大语言模型的、具备规划思考能力、记忆能力、使用工具函数能力的计算机程序,能自主完成给定任务。

如图 1 所示,在基于 LLM 的智能体中,LLM 充当'大脑'角色,同时还有 3 个关键部分:
规划(Planning)
智能体会把大型任务分解为子任务,并规划执行流程;对任务执行过程进行思考和反思,决定继续执行或终止运行。
记忆(Memory)
- 短期记忆:执行任务过程中的上下文,在子任务执行中产生和暂存,任务完结后清空。
- 长期记忆:长时间保留的信息,通常指外部知识库,用向量数据库存储和检索。
工具使用(Tool use)
为智能体配备工具 API,如计算器、搜索工具、代码执行器、数据库查询工具等。有了这些工具 API,智能体就可以与物理世界交互,解决实际问题。
智能体能做什么
智能体之调研员
调研员智能体可根据用户的调研问题,从搜索引擎搜索资料并总结,生成调研报告。这里以 MetaGPT 框架中的调研员示例展示智能体的实际作用。
运行示例
输入调研课题:调研特斯拉 FSD 和华为 ADS 这两个自动驾驶系统
python3 -m metagpt.roles.researcher "特斯拉FSD vs 华为ADS"



- 输出调研报告
MetaGPT 生成并保存了调研报告。
文件:特斯拉 FSD vs 华为 ADS.md

拆解调研员
仅有 LLM 大脑无法完成整个调研流程。在调研员智能体中,为 LLM 配备了规划、工具、记忆的能力。其基本构成包括角色、工具、记忆三部分。在角色中,注册各种工具,定义思考规划方式,以及具备短期记忆能力。

智能体的关键构成
规划(Planning)
规划可理解为观察和思考。类比人类思维模式:接到任务后思考如何完成,审视手头工具及使用方法,将任务拆分成子任务,执行过程中反思完善,思考何时终止。
我们希望智能体拥有这种思维模式,通过 LLM 提示工程赋予其以下能力:
子任务分解
通过 LLM 使智能体把大型任务分解为更小的、更可控的子任务,有效完成复杂任务。
思维链(Chain of Thoughts, CoT)
思维链是一种标准提示技术,能显著提升 LLM 完成复杂任务的效果。要求 LLM「think step by step」,使其将问题分解成多个步骤逐步解决,输出结果更准确。
Prompt 示例:
template = "Answer the question: Q: {question}? Let's think step by step:"
思维树(Tree-of-thought, ToT)
对 CoT 的扩展,在每一步推理出多个分支,拓扑展开成思维树。使用启发式方法评估每个分支贡献,选择搜索算法(BFS 或 DFS)探索思维树,进行前瞻和回溯。

反思和完善
智能体在执行过程中,通过 LLM 对完成的子任务进行反思,从错误中吸取教训,完善未来步骤,提高质量。同时反思任务是否完成并终止。
ReAct
ReAct(Yao et al. 2023)提出结合推理(Reasoning)和行动(Acting)来增强 LLM 效果。
- 推理:基于已有知识或行动后获取的知识推导结论。
- 行动:根据实际情况使用工具获取知识或完成子任务。
结合推理和行动能有效增强完成任务能力。例如调研问题:
- 仅推理:LLM 仅基于已有知识,若无相关知识易产生幻觉。
- 仅行动:仅使用工具搜索,得到海量资料,无法直接回答问题。
- 推理 + 行动:LLM 先审视知识,不足则调用工具(如搜索),获取新信息后重复推理和行动,直到完成任务。
步骤示例:
推理 1:当前知识不足以回答,需知道「特斯拉 FSD」和「华为 ADS」
行动 1:使用搜索工具搜索资料
观察 1:总结行动 1 内容
推理 2:得知是两个自动驾驶方案对比,需生成报告
行动 2:使用生成报告工具
观察 2:任务完成

ReAct Prompt 模版思路:
Thought(思考): ...
Action(行动): ...
Observation(观察): ...
(Repeated many times)
记忆(Memory)
记忆是大脑存储、保留和回忆信息的能力。分为短期记忆和长期记忆。
仿照人类记忆机制,智能体实现两种记忆机制:
- 短期记忆:当前任务执行过程中产生的信息,如工具或子任务执行结果,写入短期记忆。任务完结后被清空。
- 长期记忆:长时间保留的信息,一般指外部知识库,通常用向量数据库存储和检索。
工具使用(Tool use)
LLM 是数字世界程序,与现实世界互动离不开工具。工具可以是锤子、螺丝刀,也可以是函数(function)、SDK。在智能体中,工具就是函数,工具使用就是调用函数。
Function Calling
Function Calling 是实现 LLM 连接外部工具的机制。调用方描述函数功能、参数说明,让 LLM 根据用户输入选择合适的函数,并将自然语言转换为请求参数(JSON 格式)。调用方使用返回的参数调用函数,将响应传给 LLM 组织回复。
具体工作流程如下:

不同 LLM 的 API 接口协议有所不同,下文以 OpenAI 的 API 协议为例说明。
函数描述
假设函数已实现,需向 LLM 描述该函数。必备要素:函数名、功能描述、请求参数说明、响应参数说明。
「查询最近天气」的函数描述:
{
"type": "function",
"function": {
"name": "get_n_day_weather_forecast",
"description": "获取最近 n 天的天气预报",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市或镇区 如:深圳市南山区"
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "要使用的温度单位"
}
调用 LLM 获得函数的请求参数
Function Calling 通过请求 LLM 的 chat API 实现。支持 Function Calling 模型的 chat API 参数中有 functions 或 tools 参数。传入此参数,大模型知道可用函数,并根据用户输入推理调用哪些函数,返回请求参数。
OpenAI SDK 示例:
from openai import OpenClient
def chat_completion_request(messages, tools=None, tool_choice=None, model="gpt-3.5-turbo"):
try:
response = client.chat.completions.create(
model=model,
messages=messages,
tools=tools,
tool_choice=tool_choice,
)
return response
except Exception as e:
print(f"Exception: {e}")
return e
if __name__ == "__main__":
messages = []
messages.append({"role": "system", "content": "不要假设将哪些值输入到函数中。如果用户请求不明确,请要求澄清"})
messages.append({"role": "user", "content": "未来 5 天深圳南山区的天气怎么样"})
chat_response = chat_completion_request(messages, tools=tools)
tool_calls = chat_response.choices[0].message.tool_calls
print("===回复===")
print(tool_calls)
LLM 返回函数调用参数:
[
{
"id": "call_7qGdyUEWp34ihubinIUCTXyH",
"function": {
"arguments": "{\"location\":\"深圳市南山区\",\"format\":\"celsius\",\"num_days\":5}",
"name": "get_n_day_weather_forecast"
},
"type": "function"
}
]
调用函数
调用方获得 LLM 返回的函数调用信息后,自行调用函数,得到响应。如有需要,将响应追加到对话历史传给 LLM,组织成自然语言回复。
for tool_call in tool_calls:
function = tool_call.function.name
arguments_list = json.loads(tool_call.function.arguments)
function_to_call = globals().get(function)
result = function_to_call(**arguments_list)
print("===" + function + "===")
print(result)
messages.append({
"tool_call_id": tool_call.id,
"role": "user",
"name": function,
"content": "函数执行结果为:" + str(result)
})
chat_response = chat_completion_request(messages, tools=tools)
print("===回复===")
print(chat_response.choices[0].message.content)
执行结果:
===get_n_day_weather_forecast===
[{'date': '2023-04-01', 'location': '深圳市南山区', 'temperature': '20°C', 'description': '晴朗'}, ...]
===回复===
未来 5 天深圳南山区的天气情况如下:
- 4 月 1 日:晴朗,温度 20°C
...
智能体的开发框架
2024 年开发 AI 智能体比初期方便许多。随着需求火热,智能体框架层出不穷,抽象封装高频模块(记忆、规划、RAG、大模型调用)。使用框架可快速搭建智能体。
根据 awesome-ai-agents 整理,开源和闭源框架在自定义智能体、编码、研究、数据分析、多智能体等领域均有代表性产品。

上文提到的 MetaGPT 是一个多智能体框架。多智能体框架帮助开发由多个不同职责智能体组合的系统。例如开发软件团队,包含开发(coder)、测试(tester)、评审人(reviewer)三个智能体,各司其职协作。

智能体开发最佳实践
安全性考量
智能体拥有执行工具的能力,必须考虑安全性。防止 Prompt Injection 攻击,限制智能体可访问的工具范围,对敏感操作增加人工确认环节。确保工具调用的鉴权机制健全,避免凭证泄露。
性能优化
长上下文窗口虽大但成本高昂。合理管理短期记忆,及时清理无用信息。对于长期记忆,采用高效的向量检索策略,减少延迟。批量处理工具调用以减少 API 请求次数。
评估指标
评估智能体表现需关注任务完成率、响应时间、资源消耗及输出质量。建立自动化测试集,模拟真实场景验证智能体的鲁棒性。定期复盘失败案例,优化提示词和工具配置。
展望
随着大模型百花齐放,LLM 支持更长上下文、更大参数规模,推理能力愈发强大。基于大模型搭建的智能体能力边界不断突破。通过智能体技术,我们可以创建 Copilot、DB-GPT 等各种 AI 应用。AI 应用将快速全面重构软件形态和交互方式,提升人类生产效率。
智能体技术正处于快速发展期,开发者应关注最新框架动态,深入理解底层原理,构建安全、高效、可靠的智能应用。