公司动态

数字员工怎么选对工具?——P0→P1→P2 三层选择策略

📅 2026/7/16 9:04:00
数字员工怎么选对工具?——P0→P1→P2 三层选择策略
核心论点数字员工的工具选择不是让 LLM 猜而是一个三层拦截体系——规则过滤→语义匹配→模型确认85% 的请求在到达 P2 LLM 确认之前正确意图已被召回至 Top-2 候选。痛点场景一家银行上线了数字员工客服用户问我的信用卡账单到哪了。数字员工调用了check-shipping查物流工具返回暂无物流信息。用户又问了一遍数字员工还是调用了错误的工具。问题出在哪LLM 在语义理解时把到哪了和物流关联起来但用户实际要的是账单查询。这个案例暴露了工具选择的核心矛盾纯依赖 LLM 不可靠纯规则覆盖又不全。下面我们拆解常见的三种失败模式失败模式❌ 纯 LLM 工具选择让模型猜很多企业直接把所有工具的描述传给 LLM让模型自己选择最简单的做法——把所有工具描述发给 LLM 让模型自己选。问题是延迟高~500ms、整体准确率 92% 但 query-order 等关键意图仅 80%到哪了误判为物流、年成本约 ¥2,400。既然纯 LLM 不可靠那反过来只靠规则行不行❌ 纯规则匹配覆盖不全面有些企业只用关键词匹配只用关键词匹配——退→退款、物流→查物流。问题是覆盖率只有 50%且易误判“退一步说中的退”。纯规则不够纯 LLM 也不行。还有一个容易被忽视的问题即使方案选对了工具本身的描述质量也会影响选择效果。❌ 工具描述质量差LLM 看不懂工具是做什么的很多企业给工具写的描述过于简单或模糊工具描述只写了查订单——LLM 不知道这个工具能查哪些订单全部/待付款/已发货、需要什么参数、返回什么结果。问题选择错误相似意图的工具难以区分“查物流和查订单都包含查”参数错误LLM 不知道该传什么参数导致工具调用失败学习成本高需要大量样本才能让 LLM 学会正确选择解法框架三层拦截体系从三种失败模式中我们总结出一个核心思路工具选择不应该让 LLM 独自承担而是需要建立多层拦截体系。基于此设计了 P0→P1→P2 三层拦截策略用户输入 → P0 规则过滤~5ms→ ✅ 命中52%→ 工具选择完成 ↓ 未命中48% P1 语义匹配~20ms→ ✅ 命中累计 85%→ 工具选择完成 ↓ 剩余 15% 模糊 P2 模型确认~157ms→ ✅ 累计命中 80% → 工具选择完成核心设计原则大部分请求在到达 LLM 之前就应该完成工具选择。三层拦截策略的设计思路是由简到繁先用低成本的规则过滤解决大部分请求再用向量检索补充最后用小模型兜底。下面我们逐层拆解P0 规则过滤关键词 同义词归一化关键词匹配 同义词归一化。退了吧→退款查一下单→查询订单。同义词映射表从 Skill YAML 的trigger_keywords自动生成零维护。覆盖 52%准确率 86.5%。P0 解决了超过一半的请求但还有 48% 需要进一步处理。这时候需要引入语义理解能力。P1 语义匹配FAISS HNSW 向量检索P0 未命中时用 BGE-small-zh-v1.5 将用户输入转为 512 维向量在 FAISS HNSW 索引中检索最相似的意图样本。意图命中后对高频意图词加权 ×1.5如退命中退款意图进一步缩小候选范围。返回 Top-3 候选P0P1 Top-2 召回率 85%。P0P1 已经覆盖了大部分场景但还有 15% 的模糊请求需要最终确认。这时候需要引入小模型做二选一判断。P2 模型确认本地小模型二选一剩余 15% 的模糊请求用本地部署的 Qwen2.5-1.5B-InstructRTX 4070p50 157ms对 P1 返回的 Top-3 候选做确认。如果 P2 的选择与 P1 Top-1 不一致将 Top-3 一并纳入候选由执行器做最终判断。累计命中 80%。三层拦截体系的整体效果如何下面是与纯 LLM 方案的对比延迟对比方案p50p95年成本纯 LLM function calling477ms672ms~¥2,400P0 阶段52%请求~25ms~30ms~¥500P2 阶段15%请求~157ms~312ms~¥2,500实战案例shop-agent 的工具选择流水线在 shop-agent 项目中我们实现了完整的三层工具选择流水线架构图P2 本地小模型确认 ~157msP1 FAISS 语义匹配 ~20msP0 规则过滤 ~5ms命中未命中 48%我的东西到哪了命中剩余 15% 模糊用户输入我想退掉昨天买的洗衣机关键词匹配trigger_keywords来自 Skill YAML✅ 命中 52%意图退款BGE-small Embedding HNSW 检索 意图词加权 ×1.5✅ 累计命中 85%Top-2 意图候选Qwen2.5-1.5B-InstructRTX 4070交叉校验 P1 Top-1✅ 累计命中 80%意图→工具映射 ~0ms退款 → request-return路由到执行器关键设计决策为什么是 P0→P1→P2 这个顺序零成本先跑P0解决 52%→ 语义补缺P1Top-2 到 85%→ LLM 兜底P2仅 15% 触发为什么用本地小模型做 P2云端 LLM 的 p99 延迟抖动500ms本地 Qwen2.5-1.5B-Instruct 在 RTX 4070 上 p50 仅 157ms为什么只做候选集确认P0P1 已经把 5 个意图筛选为 Top-3 候选从 3 个中选 1 个的问题复杂度远低于从 5 个中选 1 个理解了设计思路和实战实现后下面是落地时需要检查的事项落地检查清单[ ] 梳理所有工具的 trigger_keywords从 Skill YAML 自动抽取 [ ] 构建意图向量索引BGE-small FAISS HNSW [ ] 部署本地小模型Qwen2.5-1.5B-Instruct [ ] 实现意图→工具映射表O(1) 查表 [ ] 设置 P0/P1/P2 阈值推荐P0 关键词匹配、P1 Top-2 相似度 0.65 [ ] 配置交叉校验逻辑P2 与 P1 不一致时纳入 Top-2 [ ] 建立监控指标各层命中率、延迟、误判率 [ ] 准备降级方案Embedding 不可用时跳过 P1仅用 P0P2