with one click
ewankb-query
// 查询 ewankb 知识库。默认图谱查询,也可指定 kb 或 deep 双路对比模式。查询结果自动穿透到源代码层,验证规格与实现的一致性。
// 查询 ewankb 知识库。默认图谱查询,也可指定 kb 或 deep 双路对比模式。查询结果自动穿透到源代码层,验证规格与实现的一致性。
| name | ewankb-query |
| description | 查询 ewankb 知识库。默认图谱查询,也可指定 kb 或 deep 双路对比模式。查询结果自动穿透到源代码层,验证规格与实现的一致性。 |
| trigger | /ewankb-query |
/ewankb-query <问题> # 图谱查询(默认)
/ewankb-query graph <问题> # 图谱查询
/ewankb-query kb <问题> # 文档检索
/ewankb-query deep <问题> # 双路对比查询
ewankb preflight --query --dir .
解析 JSON:kb_dir 是知识库路径。
preflight 失败处理(仅关注查询相关 blocker):
--query 模式时,no_llm_config 和 no_api_key 不会出现在 blockers 中(查询不需要 LLM)no_project_config → 提示用户运行 /ewankb init 初始化知识库,停止no_source / no_domains / no_knowledgeBase / no_graph → 知识库不完整,提示用户运行 /ewankb --build-graph,停止graph.exists: false 且需要 graph 查询 → 提示先运行 /ewankb --build-graph,停止自动拉取(消费者无需手动 pull):
kb_dir 是 git 仓库,检查是否有 remote 配置:
cd "{kb_dir}"
git remote -v
git pull --rebase origin main 2>&1 || true
kb_dir 不存在但用户提供了 git 仓库地址,自动 clone:
git clone <仓库地址> "{kb_dir}"
如果 graph.exists: false 且需要 graph 查询,提示先运行 /ewankb --build-graph。
根据用户输入确定模式:
/ewankb-query <问题>(无子命令)→ 图谱模式(步骤 3A)/ewankb-query graph <问题> → 图谱模式(步骤 3A)/ewankb-query kb <问题> → kb 模式(步骤 3B)/ewankb-query deep <问题> → 双路对比模式(步骤 3C)ewankb query "用户问题" --json --dir "{kb_dir}"
如果 ewankb 命令不可用,请先运行 pip install ewankb。
解析 JSON 结果并解读:
matched_start_nodes 为空: → 告知用户图中未找到匹配节点,建议:
/ewankb-query kb "同一问题" 切换到文档检索matched_start_nodes 非空: → 基于 nodes 和 edges 用自然语言合成回答:
示例解读:
根据图谱分析:
- 找到 2 个与"预付款"相关的节点
- 预付款执行付款 → calls → 付款计划
来源:domains/收付款管理/README.md
这表明预付款流程和付款计划存在调用关系。但图中没有包含具体的额度计算逻辑,
可能需要查看 `/ewankb-query kb` 文档检索来获取更详细的计算规则。
回答末尾附建议:"想看原文?试 /ewankb-query kb \"同一问题\""
ewankb query-kb "用户问题" --dir "{kb_dir}"
如果高分文档内容被截断,用 Read 工具读取完整内容后再回答。
关联代码为空时的处理: 如果高分文档的"关联代码"章节为空(如"(未找到直接对应的代码文件)"),不要把问题留给用户,而是自动触发代码穿透(步骤 3D)来查找对应的源代码文件。
回答末尾附建议:"想看关联?试 /ewankb-query graph \"同一问题\";想看代码实现?结果中已包含代码穿透"
用 Agent 工具并行启动两个 subagent(同一条消息):
Subagent A(graph):
执行
ewankb query "{问题}" --dir "{kb_dir}",分析结果(涉及哪些节点、边、域)。从结果中提取技术术语(字段名、类名、API路径等),用于代码穿透。
Subagent B(kb):
执行
ewankb query-kb "{问题}" --dir "{kb_dir}",对高分文档用 Read 工具读取完整内容,分析结果。从文档内容中提取技术术语(字段名、类名、API路径、表名等),用于代码穿透。如果文档的"关联代码"为空,标记需要代码穿透。
对比 + 歧义处理:
代码穿透:Subagent A/B 完成后,汇总两路提取的技术术语,执行代码穿透(步骤 3D),重点比对规格描述 vs 实际实现的差异。
最终回答格式:
## 回答
[综合回答]
## 信息来源
- 图谱:[关键发现]
- 文档:[关键发现]
- 代码:[关键发现](如有代码穿透结果)
## 代码验证(如有差异)
- [规格 vs 实现] {差异描述}
- 证据:{源文件路径}:{行号}
## 差异说明(如有)
无论哪种查询模式,在获得知识库/图谱结果后,执行代码穿透来验证规格与实现的一致性。
执行前提:
{kb_dir}/source/repos/ 目录存在且非空 → 执行代码穿透{kb_dir}/source/repos/ 目录不存在或为空 → 跳过,在回答中注明"无法执行代码穿透(源代码目录不可用)"步骤 1:提取技术术语
从知识库/图谱查询结果中提取可用于搜索源代码的技术关键词:
| 来源类型 | 可提取的术语 | 示例 |
|---|---|---|
| 接口文档 | API路径、请求参数名、响应字段名 | /contract/info/page, contractCode, createUserName |
| 需求文档 | 表名、字段代码、业务实体编码 | contract_archive_info, contract_code |
| 图谱节点 | source_file 中的路径片段、类名 | ContractInfoRest |
| 文档正文 | 任何明确提及的技术标识 | config.js, advanceUser |
同时从中文术语推断可能的技术命名:
contractManage、ContractInfo)searchContract、contractPage)步骤 2:搜索源代码
用提取的技术术语在 {kb_dir}/source/repos/ 中搜索:
*{module}*/config.*、*{module}*/Index.vue、*{module}*Api.**{Module}*Controller*、*{Module}*Service*、*{Module}*Rest*步骤 3:补充回答
将源代码搜索结果作为补充信息纳入回答:
步骤 4:代码穿透结果的呈现
在回答中新增可选章节:
## 代码验证
- [规格 vs 实现] {差异描述}(如有差异)
证据:{源文件路径}:{行号}
- [关联代码补充] {知识库文档中缺失的代码关联}(如关联代码为空)
来源:{源文件路径}:{行号}
严格模式约束:用户选择了哪种查询模式,就只用该模式的结果回答。禁止因为认为结果不理想而自动切换或追加其他模式的查询。如果某种模式返回结果较少或为空,如实告知用户结果有限,并建议用户自行尝试其他模式,而不是替用户切换。
代码穿透是所有模式的标配:代码穿透不是一种独立查询模式,而是每种模式回答后的验证步骤。即使严格模式约束下,代码穿透仍然执行,因为它不切换查询模式,而是在已有结果上做验证。
[HINT] Download the complete skill directory including SKILL.md and all related files