问答管理(qa-management)
> 运行环境:本 Skill 运行于 openclaw 智能体环境(微信 ↔ openclaw 通道),路由目标为具备文件系统读写能力的 Claude Code 环境;Claude Code 侧须已安装 knowledge-base-management 与 sop-forge 两个 Skill。
一、核心原则
- 默认入口,先判后答:每条微信消息无条件先经本 Skill 意图判定,判定完成前不产生任何对外回复。
- 只做分诊,不做执行:本 Skill 只负责识别、调度与兜底,不亲自执行知识库或工作流操作。
- 判定可审计:每次路由决策写入 route-log.md(判定意图、置信度、命中证据、路由去向),未写日志不得分发。
- 澄清有界:同一话题最多澄清
clarify_max_rounds(默认 2)轮,避免无限追问。
执行主体标注:[openclaw]=openclaw 执行;[Claude Code]=路由至 Claude Code 执行;[人]=用户执行。
二、意图分类体系
所有入站消息必须归入以下四类之一,分类是路由的唯一依据:
| 意图 | 标识 | 定义 | 典型表达 |
|---|---|---|---|
| 知识库管理类 | kb |
知识库的收录、摄取、查询、归档、健康检查 | "把这篇文章收进知识库"、"查一下知识库里关于 xx 的内容" |
| 工作流管理类 | sop |
SOP 文档、流程转 Skill、版本管理、流程生命周期 | "把这个 SOP 变成 skill"、"更新 xx 流程"、"回滚到上一版" |
| 日常聊天类 | chat |
与知识库、工作流无关的通用问答、闲聊、临时任务 | "今天天气怎么样"、"帮我润色这句话" |
| 待澄清类 | unclear |
语义模糊、指代不明、跨类别混合 | "帮我处理一下那个东西"(无上下文) |
完整触发词表与负向排除规则见 references/routing-rules.md。
三、意图判定程序
按三要素判定程序执行,综合产出意图类别与置信度:
- 关键词举证:命中触发词表中的词项即记录;闲聊中顺带提及"知识""流程"不构成触发。
- 语义举证:脱离关键词,判断动作与对象是否落在目标 Skill 的 description 覆盖范围(语义匹配而非字面匹配,如"学习这份文件"语义上等于知识库摄取)。
- 上下文举证:结合最近 5 轮会话做指代消解(如"把它归档"中的"它")。
同时命中 kb 与 sop 时,按"动作动词优先"判定——动作属于哪个 Skill 的职责即路由到哪;仍无法判定则进入澄清。
四、置信度决策表
| 置信度 | 动作 | 去向 |
|---|---|---|
| ≥ 0.8 | 直接路由 | kb → Claude Code/knowledge-base-management;sop → Claude Code/sop-forge |
| 0.5 – 0.8 | 澄清后路由 | 进入意图澄清流程(第六节) |
| < 0.5 | 按日常聊天 | openclaw 自行应答;应答中若演化出 kb/sop 诉求,重新判定 |
unclear |
澄清 | 进入意图澄清流程 |
置信度阈值可按路由分别调优(config.json 的 routes.*.min_confidence),高价值操作建议 0.9——宁可澄清,不可错路由。
五、路由分发
- [openclaw] 读取 config.json 确认目标路由
status: active;为paused时按降级处理并告知用户。 - [openclaw] 封装标准化请求体:原始消息 + 上下文摘要(仅保留与意图相关的最小必要信息)+ 判定结果 + 显式目标 Skill 名,附
X-Route-From: qa-management标识。 - [openclaw] 按 config.json 的
claude_code.endpoint调用 Claude Code;默认超时 120 秒,超时重试 1 次。 - [Claude Code] 加载指定 Skill 执行:
kb→ knowledge-base-management 的审查/摄取/查询/归档/体检流程;sop→ sop-forge 的核心工作流。禁止让 Claude Code 自行猜测目标 Skill。 - [Claude Code] 返回结构化结果:执行状态 + 摘要 + 产物路径 + 需用户决策事项。
- [openclaw] 格式化回传微信:先说结论,再列关键细节,最后附需决策事项;超 2000 字分段发送并附"回复『详情』查看完整内容"。
多轮透传:目标 Skill 执行中需用户确认时(如收录判定、变更单确认),确认请求原样透传至微信,用户回复后透传回 Claude Code。透传期间会话状态保持 routing,不重新进入意图判定;用户超 30 分钟未回复则通知 Claude Code 挂起,用户回来时提示"上次操作未完成,是否继续"。
六、意图澄清
- [openclaw] 发出一次澄清提问,要求:
- 给候选选项(≤3 个)让用户选,不开放提问。示例:"你是想 ① 把这份材料收录进知识库,② 基于它生成一个流程 skill,还是 ③ 只是聊聊?"
- 说明判定依据(如"因为提到了『归档』"),便于用户纠正。 - [人] 回复选择或直接纠正。
- [openclaw] 将回复并入上下文重新判定;用户明确纠正时,在路由日志记录
correction(判例库素材)。 - 澄清达上限仍未明确:按
chat处理并告知"如需知识库/工作流操作,请直接说明"。
澄清话术模板见 assets/clarify-templates.md。
七、会话状态机
| 状态 | 含义 | 转移 |
|---|---|---|
idle |
无进行中意图 | 收到新消息 → analyzing |
analyzing |
意图判定中 | 判定完成 → routing / clarifying / chatting |
clarifying |
等待澄清 | 用户回复 → analyzing;达上限 → chatting |
routing |
等待 Claude Code 结果 | 结果返回 → idle;超时/失败 → 降级 → idle |
chatting |
openclaw 自行应答 | 应答完成 → idle |
跨会话不继承中间态,一律从 idle 重新判定。
八、降级与异常处理
| 异常 | 情形 | 处理 |
|---|---|---|
| 路由异常 | Claude Code 不可达 / 超时 / 目标 Skill 未安装 | 告知用户并提供选项:(a) openclaw 临时应答(标注非专业执行);(b) 稍后重试。不得静默失败或假装路由成功 |
| 判定异常 | 证据相互矛盾、置信度无法计算 | 按 unclear 进入澄清,不强行路由 |
| 透传异常 | 用户超 30 分钟未回复确认 | 挂起操作,状态回 idle,用户回来时提示继续 |
| 结果异常 | Claude Code 返回格式不符约定 | 尽力提取关键信息回复,记录 failed 日志与原始返回 |
| 配置异常 | config.json 缺失或非法 | 仅 chat 正常处理;kb/sop 类提示先完成初始化 |
九、日志与路由迭代
- 路由日志规范(格式、分片、判例库)见 references/route-log-spec.md。
- 路由质量检查与规则迭代流程(误判提炼、触发词更新、阈值调优)见 references/routing-rules.md。
十、初始化
- [openclaw] 引导 [人] 配置 Claude Code 调用方式(endpoint),确认 Claude Code 侧已安装 knowledge-base-management 与 sop-forge。
- [openclaw] 以 assets/config.template.json 为模板生成 config.json,初始化路由日志骨架。
- [openclaw] 发送一条测试消息验证全链路(判定 → 路由 → 回传)。
十一、隐私规则
- 微信聊天内容不出本地链路:openclaw → Claude Code 仅在本机/内网进行,不得转发第三方服务。
- 路由日志只记录判定要素与摘要,不记录消息全文;敏感内容摘要需脱敏。
- 透传的上下文摘要仅保留与意图相关的最小必要信息。