构建可靠的Skill触发机制

在大模型应用开发中,我们常常过度关注Prompt编写和模型效果,却忽略了一个更底层的问题:Skill(工具/能力)应该在什么时候、以什么方式被触发?
一个成熟的 AI Agent 系统,绝不应该把所有压力都交给 LLM 去“猜”。如果触发机制设计不好,要么上下文爆炸导致成本失控,要么意图误判导致用户体验灾难。
本文将系统性拆解Skill触发的完整生命周期,从事件源头到执行管控,为你提供一套可落地的架构设计参考。
一、触发源:谁在发起请求?
一切始于“事件”。我们将触发源分为三类:用户交互、系统调度 和 外部事件。
1. 用户交互
这是最直接的入口。
• 自然语言输入:用户说“帮我订张票”。
• 会话上下文:多轮对话的延续,例如用户接着上一句问“那取消呢?”。
2. 系统调度
这是自动化能力的核心,也是最容易产生复杂逻辑的地方。
• Hook 触发:监听生命周期。例如“对话开始时自动加载用户画像”、“任务失败时触发告警”。
• Cron 触发:定时任务。例如“每天早上 9 点生成数据日报”。
• Agent 协作:多 Agent 架构中,Planner Agent 调用 Executor Agent。
• Meta Skill 递归:Skill 调用 Skill,形成链式反应(例如“部署”技能调用“测试”技能)。
3. 外部事件
连接现实世界的桥梁。
• Webhook:GitHub Push、支付回调。
• 队列消息:异步任务消费。
• 状态变更:数据库更新、文件上传完成。
二、决策与路由:选对 Skill 是关键
有了事件,下一步是决定“用哪个 Skill”。这是整个架构的大脑。
1. 前置路由(Pre-LLM Router)
为了省 Token、降延迟,在部分场景下可以考虑不用 LLM。
• 黑白名单:简单粗暴地禁用或推荐。
• 字符/正则匹配:如“帮我查天气”直接命中天气 Skill。
• 向量检索:基于语义相似度,从海量 Skill 库中召回候选。
• 条件断言:基于状态码、阈值(如 CPU > 80% 触发扩容)。
• 模态匹配:多模态场景下,看到图片自动路由到识图 Skill,看到 PDF 自动路由到解析 Skill。
2. 显式路由(Resolved Invocation)
用户或系统已经明确指定了目标。
• /command、@skill、UI 按钮点击。
• API 调用直接携带 skill_id。
注意:显式路由不应关心 Prompt 注入细节,那是下一层的事。
3. LLM 路由(LLM-based Resolver)
当意图模糊时,交给大模型裁决。
• 全量匹配:把所有 Skill 塞进 Prompt。不推荐,仅限玩具项目。
• 启发式匹配(主流):只注入 Skill 的 描述(Description),让 LLM 选名字,再加载详情。
• 混合模式:核心 Skill 常驻 Prompt,长尾 Skill 按需加载。
4. 隐式与兜底
• 隐式路由:没命中任何规则,LLM 自由发挥。仅限低风险只读场景。
• 未命中处理:拒绝执行、引导澄清或转人工。
三、注入策略:上下文管理的艺术
选对了 Skill,还要考虑怎么把它放进上下文(Context)。这是成本控制的核心。
| 策略 | 适用场景 | 说明 |
|---|---|---|
| 全量注入 | Skill 极少 | 包含 Instructions、Examples、Tool Spec |
| 精准加载 | 显式调用 | 只加载必要的 Schema |
| 摘要+懒加载 | 大规模系统 | 先读描述,命中后再 Fetch 详情 |
| 常驻注入 | 核心高频 | 固定在 System Prompt 中(需严格限制数量) |
红线:所有策略必须遵守 Token Budget(上下文窗口约束)。
四、执行形态:不仅是函数调用
Skill 的执行方式决定了系统的复杂度。
• 即时执行(Atomic):无状态调用,用完即走(如查天气)。
• 确认式执行:高风险操作(如转账、删库),必须用户 Confirm。
• 工作流执行(Stateful):代码评审、发布流水线、多轮审批,涉及状态机。
• 异步任务:图像识别、PDF 解析、大数据计算,需要队列和回调。
• 递归与协作:复杂的自动化任务,涉及多 Agent 协同。
五、管控机制:工程化落地的保障
没有管控,就没有生产级系统。
1. 权限与作用域
• 鉴权:租户隔离(Tenant Isolation),用户 A 不能调用用户 B 的私有 Skill。
• 风险等级:标记 read_only、mutates_data,限制高危触发。
2. 冲突消解
• 互斥组:代码生成不能同时用 GitHub Copilot 和内部私有模型。
• 优先级与抢占:安全风控 Skill 可以随时中断当前执行(Preemption)。
• 去重与节流:防止 Webhook 抖动导致重复执行。
3. 参数与幂等
• 参数绑定:来源可以是 LLM 提取、用户表单或外部 Payload。
• 幂等性:使用 Idempotency Key 确保重试不会造成副作用(如重复扣款)。
4. 可观测性
• 触发追踪(Trace):记录为什么选了这个 Skill(Reasoning)。
• 诊断事件:记录 candidate_list(召回了谁)、selected_reason(为什么选它)、rejected_by_policy(谁被拦了)。
总结
一个健壮的 Skill 触发系统,应该是分层的:
1. 快路径(Fast Path):规则、正则、显式调用 —— 快、准、省。
2. 慢路径(Slow Path):LLM 路由、向量检索 —— 智能、灵活。
3. 安全网(Safety Net):权限、熔断、降级 —— 稳。
不要试图用LLM解决所有路由问题,也不要试图让所有Skill都活在Prompt里。分离触发源、路由逻辑与执行策略,你的Agent才会真正从Demo走向生产。