去年年底帮一家做工业设备运维的企业做复盘,翻出他们半年前上线的那套“AI问答”,日活不到三十,业务方的评语只有一句:能聊,但不敢让它干活。这句话几乎是我接触过的企业AI项目里出现频率最高的一句。模型能力明明已经够用了,为什么落到业务里就只剩一个聊天框?问题从来不在模型那一端,而在中间那一段——从模型输出到业务动作之间,缺一整套工程化的承接结构。这也是最近被反复讨论的ZAI智能体平台想解决的问题:它不追求做一个更强的模型,而是把自己定位成企业级AI引擎的交付中枢,把模型、工具、知识、权限、计费、观测这些散落的东西拧成一条能交付、能运维、能算账的流水线。
先把话说清楚:智能体平台不是又一个套壳对话框。它是一套让业务人员配置、让研发人员兜底、让运维人员看得见、让财务算得清的基础设施。它能做的事情包括把企业内部的接口封装成智能体可调用的工具、把散落在文档和数据库里的知识变成可检索的上下文、把一次任务拆成多步并保证每一步可回放、把不同模型按成本和能力做路由、把每一次调用的开销归集到具体部门。适合谁来读这篇?三类人。第一类是正在做AI落地但卡在POC阶段的研发负责人;第二类是被业务方追问“这东西到底能不能上生产”的技术骨干;第三类是准备把AI能力对外交付的产品和项目经理。我会按“为什么这么设计—关键模块怎么做—交付流程怎么跑—坑在哪里”的顺序讲,穿插可以直接抄的配置和参数。
1. 先把“交付中枢”要解决的三个断层讲透
1.1 模型能力和业务动作之间隔着一整套工程
很多人对智能体的想象是:给模型接上几个接口,它就能自己订机票、查库存、写工单。真做过的人都知道,模型本身只会输出文本,它能“动手”完全依赖于外面那层壳把文本解析成结构化调用、把调用结果再翻译回模型能理解的上下文。这层壳里至少藏着六件事:意图识别与任务规划、工具描述与参数校验、失败重试与超时控制、上下文长度管理、结果一致性校验、以及最容易被忽略的权限判定。任何一环缺失,表现出来都是“模型不太聪明”,实际是工程没做够。
我见过一个很典型的失败案例:某公司的智能体接了内部工单系统,测试阶段一切正常,上线第三天把一个测试环境的工单批量关闭了。排查下来,工具定义里没有环境隔离参数,模型在上下文里看到了测试环境的字样,就“合理”地调用了生产接口。这不是模型的错,是工具层缺少强制约束。交付中枢的第一个价值就在这里:它把这类约束从“开发者记得写”变成“平台强制校验”,让能力边界由配置决定,而不是由运气决定。
所以我在看任何一个智能体平台时,第一眼不看它支持多少模型,而是看它的工具层有没有参数模式校验、有没有环境隔离、有没有调用前后的钩子。这三样东西决定了它能不能进生产。
1.2 为什么“中枢”比“引擎”更难做
引擎的指标是单点的:响应快、准确率高、上下文长。中枢的指标是系统的:一次任务从发起到完成,中间经过几个组件、失败了几次、重试有没有副作用、耗时分布在哪一段、成本归到谁头上。前者可以靠调优,后者只能靠架构。这也是为什么很多团队自研了一套调用链,跑demo很惊艳,一上量就崩——他们没有中枢,只有一根管子。
中枢难做的核心在于它必须同时满足四组互相拉扯的需求。研发要灵活,业务要简单,运维要稳定,财务要可控。灵活的方案通常不稳定,简单的方案通常不可扩展。我的做法是把这四组需求分层:底层用代码保证稳定和可观测,中间层用配置暴露给业务,上层用模板收敛常见场景。三层之间通过契约解耦,任何一层改动不影响另外两层。这个思路后面会反复出现,因为它几乎是所有企业级平台设计的通用解法。
还有一点值得说:中枢的价值不在“第一次上线”,而在“第一百次变更”。业务方改一个字段、换一个知识库、加一条审批流,如果每次都要研发改代码发版,这个平台就是失败的。所以我在设计时把“变更成本”当成一级指标,能配置的绝不写代码,能热更新的绝不重启。
1.3 哪些团队适合上这套东西,哪些不适合
不是所有团队都需要智能体平台。如果只是做一个内部文档问答,几十个人用,一个开源检索框架加一个前端页面,两周就能搞定,上平台反而是过度设计。判断标准我一般看三条:一是场景数量是否超过五个且互不相同,二是是否有多个业务方需要自助配置,三是是否涉及敏感数据和费用分摊。三条中占两条,才值得上平台。
反过来说,如果你的场景是单一高频任务、用户群体固定、数据不出内网,那更应该把精力花在那个具体任务的提示词和检索质量上,而不是搭一套通用底座。我见过太多团队在平台建设上耗了半年,业务场景一个没落地,最后平台成了演示项目。企业级AI引擎这个词听起来很重,但它的重量应该来自真实负载,不是来自架构图。
2. 平台整体设计与选型取舍
2.1 五层结构:从接入到交付的完整链路
ZAI这套东西我倾向把它拆成五层,从上到下分别是:交互层、编排层、能力层、模型层、基础设施层。交互层负责多端接入和企业身份打通,编排层是整个平台的心脏,能力层是工具、知识、记忆这些可复用资产,模型层做统一抽象和路由,基础设施层管算力、存储、网络和审计日志。这个分层不是画着好看的,它的实际作用是划清责任边界:业务方只在编排层活动,研发在能力层和模型层做扩展,运维在基础设施层做保障。
编排层里我坚持三个概念必须显式存在:智能体、工作流、工具。智能体是“有角色设定的对话主体”,工作流是“有确定步骤的流程编排”,工具是“原子能力”。很多人把这三者混在一起做,结果是一个智能体里塞了十几个分支判断,改一处崩三处。分开之后,绝大多数业务需求可以归到工作流——因为企业场景里真正需要自由发挥的部分其实很少,更多的是“按规矩办事”。把确定性交给工作流,把不确定性交给智能体,这是我在多个项目里验证过的最省心的切分方式。
模型层的设计要点是“统一抽象”。所有模型走同一套请求协议,上层不关心底层是哪家。这样做的代价是要做一层能力映射表,把不同模型的参数差异抹平;收益是换模型只需要改配置,不用改业务代码。这笔账在企业环境里几乎总是划算的,因为模型迭代速度远快于业务迭代速度。
2.2 三个关键岔路口怎么选
平台建设初期有三个决策会长期影响后续所有工作,我把自己踩过的选项列出来对照:
| 决策点 | 方案A | 方案B | 我的选择与理由 |
|---|---|---|---|
| 编排方式 | 纯代码编排 | 可视化配置加代码兜底 | 选B。业务方能自助改,研发只写兜底节点,变更成本降一个量级 |
| 知识检索 | 单一向量检索 | 向量加关键词混合检索 | 选B。企业文档里大量型号、编号、专有名词,纯向量召回率明显不够 |
| 会话状态 | 无状态,每次全量重传 | 服务端持久化会话树 | 选B。长任务和多轮追问必须依赖状态,但要配合摘要压缩控制成本 |
| 工具调用 | 让模型自由生成参数 | 强模式校验加白名单 | 选B。生产环境里,一次错误调用造成的损失远大于灵活性收益 |
| 模型策略 | 固定单一模型 | 按任务分级路由 | 选B。简单任务走小模型,复杂任务走大模型,成本能压下来一半以上 |
这张表里每一项我都用真实项目验证过。最值得展开的是知识检索这一项:很多团队一开始只做向量检索,测出来召回率70%就觉得是模型不行,其实问题在于企业文档的特性——合同编号、设备型号、人名这类字符串,向量化之后语义信息几乎丢失,必须靠关键词倒排来补。混合检索加一个重排环节,召回率通常能提到90%以上,代价只是多一次几十毫秒的调用。
2.3 为什么我把编排层做成“配置优先、代码兜底”
设计编排层时最大的争论是:到底让业务方配置到什么程度。全放开会做出一堆无法维护的“面条流程”,全锁死又回到研发排队改需求的老路。我的折中是“节点白名单加参数模板”:平台只暴露经过验证的节点类型,每个节点的参数有默认值和取值范围,业务方在模板里改,改不出结构性错误;遇到模板覆盖不了的场景,研发写一个自定义节点注册进去,业务方照样能拖。
这套机制的实现关键在于把节点定义做成声明式描述,而不是硬编码。下面是一个节点的配置示例,实际项目里这类描述会存进数据库,前端据此渲染表单:
node_type: http_tool display_name: 查询设备运行状态 version: 1.3 inputs: device_id: type: string required: true pattern: "^DEV-[0-9]{8}$" description: 设备编号,格式为DEV加8位数字 time_range: type: enum values: [1h, 24h, 7d] default: 24h guard: timeout_ms: 3000 retry: 1 retry_on: [timeout, 5xx] idempotent: true output_schema: status: string metrics: array注意pattern和guard这两段。前者把参数校验前置到编排层,模型生成的参数不合规时直接拦下来并返回明确错误,模型下一轮就能自我修正;后者定义了超时和重试策略,idempotent: true表示这个工具可以安全重试,非幂等工具(比如提交订单)就必须设成 false,否则重试会造成重复副作用。这类细节看着琐碎,但它们是平台能不能上生产的分水岭。
3. 核心模块的实操要点
3.1 模型接入层:路由、降级与灰度
模型接入层最容易被做成一个简单的if-else,但实际上它承担着成本、稳定性、合规三重职责。我的做法是把它做成“策略链”:请求进来后依次经过配额检查、敏感内容过滤、任务分级、模型选择、调用执行、结果校验、用量记账七个环节,每个环节可插拔。任务分级是核心,它决定了走哪个档位的模型。
分级规则不要用模型自己判断,那样既慢又不稳定。我一般用规则加轻量分类器:输入长度、是否包含工具调用意图、是否涉及多步推理、历史轮次深度,这几个特征组合起来基本能覆盖八成场景。举个实际参数:输入token小于800、无工具意图、单轮问答,走小模型;输入超过2000或者命中工具意图,走大模型;涉及长文档摘要的,单独走长上下文档。这套规则跑下来,整体成本比全量走大模型低了约55%,而用户感知的准确率差异在抽样评估里不到3个百分点。
降级策略必须提前设计好,不能等故障了再想。我的配置是三级:主模型超时或返回5xx,切同档位备用模型;备用模型也失败,降级到规则兜底并给出明确提示;连续失败超过阈值,对该租户熔断一段时间并告警。降级过程中最忌讳的是“静默切换”——用户不知道答案来自降级模型,质量下降会被当成产品退化。所以我在返回体里带一个不可见的质量标记,前端在答案质量存疑时显示一句轻提示,这个细节能省掉大量客诉。
灰度发布是另一个必做项。新模型上线先放5%流量,观察三件事:任务成功率、平均轮次、用户主动重问率。第三个指标最灵敏,用户重问往往意味着答案没解决问题,比任何离线评测都真实。观察48小时没问题再逐步放量,这个节奏别嫌慢,模型行为的变化经常是长尾的。
3.2 工具层:让智能体真正能“动手”
工具层的设计目标只有一个:让模型在可控范围内尽可能自由地调用。可控和自由是一对矛盾,解法是把控制点放在调用链的两端——前端是工具描述,后端是执行沙箱。
工具描述写得好不好,直接决定模型调用的准确率。我总结的经验是:描述里必须包含“什么时候用”和“什么时候不用”,而不只是“这个工具做什么”。比如查询订单的工具,描述里要写清楚“仅当用户提供了订单号或手机号时调用;如果用户只是询问退货政策,不要调用”。这条负面说明能把误调用率降一大截。参数描述同理,每个参数都要给出格式示例,模型对示例的敏感度远高于对文字说明的敏感度。
执行沙箱这部分更工程化。所有工具调用必须经过统一网关,网关做的事包括:身份透传(用调用者的身份去访问下游,而不是平台的服务账号)、参数二次校验、频率限制、响应裁剪、审计留痕。身份透传这一条特别重要,它保证了权限体系不被绕过——智能体只能看到调用者本人有权看到的数据。响应裁剪同样关键,下游接口返回几十个字段,全塞进上下文既浪费token又干扰模型判断,我一般只保留三到五个关键字段。
还有一个隐蔽的坑:工具返回的错误信息。很多内部接口失败时返回一段堆栈或者一个错误码,模型看不懂就会胡乱重试。我的处理是在网关层把错误归一化成固定结构,包含错误类型、是否可重试、给用户的建议话术三部分,模型拿到这个结构就知道下一步该干什么。这个改动看着小,但对任务成功率的提升非常明显。
3.3 知识层:RAG工程化里最容易被低估的细节
检索增强这块,网上的教程大多停留在“切块—向量化—相似度检索”三步,实际项目里这三步只占工作量的三成。真正决定效果的是后面几件事:文档解析质量、切块策略、元数据设计、混合召回、重排、以及上下文组装。
文档解析是最脏最累的一环。企业文档里大量表格、扫描件、多栏排版、页眉页脚,直接抽取文本会把表格结构彻底打散。我的经验是表格必须单独处理,解析成结构化的行列表,检索时按行召回而不是按段落召回。扫描件要走OCR,但OCR结果必须保留页码和位置信息,否则后面无法给出引用来源。引用来源这件事在企业场景里不是加分项而是必选项,业务方看到答案时必须能点开原文核对,否则不敢用。
切块策略上没有万能参数,但有判断依据:块大小要匹配问题的粒度。如果是政策条款类问答,块要小(300到500字)且带完整语义;如果是流程说明类,块要大(800到1200字)保证上下文完整。我一般会做重叠切块,重叠比例10%到15%,防止关键信息正好被切断。元数据至少要存四样:来源文档、章节路径、更新时间、权限标签。前三样用于展示和排序,权限标签用于过滤——检索结果必须按调用者权限过滤后再送给模型,这一步漏了就是数据泄露。
混合召回的具体做法是向量检索和关键词检索各取前20条,用倒数排名融合做合并,再送重排模型取前5条。重排模型不用太大,轻量级的就够,延迟控制在100毫秒以内。上下文组装时按相关度倒序排列,把最相关的放在最前面和最后面,中间放次相关的——这是利用了模型对首尾位置更敏感的特性,实测能提升几个点的答案准确率。
3.4 状态层:长任务和多轮会话怎么不丢记忆
智能体的记忆分三种,必须区别对待。第一种是当前会话的短期记忆,存最近若干轮对话;第二种是跨会话的用户偏好,存结构化的画像字段;第三种是任务执行过程中的中间状态,存工作流各节点的输入输出。混在一起存是常见错误,会导致上下文越来越长、成本越来越高、模型越来越糊涂。
短期记忆的管理核心是压缩。我的策略是“保留最近三轮原文加更早内容的摘要”,摘要由小模型生成,控制在200字以内,只保留事实和结论,丢弃过程性描述。触发压缩的阈值一般设在上下文占用超过60%,留出空间给检索结果和工具返回。这个阈值可以调,但不要设太高,上下文塞满之后模型的表现会断崖式下降。
跨会话记忆要克制。很多团队热衷于让智能体“记住用户”,结果记了一堆过期偏好,反而干扰判断。我的做法是只记三类信息:明确的身份属性(部门、角色)、显式的长期偏好(用户主动说“以后都这样”)、以及高频操作习惯。每类都带有效期,超过时间自动失效。这个设计在产品上体现为“你之前提到过……需要沿用吗”,把决定权交回用户,比默默记住安全得多。
长任务的中间状态必须持久化,而且要能回放。工作流每执行一个节点,就把节点输入、输出、耗时、是否成功写进状态表,任务中断后可以从最后一个成功节点续跑。这里有个容易忽略的点:续跑时必须校验外部状态有没有变化。比如一个审批流中断了两小时,续跑前要重新查一次审批单是否已经被别人处理过。我一般会在节点定义里加一个recheck钩子,专门做这件事。
4. 企业级硬门槛:权限、审计与成本
4.1 多租户隔离的三个层次
企业环境里“隔离”这个词经常被说得含糊,实际上至少要分三层:数据隔离、计算隔离、配置隔离。数据隔离是底线,不同租户的知识库、会话记录、文件必须物理或逻辑隔离,查询时强制带租户标识,任何跨租户查询都要走专门的授权通道并留痕。计算隔离是资源层面,防止一个租户的高并发把其他人的请求拖垮,做法是按租户设配额和优先级队列。配置隔离是体验层面,每个租户可以有独立的模型策略、提示词模板、工具集,互不干扰。
权限模型我建议直接用RBAC加数据标签的组合,不要自己发明。角色定义成平台管理员、租户管理员、开发者、业务配置者、终端用户五类,每类角色的操作范围写死;数据标签用在知识库和工具上,标记密级和归属部门,检索和调用时做交叉校验。这套组合能覆盖绝大多数企业需求,剩下的小部分用自定义策略补。千万不要把权限判断塞进提示词里让模型自己判断,那是把所有安全边界交给了一个概率模型。
还有一个实操细节:审计日志要记“谁在什么时间通过哪个智能体调用了哪个工具、拿到了什么级别的数据”,而不是只记“有人调用了接口”。前者能回答安全事件的追责问题,后者不能。日志保留期按行业惯例设置,敏感操作单独归档。
4.2 可观测性:只打日志等于没做
智能体系统的可观测性和传统服务不太一样,它需要额外关注三样东西:提示词版本、检索命中情况、模型输出的质量信号。传统监控看的是QPS、延迟、错误率,这些在智能体场景里依然要看,但不够。一个智能体可能所有请求都返回200,但答案全是废话,监控完全发现不了。
我的做法是建立一个调用链追踪体系,一次任务一个追踪ID,串起所有环节:意图识别耗时、检索召回条数和最高分、模型调用token数和延迟、工具调用次数和结果状态、最终输出长度。这些数据落到分析表里,可以支撑几类关键分析:检索召回分数普遍偏低说明知识库有问题;工具调用失败集中在某个工具说明接口不稳定;输出长度异常短说明模型可能被截断或者提前终止。这些信号比单纯的错误率有用得多。
质量信号需要额外采集。我一般在返回体里带一个隐式的反馈入口,用户点赞点踩可选填原因,同时记录“用户是否在收到答案后立刻重新提问”这个行为。两个信号结合能比较准确地定位bad case。线上抽检也做,每天抽几十条真实会话人工看一遍,成本不高但能发现自动化指标发现不了的问题。
4.3 成本核算:把Token账算到每个业务方头上
企业里推AI最大的阻力往往不是技术,是算不清账。业务方问“我这个场景一年要花多少”,如果答不上来,预算就批不下来。所以计费模块必须在第一版就做,而不是等上量了再补。
核算的粒度要细到“单次任务”。一次完整的智能体任务可能包含多次模型调用(规划、执行、总结)和多次工具调用,需要按追踪ID归集。模型侧按输入token和输出token分别计价,不同模型单价不同,要在配置表里维护。工具调用如果涉及外部付费接口,也要折算进去。下面这段是我用来做单次任务成本归集的简化逻辑,实际会用批处理跑:
# 单次任务成本归集:按追踪ID聚合各类调用开销 PRICE = {"model_small": (0.5, 1.5), "model_large": (4.0, 12.0)} # 每百万token的输入/输出价 def task_cost(trace): total = 0.0 for call in trace["model_calls"]: pin, pout = PRICE[call["model_tier"]] total += call["in_tokens"] / 1e6 * pin total += call["out_tokens"] / 1e6 * pout for call in trace["tool_calls"]: total += call.get("ext_cost", 0.0) return round(total, 6)有了单次成本,往上一层可以做租户月度账单、场景平均成本、以及最重要的“单任务成本趋势”。趋势比绝对值更有价值:某场景的单任务成本从0.02涨到0.05,说明有东西变了,可能是检索召回变差导致重试变多,也可能是提示词变长。这条曲线我建议做成周报,发给业务负责人,让他们对自己的用量有感知。
成本控制的手段也要提前备好:设置租户月度预算和超限策略(告警、降级到小模型、限流三档)、对高频重复问题做答案缓存、把长文档摘要从实时计算改成异步预计算。缓存这一项收益很大,企业场景里重复问题占比经常超过30%,命中缓存直接省掉整条调用链。缓存键的设计要注意,要包含知识库版本和提示词版本,否则更新内容后还在返回旧答案。
5. 从POC到生产:交付流程实录
5.1 六步交付法
我在多个项目里沉淀出一套六步流程,顺序不能乱:场景筛选、数据准备、原型验证、评测基线、灰度上线、运营迭代。每一步都有明确的交付物和退出条件,不达标不进入下一步。
场景筛选的标准是“高频、高价值、高容错”三者取其二。高频保证有足够样本验证,高价值保证业务方愿意投入,高容错保证早期问题不会造成严重后果。反过来,低频、低价值、零容错的场景(比如涉及资金变动的操作)第一版不要碰。
数据准备阶段的产出是“评测集加知识库”,评测集至少要有100条真实问题加标准答案,由业务专家标注。这个工作量经常被低估,但没有评测集后面所有优化都是盲目的。原型验证阶段控制在两周内,用最快的方式跑通端到端,目的是验证可行性而不是做产品。评测基线阶段要把准确率、召回率、平均轮次、平均耗时、单任务成本五个数测出来,作为后续迭代的对照。
灰度上线阶段选一个业务小组,二十到五十人,跑两周。这两周要密集收集bad case,每天过一遍。运营迭代阶段是长期工作,重点是建立反馈闭环——用户点踩的问题要能进入待优化队列,定期回流到评测集里。
5.2 一个虚构场景的落地记录
举个我参与过的模拟项目,某制造企业的设备故障辅助诊断。需求是运维人员描述现象,智能体给出可能原因和排查步骤,并能调用设备历史数据接口。第一版我们做得很简单:知识库放维修手册和历史工单,工具只接了一个查询设备运行参数的接口,工作流固定为“理解现象—检索手册—查参数—生成建议”。
上线第一周暴露的问题很典型。第一,运维人员的描述极其简略,经常只有一句“三号机异响”,检索几乎召不回有效内容。解法是在工作流前面加一个追问节点,用固定的几个问题引导补充信息:异响发生在哪个工况、持续多久、有无伴随报警。追问节点用规则触发,不消耗大模型。第二,历史工单里的解决方案质量参差,有些是临时处置,照搬会误导。解法是给工单加质量标签,只有经过复核的工单才进知识库,同时把“临时处置”单独标出来在答案里提示。第三,设备参数接口返回字段太多,模型经常抓错重点。解法是在网关层做字段裁剪,只留温度、振动、电流三个关键指标,并做阈值判断,直接告诉模型“振动值超上限”。
改完这三处,人工评估的可用率从52%提到81%,平均对话轮次从5.8降到3.2。这个案例说明一件事:智能体效果的大头在工程细节,不在模型选型。我们全程没有换过模型,所有提升都来自流程和数据侧。
5.3 验收指标怎么定才不被扯皮
验收扯皮的根源通常是“好用”这个词没有定义。我的做法是把验收拆成三层指标,每层都有明确的测量方法。第一层是技术指标:接口成功率、P95延迟、检索召回率、任务完成率,这些自动采集,不依赖主观判断。第二层是业务指标:人工替代率、平均处理时长变化、二次咨询率,这些要和业务系统数据打通。第三层是体验指标:满意度评分、主动使用率、弃用率。
三层里最容易被忽略的是“主动使用率”。系统上线了但没人用,技术指标再漂亮也没意义。我一般会设一个观察期,看周活跃用户数的走势,连续三周下滑就要停下来找原因,而不是继续加功能。
指标定完之后要写清楚测量口径和数据来源,比如“任务完成率”是指用户没有在同一个会话里重复提问且没有转人工,这个定义要提前和业务方对齐,避免验收时各说各话。
6. 常见问题与排查速查
6.1 高频故障速查表
| 现象 | 最可能的根因 | 排查动作 | 处理方式 |
|---|---|---|---|
| 答案答非所问 | 检索召回不准或权限过滤过严 | 看检索最高分和召回条数 | 补关键词检索、放宽过滤、加重排 |
| 智能体不调用工具 | 工具描述模糊或参数缺失 | 看规划输出是否提到工具名 | 补“什么时候用”的说明和参数示例 |
| 工具调用参数错误 | 缺少格式示例或校验缺失 | 看校验拦截日志 | 加pattern校验和示例,让模型自我修正 |
| 多轮对话丢失上下文 | 压缩阈值过低或摘要丢信息 | 看压缩触发点和摘要内容 | 提高阈值、摘要保留事实和结论 |
| 响应越来越慢 | 上下文膨胀或工具串行过多 | 看各环节耗时分布 | 并行化无依赖节点、压缩历史 |
| 成本突然翻倍 | 重试增多或提示词变长 | 看单任务token趋势 | 定位重试原因、精简系统提示词 |
| 同一问题答案不一致 | 温度参数过高或缓存未命中 | 看采样参数和缓存键 | 降到0.2以下、缓存键加版本号 |
| 灰度后指标下滑 | 新模型对长上下文处理弱 | 分场景对比新旧模型指标 | 按场景路由,不强求统一模型 |
这张表里的每一行我都真实遇到过。最值得说的是“答案答非所问”这一条,九成情况下不是模型问题,而是检索没给对材料。判断方法很简单:把检索到的内容打印出来,自己看一遍能不能回答问题,如果不能,那模型再强也没用。这个排查动作应该成为肌肉记忆。
6.2 我踩过的几个坑
第一个坑是过早追求通用性。第一版平台我设计了一套非常灵活的节点系统,什么都能配,结果业务方根本不会用,最后还是研发代劳。后来我把节点收敛到十二个,每个节点配三个模板,使用率立刻上来了。平台的价值不在于能表达多少种可能,而在于能把常见场景表达得多省事。
第二个坑是忽视提示词的版本管理。提示词改了没记录,效果变差了不知道回滚到哪一版。后来所有提示词进版本库,每次修改带变更说明和评测结果,可以一键回滚。这个机制在一次线上事故里救了我——新提示词导致工具调用率暴跌,十分钟内回滚恢复。
第三个坑是把评测集当成一次性工作。评测集不更新,优化就会过拟合到老问题上。现在的做法是每周把线上bad case回流一部分进评测集,保持评测集和真实分布的同步。规模控制在三百条左右,太多跑一次成本高,太少不稳定。
第四个坑是低估了组织协调的成本。技术方案再漂亮,业务方不配合标注数据、不参加验收,项目照样推不动。我的经验是每个场景配一个业务侧的对接人,明确他的投入时间,并且把这件事写进项目计划,而不是假设他会自愿投入。
最后一个提醒:不要把智能体当成万能解。有些问题用规则引擎解决又快又稳,成本还低一个数量级。我现在的判断习惯是先问“这个问题用if-else能不能解决”,能解决的绝不上一模型。模型应该用在真正需要理解和生成的地方,把它浪费在格式化输出和字段映射上,既贵又不可靠。这个取舍想清楚了,平台的建设方向也就清楚了。