本文深入探讨了如何通过优化Skill的description文本、实施动态工具加载和分层路由策略,以及采用Eval-Driven开发模式,将Agent的路由准确率从65%提升至92%。文章强调了触发词枚举、子路由规则、显式否定条件、专用工具优先级和上下文锚定等关键点,并介绍了使用Semantic Router进行动态加载和分层路由的方法。此外,还推荐了利用Skill Creator和Langfuse等工具进行自动化测试和持续优化的实践,为程序员和小白提供了提升大模型应用效果的实用指南。
上周有同事跑来找我吐槽:他对着 Agent 说了句"帮我查下 xx 服务的日志",结果 Agent 触发了一个资讯追踪 Skill,去帮他搜 AI 新闻。
这类问题在已经不是第一次了。我们的 Agent 上挂了十几个 Skill——有查集中式日志平台的、有查 Pod 容器日志的、有做分布式链路追踪的、有直接跑 kubectl 的,甚至通用 Bash 也能tail -f。“查日志"三个字往里一丢,五个 Skill 都举手说"我能干”。
这个问题困扰了我一段时间。最终把路由准确率从 65% 拉到 92%,方法并不复杂,但过程中踩了不少认知的坑,今天整理出来。
先把问题定义清楚
当用户输入一句自然语言,Agent 需要做一个决策:从 N 个 Skill 加上"不调用任何 Skill 直接回答"这 N+1 个选项中,选出正确的那个。
这本质是一个多类分类问题。分类器是 LLM 本身,而"类别定义"就是每个 Skill 的 description 文本。
理解了这一点,后面所有的优化手段就有了统一的评估框架——路由准确率就是这个分类问题的 accuracy。
路由靠什么?靠 description 的质量
目前主流 Agent 框架的路由机制出奇地一致——不管是 Claude Code 的 Skill、OpenAI 的 Function Calling、还是 LangChain 的 Tool,底层都是同一套:
- 把所有可用工具的 name + description 注入 system prompt2.LLM 根据用户输入做 in-context 分类3.输出决策:调哪个、传什么参数
所以,路由准确率的天花板 = description 写得有多好。
我来展示一个真实的对比。我们有个一站式运维 Skill,早期的 description 是这样的:
运维命令行工具,支持日志查询、监控查看、配置管理等功能。触发精确率大约 65%。经常误触发,也经常该触发时沉默。
优化后的版本(经过三轮迭代)变成了这样:
一站式运维 CLI。覆盖 RPC 泛化调用、日志平台查询、Pod 容器日志、APM 监控、分布式链路追踪、配置中心管理、SQL 执行、CI/CD 流水线。 即使用户没说"运维",遇到下列触发词也必须使用此 skill:pod / 容器 / 机器 / IP / application.log / gc.log / logstore / traceId / ... 关键路由原则:用户说"查日志"时——pod/IP/具体文件名 → 容器日志子命令;logstore/project/结构化查询 → 日志平台子命令;模糊不清 → 反问用户要查哪种日志。触发精确率上升到 92%。核心差别在三个点:
第一,从"能力描述"变成"触发词枚举"。 LLM 做 in-context matching 时,显式的关键词列表比模糊的能力描述有效得多。这不是直觉判断——我对同一个 Skill 跑了两版 description 的 A/B eval,触发词枚举版的召回率高了 17 个百分点。
第二,内建子路由规则。 单个 Skill 覆盖多种场景时,不要指望 LLM 在外面帮你分发,直接在 description 里写明"什么条件走哪个子命令"。
需要强调的是,这不是说 description 越长越好。把 500 字的模糊能力概述换成 200 字的结构化路由规则,效果反而更好。关键是从"我能做什么"的视角切换到"什么条件触发我"的视角——触发词、SKIP 条件、子路由逻辑各司其职,每一句都在帮 LLM 做分类决策,而不是在堆砌信息。
第三,兜底策略是反问而不是猜。 “模糊不清 → 反问用户要查哪种日志"这条规则,把误触发率从 12% 降到了 3%。因为 LLM 面对不确定情况时的默认行为是"先试试”,你得显式告诉它"不确定就别动手"。
多个 Skill 都能干同一件事的冲突消解
这是实际工程中最恶心的问题。我们的场景:查 Pod 容器的 CPU 使用率,运维 Skill 能查(封装了 APM 监控平台的接口),直接 Bash 跑kubectl top pod也能查。Agent 怎么选?
我总结出三条消解规则,按优先级排列:
规则一:显式否定 > 隐式推断
Anthropic 在 Tool Use Best Practices 文档中建议:
Describe what the tool does NOT do or when it should NOT be used, rather than only describing what it does. (在工具描述中明确说明工具不适用的场景,而不是只描述它能做什么。)
在工程实践中确实如此。我在每个 Skill 的 description 里加了SKIP条件:
SKIP: 用户问的是 git log / commit 历史 → 不触发SKIP: 文件路径以 .log 结尾但语境是代码仓库 → 那是源码文件不是运维日志SKIP: 用户在讨论 logging 库的配置 → 那是代码设计问题不是运维问题这比单纯加触发词管用。因为触发词再多也有边界 case,但"什么时候不要用"可以直接阻断 LLM 的"试一试"冲动。
规则二:专用工具优先于通用工具
用户问"查下 Pod 的 CPU",运维 Skill(专用)封装了鉴权、集群路由、格式化输出,Bash + kubectl(通用)需要用户自己处理 context 切换。选专用的。
但这条规则需要在 description 里显式表达出来,不能指望 LLM 自己推断:
当查询涉及容器监控指标时,优先使用本 skill 而非直接 kubectl 命令——本 skill 已内置集群鉴权和多环境路由,用户无需手动 switch context。规则三:上下文锚定 + 合并优于路由
同一个词在不同对话上下文里含义完全不同。做过微服务的人都知道——"日志"在运维对话里是日志平台查询,在 code review 对话里是看 logger 调用,在 CI/CD 对话里是构建日志。单靠触发词匹配解决不了这种歧义。
但比优化上下文识别更有效的做法是:直接减少需要路由的 Skill 数量。OpenAI 在 function calling 的文档里明确建议过这一点。
如果两个 Skill 有 60% 的功能重叠,合并成一个带子命令的 Skill,比靠 LLM 在两者间做路由稳定得多。路由层的每次决策都有出错概率,减少决策点本身就是在提升可靠性。
我们后来把"日志平台查询"和"Pod 文件日志"合并到了一个运维 Skill 下面,用内部子路由分发。合并后整体路由错误率下降了约 40%。这个收益比任何 description 优化都大。
当 Skill 数量上去之后:动态加载 + 分层路由
前面讲的 description 优化和冲突消解,在 Skill 数量 < 20 时够用了。但当 Skill 增长到 20+ 之后,会撞上一个结构性问题:所有 Skill 的 description 一起塞进 system prompt,LLM 的分类准确率会随候选数量增加而下降。Anthropic 的官方建议是单次调用不超过 20 个工具。
这时候靠优化 description 文本已经不够了,需要在架构层面做两件事。
动态工具加载:先筛再选
核心思路:不要一次把所有 Skill 都给 LLM,先用轻量级检索筛出最相关的 5-8 个,再让 LLM 从这个小集合里做最终选择。
实现很简单——把每个 Skill 的 name + description 做 embedding 存起来,用户输入进来后算余弦相似度,取 top-k 注入 prompt。开源库 Semantic Router 做的就是这件事,支持 OpenAI / Cohere / 本地 embedding 模型,pip 装上就能用,路由延迟在 10ms 以内。
用户输入 → embedding 检索 top-8 Skill → 仅这 8 个注入 prompt → LLM 精选我们在 Skill 数量到 25 个时上了这一层,路由准确率回升了 6 个百分点(从 86% 到 92%),同时 prompt token 消耗减少了约 60%。
分层路由:先分类再选工具
当 Skill 可以按领域分组时(运维类、数据类、研发效能类),可以做两级路由:
第1级:embedding 匹配或小模型分类,确定 Skill 所属类别(3-5 个类别)第2级:只把该类别的 Skill(3-5 个)交给 LLM 做最终选择
这个模式的好处是每一级的候选都很少,分类准确率自然高。第一级用 Semantic Router 可以做到接近零延迟,第二级用标准的 function calling。两级串联的整体准确率通常比单级全量路由高 8-15 个百分点。
这两个方案不需要 fine-tune 模型,不需要 GPU,用现有的 embedding API + 几十行代码就能落地。对大多数团队来说,description 优化 + 动态加载两层组合就足以覆盖 30 个以内的 Skill 场景。超过 30 个再考虑 fine-tune 专用路由模型(参考 Gorilla 项目的 OpenFunctions 方案)。
Eval-Driven:用数据量化路由质量
写了个 Skill,怎么知道好不好?光看"能不能跑通"是不够的。核心指标就三个:
| 指标 | 定义 | 达标线 |
|---|---|---|
| 触发精确率 | 触发时确实该用这个 Skill 的比例 | > 90% |
| 触发召回率 | 该用时确实触发了的比例 | > 85% |
| 误触发率 | 不该触发但触发了 | < 5% |
怎么跑 eval?推荐直接用 Skill Creator。 主流 Agent 框架(如 Claude Code)内置的 Skill Creator 覆盖了 eval 全流程——AI 自动生成测试集(包括同义改写、上下文干扰、相邻 Skill 混淆查询等人工难以穷举的 case)、跑评估、输出指标、支持多版 description 的 A/B 对比。不需要手写脚本,"帮我跑一下这个 Skill 的 eval"就能拿到结果。框架没有内置 eval 能力的,可以用 promptfoo 或 BFCL 补位。
一个 eval case 长这样:
| query | 期望触发 | 期望不触发 |
|---|---|---|
| “帮我看下 pod 的内存占用” | 运维 Skill | 资讯 Skill、文档 Skill |
| “logging 的 level 配置怎么写” | 无(直接回答) | 运维 Skill |
| “查下昨天这个服务的错误日志” | 运维 Skill(日志平台子命令) | 容器 Skill |
| “帮我写个 logger 工具类” | 无(直接回答) | 运维 Skill |
50 个 case 就够。一条重要经验:测试集里正例和反例的比例大约 6:4。我们早期犯的错就是全是正例,精确率看着 95%+,但线上误触发率高达 15%——反例一个没测。
每次改 description 前后各跑一次 eval,对比数字,有没有改进一目了然。改代码之前先写 eval case,改完不达标不合并——这就是 Eval-Driven Development。
持续迭代:让 AI 优化 AI
Description 优化只是起点。Skill 上线后需要持续迭代——但这件事本身也应该交给 AI 来做,而不是靠人手动改。
主流 Agent 框架已经内置了 Skill 管理能力。以 Claude Code 为例,它提供了两个内置 meta-skill:Skill Creator 负责创建、eval 测试、description 优化;Skill Optimizer 负责审查触发语义、检测相邻 Skill 的路由冲突、评估安全边界。这类"用 AI 管理 AI 工具"的模式并非 Claude Code 独有——任何支持 tool-use 的 Agent 都可以构建类似能力。核心思路是:把 description 当作可优化的参数,把 eval 指标当作优化目标,让 AI 在参数空间里自动搜索。
配合 Langfuse 等可观测性工具采集线上 trace,可以搭建完整的迭代闭环:
线上最值得关注的三个信号:重试(用户换个说法重新问,说明做了但没做对)、放弃(中途退出对话,说明方向不对)、绕过(用户选择手动操作,说明信任流失)。这些信号喂给 Skill Optimizer 自动分类处理,人只需确认优化方案。
当优化工具持续指向的不是 description 文字问题,而是职责边界问题时,就该做拆分或合并了。该拆:description 超过 500 字还在加条件、不同子功能的 eval 分数差异大。该合:两个 Skill 被同一句话同时触发、用户完成任务需要连续调两个 Skill。
最后
从 65% 到 92%,做对了四件事:把 description 从能力说明改成结构化路由规则;Skill 多了之后上 embedding 动态加载降低分类难度;用 eval 把"感觉变好了"变成可量化的数字;用 Skill Creator 把创建、测试、优化跑在 AI 工具里而不是手动迭代。
一条建议:从第一个 Skill 开始就用 Skill Creator 来创建和测试。别等到手动维护不动了才想起自动化——到那时候要修复的不只是准确率,还有已经流失的用户信任。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2026 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要《AI大模型入门+进阶学习资源包》,下方扫码获取~
① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
以上资料如何领取?
为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!
不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。