别再让业务代码直调大模型了:构建企业级 AI Agent 的六层架构
很多团队做 AI Agent(智能体)的第一步,是写几行代码去调模型 API。
这没错。
但如果你要把它放进企业生产环境,这一步最多只完成了 20%。
真正麻烦的东西在后面:
-
谁能调用?
-
调多少次?
-
超时怎么办?
-
工具能不能越权?
-
上下文丢了怎么办?
-
成本怎么归集?
-
返回 200 但答案错了,谁来发现?
很多企业第一次接入大模型时,以为自己在做“智能应用”。上线以后才发现,自己只是把业务系统和模型 API 用一根细线绑在了一起。
这不是生产级架构。
这更像摆地摊:能跑,但经不起流量、权限、异常、成本和审计。
我更建议把企业级 AI Agent 拆成六层:
-
入口层 Gateway(网关)
-
编排层 Orchestration(编排)
-
模型层 Model(模型)
-
工具层 Tooling(工具)
-
记忆层 Memory(记忆)
-
观测层 Observability(可观测)
请求先进网关,完成鉴权、限流和会话路由;再进入 Planner(规划器)拆任务;Executor(执行器)调模型和工具;Memory(记忆)读写上下文;最后由安全模块和结果聚合器返回答案。
这才是一个 Agent 能长期在线、持续迭代、可治理的基本骨架。

一、入口层:别让业务系统直接裸调模型
企业接入大模型时,最容易被低估的是 API 治理。
如果每个业务服务都自己保存密钥、自己调用模型、自己做重试,问题很快就会失控。
常见后果是:
-
密钥散落在多个服务里
-
某个业务突然打爆 Token
-
在线客服和离线摘要抢同一组额度
-
模型供应商故障时没有降级
-
成本账单只知道总数,不知道谁花的
所以第一层不是模型,而是网关。
1. 统一鉴权与会话路由
入口层要做三件基础事。
第一,统一身份。
JWT、OAuth2.0、API Key 都可以接进来,但进入 Agent 系统后,最好统一成内部身份模型。
这个身份至少要区分:
-
租户
-
团队
-
用户
-
应用
-
会话
这样后面做权限隔离、成本归集、审计追踪,才有基础。
第二,统一限流。
不要只看 QPS。
Agent 系统更应该同时看:
-
RPM:每分钟请求数
-
TPM:每分钟 Token 数
-
并发数
-
单请求最大 Token
-
单会话最大预算
在线请求和离线任务也要分开。
客服问答、实时助手这种请求,应该优先保障延迟。批量摘要、离线分析这类任务,可以进入低优先级队列。
第三,会话路由。
Agent 和普通接口不一样。
它不是一次请求一次响应那么简单,而是有会话状态、有工具调用、有中间结果。
所以网关需要把同一用户、同一任务、同一会话路由到正确的上下文里。
否则你会遇到一个很典型的问题:用户上一轮刚交代完背景,下一轮 Agent 像失忆了一样重新开始。
2. 智能路由与故障转移
生产系统不能押注单一模型。
一个更稳的设计是:
-
默认模型处理常规任务
-
高复杂任务走强模型
-
低价值批处理走便宜模型
-
主模型超时后自动切备用模型
-
单模型不可用时降级到保底能力
这不是“模型越多越好”。
关键是把模型路由规则集中在网关和模型层,而不是散落在业务代码里。
业务服务只说:我要完成这个任务。
至于用哪个模型、预算是多少、失败怎么降级,应该由 Agent 平台统一处理。
3. 通用 Model Gateway 模式
企业不应该让业务代码直接散点调用模型 API。
更合理的模式是:
业务系统 → 企业模型网关 → Agent 编排系统 → 模型 / 工具 / 记忆
模型网关的价值不只是转发请求。
它负责把模型调用变成可治理的企业能力:可鉴权、可限流、可审计、可路由、可降级、可计费。
如果没有这一层,后面的 Agent 越强,系统风险越大。
二、编排层:Agent 的核心不是聊天,而是状态机
请求进来以后,真正决定 Agent 会不会走弯路的是编排层。
很多团队一开始会把 Agent 写成一段“大 Prompt + 工具列表 + while 循环”。
能跑。
但一到生产环境就很难维护。
因为真实任务会失败、会重试、会等待人工确认、会调用多个工具、会出现半完成状态。
这时候你需要的不是更长的 Prompt,而是状态机。

