智能体
Agent 不是"一次 prompt 出结果",而是一个可循环、可决策、可调用外部系统的程序。它将 LLM 作为核心控制器,通过感知-推理-行动的循环,自主完成复杂任务。Agent 的本质是用 LLM 替代传统编程中的硬编码逻辑,让应用具备动态规划和自适应能力。
核心架构
Agent 由四个核心组件构成:大脑(LLM)、感知(输入处理)、记忆(状态管理)、工具(外部能力)。大脑负责理解任务、规划步骤、做出决策;感知将用户输入、环境信息转换为 LLM 可理解的格式;记忆维护对话历史、中间结果、长期知识;工具桥接 Agent 与外部世界,执行数据库查询、API 调用、文件操作等。
与传统程序的关键区别在于决策的动态性。传统程序的逻辑是预先编写的 if-else 分支,Agent 的决策是 LLM 根据上下文实时生成的。面对"帮我订一张去北京的机票",传统程序需要解析出目的地、调用特定 API;Agent 则会分析"需要查航班 → 比较价格 → 选择最优 → 下单"这一系列动作,并自主选择执行哪些工具。这种灵活性让 Agent 能处理未被预定义的场景。
ReAct 模式
ReAct (Reasoning + Acting) 是最经典的 Agent 框架。它交替执行推理和行动,在每一步都显式展示思考过程。典型的 ReAct 循环:用户提问 → LLM 生成"Thought:我需要搜索信息" → 执行搜索工具 → LLM 分析结果生成"Thought:根据搜索结果,答案是..." → 给出最终回答。这种模式的优势在于可解释性强,用户能看到 Agent 的决策链路,出错时容易定位问题。
实现 ReAct Agent 的关键是提示词设计。Prompt 需要包含工具列表(每个工具的名称、描述、参数)、输出格式(Thought、Action、Action Input、Observation 的模板)、停止条件(给出最终答案时的标记)。LLM 通过学习这些模式,学会在合适的时机调用工具,解析工具返回的结果,继续推理或终止。
# ReAct Prompt 示例
"""
Available tools:
- Search: 搜索网络信息,输入 query
- Calculator: 计算数学表达式,输入 expression
Use the following format:
Thought: 你应该思考要做什么
Action: 工具名称
Action Input: 工具输入
Observation: 工具返回结果
... (重复 Thought/Action/Observation)
Thought: 我现在知道最终答案了
Final Answer: 答案内容
"""工具调用
工具定义的质量直接影响 Agent 能力。工具描述需要清晰说明功能和参数,"搜索:根据关键词搜索网络信息"比"搜索工具"更有用。参数类型和约束应该明确,query: str 不如 query: 搜索关键词,长度不超过 50 字。工具返回格式要结构化,JSON 便于 LLM 解析,纯文本需要明确字段分隔符。
常见工具类型包括信息获取(搜索 API、数据库查询、文件读取)、信息处理(代码执行、数据分析、格式转换)、外部交互(发送邮件、调用 API、界面操作)。工具的粒度需要权衡,太粗("帮我完成这个任务")失去灵活性,太细("移动鼠标到坐标")增加规划复杂度。最佳实践是按业务逻辑抽象,"搜索用户信息"比"执行 SQL 查询"更适合高层 Agent。
工具执行有同步和异步两种模式。同步模式下 Agent 等待工具完成再继续,适合快速操作(计算、查询)。异步模式下 Agent 可以同时发起多个工具调用,等待结果汇总,适合并行任务(多数据源查询、批量处理)。异步实现需要考虑超时处理、错误恢复、结果聚合。
多 Agent 协作
单个 Agent 面临能力瓶颈和专注度问题。多 Agent 系统通过分工协作,让每个 Agent 专注于特定领域,通过通信协调完成任务。经典模式是主从架构,主 Agent 负责任务分解和结果整合,从 Agent 执行具体子任务。"写一份行业分析报告"可以分解为搜索 Agent 收集数据、分析 Agent 处理数据、写作 Agent 生成报告。
AutoGen 是微软推出的多 Agent 框架,它定义了可对话的 Agent 实体,通过消息传递协作。每个 Agent 有自己的角色、目标、约束,Agent 之间可以自由对话,直到任务完成。典型场景是代码生成,User Agent 描述需求,Assistant Agent 生成代码,Coder Agent 审查代码,形成反馈循环。AutoGen 的优势在于解耦了 Agent 定义和执行逻辑,可以灵活组合不同的协作模式。
通信机制是多 Agent 系统的核心。共享黑板模式所有 Agent 向同一个消息中心发布和订阅消息,适合广播式协作。点对点模式 Agent 直接发送消息给特定对象,适合明确分工的场景。混合模式结合两者,既有共享的上下文,也有私密的通信通道。消息格式需要标准化,包括发送者、接收者、内容、类型、时间戳等元数据。
记忆机制
Agent 的记忆分为短期记忆(当前对话的上下文)和长期记忆(跨会话的知识积累)。短期记忆通过消息历史实现,但上下文窗口限制导致无法无限增长,需要压缩策略:只保留最近 N 轮对话、用 LLM 总结旧对话、根据重要性选择性保留。长期记忆使用向量数据库存储,每次对话结束后将关键信息(用户偏好、任务结果、经验教训)存入,后续对话时检索相关记忆。
RAG (Retrieval-Augmented Generation) 是长期记忆的标准实现。将 Agent 的对话历史、执行日志、用户反馈作为文档库,用 Embedding 模型向量化存储。执行任务前,先用当前查询检索相关记忆,将检索到的内容注入 Prompt,让 Agent 基于历史经验决策。记忆的质量取决于数据清洗(去除无关信息)、标签管理(时间、任务类型、结果)、更新策略(过期记忆清理、冲突信息处理)。
反思机制是记忆的高级应用。Agent 完成任务后,不是简单存储结果,而是进行自我评估:"哪里做得好、哪里可以改进、下次如何避免同样问题"。这种反思形成的经验比原始数据更有价值,是实现 Agent 自我进化的关键。反思可以用另一个 LLM 专门负责,避免主 Agent 的自我美化倾向。
挑战与局限
Agent 的可靠性是最大挑战。LLM 的非确定性导致同一任务可能产生不同决策链,成功率和质量不稳定。错误会累积,早期步骤的错误判断会导致后续动作全部偏离。缓解方法包括:多路径探索(同时尝试多个策略,选择最优)、人类介入(关键决策点请求确认)、回滚机制(保存中间状态,失败时回退)。
调试 Agent 比调试传统程序更困难。无法像断点调试那样追踪执行流,因为决策是 LLM 动态生成的。可视化的执行轨迹(每个 Thought、Action、Observation)是必要的,LangSmith、AutoGen 的可观察性工具帮助开发者理解 Agent 的决策过程。日志记录应该包含输入、输出、中间状态、工具调用、错误信息,便于事后分析。
成本是规模化应用的障碍。每个决策步骤都需要一次 LLM 调用,复杂任务可能需要几十轮,token 消耗和延迟显著高于单次问答。优化方向包括:工具调用的缓存(相同输入直接返回结果)、增量处理(只更新变化的部分)、模型选择(简单步骤用小模型,关键决策用大模型)。
Agent 的安全性也不容忽视。工具调用可能被恶意利用(SQL 注入、文件删除),需要严格的参数校验和权限控制。Prompt 注入攻击通过精心构造的用户输入,让 Agent 执行非预期操作。防御方法包括输入过滤、沙箱隔离、操作审计。对于金融、医疗等敏感领域,Agent 的决策必须有可追溯性和可解释性。
Agent 代表了 AI 应用从"被动响应"到"主动行动"的范式转变。虽然目前还存在稳定性和成本问题,但随着模型能力提升和工程实践积累,Agent 将在自动化、个人助理、企业决策等场景发挥越来越大的作用。未来的 Agent 可能具备更强的规划能力、学习能力、协作能力,成为真正的数字智能体。