技能多了提示词变垃圾场——我们改成按需检索注入,顺带修了中文渲染和「搜一次就下结论」的毛病
原来的做法:启动时把技能目录整体写进系统提示。每加一个技能,就往提示词里塞一段说明。加到几十个技能时,每次请求都带着大量当前用不上的内容——占 token,也稀释模型注意力。
现在的做法:每轮对话先做一次检索,只把命中的前几个技能(名称 + 描述)注入;没命中就回退到完整目录,保证不会因为检索失败而丢能力。
用一个具体场景说差别:用户在飞书里问「怎么把审批流接到钉钉」,这轮只需要「钉钉接入」和「审批流配置」两个技能的说明,不需要把绘图、语音、文件处理那几十个技能的说明全带上。
这不是新概念,检索增强在很多场景都用。但把它用在「技能注入」这个位置,效果比想象中直接——提示词短了,模型的注意力也更集中。
我们给 Agent 加了画图能力,可以输出流程图、架构图这类图形。做的时候踩了一个坑:图形引擎默认按 1 倍分辨率导出 PNG,英文标签没问题,中文标签糊。
| 导出倍率 | 三节点图实测尺寸 | 中文标签 |
|---|---|---|
| 1 倍(默认) | 124×224 像素 | ❌ 笔画糊成一团 |
| 3 倍 | 367×667 像素 | ✅ 正常显示 |
所以现在默认按 3 倍导出。这个数字没有理论依据,就是试出来的——中文笔画密,低分辨率下笔画会糊成一团。别信默认值,用你们自己的图实测。
另一个取舍:图形引擎只留一个,把之前试过的另一套路径砍掉了。两套并存的时候,维护成本和出错概率都是双份。
这是行为层面的改动,不是功能。我们给系统提示里加了一条纪律:只搜一次就下结论是不允许的,至少换一种说法再搜一次。
原因很实际。搜索类任务里,第一次没搜到,很可能是关键词选错了,而不是「这个东西不存在」。只搜一次就回答「没有」,是最常见的错误来源。
这条纪律还要求区分两种情况:「判据错了」和「数据错了」。比如用户问「有没有支持 XX 的产品」,搜不到时,要先想是不是自己搜的词不对,而不是直接说「没有这样的产品」。这条纪律做成了开关,可以按场景开或关。
稳定性方面的工作占了大头,多数不适合展开讲,挑两个能说的:
上面这些,都是我们自己产品里的能力和稳定性改进。没有客户案例,没有使用数据——产品上线时间还不长,这类数字编不得。
如果你们在做类似的 Agent 产品,有两个点可能值得参考:技能注入可以做成检索式的;中文渲染的分辨率要实测,别信默认值。