
做Agent这两年我最深的感受就一句话Demo是一回事生产是另一回事。今年我陆续参与了三个企业级Agent项目从智能客服到内部知识助手几乎每个项目都复刻了同一个剧本——两周做出一个惊艳的Demo演示时全场鼓掌客户当场拍板立项然后三个月后上线用户开始在群里以各种姿势骂街。不是模型不行不是场景选错而是绝大多数团队把“能跑通的Demo”当成了“能被生产环境反复蹂躏的系统”。这篇文章不打算讲Agent怎么搭建、怎么调Prompt而是聚焦一个更扎心的问题企业Agent从Demo走到生产落地到底要迈过哪几道坎每一道坎背后又藏着什么工程解法如果你正负责一个要交付给企业、要承受真实用户流量、要对接真实业务系统的Agent项目这篇文章应该能帮你少走不少弯路。1. 先看现象惊艳Demo和拉胯生产之间到底差在哪1.1 我见过最典型的“惊艳Demo”先讲个真实案例。年初我帮一家金融公司做智能客服AgentPoC阶段只花了两周接上大模型配了三个工具查订单、查账单、建工单再写了一套带流式输出的前端页面。演示那天Agent全程表现堪称完美——上下文连贯能准确调用工单系统遇到不确定的问题还会礼貌地说“我需要转接人工”。客户CTO当场说“这就是我们要的东西”项目直接进入正式立项。结果上线两周内部试点群彻底炸了。真实用户根本不会像Demo那样规规矩矩地说话有人直接丢一句“我上次那个单子咋样了”Agent完全分不清“上次”是哪个单子有人半路改需求“算了不查了帮我退了吧”Agent先把订单查出来又去建了个退费工单用户根本没说退费。更离谱的是一个用户在高峰期连发十条消息Agent把十条当成十个独立会话处理每个会话都扣了一遍额度、查了一遍账。那一周我的手机基本没停过响。这个案例特别典型因为它几乎浓缩了Agent生产落地的所有经典问题上下文管理、意图识别、工具误调用、高并发下的状态隔离。而这些在Demo阶段几乎都测不出来因为演示脚本就那几条演示环境就一个人在用。1.2 上线拉胯的六种常见姿势根据我自己的经历和身边同行的反馈企业Agent上线后“翻车”通常逃不出这六种姿势故障类型典型表现根因方向幻觉与胡说编造订单状态、虚构数据来源、引用不存在的文档检索质量差、缺乏事实校验工具误调用把查询工具当成写入工具、参数传错、重复执行工具语义不清、缺少确认机制上下文错乱多轮对话张冠李戴、不同会话互相串数据会话状态管理缺失、记忆实现粗糙性能雪崩高峰时响应从3秒涨到30秒甚至直接超时同步调用链过长、无削峰限流链路断点Agent调第三方API失败后直接“死掉”没有任何兜底缺少重试、降级、超时熔断安全失控越权读取数据、误发内部信息、没有审计日志权限模型缺失、可观测性为零你会发现这六种问题没有一种是“模型不够聪明”造成的。模型还是那个模型但生产环境把它脆弱的那一面全部放大了。这也是为什么我后来给团队定了一条规矩Demo验证的是可能性生产要求的才是可靠性。从前者到后者中间缺的不是模型能力而是一整套工程体系。2. 刨根问底四个根因为什么同一个系统换个环境就翻车既然翻车姿势如此雷同那背后一定有结构性原因。我拆了四个根因每个都能解释一批线上事故。2.1 演示走的是“成功路径”生产走的是“所有路径”这是最根本的一条。Demo的脚本是人为写好的每句话都在引导模型走向正确答案。生产环境呢用户的话术千奇百怪中间随时可能打断、反悔、切换话题。LLM本身是概率模型每次采样都有随机性同一句话问十遍可能产生十种不同的规划路径。我做过一个统计一个加了6个工具的Agent在Demo里每条路径的成功率可能都在95%以上但真实用户请求里大约40%会走到Demo没覆盖的边界路径上——话术歧义、多意图混合、需要跨工具组合操作。一旦走上没验证过的路径成功率会急剧下滑。这就是为什么Demo里“无所不能”的Agent上线后“处处碰壁”。这个问题的核心启示是生产级Agent不能只验证“脚本内的路径”必须建立一套能覆盖边界和失败路径的评测体系。2.2 无状态Demo与有状态业务的天然矛盾几乎每个Demo都是从零开始对话问一句答一句没有历史包袱。但真实业务是重度有状态的用户说“那个订单”指的是十分钟前提到的订单用户说“跟上次一样”意味着你要找回上次的操作参数用户已经授权过查询权限下一轮不应该再问一次。实现有状态通常有两种做法一是把对话历史塞进上下文窗口简单粗暴但费Token而且长对话容易“记吃不记打”二是引入外部记忆组件把关键实体、历史操作、用户偏好结构化存储。很多团队用第一种方案跑通了Demo上线后才发现上下文窗口越撑越大成本翻了几倍不说模型还会把早期错误信息当成事实延续下去。我后来在项目里规定凡是涉及多轮操作、跨会话引用的场景必须启用外部记忆不能让几千字的对话历史全部裸奔进上下文。这不是可选项是必选项。2.3 模型能力越强失控的破坏力越大老一代对话系统能力弱错了也就错了影响范围有限。现在的Agent能调工具、能写代码、能操作业务系统能力边界大大扩展但同样的一旦“做错”破坏力也成倍增加。我见过一个内部知识管理Agent本来只是用来回答员工福利政策的结果因为工具描述写得含糊在“帮我把这份表格整理一下”的请求下它真的调用了一个带写权限的接口把一份测试数据当成正式数据覆盖了。事后排查发现模型本意可能是“整理”成报告但工具描述里没写清楚这是“写入正式库”的操作也没有加二次确认。能力越强的系统越需要边界和刹车。工具权限最小化、敏感操作二次确认、输出内容校验这些不是限制Agent能力而是让能力被关在笼子里。2.4 单用户优化与多用户资源博弈Demo只需要服务一个人所以你可以把所有思考过程都即时展示可以把每一步都等完整再返回。生产环境是几十上百个用户同时进来每个请求都要占用大模型的推理时间、Token配额、工具调用的API额度。更麻烦的是LLM推理的并发瓶颈非常现实。一个慢请求可能拖住整条链路的连接池一个等待队列过长又会让用户直接流失。很多团队上线第一天就遇到“提示词相同的问题为什么白天比晚上慢三倍”的疑问其实就是并发模型没处理好。我见过最惨的案例是某项目Demo阶段单次响应1.5秒全公司惊叹。上线后白天高峰变成15秒用户直接放弃。后来加了流式输出、请求排队和会话级限流才把体感拉回可接受范围。单用户的时延优势在多用户并发下会被迅速稀释这条规律谁也逃不掉。3. 第一道坎把“感觉好用”变成“可用指标”评测体系是生产准入的地基很多人觉得评测就是拿一堆问题问Agent看它答得对不对。这是把评测想简单了。Agent生产级评测的核心目的不是“测出好坏”而是建立生产准入门槛——没有通过评测的版本不允许上线。3.1 评测集怎么搭才不算白搭我从几个项目里总结出一套评测集搭建方法核心是“三层结构”第一层标准功能用例。覆盖核心业务场景的正向路径比如“查询订单状态”“创建退费工单”。这一层保证基本功能不退化。第二层边界与反例。专门收集用户“不那么规矩”的问法口语化表达、歧义句、多意图混合、带错别字。比如“我上礼拜买的东西怎么还没到是不是丢了”这种句子模型要能识别出涉及“物流查询”和“投诉倾向”两个意图。第三层失败注入用例。人为制造异常工具返回超时、数据库无记录、第三方API报错。验证Agent在这些情况下是优雅降级还是直接崩溃。每层至少准备50到100条全部标注期望行为期望调用哪个工具、期望输出什么格式、期望拒绝回答。这套评测集不追求量大追求的是“案例的代表性”。我经常跟团队说评测集的价值不在于数量多而在于能把线上踩过的每个坑都固化下来。3.2 核心指标与回归机制评测集建好后需要定义几个能横向对比的量化指标我这里用的是四个指标计算方式含义任务成功率期望行为完全匹配的用例数 / 总用例数Agent有没有做对事工具调用准确率工具名和参数都正确的调用数 / 总调用次数有没有用错工具、传错参数无效回复率应该拒绝却强行回答或答非所问的用例数 / 总用例数幻觉与胡说占比端到端时延P95从请求发起到最终响应的耗时取95分位生产体验的直接保障每次迭代完Prompt、换了模型、改了工具定义都要全量跑一遍评测集对比指标有没有回退。我吃了不少亏才明白如果不上评测机制你根本不知道一次prompt调整是变好了还是变坏了因为人的感知太容易受个案影响。3.3 评测不过关时优先补哪块短板评测跑完经常是一堆红。我的处理原则是如果任务成功率低优先检查工具描述和路由逻辑是不是模型根本不知道该用哪个工具。如果无效回复率高优先加“不知道就说不知道”的系统约束再在输出层加一道校验。如果工具调用准确率低优先检查参数映射把每个参数的枚举值、格式、可选必填写清楚。如果时延超标先别急着换模型看看是不是上下文塞了太多历史、工具返回了太多冗余字段。评测体系这件事我个人的建议是宁可前期多花两周也不要省。它就像给Agent装了一个“体检系统”让你每次改动都能看到血压血脂而不是凭感觉“差不多”。4. 第二道坎从单次问答到可靠执行把工具调用变成一条稳链路4.1 工具调用失败是必然的不是偶然的Agent在生产里最核心的动作就是调用工具API、数据库、内部系统。而真实世界的API调用失败率远比你想象的高第三方系统超时、数据库连接池满、返回结构不符合预期、鉴权过期……一次调用失败是常态连续几次成功反而值得庆幸。很多Demo代码把工具调用写成了“一次调用拿不到结果就报错”。生产环境绝对不能这样。我给团队定的工具调用标准是三步兜底重试对网络抖动、瞬时超时做2到3次指数退避重试间隔1秒、2秒、4秒。降级主工具失败后自动切到备选工具。比如查库存失败降级到查商品详情里的库存字段。告知所有兜底都失败后Agent必须明确告诉用户“我暂时查不到请稍后再试”而不是假装成功、编一个结果。这三步看起来简单但我见过太多Agent在“工具失败后强行编造结果”这条路上翻车。宁可说不知道也绝不能让Agent用幻觉填坑。4.2 输出校验、超时兜底与降级策略工具调用是Agent动作链的“硬骨头”而输出校验则是最后一道防线。这里有一个真实案例某个Agent负责生成周报摘要模型有一次在摘要末尾多写了一句话——“以上数据未经审核仅供参考”。这句话在Demo里从未出现过但上线后就被真实输出到了管理层邮件里。输出校验层要解决的就是这类问题。我在项目里加了三个校验规则事实来源校验Agent回答里出现的每个关键数据必须能从检索结果或工具返回值里找到出处找不到就拦截。安全词校验维护一个敏感词正则库命中就自动模糊处理或拒绝输出。结构格式校验要求输出为JSON时必须解析通过要求枚举值时必须在指定集合内。超时兜底也很关键。Agent链路往往有三层超时要设模型推理超时、工具调用超时、整链路超时。我曾经踩过的坑是只配了单次模型超时结果工具调用卡了30秒用户早就跑了。整链路超时要小于用户体验底线比如线上统一控在20秒那么每跳最多分到5秒宁可提前失败降级也不能无限等待。4.3 “Agent异常终止”的完整排查链路线上经常出现“Agent execution terminated due to error”这类报错很多人看到就慌。我整理了一套排查链路按顺序查基本都能定位第一步查哪一段链路断了。把一次Agent执行拆成四段意图识别、工具调用、生成回答、消息回传。四段分别打日志和耗时桩哪一段报错一目了然。我习惯在框架层埋一个全链路TraceID从用户请求到Agent每一步工具调用都带上同一ID查日志时按ID过滤就行。第二步查工具返回是否破坏了上下文。很多情况下模型并没有崩而是工具返回了超长文本、异常字符或非预期结构把上下文窗口塞爆或把Agent的规划打乱。这类问题要在工具网关加返回体长度限制和结构校验超限就截断或转错误处理。第三步查是不是上下文溢出。长对话场景历史记录加系统Prompt加工具返回总Token数可能逼近模型上限。提前在框架层做截断策略滑动窗口保留最近N轮、把旧消息摘要化、长文档分段检索。第四步查配额与限流是否误杀。模型API每秒钟请求数限制、每分钟Token限制一旦被打满报错信息千奇百怪。限流阈值要和额度供应商的配额表对齐宁可预留10%余量也不打满。这套链路我们在生产里走了无数遍现在基本稳定。Agent的“异常终止”本质上是系统问题不是玄学只要每步日志和校验齐全一定能定位到。5. 第三道坎扛住并发冲击Agent系统的容量工程聊到“AI Agent怎么扛并发”这是几乎每个企业技术团队都会头疼的问题。LLM的推理并发和传统Web高并发完全是两回事你需要重新做容量设计。5.1 无状态化和外部记忆是并发前提扛并发的前提是你的Agent服务必须是无状态的。同一用户的连续请求可以落在任意一台机器上会话上下文必须从外部存储Redis、数据库或专门的记忆服务读取而不是存在进程内存里。我们一开始犯过错误为了快把对话历史存在本地变量里单机Demo完全没问题一旦多实例部署用户的第二次请求负载均衡到另一台机器上下文就丢了。后来统一改成每个会话请求头带SessionID服务端从Redis拉取历史更新后再写回。这一步不做并发扩容就是空中楼阁。5.2 请求队列、削峰与异步化真实流量从来不是均匀的。早高峰、大促、活动推送分分钟把Agent服务压垮。传统服务扛不住可以加机器LLM服务压垮之后不只是慢还会因为排队浪费大量Token。我的方案是双层队列第一层是API网关的请求队列按用户维度做排队削峰第二层是任务执行队列把重操作异步化。举个例子用户要求生成一份分析报告不需要同步等待30秒可以先返回“报告正在生成预计30秒后推送”后端任务异步执行完再回调。这样用户的体感时延就能从“30秒黑洞”变成“立即反馈”。对于必须实时返回的对话场景也要做会话级排队同一个用户的并发请求串行化不同用户之间公平调度。防止一个用户狂刷消息把整个服务拖死。5.3 缓存和模型分级这里有个容易被忽略的成本和性能杠杆不是所有请求都值得用最强模型。生产环境里我把Agent的规划能力按需求分成三个级别高频简单请求查天气、查订单状态走小模型或缓存结果时延低、成本低。中复杂度请求查单后追问、多轮改单走主力模型。高复杂度任务跨系统报告、多步编排才调用最强模型。另外Prompt层面一定要做缓存工具定义、系统提示词、检索到的稳定知识都不该每次重新编码送进模型。比如最常用的工具描述可能有上千Token缓存下来能省下大量Token成本和首Token时延。模型路由加Prompt缓存这两个方案组合起来能把总体成本拉低30%以上同时时延明显改善。5.4 限流、熔断与多租户隔离并发工程的最后一块拼图是“保护”用户级限流单用户每秒请求数、每分钟Token数双维度限制防止单个用户耗尽公共资源。租户级配额如果Agent服务对接多个部门或客户每个租户独立配额互不挤占。A部门的大促流量不能把B部门的客服体验拖垮。第三方依赖熔断工具调用的第三方API一旦连续失败超过阈值直接熔断降级不再反复试错。从容量工程角度我的经验是先量化再扩容。上线前用压测工具打一轮流量把单实例QPS天花板测出来再反推需要多少实例。没有量化数据就拍脑袋扩容大概率不是浪费就是不足。6. 第四道坎权限、安全与可观测Agent生产不得不补的底线6.1 工具权限最小化很多Agent框架在开发Demo时会让模型看到一个账号能访问的所有工具。这样做太危险了。生产环境必须做工具级权限隔离。我的做法是每个Agent实例配一张工具权限表只暴露当前任务必需的工具。比如客服Agent只看订单查询和工单创建绝对不给它看数据库删除接口。工具网关在模型发起调用前做一次权限校验不在白名单内的一律拦截。这一步实现起来不难但绝大多数Demo项目都没做因为开发期为了方便给模型开了“全量权限”。上线不出事是运气出事就是大事故。6.2 敏感操作审批与审计权限只是前提动作还必须有约束。我把Agent的工具调用分成三类操作类型示例处置策略只读操作查询订单、检索文档直接放行记录审计日志普通写操作创建工单、更新资料二次确认后再执行高风险操作删除数据、转账、下单人工审批Agent只能提交申请这里最关键的是“二次确认”。我在框架里加了一个确认中间件模型决定要调用某个写操作时先向用户展示“我将为您执行以下操作请确认”用户点确认后工具才真正执行。这个机制直接砍掉了我上面提到的那个“没让退费却建了退费工单”的事故。审计日志同样不能省。每一次工具调用的入参、出参、模型推理过程、最终的输出都要落库。出了问题能回放全过程这对企业合规场景几乎是必选项。6.3 从黑盒到白盒Agent的可观测性传统系统有日志、指标、链路追踪三板斧。Agent系统多了一层复杂性模型是怎么想的它为什么选择了这个工具它是基于什么信息生成这句话的我花了很久才意识到Agent可观测性的核心不只是看它做了什么更要看它为什么这么做。我常用的做法是给Agent加上“思考轨迹日志”。框架每执行一步把当前状态、候选动作、最终选择、置信度都记录下来。排查问题时按TraceID把思考轨迹捞出来立刻就能看到模型是不是理解错了意图、是不是选错了工具。另外用户反馈的“那句话说错了”一定要能回溯到具体案例。我上线Agent之后养成了一个习惯每天花30分钟看10条差评把每个差评对应的思考轨迹日志过一遍。长期坚持比看任何评测报告都能更快发现问题。7. 从POC到生产我的落地路径与踩坑总结7.1 分阶段推进别想一口吃成胖子我现在接手企业Agent项目一律按四个阶段推进每个阶段都有明确的门槛和交付物阶段一场景收敛1到2周只选3到5个核心场景圈定边界明确不做什么。阶段二架构搭建与评测基线2到3周搭好工具网关、记忆服务、权限模型、日志体系同时建立评测集跑出基线分数。阶段三路径打磨3到4周针对高优先级用例迭代Prompt和工具定义让评测分数达到准入门槛。阶段四灰度上线持续先放10%流量监控指标、收集案例稳定后再逐步放量。我强烈建议不要把精力浪费在追求“全场景覆盖”上那是大忌。把一个窄场景打透比十个场景每样都四不像价值大得多。7.2 团队角色怎么配Agent生产落地已远不是“找个大模型工程师”就能搞定的。我在项目里的最小配置是AI应用工程师负责Agent框架、Prompt、评测体系是核心岗位。业务领域工程师负责梳理真实业务场景、工具接口、异常流程。没有这个人Agent就会在业务边界上出岔子。平台/运维工程师负责容量、限流、日志、监控、部署让系统稳定跑起来。小团队可以一人身兼数职但至少这三类能力都要有人覆盖。我见过太多项目全是算法背景的人没人关心工具链路的稳定性上线必翻车。7.3 几点个人体会也算是给后来者泼点冷水不要迷信Agent框架能解决一切。框架解决的是编排和连接问题评测、权限、可观测、容量这些生产要素框架不负责必须自己建体系。Agent越自主越需要靠流程兜底。那些“全自动搞定的Agent”只存在于发布会。真正稳定的Agent一定是由一系列确定性规则兜底的非确定性系统。生产环境的评价标准只有一个用户可感知的成功率。不是“模型说得有没有道理”而是“用户的需求到底有没有被解决”。这个标准要从一开始就想清楚而且要能用数据度量。如果让我给团队一个最核心的建议那就是从立项第一天就把“生产化”当成一等公民而不是上线前最后一周才补的作业。Demo能答对题目不值得兴奋生产环境的不出错才值得追求。Agent这条赛道今天已经过了“炫技”的阶段接下来拼的就是谁先把工程体系补扎实。希望这篇文章里的四道坎能帮你的项目少踩几个我踩过的坑。