1. 为什么 LangGraph 这类框架适合生产编排
LangGraph 的核心价值,不是“又一个 Agent 框架”。
它真正适合生产的地方在于:它把 Agent 流程显式建模成图。
你可以定义:
-
哪些节点负责规划
-
哪些节点负责执行
-
哪些节点负责验证
-
哪些失败进入补偿
-
哪些状态需要人工介入
-
哪些中间状态要持久化
官方文档里,LangGraph 的 Persistence(持久化)能力强调了 checkpoint(检查点)、state(状态)、thread(线程/会话)和 fault-tolerant execution(容错执行)。
这对生产环境很重要。
因为 Agent 最怕的不是一次失败。
最怕的是失败以后不知道已经做到哪一步,只能从头重跑。
2. Planner 和 Executor 要拆开
编排层内部最核心的设计,是把 Planner 和 Executor 拆开。
Planner 负责想清楚:
-
用户到底要什么
-
任务能不能拆
-
哪些步骤需要工具
-
哪些步骤需要模型判断
-
哪些步骤需要安全确认
Executor 负责把事情做完:
-
调模型
-
调工具
-
处理并发
-
控制超时
-
写入中间状态
-
触发异常补偿
这个拆分很关键。
Planner 不应该直接把所有事做掉。Executor 也不应该边执行边临时改目标。
一个稳定的 Agent 系统,必须让“想清楚”和“做下去”分工。
3. 任务原子化与异常补偿
生产级 Agent 里的任务,应该尽量原子化。
比如不要设计一个叫 process_and_upload 的大工具。
更好的方式是拆成:
-
解析文件
-
提取结构
-
生成摘要
-
校验字段
-
上传结果
-
写入日志
这样做有三个好处。
第一,复用性更高。
第二,失败点更清楚。
第三,回滚和补偿更容易。
比如上传失败,就只重试上传;字段校验失败,就回到校验节点;工具权限不足,就进入人工确认。
这就是状态机的价值。
它不是为了让架构图更复杂,而是为了让失败可控。
三、模型层:把模型当资源池,不要当唯一大脑
企业内部经常同时使用多种大模型。
有的适合复杂推理,有的适合低成本批处理,有的适合长上下文,有的适合代码,有的适合多模态。
如果没有统一模型层,团队每次换模型、做 A/B 测试、调整超时策略,都要到处改代码。
模型层的目标只有一个:让应用和具体模型解耦。
1. 多模型动态路由
模型层可以根据任务特征做路由。
常见策略包括:
-
按任务类型路由:代码、摘要、问答、检索、推理
-
按成本路由:低价值任务走低成本模型
-
按延迟路由:实时任务优先低延迟模型
-
按可靠性路由:主备模型自动切换
-
按上下文路由:长文档任务走长上下文模型
这里要注意一点。
不要把所有路由规则写在业务侧。
业务侧只应该表达任务意图。
模型层负责选择最合适的模型资源。
2. 上下文注入不能粗暴堆工具
很多 Agent 性能问题,不是模型不行,而是上下文被浪费了。
尤其是接入 MCP(Model Context Protocol,模型上下文协议)以后,工具生态变丰富了,但也带来一个新问题:工具定义太多。
MCP 的价值,是用标准方式连接 AI 应用和外部系统,让工具、资源、上下文以统一协议暴露出来。
但这不代表你应该把所有工具定义一次性塞进 Prompt。
更合理的方式是分层加载:
-
必用工具集:当前任务一定会用,直接注入
-
候选工具集:先提供摘要,必要时再展开完整 schema
-
高风险工具:只在权限确认后加载
-
低频工具:通过检索或路由动态发现
上下文窗口不是垃圾桶。
它应该只装当前决策真正需要的信息。
3. 模型层的配套机制
生产级模型层至少要补齐这些能力:
-
多厂商 API 统一适配
-
超时控制
-
Token 上限
-
重试策略
-
响应格式校验
-
结构化输出约束
-
成本预算
-
请求与响应脱敏
这层做得越扎实,业务系统越轻。
业务不应该关心某个模型的特殊参数、特殊鉴权和特殊报错。
这些都应该被模型层吸收掉。
四、工具层:Agent 的能力边界,也在这里
工具层决定 Agent 能做多少事,也决定它能闯多大祸。
它负责连接外部系统:
-
文件系统
-
数据库
-
内部 API
-
工单系统
-
代码仓库
-
浏览器
-
命令行
-
企业知识库
工具接得越多,Agent 越像一个能干活的人。
但同时,风险也越大。
1. MCP 解决的是工具接入标准化
MCP 可以理解成 Agent 和外部工具之间的一套标准连接协议。
它的核心价值是:
-
工具不再硬编码到 Agent 里
-
工具可以被动态发现
-
每个工具用清晰的输入输出 schema 描述
-
Agent 可以在运行时理解工具能力
-
不同工具服务可以独立演进
这对企业很重要。
因为企业内部工具太多了。
如果每接一个系统都为某个 Agent 单独写一套适配,很快就会变成维护地狱。
MCP 至少把这件事往标准化方向推了一步。
2. 工具安全三原则
工具层一定要守住三条线。
第一,原子化。
每个工具只做一件事。
例如 file_upload、query_order、create_ticket。
不要做一个万能工具,让 Agent 传一个自然语言指令进去随便执行。
第二,安全封装。
Agent 不应该直接拿到底层系统的全量权限。
更好的方式是通过代理层限制:
-
可访问资源
-
可执行动作
-
可调用时间
-
可处理数据范围
-
是否需要人工确认
高风险工具必须进入沙箱或审批流。
比如删除数据、发送邮件、执行命令、提交代码、调用支付,都不能默认放行。
第三,版本管理。
工具不是 Prompt 里的临时文字。
它是生产接口。
所以所有工具 schema、权限、参数和行为变更,都应该走版本管理和 CI/CD。
否则今天 Agent 调的是一个参数,明天工具悄悄变了,事故会非常隐蔽。
五、记忆层:不要让用户每天重新教 Agent
跨会话记忆,是很多 Agent 产品体验的分水岭。
用户最烦的不是 AI 偶尔答错。
而是昨天刚讲清楚的偏好、背景、项目约束,今天又要从头说一遍。
这说明系统只有上下文,没有记忆。

