智能体与 Agentic AI 正受到广泛关注。这一概念很有价值,开发难度也高于普通 LLM 应用。基于 LLM 的智能体可以利用模型推理能力,动态决定采取什么行动、使用哪些工具,以及何时停止。本课介绍智能体架构、决策循环,以及 LangGraph 等框架如何帮助构建更可靠的智能体。
什么是 AI 智能体?
简单来说,AI 智能体使用 LLM 决定应用的控制流程。传统 LLM 应用通常具有预定步骤。例如,前几个 Sprint 的 RAG 问答系统可能始终先检索相关文档,再让 LLM 阅读并回答。智能体则可以自主选择下一步:分析输入和上下文,决定应当做什么,再通过工具或 API 执行任务,无需持续的人类指导。它能够围绕目标动态组织工作流程。
智能体的关键特征包括自主性与推理能力。它可以处理分支决策,按需要调用外部工具或函数,并持续迭代直到达成目标。
智能体决策循环
智能体自主执行任务的核心,是持续的 Think–Act–Observe 循环,即思考、行动、观察。它使系统能够处理多步骤任务,并根据中间结果调整行为。
- 思考:模型根据上下文窗口中的信息分析当前情况,包括用户请求、上下文、以往交互记忆和此前行动结果,判断下一步该做什么。实际过程中,模型可能在内部推理时考虑可用工具或解决方法。
- 行动:根据判断选择操作,例如调用搜索 API、计算器或数据库查询,也可能认为信息已经足够,直接回答。应用随后执行所选操作。调用工具时,提供必要输入,通常由 LLM 组织;生成最终答案时,将答案返回用户。
- 观察:取得操作结果,例如搜索结果或计算输出,写入状态或记忆。模型检查新信息,判断是否更接近目标,或是否已经足够回答。
观察所得的信息进入下一轮思考,循环继续。智能体持续执行思考 → 行动 → 观察,直到判定目标完成,或继续行动已无足够价值。
循环设计使单个智能体能够处理多种用户意图。例如,面对复杂问题,它可能先判断需要查询数据库,调用搜索工具,观察结果,再结合新上下文决定下一步,必要时继续使用其他工具,直到能够回答。
以下伪代码展示基本循环:
state = {"messages": [{"role": "user", "content": user_question}]}
while True:
# 1. 思考:LLM 决定下一步
output = LLM(state) # 将 state 中的对话与历史提供给 LLM
if output.indicates_tool_use:
tool_name, tool_input = parse_tool_call(output)
# 2. 行动:执行选定工具
tool_result = call_tool(tool_name, tool_input)
# 3. 观察:将工具结果加入 state
state["messages"].append({"role": "tool", "content": tool_result})
# 带着 state 中的新信息继续循环
else:
# 输出为最终答案时结束
answer = output.final_answer
break
print("Agent's answer:", answer)
推理循环允许智能体自行将复杂任务分成较小步骤,按需要使用外部信息,处理单次 LLM 响应不足以完成的任务。它适合多跳问答、工具增强推理,以及中间结果决定后续行动、无法预先确定完整路径的场景。
重要提醒:智能体通用程度增加时,复杂任务的可靠性可能更难保证;推理循环较长时,达到预期结果的准确性也可能下降,需要结合具体任务进行评估。
LLM 智能体的主要组成
上述智能体需要工具、记忆和 LLM 推理引擎共同工作。架构图中也经常出现规划组件;许多实现将模型逐步推理视为规划,并加入最大思考轮数等限制。
LLM:推理引擎。模型在循环中产生判断并决定行动。效果高度依赖模型能力,以及能否通过提示词让它遵循预期格式。例如:“你是一个可以使用工具的 AI 智能体。需要时,请按 [TOOL_NAME]: [INPUT] 输出行动;否则直接回答问题。”提示词引导模型选择行动或回答。如果自行实现工具调用,可以用 Pydantic 模型定义结构化输出,包含调用指令。许多现代 LLM 也原生支持 tool use,也就是前一 Sprint 介绍的 function calling,直接返回结构化工具调用。
工具。工具是外部函数或 API,使智能体能够获取信息或执行单靠文本生成无法完成的任务,例如网页搜索、数据库查询、计算、代码执行、天气服务或其他自定义 API。工具扩展了模型训练知识之外的能力,也通常有助于减少幻觉。工具一般实现为可调用函数;LLM 根据用户需求和中间结果,决定是否调用、何时调用以及参数。例如,数学问题使用计算器,近期新闻使用搜索。工具输出成为下一轮观察内容。
工具接口设计很重要,需要清楚描述函数、参数及可能输出,让模型知道工具用途和调用方式。LLM 编排框架能够管理工具描述、执行,以及把结果传回推理循环,减少手动处理工作。
记忆。智能体通常需要跨循环轮次,乃至跨对话或会话保留信息。记忆使它能够利用此前步骤的结果,主要分为两类:
- 短期记忆,也称工作记忆:单次任务或查询期间保存的信息。循环中 state 累积的消息和观察结果都属于此类。每轮将先前对话、工具结果加入提示词,让模型知道已经尝试过什么、发现过什么。短期记忆通常位于提示词或内部状态对象中,任务完成后重置。
- 长期记忆:跨独立会话或长时间保存的信息,例如此前对话中的用户事实,或上周发生的事件。可以通过向量数据库或专门记忆服务保存,需要时检索。单次会话中可能不那么重要,但智能体长期与同一用户、或与其他智能体反复交互时,长期记忆十分重要。
记忆管理需要兼顾保留重要信息与上下文窗口容量。可以概括旧事件,或检索已存信息;后续专门章节将进一步讨论。
规划与停止条件。规划是为复杂目标制定多步骤处理方式的能力。许多智能体在每轮思考中隐式规划;一些架构则独立设置规划步骤,执行前列出任务。Deep Research 智能体是例子:先规划报告结构,再用子智能体分别研究各部分。无论采用哪种形式,都要决定何时结束规划、开始行动,以及何时结束整个循环。
智能体认为信息足够或任务完成后,应生成最终答案并停止。模型常通过特殊 token 或格式表示完成,例如将 Pydantic 模型中的专用字段设为 True。调节停止条件,防止无限循环或过早结束,是架构设计的一部分。
LLM 智能体由能够推理与决策的模型、可选工具、保存历史的记忆或状态,以及连接这些组件的决策循环组成。本周将深入研究各个部分。
智能体架构与模式
智能体系统设计模式将在下一周进一步讨论。本节介绍主要面向单个智能体的高层架构。
交给 LLM 的控制范围可以不同。最简单的形式只做一次决策;更复杂的形式处理多个步骤与分支。常见模式包括:
路由智能体:单步决策。每轮只做一次选择。例如,检查用户查询,决定直接回答,还是将请求交给运行 RAG 的子链。LLM 只负责路由或分类,然后结束。其控制范围较小,通常在预定选项中选择,适合把查询交给合适知识库或能力。输出采用系统能够直接解释和执行的结构。
ReAct 与工具智能体。更通用的架构支持多步骤决策和工具调用。ReAct(Reason + Act)让 LLM 结合推理与行动完成任务。例如,模型判断需要搜索 X 的相关信息,并产生搜索调用;系统执行后返回观察结果,模型继续循环。ReAct 使模型输出既包含推理内容,也能包含系统可执行的行动。现代智能体常在显式或内部实现中采用这种方式。
这与前面的决策循环基本一致:LLM 获得连续决策能力,按需要使用多个工具,并利用记忆追踪已完成步骤和任务数据。它支持比单轮回答更灵活的动态问题求解。
自我反思与纠正。多步骤智能体可以进一步检查自身输出质量并调整。例如,完成解答后审视答案,发现可能错误或不完整时,尝试其他方式,再次循环或返回先前步骤修正。这通常称为 Reflection 或 Reflexion 模式。
- 反思步骤
- LLM 根据已有回答产生改进后的回答。
- 改进循环
- 改进后的回答可以再次进入反思步骤,最多循环 k 次。
分阶段阅读 · 2 个阶段
多智能体系统。高级场景中,多个智能体可以合作或分工,例如一个负责规划,另一个执行,或并行处理不同子任务。各智能体通常仍有自己的循环,通过共享记忆或协调器通信。它适合 Deep Research 等复杂工作流。本周不深入多智能体配置,但这是值得关注的发展方向。
选择架构时,需要平衡 LLM 的自主范围与系统约束。路由或单次工具调用较易控制和解释;自由的多步骤智能体更灵活,行为也更难预测。LangGraph 等现代框架已为这些模式提供抽象,减少从头实现的工作。