type
status
date
slug
summary
tags
category
icon
password
最近一直被各种层出不穷的 Agent 框架和名词困扰,看到 Langchain 社区发的一篇blog,解开了我许多疑虑,传送门
Agent 系统深度解析:从定义到构建挑战
1.核心定义:Agent 到底是什么?
关于“Agent”的定义行业内尚无统一标准。相比 OpenAI 宏大但模糊的定义,Anthropic 提出了一个更具技术性和实用性的框架,将所有相关系统统称为 “代理系统 (Agentic Systems)”,并在此之下做出了一个关键的架构区分。
1.1 工作流 (Workflows) vs. 代理 (Agents):一个关键区别
特征 | 工作流 (Workflows) | 代理 (Agents) |
控制方式 | 通过预定义的代码路径来协调 LLM 和工具。 | LLM 动态地指导自身的流程和工具使用。 |
确定性 | 流程更具确定性,可预测性高。 | 流程更具灵活性,由模型驱动决策。 |
适用场景 | 适用于任务路径明确、重复性高的场景。 | 适用于需要大规模、灵活决策的复杂任务。 |
💡 核心洞察 在实际生产环境中,绝大多数成功的“代理系统”都是 工作流和代理的混合体。开发者应优先选择最简单的解决方案(通常是工作流),仅在必要时才引入更复杂的代理模式。
1.2 “代理性 (Agentic)”:一种更实用的视角
与其陷入“一个系统是不是 Agent”的二元争论,不如采纳吴恩达 (Andrew Ng) 提出的“代理性”概念,即 将系统视为具有不同程度的代理特性。这种视角更能反映现实世界中混合系统的本质。
2.构建可靠 Agent 的核心挑战
构建 Agent 的原型很简单,但要打造一个能支撑关键业务、稳定可靠的 Agent 则极其困难。阻碍 Agent 进入生产环境的首要原因是 “性能质量”,也就是可靠性问题。
2.1 核心难题:确保 LLM 获得正确的上下文
Agent 表现不佳的根本原因通常是 “LLM 出错了”。而 LLM 出错,更常见的原因是传递给模型的上下文不正确或不完整。
📌 构建可靠代理系统的难点,在于确保 LLM 在每一步都拥有最恰当的上下文。一是控制输入给 LLM 的精确内容,二是执行适当的步骤以生成相关的内容。。
导致上下文出错的常见原因包括:
- 📄 系统提示 (System Prompt) 不完整或模糊。
- 🗣️ 用户输入 (User Input) 的意图不明确。
- 🔧 无法调用到正确的工具,或工具描述不清晰。
- ➡️ 没有传入关键的历史信息或中间步骤结果。
- 📦 工具返回的响应格式不佳,LLM 难以解析。
3.技术难点深度剖析
- 核心挑战:从“模型调优”到“跑通系统”的思维转变
- 模糊的需求:用户的意图往往是不明确的。
- 异步的流程:多个Agent或工具的调用是异步的,需要协调管理。
- 不确定的响应:模型(LLM)的输出本身具有不确定性,工具(API)的调用也可能随时失败。
许多优秀的算法工程师在转型做Agent时都会遇到瓶颈,根源在于他们面对的问题从“如何让模型更准”变成了“如何让一个充满不确定性的系统稳定运行”。
传统开发(如推荐算法)大多是与逻辑清晰、数据结构稳定的固定接口打交道。而Agent项目,尤其是多Agent系统,面对的是:
- Agent项目的具体技术与工程难点
- 任务链的脆弱性 (Brittleness of the Task Chain)
- 核心矛盾:问题的核心不再是“模型精度”,而是“流程的稳定性和可靠性”。你需要从一个和稳定接口打交道的算法工程师,转变为一个能驾驭由多个模糊、异步、不确定模块组成的复杂系统的“Builder”。
- 具体体现:你面对的不再是单一模型,而是一个任务链条。上下文如何在Agent间传递?是集中存入Redis,还是点对点传输?一个prompt或API调用出错,如何设计failover机制?这些都是“系统感”的考验。
- 规划与推理层 (Agent的“大脑”)
- 长期规划与分解 (Long-Horizon Planning): LLM在长链条任务中容易“迷失”目标。如何让Agent稳定地将一个复杂任务(如“规划一次家庭旅行”)分解成上百个可执行的子步骤,并始终保持对最终目标的对齐,是巨大的挑战。
- 自我修正与反思 (Self-Correction & Reflection): 当外部环境变化或自身执行出错时,Agent需要能感知失败、分析原因并动态调整计划。这套“反思”机制的可靠性,直接决定了Agent的自主性上限。
- 记忆管理 (Memory Management): Agent需要一套高效的记忆系统,能区分短期“工作台”记忆和长期“知识库”记忆,并能在恰当的时机检索出最相关的信息来辅助决策。
- 上下文管理(Context Management)的混乱
- 问题: 这是流程不顺的“重灾区”。上下文是Agent的记忆,如何高效、准确地传递上下文是核心。比如在一个多Agent系统中:
- 是每个Agent之间点对点传递对话历史(Message History)?
- 还是将会话状态集中存储到 Redis 或 Supabase 等外部缓存中?
- 如何处理超长的上下文,在不丢失关键信息的前提下,将其压缩到模型的token限制内?
- 解法: 需要有清晰的数据流(Data Flow)设计。目前较优的方案是采用类似 LangGraph 的状态机思想,将每个Agent看作一个节点,用一个中心化的状态图来管理和传递上下文。
- 交互与执行层 (Agent的“手脚”)
- 工具选择与调用 (Tool Selection & Calling): Agent需要从众多可用工具(API、函数、数据库)中选择最合适的一个,并为其生成正确、合法的参数。这要求模型对工具的功能有极深的理解,并且能处理参数的复杂依赖关系。
Function Calling
和MCP
功能简化了这一点,但工具数量增多后的选择问题依然存在。 - 工具使用的鲁棒性 (Tool Use Robustness): 真实世界的API会超时、会变更、会返回各种预料之外的错误。Agent必须具备极强的容错、重试和错误处理能力,而不能仅是脆弱地调用。
- 环境接地 (Environment Grounding): 对于需要操作UI的Agent,如何将“点击‘下一步’按钮”这个意图,准确地映射到动态加载、布局变化的网页或软件界面上的具体元素,是一个非常棘手的问题。
- 模块间职责不清 (Unclear Module Responsibilities)
- 问题: 在一个多Agent系统中(如“意图理解-检索-生成-润色”的客服系统),每个Agent的职责边界很容易变得模糊,导致它们之间“相互扯皮”,出现意想不到的bug。例如,是检索Agent负责过滤无关信息,还是生成Agent负责忽略无关信息?
- 解法: 需要极强的系统设计能力,在项目初期就清晰地定义每个Agent的输入、输出和核心职责,像设计微服务一样设计Agent。
- 安全与信任的底线 (Agent的“行为准则”)
- 防止破坏性行为: 必须设计无法被绕过的**安全护栏(Guardrails)**和权限管理机制,确保掌握了
删除文件
、执行代码
等高危工具的Agent不会造成无法挽回的损失。 - 成本与资源控制: 必须有“燃料”机制来防止Agent因逻辑错误陷入循环,无限调用付费API导致成本失控。
- 安全对抗与信任: 如何防范指令注入(Prompt Injection)攻击?如何让Agent的决策过程对用户透明,以建立信任?当Agent卡住时,如何优雅地失败并请求人类介入?这些都直接影响用户体验和产品的安全性。
将上述的思维挑战拆解开来,就是以下几个在工程实践中极其棘手的难点:
这是从传统AI开发转向Agent开发的首要门槛,也是许多项目“跑不通”的根源。
这是之前被我忽略、但却是决定Agent能否被社会接受的最重要防线。
八种架构模式:基本单元组合的生产实践
Ahmad 在演讲中详细展示了八种不同的 AI agent 架构模式,每一种都基于基本单元的不同组合方式。这些架构模式不仅展现了基本单元的强大组合能力,更重要的是它们覆盖了当前生产环境中绝大多数的 AI agent 需求。我仔细分析后发现,这八种模式实际上构成了一个完整的 AI agent 设计语言,可以应对从简单问答到复杂推理的各种场景。
第一种是增强型 LLM(Augmented LLM)架构,这是最基础也是最常用的模式。它将 LLM 与 Tools、Thread、Memory 等基本单元组合,形成一个能够调用外部工具、维护对话状态、访问长期记忆的智能 agent。在这种架构中,LLM 不再是一个孤立的文本生成器,而是一个能够感知环境、调用工具、学习记忆的智能体。Ahmad 强调,这种架构的关键在于每个基本单元都是独立的、可替换的,你可以根据具体需求选择最合适的实现。
第二种是提示链和组合(Prompt Chaining & Composition)架构,这种模式通过串联多个专门的 agent 来处理复杂的多步骤任务。Ahmad 演示了一个营销内容生成的例子,包含总结 agent、功能提取 agent 和营销文案 agent。每个 agent 都有明确的职责分工,按照预定的顺序工作,将前一个 agent 的输出作为下一个 agent 的输入。这种设计的巧妙之处在于每个 agent 都可以使用最适合其任务的模型,比如用 Gemini 做总结(因为它在理解和概括方面表现优秀),用 Claude 做推理(因为它在逻辑分析方面更强),用 GPT-4 做编程(因为它的代码生成能力出色)。
第三种是 Agent 路由器(Agent Router)架构,这是我个人最感兴趣的模式之一。在这种架构中,一个智能路由 agent 负责分析用户输入,然后决定调用哪个专门的执行 agent。Ahmad 构建了一个包含三个专门 agent 的系统:总结 agent(使用 Gemini)、推理 agent(使用 DeepSeek Llama 70B)和编程 agent(使用 Claude Sonnet)。当用户问"为什么冬天的白天更短"时,路由 agent 正确识别出这是一个需要科学推理的问题,自动将任务路由给推理 agent 处理。这种架构的价值在于它能够根据任务特性自动选择最优的处理路径,而且每个专门 agent 都可以独立优化和升级。
第四种是并行 Agent(Parallel Agents)架构,这种模式利用现代编程语言的并发能力,同时运行多个 agent 来处理同一个输入的不同方面。在 JavaScript 中,这通过 Promise.all 就能轻松实现。比如,对于一段客户反馈,你可以同时运行情感分析 agent、关键信息提取 agent 和问题分类 agent,然后将结果组合起来形成全面的分析报告。这种并行处理不仅大大提高了效率,还能从多个角度同时分析问题,获得更全面的洞察。
第五种是编排器-工作者(Orchestrator-Worker)架构,这是我认为最具创新性的模式,它模拟了人类团队协作的工作方式。一个编排器 agent 负责分析复杂任务并将其分解为多个子任务,然后分配给多个工作者 agent 并行处理,最后由一个综合 agent 将所有结果整合成最终输出。Ahmad 演示的博客写作例子特别精彩:编排器将"写一篇关于远程工作好处的博客"分解为五个具体子任务:写引言、写生产力部分、写工作生活平衡部分、写环境影响部分、写结论。五个工作者 agent 并行工作,每个专注于自己的部分,最后由综合 agent 将所有部分组合成一篇连贯的完整文章。这种架构的威力在于它可以处理几乎任意复杂度的任务,只要能够有效分解。
第六种是评估器-优化器(Evaluator-Optimizer)架构,这种模式通过持续的评估和优化来提高输出质量,类似于 RLHF(人类反馈强化学习)的简化版本。一个生成 agent 创建初始内容,然后一个评估 agent(通常使用性能最好的 LLM)对结果进行评估,如果不满意就提供具体的改进建议,生成 agent 根据反馈进行优化。Ahmad 演示的生态友好水瓶产品描述例子很有说服力:第一次生成的描述被评估 agent 认为没有很好地针对"环保意识的千禧一代"这个目标受众,评估 agent 提供了非常具体的改进建议,包括应该强调哪些特点、使用什么样的语调等。第二次生成的描述明显更符合目标受众的需求和偏好。
第七种是工具调用(Tool Calling)架构,这使得 agent 能够与外部系统无缝集成,扩展其能力边界。
第八种是记忆型(Memory)架构,这就是我们在演讲开头看到的文档问答模式。
- 作者:SimonSun
- 链接:https://simonsun.xyz//article/llm-12
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章