1. 上下文窗口不是长期记忆
大多数 Agent 的“记忆”,其实只是当前会话上下文。
窗口一关,就归零。
上下文窗口适合保存短期信息,比如:
-
当前问题
-
当前文件
-
当前步骤
-
最近几轮对话
但它不适合保存长期偏好、稳定事实和企业知识。
原因很简单:
-
容量有限
-
成本高
-
容易被噪声污染
-
无法跨会话可靠复用
所以记忆层必须独立出来。
2. Mem0 + Easysearch 的典型链路
Mem0 的定位很直接:给 AI Agent 提供跨会话持久化记忆。
如果结合 Easysearch 这类向量检索能力,可以把记忆拆成读写两条链。
写入链路:
Agent 在任务结束或用户明确表达偏好时,调用 add_memories。
MCP Server 接收文本后,做清洗、去重、向量化,然后写入 Easysearch。
读取链路:
下一次用户提问时,Agent 调用 search_memory。
系统把问题向量化,在 Easysearch 里做 kNN(近邻)检索,再把最相关的记忆注入 Prompt。
这套链路的好处是:
-
记忆不再依赖当前上下文
-
可以跨会话复用
-
可以本地化部署
-
LLM 和 Embedding 模型可替换
-
企业可以控制数据边界
3. 记忆要分层,不要什么都记
记忆层最容易犯的错误,是把所有东西都存进去。
这会让 Agent 越用越糊。
我建议至少分三层:
|
记忆类型 |
存什么 |
放哪里 |
|---|---|---|
|
短期会话记忆 |
当前任务状态、最近上下文 |
会话上下文 / Checkpoint |
|
中期用户记忆 |
偏好、习惯、稳定约束 |
Mem0 / 向量库 |
|
长期企业知识 |
制度、流程、产品文档、历史方案 |
企业知识库 / RAG 系统 |
还有一条很重要:
记忆不是日志。
日志记录发生过什么。
记忆只保存未来还会用到的稳定事实。
如果把临时过程、错误输出、一次性任务全塞进记忆,Agent 迟早会被自己的历史污染。
六、观测层:Agent 返回 200,不代表它做对了
传统 Web 服务监控,看 HTTP 状态码、延迟、错误率,基本能判断系统健康。
Agent 不一样。
它可能返回 200。
但业务答案是错的。
它可能没有报错。
但调用了错误工具。
它可能按时返回。
但成本高得离谱。
所以观测层不是可选项,而是生产级 Agent 的基础设施。

