ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

智能体系统架构落地:隔离、集成与治理的工程实践指南

智能体系统架构落地:隔离、集成与治理的工程实践指南 智能体从“能跑通”到“能上线”中间隔着隔离、集成和治理这三座山。最近我把一套基于大模型的智能体系统从原型推到准生产环境整个调研和落地过程踩了不少坑也把一些技术选型的思路理顺了。这篇文章就是我这次综合调研的记录覆盖智能体系统架构里最难啃的隔离设计、集成方案和治理体系适合正在做Agent平台化、或者准备把智能体接入业务系统的架构师和开发同学参考。1. 智能体系统的整体架构思路拆解1.1 先把“智能体系统”到底由什么组成这个问题说清楚我看到很多人聊智能体架构一上来就画一堆框但落到代码层面全是乱的。我的理解是一个能上生产的智能体系统至少要拆成六层接入层、编排层、技能层、模型层、数据层和基础设施层。接入层负责的就是各种入口Web端、IM机器人、API网关这层的主要工作是协议转换和会话管理。编排层是智能体的大脑所在地负责拆解用户意图、规划子任务、维护上下文状态这层也是Agent框架的核心比如LangChain、Dify这类平台的编排逻辑就主要落在这。技能层就是工具集搜索引擎、数据库查询、内部系统API调用通常以函数调用或插件方式挂载到Agent上。模型层不用多说负责跟大模型通信要考虑多模型路由、上下文窗口管理、Token计算这些事。数据层比较容易被低估它包含向量数据库、历史会话存储、知识库、用户画像数据。最关键的是基础设施层权限控制、日志采集、监控告警、密钥管理、缓存这些不直接产生业务价值但决定了系统能不能稳定跑下去。我在调研时特意拉了一张完整的数据流图从用户请求进来到编排层决定调用哪个工具再到工具结果返回给模型最后生成回答返回给用户。每一段路径都涉及隔离、集成或治理的问题这也就是为什么这个调研标题会把三个维度并列。我建议你也先把自己当前系统的这六层画出来再逐层评估不然很容易陷入“只盯着模型调优忽略周边设施”的误区。1.2 为什么隔离、集成、治理是智能体架构里最容易被低估的三件事先说一个小观察大部分团队在最初搭建智能体时90%的时间都花在“怎么让模型的回答更聪明”上比如调Prompt、换模型、做RAG。但等到真正要上线了问题就集中在三类一个Agent跑挂了影响其他Agent怎么办、Agent怎么稳定地调用公司内部各种系统、以及系统上线之后出了事怎么定位和追责。这三类问题恰恰对应隔离、集成和治理。隔离的本质是故障域限制。就好比一栋楼里的电路总闸跳了不等于全楼停电每个房间要有独立空开。智能体系统里不同业务线的Agent必须跑在独立的环境里不然一个Agent的工具调用陷入死循环整层系统都被拖垮。这里的隔离不只是Python虚拟环境那一层还包括进程隔离、数据隔离、权限隔离、甚至密钥隔离后面我会详细拆。集成解决的则是“怎么让Agent真的能干活”。一个只会聊天的智能体其实没什么用真正有价值的是让Agent能查订单、能提交工单、能调用内部报表系统。但企业内部系统往往很旧接口不规范有些还是上世纪风格的遗留系统把Agent和这些系统打通复杂度远超写几个Prompt。Dify这类平台之所以流行很大程度就是把工具集成这一层做成了可视化配置。治理看起来最“虚”但恰恰是最不能省的。智能体上线后它生成了什么内容、调用了哪些工具、消耗了多少Token、有没有越权访问数据这些都是要能追踪的。没有治理体系的智能体系统本质上就是一个黑盒出了问题只能靠重启这在生产环境里是不可接受的。2. 隔离从环境隔离到权限隔离的四个层次2.1 环境与依赖隔离最基础、也最容易被忽略的一层智能体系统通常不止一个Agent不同的Agent往往有完全不同的依赖。比如一个做文档问答的Agent要装LangChain和向量库客户端另一个做数据分析的Agent要用Pandas和SQL相关的库。如果这些依赖全装在一个Python环境里版本冲突早晚会爆炸。这个道理跟热词里提到的python 安装 隔离是一个意思本质上就是让每个Agent有自己独立的运行环境。具体操作上我最常用的是Python的原生venv加pip freeze做依赖管理简单粗暴。到了容器化阶段每个Agent镜像单独构建用Dockerfile明确锁定依赖版本然后通过容器编排平台管理。有些团队会直接用Conda做隔离也完全可以关键是你得有一套“Agent运行环境”的清单每个Agent用哪个运行时版本、哪些依赖包都要能回溯。这里有个实战建议环境隔离不要只做到包管理这一层还要把环境变量也隔离掉。我踩过的一个坑是两个Agent共用了同一个.env文件结果其中一个Agent在环境变量里配了OpenAI的Key另一个Agent误用了这个Key去调用模型导致成本统计全乱了。从那次以后我规定每个Agent必须有自己独立的配置文件和密钥存储不做任何共享。2.2 进程、运行与故障隔离防止一个Agent拖垮整个系统环境隔离解决的是“装的东西不冲突”但运行时的故障隔离才是更关键的一层。智能体的运行很不确定模型响应可能超时、工具调用可能卡死、Agent可能进入死循环重试。如果没有故障隔离一个失控的Agent可以直接耗尽系统的线程池或者数据库连接池让其他正常的Agent也跟着不可用。我在设计这一层的时候采用了几种手段配合使用。首先是给每个Agent分配独立的进程或者线程池控制最大并发数。其次是给所有外部调用设置超时包括模型调用和工具调用超时之后就熔断掉不让请求无限期挂起。第三是给Agent的运行加上“工作线程配额”类似于限流器某个Agent的并发请求太多时直接排队或拒绝不影响其他Agent。这个思路跟微服务里隔离故障域的套路很相似。我还特意参考了热词里提到的stm32系统架构和漏电隔离这些偏硬件领域的思路——硬件设计里讲究“模拟地和数字地隔离”就是为了防止数字电路的高频噪声污染模拟信号软件系统里也一样一个高负载的Agent进程就是那个“数字地”如果不好好隔离开噪声会传导到整个系统。2.3 数据与隐私隔离多租户场景下绝不能省略的设计数据隔离是智能体系统里最容易被想当然的一层但一旦设计错了后面想改就非常痛苦。我们内部有个销售智能体给不同销售团队提供服务这个Agent会读取CRM里的客户资料。如果没有数据隔离销售A登录后问Agent“帮我汇总一下我这个季度的客户跟进情况”结果Agent返回的是全公司的数据这是严重的事故。做数据隔离时要考虑三个维度存储隔离、逻辑隔离和权限隔离。存储隔离是物理层面上的每个租户的数据放在独立的表或者独立的库中最安全但成本高逻辑隔离是所有数据混在一起通过数据字段里的租户ID过滤成本低但出过一次漏洞就很麻烦权限隔离是结合企业现有的身份体系在Agent工具调用层做鉴权比如Agent要调用CRM接口时必须带上当前用户或角色的身份凭证。我目前比较推荐的是“物理隔离做基础 逻辑隔离做索引 权限隔离做兜底”的组合。具体来说核心敏感数据物理隔离比如每个客户的数据单独加密存储中间层用逻辑隔离做统一的查询入口方便做汇总统计最外层在工具调用时校验权限防止Agent通过Prompt注入拿到越权数据。这里要特别提醒Agent生成的内容会经过模型“加工”已经不是简单的数据库查询了所以数据隔离的边界必须在工具层严格收紧不能光靠数据库权限。2.4 密钥与网络隔离把Agent的触角限制在可控范围内智能体系统天然是要和其他系统交互的但交互范围必须被约束。我会把公司内部的Agent分成两类一类是只处理内部数据的比如企业知识库问答Agent这类Agent的网络访问应该限制在公司内网另一类需要访问外部互联网工具的比如做舆情分析的Agent这类Agent要放在一个单独的子网里并且只放行必要的域名和端口的访问。密钥管理也要单独说。我见过有人把模型API的Key直接写在代码里这是原罪级的操作。智能体系统的密钥应该统一放在密钥管理服务里比如Vault或者云厂商的密钥托管服务。Agent实例启动时从密钥服务拉取对应的Key进程销毁后Key也随之失效。对于那些要对接第三方平台的外部集成场景还要配置IP白名单来限制调用方来源相当于给密钥加了一层网络锁。网络隔离的另一个细节是如果有多个环境开发、测试、生产环境的网络必须完全隔离。我之前在一个项目里就遇到过测试环境的Agent因为网络配置疏忽居然能访问生产数据库这要是跑一个批量查询工具后果不堪设想。你现在如果也在搭智能体系统建议花一个下午专门检查网络策略的配置把生产环境的入站和出站规则全部收敛宁可严格也不要宽松。3. 集成让智能体真正“长”进业务流程里3.1 模型接入与多模型路由不要把自己绑死在一家供应商上模型接入是智能体系统的地基但这里说的不仅仅是调用一个API。在调研里我发现真正成熟的智能体系统几乎都会做多模型路由。因为不同模型在不同任务上表现不同有些模型擅长代码生成有些模型擅长长文档理解有些模型便宜响应快适合做简单问答。让所有的请求都走一个模型既贵又不够聪明。多模型路由的实现上我建议在模型层做一个统一的适配接口比如定义一个IModelClient下面挂OpenAI的客户端、国产模型的客户端、私有化部署的客户端。上层业务只需要传任务类型和上下文由路由层决定到底调用哪个模型。路由策略可以很灵活按任务类型路由、按成本预算路由、按Token消耗路由甚至做简单的A/B测试。还要考虑降级策略。模型服务经常会因为限流或者服务不稳定而不可用如果智能体系统把宝全压在一家供应商上那边一出问题整个系统就瘫了。我目前的方案是把模型供应商分成主备主供应商连续多次超时或返回异常时自动切换到备供应商用户基本无感知。3.2 工具调用集成把内部API包装成Agent能理解的“技能”智能体干活靠的是工具调用而工具调用的本质是把内部系统的能力暴露给Agent。设计这套集成时最核心的一点是不要让Agent直接面对乱七八糟的内部接口。你要为Agent准备一套“技能层”把内部API包装成语义清晰的工具并且用模型能理解的描述来标注每个工具的功能和参数。我举个例子公司的订单系统有一套古老的SOAP接口字段命名非常混乱。你不可能让大模型直接生成SOAP报文去调用它所以我在技能层写了一个“查询订单状态”的工具内部封装了跟订单系统通信的逻辑对外只暴露给Agent两个参数订单号和查询类型。Agent不需要理解SOAP它只需要知道“有个工具可以查订单状态传订单号就行”。这就是集成的意义——把复杂留给实现者把简单留给模型。工具集成的另一个关键点是注册与发现。智能体的工具会越来越多几十个甚至上百个工具之后模型在生成函数调用时根本不知道该选哪个。这时候需要一个工具注册中心对每个工具做标签化管理比如业务域客服、运营、技术、所需权限、预计调用成本、成功率。Agent在决策时优先筛选出跟当前任务相关的工具减少模型的选择噪音。这个思路跟logstash集成自定义插件的逻辑很像插件的注册、加载、配置都要有规范而不是把一段代码硬塞进去就完事。3.3 记忆、知识库与RAG集成数据质量决定回答质量如果你的智能体只是靠大模型的通用知识来回答那它能做的事情非常有限。真正有价值的知识库问答、企业文档问答、个人助理类应用几乎都离不开RAG检索增强生成。但RAG集成这里的坑特别多尤其是“先采集再清洗”这个原则几乎是所有数据治理类工作的通用准则。很多团队在搭建知识库时直接把一堆文档丢进向量库就完事了结果模型回答的质量乱七八糟。问题的根源在于文档没有做清洗和结构化处理。我在做这一层集成时会先对文档做内容解析区分标题、正文、表格、页眉页脚然后用OCR和格式转换工具把PDF、Word统一转成纯文本再按语义切分成合适的块chunk最后才做向量化入库。这个流程做完检索的召回率和准确率会有肉眼可见的提升。记忆集成的维度也要考虑。智能体的记忆不能只靠大模型上下文窗口硬扛长期记忆要存到向量数据库里短期记忆可以放在Redis里会话状态则要持久化到业务数据库。这里我把缓存和记忆分开对待Redis负责短期存储比如最近几轮对话的内容、临时状态信息向量数据库负责用户偏好、历史事实这类长期记忆。用户再次对话时智能体先检索记忆再判断当前任务这样的体验才会顺。3.4 与可观测体系集成智能体的运行状态不能是黑盒智能体系统上线之后怎么知道它跑得好不好答案是必须把智能体接入企业的可观测体系。我在调研里发现很多人只关注“模型返回的内容对不对”完全忽略了对系统健康度的观测。实际上Token消耗、工具调用成功率、会话平均轮数、模型响应延迟这些指标才是一个智能体系统能否稳定运行的核心指标。日志层面除了常规的业务日志还要单独给Agent调用模型和工具的日志加标记。每次模型调用记录Prompt摘要、返回内容的长度、消耗的Token数量、响应耗时每次工具调用记录工具名、入参、出参、错误信息。有了这些结构化日志后续做复盘和优化才有数据支撑。链路追踪方面需要给一次完整的用户请求分配一个Trace ID从接入层到编排层再到工具层全程关联同一个ID这样出了问题可以快速定位到底是在哪一环。我这里还遇到过一个比较有意思的集成场景就是参考idea集成codex这种开发工具链集成的思路把智能体的可观测数据直接集成到团队的IM告警机器人上。比如某个Agent的错误率超过阈值或者Token消耗异常飙升直接把告警推到群里让值班的人第一时间介入。这种集成虽然实现起来不复杂但对运维效率的提升非常明显。4. 治理智能体上线之后真正的较量才刚刚开始4.1 流量与并发治理给模型调用加一道“闸门”智能体系统的流量治理跟传统微服务的流量治理思路是相通的但又有新的特点。传统微服务你关注的是QPS、响应时间、错误率智能体系统你还要额外关注Token消耗和成本。一次复杂的智能体交互背后可能是多轮模型调用加多次工具调用Token消耗是普通接口请求的几十倍甚至上百倍。如果不做治理并发一高API账单能让你吓一跳。做流量治理时我借鉴了Sentinel这种微服务流控组件的思路——给模型API调用和工具调用分别设置限流阈值例如某个Agent每分钟最多调用模型多少次、每天最多消耗多少Token超额后直接返回降级文案或者排队等待。这个阈值按Agent的业务优先级来区分核心业务Agent的配额给足边缘实验性Agent就严格控制成本。排队机制也很重要。大模型的推理速度比普通接口慢得多一次完整响应可能要几秒甚至十几秒。如果同一时间大量并发请求全打到模型API上不仅会因为限流被拒绝还会让每个请求都变慢。我的做法是在模型接入层前加一个请求队列控制同时并发的大模型请求数后面的请求在队列里等待队列满了就直接走降级逻辑。实测下来这个方式能把系统的吞吐和用户体验都稳住。4.2 数据治理先采集再清洗沉淀知识资产智能体系统会产生大量的数据包括用户对话记录、模型反馈、工具调用记录、人工修正记录。这些数据散落在各个模块里如果放着不管那就是一堆垃圾但如果好好治理它们就是让智能体越变越聪明的关键养料。数据处理的第一步一定是采集。所有对话记录、所有工具调用日志、所有用户的显式反馈点赞、点踩、纠错都要采集到一个集中式数据管道里。采集的时候不要做太多筛选宁可多采集也不要漏采集因为后续的特征工程需要足够多的原始数据。这里用的是数据治理要先采集再清洗的原则先有量才有质的可能。第二步才是清洗。清洗要做的内容包括去除敏感信息手机号、身份证号、邮箱等去掉重复样本修正明显错误的结构数据标注低质量回答。清洗完之后的数据才有价值可以用来做模型微调、做Prompt优化、做评估集的构建。我在实际项目中还专门用清洗后的对话数据做了一套“坏case库”每次模型升级都拿这套坏case库跑一遍回归测试看哪些问题被解决了哪些新问题出现了。这里还要注意数据血缘的问题。当智能体根据某份文档生成了一个回答事后用户投诉说这个回答有误你能不能追溯到这个回答依据的是哪份文档的哪个段落如果不能说明你的数据血缘体系还没有建立起来。做一个简单的血缘记录表记录每次回答用到了哪些知识库文档ID、哪些工具返回结果这个表很小但排障时的价值无可估量。4.3 缓存策略既省成本又能提升响应速度模型调用是有成本的而且Token单价不便宜。在调研里我发现很多重复性的问答请求其实没必要每次都去调大模型加一层缓存就能大幅降低成本。比如“公司年假政策是什么”这种高频问题和回答第一次让模型实时回答并缓存后面的相同提问直接走缓存返回响应速度提升好几倍成本也降下来了。但缓存治理不是简单地加一个Redis就完事。模型的回答会过时知识库更新了缓存里的答案就不能再用了。我通常的做法是给缓存设置TTL基础政策类问答可以设置24小时甚至更长的缓存时效性要求高的业务数据就不做缓存或者只做很短的缓存。更精细一点的做法是在知识库更新时主动失效相关缓存利用Redis的键事件通知在有文档更新时删除相关前缀的缓存键。还要考虑缓存语义的匹配。用户提问时写法和口语千奇百怪“带薪年假有几天”和“年假一共可以休几天”意思是一样的但文本不匹配直接按原文匹配缓存大概率命中不了。所以我在做缓存Key时会把用户问题先用模型做一次语义归一化处理生成一个规范化的“意图ID”和关键实体再用这个组合作为缓存Key。这样命中率能提升很多但也意味着多一次模型调用这里需要团队自行权衡。4.4 安全与合规治理智能体的每一个动作都要能审计智能体比普通应用有更大的权力因为它可以替用户执行操作。它能查数据、发邮件、提交订单如果安全管控没跟上后果非常严重。我在安全治理上主要分三个维度来抓身份认证、操作授权、行为审计。身份认证指的是智能体调用工具时必须带上操作者的真实身份。这里有个容易踩的坑很多团队图省事让Agent用同一个服务账号去调用所有API结果所有操作都分不清是谁发起的。要想治理得当必须打通企业的统一身份认证体系用户在会话里发起请求Agent在工具层传递用户的身份令牌下游系统按这个令牌做鉴权。操作授权应该遵循最小权限原则。Agent和普通员工一样只能访问跟当前任务相关的数据。我给每个Agent配置了一份权限清单精确到哪个工具、哪个数据域、哪个操作类型。比如客服Agent能查订单状态但不能改订单销售Agent能看自己名下的客户但看不到全公司客户列表。权限清单要跟Agent的技能层绑定技能层暴露哪些工具权限就精确管到哪些工具。行为审计最基础的就是留痕。谁在什么时间问了什么问题、Agent调用了哪些工具、返回了什么结果、生成了什么回答全链路都要记录并且不可篡改。这不只是为了出问题时甩锅更重要的是可以用来持续优化系统。我在做审计日志设计时建议直接把日志同步到公司的日志平台然后配置几个关键维度的搜索看板这样安全团队和研发团队都能方便地使用这些数据。5. 调研中踩过的几个坑和一套可以复用的落地策略5.1 高频问题速查表我把这次调研和实践中遇到的比较典型的坑整理成了一张表方便大家对照自查。问题现象根本原因解决方案某个Agent死循环调用工具CPU飙升缺少工具调用次数限制和超时控制给每个工具调用设超时与最大重试次数超限后强制熔断两个Agent的依赖包冲突升级一个坏了另一个环境没有隔离每个Agent独立虚拟环境/容器依赖版本写入锁文件用户数据串号A用户查到B用户信息工具层未做权限隔离工具调用时透传用户身份令牌下游按令牌过滤数据模型API账单突然暴涨没有按Agent做Token配额每个Agent设置每日/每月Token预算超额自动降级知识库回答陈旧政策改了很久还在答老版本缓存没做主动失效文档更新时自动删除相关缓存缓存Key绑定知识文档ID出了问题找不到是哪次调用导致的日志没有关联Trace ID全链路日志通过Trace ID关联接入分布式追踪系统5.2 一条更稳妥的智能体系统演进路线如果你现在还在从零搭智能体系统我不建议一上来就搞大而全的平台。更稳妥的路线是先用一个低代码平台比如Dify这类快速搭一个业务场景验证可用性同时把数据采集和日志埋点做好。这一步的核心目标是验证“智能体能不能在这个业务领域产生真实价值”而不是追求架构多么完美。验证通过后再逐步把高度定制化的逻辑抽出来做成独立的Agent服务。这时候再开始引入多Agent架构、工具注册中心、可观测体系。然后等Agent数量多起来了再补全治理体系密钥统一管理、工具调用权限矩阵、Token配额、审计留痕。最后才是做全面的多模型路由和降级策略。这样的演进顺序有个好处每一轮投入都有明确的产出而且每一轮都在为下一轮扫清障碍。我见过好多团队一上来就想做一个全套平台结果做了半年还在搭框架业务方看不到任何成果项目被砍的风险很高。先用小成本验证价值再逐步完善架构才是在企业里推动智能体落地的现实路径。最后说一个我个人的体会隔离、集成、治理这三个词看起来是三个独立的方向但实际做的时候是互相咬合的。隔离做得不好集成就会变得脆弱一个工具挂了全线雪崩集成做得不透治理就没有抓手日志不全、权限不清出了事只能干瞪眼治理跟不上隔离和集成的成果也无法沉淀成团队能力。所以这三个维度一定要放到一张蓝图里去规划哪怕落地分阶段但设计之初就要想好它们之间的关系。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进