nim-kb-search

SKILL.md

NIM 知识库检索

CLI 触发标记

触发本 skill 时,第一行必须输出一行简短的标记,格式如下:

[nim-kb-search] 已触发 | 类型=<track_type> | 产品=<product> | 关键词=<keywords>

规则:

  • 仅一行,不换行
  • track_type 未确定时填 待确认
  • product 未确定时填 待确认
  • 关键词 列举从用户描述中提取的主要检索词(错误码、API 名、功能关键词等)
  • 标记行之后继续输出知识库检索结果

知识库同步(每次检索前执行)

同步命令

KB_DIR="$HOME/nim-knowledge-base/rags/knowledge"
KB_REPO="https://github.com/19967431260/rags.git"
[ ! -d "$KB_DIR/.git" ] && git clone "$KB_REPO" "$KB_DIR" || (cd "$KB_DIR" && git pull origin master)

同步失败时继续使用本地缓存,结果末尾注明:⚠️ 知识库同步失败,结果基于本地缓存


触发条件

触发词(用户明确发出以下指令时触发):

搜知识库 / 查历史案例 / 有没有类似问题 / 知识库里搜一下 / 查一下知识库 / 有没有相关记录

不触发

  • 用户未主动发出检索指令
  • 本轮已检索且用户未提供新线索

检索类型自动判断(触发后根据当前问题上下文判定):

当前问题特征 检索类型
有报错 / 错误码 / 功能不生效 / 崩溃 / 超时 排查类
咨询接口用法 / 是否支持 / 如何实现 / 配置问题 咨询类
无法判断 两类都搜,结果合并展示

Workflow

Step 1:提取检索参数

从用户描述和上下文件中提取以下字段,未能明确的标记为 ?

字段 说明 参照
track_type 排查类咨询类 有报错/异常→排查类;咨询→咨询类
product 标准产品名 见下方产品识别规则
feature 功能模块 如:消息收发 / 音视频通话 / 短信发送
platform 客户端平台 iOS / Android / Web / Flutter 等
sub_type 细分类型 排查类:集成类/测试问题/使用问题/线上事故;咨询类:能力与边界/功能实现/接口用法/配置开通/需求梳理
tags_hint 关键词集合 错误码、API名、功能词,3~6个
title_keywords 标题分词 核心问题描述的分词

产品识别规则(优先级从高到低):

  1. 匹配别名关键词 → 推断标准产品名
标准产品名 别名 / 关键词
IM-SDK IM SDK、云信IM、即时通讯、NIM、消息云
IM-UIKit UIKit、UI组件、UI库、界面组件
RTC NERTC、音视频、实时音视频、视频通话、连麦、Wwise
呼叫组件 呼叫、call kit、1v1通话、群组通话、CallKit
NERoom 房间组件、NERoom、多人房间、互动课堂
网易会议 会议、Meeting、视频会议、会议SDK
短信 短信服务、SMS、验证码短信、通知短信、营销短信
智能体 情感陪伴智能体、AI智能体、对话AI、实时AI、情感陪伴
  1. 从技术词汇(API名称、错误码前缀、功能描述)推断
  2. 无法判断 → 全库扫描

Step 2:确定扫描路径

知识库根目录:~/nim-knowledge-base/rags/knowledge/

扫描路径(排查类 / 咨询类统一):

不区分排查类还是咨询类,递归扫描 rags/{product}/{feature}/ 目录下的所有 .md 文件(含该目录本级及任意深度子目录),由相似度计算决定结果排序。

等效命令:

find ~/nim-knowledge-base/rags/knowledge/{product}/{feature}/ -name "*.md"

{platform} 合法目录名(排查类文件所在子目录):iOS / Android / Web / Flutter / HarmonyOS / Windows / macOS / Linux / Node / Server / 通用

扫描范围降级策略:

按以下顺序逐级扩大,直到候选结果 ≥ 3 条或已到最宽范围为止:

级别 扫描范围 等效命令
L1(默认) {product}/{feature}/ 目录下所有 .md(含子目录) find ./{product}/{feature}/ -name "*.md"
L2 {product}/ 目录下所有 .md(含子目录) find ./{product}/ -name "*.md"
L3 全库所有 .md,按 title_keywords 优先排序 find ./rags/ -name "*.md"

每级扫描完成后统计相似度达标的候选数,不足 3 条则自动进入下一级,达到 3 条即停止降级。 最终输出时注明扫描级别,例:(扫描范围:L2 - 跨平台)


Step 3:相似度计算

排查类(逐文件计算):

结论相似度 = Jaccard(root_cause + solution)   # 两字段合并计算
结论相似度 现象相似度 = Jaccard(description) 判定
≥ 0.60 ≥ 0.55 【高度匹配】
≥ 0.60 < 0.55 【可能相关】(现象不同但根因相同)
< 0.60 不展示

无法获取 root_cause(问题刚提出时)→ 改用:Score = Jaccard(tags) × 0.6 + Jaccard(title) × 0.4,≥ 0.50 展示

咨询类(逐 entry 计算):

咨询相似度 = Jaccard(tags) × 0.6 + Jaccard(title) × 0.4
咨询相似度 判定
≥ 0.65 【高度匹配】
0.40–0.65 【可能相关】
< 0.40 不展示

分词方式:以空格、标点及中文字符边界为分隔符

最多展示 5 条,按得分降序排列。


Step 4:输出结果

在回复开头输出检索结果,之后继续问题分析:

排查类结果格式:

📚 知识库检索结果(排查类,共 N 条)
────────────────────────────────
【高度匹配】{title}
  平台:{platform} | 产品:{product} | 功能:{feature}
  根因:{root_cause}
  解决方案:{solution}
  来源客户:{customers} | 更新:{updated}

【可能相关】{title}
  平台:{platform} | 产品:{product}
  根因:{root_cause}
────────────────────────────────

咨询类结果格式:

📚 知识库检索结果(咨询类,共 N 条)
────────────────────────────────
【高度匹配】{title}
  产品:{product} | 功能:{feature} | 平台:{platform}
  答案:{solution}
  来源客户:{customers} | 问过 {frequency} 次

【可能相关】{title}
  产品:{product} | 功能:{feature}
  答案摘要:{solution 前50字}...
────────────────────────────────

未找到时:

📚 知识库检索结果:未找到相似历史记录,以下为新问题分析。

说明

  • 只读操作,不写入任何文件
  • 检索到【高度匹配】时,录入阶段(nim-kb-record / nim-kb-batch)走合并流程而非新建
Installs
5
First Seen
Apr 6, 2026