1. 三类可观测信号
Agent 系统至少要收集三类信号。
第一类,执行指标。
包括:
-
请求延迟
-
Token 消耗
-
模型调用次数
-
工具调用次数
-
工具成功率
-
重试次数
-
单请求成本
这些指标告诉你:系统跑得贵不贵、慢不慢、稳不稳。
第二类,决策过程。
包括:
-
Planner 生成了哪些步骤
-
Executor 调用了哪些工具
-
工具参数是什么
-
哪一步失败
-
哪一步重试
-
哪些上下文被注入
这些信息告诉你:Agent 为什么这样做。
没有这部分,你只能看到结果,看不到路径。
第三类,业务影响。
包括:
-
任务完成率
-
用户满意度
-
人工接管率
-
错误恢复率
-
关键业务字段准确率
这部分最难,但也最重要。
因为企业真正关心的不是“模型调用成功率”,而是“业务任务有没有完成”。
2. 生产级工具栈怎么搭
现在比较稳的组合是三层。
第一层,Agent 原生追踪。
比如 LangSmith 可以记录 Agent 的 trace(追踪)、run(运行)、线程、评估和反馈。
这适合研发团队分析:某一次 Agent 为什么做错。
第二层,通用可观测标准。
OpenTelemetry 已经有 GenAI(生成式 AI)语义约定,用来描述模型请求、Token、系统、操作、事件等信息。
这意味着 Agent 不必成为企业监控体系里的孤岛。
你可以把它接进已有的 Prometheus、Jaeger、Grafana 或内部监控平台。
第三层,业务评估。
这部分通常要结合企业自己的评测集、人工反馈和线上抽检。
例如:
-
客服回答是否命中标准答案
-
报告生成是否包含关键字段
-
代码修改是否通过测试
-
工单分类是否符合人工标签
Agent 的质量评估,不能只靠模型自评。
3. 关键指标要从第一天埋好
如果只能先做一组指标,我建议从这几个开始:
-
P95 / P99 延迟
-
单请求 Token 成本
-
工具调用成功率
-
任务完成率
-
重试率
-
人工接管率
-
会话完成度
-
高风险工具调用次数
这些指标会直接决定你能不能放心把 Agent 放进生产。
没有观测层,Agent 出问题时,你很难定位:
-
是模型选错了?
-
是工具参数错了?
-
是记忆污染了?
-
是 Planner 拆错了?
-
是网关路由错了?
观测层的本质,是给 Agent 装上黑匣子。
七、六层不是堆技术,而是分清责任
把 Agent 拆成六层,不是为了画一张复杂架构图。
而是为了分清责任。
入口层回答:谁能进来,怎么控流,怎么路由。
编排层回答:任务怎么拆,状态怎么转,失败怎么补偿。
模型层回答:用哪个模型,花多少钱,超时怎么办。
工具层回答:能调用什么,权限多大,怎么安全执行。
记忆层回答:什么值得长期保存,什么时候取出来。
观测层回答:系统到底做了什么,质量如何,哪里出错。
总的来说就是:
大模型负责生成能力,六层架构负责让生成能力进入生产。
没有这六层,Agent 只是一个会聊天的接口。
有了这六层,它才有机会成为企业流程里可以长期运行、可以审计、可以优化、可以扩展的生产系统。
附录:六层架构速查表
|
层级 |
核心职责 |
关键组件 / 技术 |
生产级要点 |
|---|---|---|---|
|
入口层 |
统一鉴权、限流、路由 |
JWT / OAuth2.0、令牌桶、会话路由、模型网关 |
在线 / 离线任务分离、租户隔离、成本归集 |
|
编排层 |
任务规划、状态管理、错误恢复 |
LangGraph、Planner、Executor、Checkpoint |
原子化任务、状态持久化、失败补偿 |
|
模型层 |
多模型统一接入 |
模型路由、语义路由、预算路由、结构化输出 |
应用与模型解耦、超时和 Token 上限 |
|
工具层 |
标准化工具调用、安全执行 |
MCP Server、JSON Schema、RBAC、沙箱 |
原子工具、权限控制、版本管理 |
|
记忆层 |
跨会话持久化记忆 |
Mem0、Easysearch、kNN 检索、RAG |
短期 / 中期 / 长期记忆分层,避免记忆污染 |
|
观测层 |
全链路追踪、质量评估 |
LangSmith、OpenTelemetry、Prometheus、Jaeger |
Trace、成本、工具成功率、任务完成率 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)