JevToolSelectionMiddleware 在模型推理前判断哪些工具适合当前请求,再限制可选工具数量。它可以同时保留多个相关工具,也可以明确不提供业务工具;筛选不会授予执行权限。
示例场景:查订单、条件退款与普通闲聊共用一个 Agent
客服 Agent 注册了query_order、refund 和结构化回答工具 generate_response。客户问“查一下订单 A1001”时,通常只需要查询;说“先查订单,没发货就退款”时,查询和退款都可能需要;普通问候则无需业务工具。
只按数量取一个工具,会漏掉条件退款中的查询步骤;始终暴露全部工具,又会增加无关选择。JEV 先分别判断适用性,再裁剪数量,因此可以保留一组工具,而不是强迫单选。
1. 设置可选数量和必要工具
client 按客户端接入创建。这里的配置分别服务于同一个客服场景:
阈值只用于演示。默认必要工具还包括
load_skill_through_path、reset_tools;显式配置时按自己的 Harness 保留必要工具。这个集合只保留原输入中确实存在的工具,不会创建或注册工具。
2. 注册到现有 Harness
model 和 toolkit 是已有生成模型与工具注册表。中间件在每轮推理前读取实际消息和工具 schema,不需要应用另外拼一份用户问题。筛选只影响模型能选择哪些工具;执行前仍由权限与业务规则把关。
3. 明确选空与判断失败采用不同处理
观察结果符合预期后,可把模式改为 ENFORCE,并重新构建中间件和 Agent。
这些数值是演示分支。实际 JEV 判断是否准确,需要用你的业务样本验证。条件性退款即使被保留,也必须在执行前防护及业务代码中核查条件,筛选本身不保证执行时机正确。
运行与验证
按案例构建步骤设置JEV_CP:
候选规模与取消
无可选工具或没有用户文本时不请求;只有一个候选也判断是否适用。候选按 64 个独立问题串行分批,共享一个总预算。多个明确适用工具按概率排序后裁剪,同分保持原候选顺序,最终工具顺序仍沿用原输入。 缺项、多项、非法概率、超时或后端异常都回退原目录;取消后不继续调用后续推理。阈值必须满足0 <= rejection < confidence <= 1。