[teamai] Push 87 resource(s) from XingfenD
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
# Kb Retriever Skill — 本地知识库检索
|
||||
|
||||
> 让 AI Agent 高效回答基于**本地多格式知识库目录**的问题。靠分层索引导航 + 渐进式检索完成,不把整文件塞进 context。
|
||||
|
||||
[English](./README.md) · [返回集合首页](../../README.zh-CN.md)
|
||||
|
||||

|
||||
|
||||
## 这个 Skill 干什么
|
||||
|
||||
把 Agent 指向一个本地的混合格式知识库目录(Markdown / PDF / Excel 等),用自然语言提问。Skill 会:
|
||||
|
||||
1. **走分层索引**:沿着每层目录的 `data_structure.md`,判断答案大概率在哪些文件里。
|
||||
2. **强制先学习再处理**:碰到 PDF / Excel 时,必须先读对应的 `references/*.md`,按推荐工具去处理,不允许蛮力直接读。
|
||||
3. **渐进式检索**:先 `grep` 定位,再用 offset/limit 局部读取,避免整文件加载。
|
||||
4. **最多 5 轮迭代**:每轮根据已读到的内容收紧关键词,直到信息足够回答。
|
||||
|
||||
---
|
||||
|
||||
## 核心特性
|
||||
|
||||
- ✅ **多格式支持**:Markdown / 文本、PDF、Excel——按文件类型可扩展。
|
||||
- ✅ **分层索引**:每层目录都带一份 `data_structure.md`,组成一棵索引树供 Agent 导航。
|
||||
- ✅ **渐进式检索**:grep 优先 + 窗口读取,从不整文件加载,大语料下也能控制住 token。
|
||||
- ✅ **强制学习机制**:PDF / Excel 的处理必须先读对应 references。
|
||||
- ✅ **有界迭代**:最多 5 轮,带明确终止条件。
|
||||
|
||||
---
|
||||
|
||||
## Skill 结构
|
||||
|
||||
```
|
||||
skills/kb-retriever/
|
||||
├── SKILL.md 主技能(frontmatter name: kb-retriever)
|
||||
├── README.md / README.zh-CN.md 本文档
|
||||
├── references/
|
||||
│ ├── pdf_reading.md PDF 处理指南(pdftotext / pdfplumber / pypdf)
|
||||
│ ├── excel_reading.md pandas 读取 Excel 的方法(nrows / dtype 等)
|
||||
│ └── excel_analysis.md Excel 的过滤 / 聚合 / 派生指标方法
|
||||
└── scripts/
|
||||
└── convert_pdf_to_images.py 当文本抽取失败时把 PDF 转图像的兜底脚本
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 准备你的知识库
|
||||
|
||||
本 Skill **不自带**知识库——需要你自己提供。两种方式:
|
||||
|
||||
### 默认路径
|
||||
|
||||
在调用 Agent 的工作区根目录放一个 `knowledge/`:
|
||||
|
||||
```
|
||||
your-project/
|
||||
├── .claude/skills/ 或 .agents/skills/
|
||||
│ └── kb-retriever/ ← 本 Skill 目录
|
||||
└── knowledge/ ← ← ← 你的知识库
|
||||
├── data_structure.md (根级索引,模板见下)
|
||||
├── <领域-1>/
|
||||
│ ├── data_structure.md
|
||||
│ └── ...
|
||||
└── <领域-2>/
|
||||
└── ...
|
||||
```
|
||||
|
||||
### 自定义路径
|
||||
|
||||
在你的问题里直接告诉 Agent,例如"用 `./docs` 这个目录回答"或"我的知识库在 `/data/kb`",Skill 会改用你指定的路径。
|
||||
|
||||
如果默认 `knowledge/` 不存在、用户也没指定路径,Skill 会主动询问而不是瞎猜。
|
||||
|
||||
### `data_structure.md` 模板
|
||||
|
||||
每个被索引的目录都建议放一份:
|
||||
|
||||
```markdown
|
||||
# [目录名称]
|
||||
|
||||
## 用途
|
||||
本目录是干什么的、什么场景下应该被检索。
|
||||
|
||||
## 文件说明
|
||||
- file1.pdf —— 内容是什么、时间 / 版本范围
|
||||
- file2.xlsx —— 表结构概要、关键列
|
||||
- subdir/ —— 子目录用途
|
||||
|
||||
## 数据范围
|
||||
时间范围、版本、数据来源等帮助 Agent 排序优先级的信息。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 检索是怎么进行的
|
||||
|
||||
### 1. 分层索引导航
|
||||
|
||||
每层目录都先读 `data_structure.md`,挑出与问题最相关的子目录或文件,**再递归向下**——不会一次性铺开整棵树。
|
||||
|
||||
### 2. 先学习,再处理(PDF / Excel)
|
||||
|
||||
候选集合里出现 PDF 或 Excel 时,**必须**先读对应的 references:
|
||||
|
||||
```
|
||||
✅ 读 references/pdf_reading.md / excel_reading.md / excel_analysis.md
|
||||
✅ 理解推荐的工具与参数
|
||||
✅ 用该工具完成转换 / 抽取
|
||||
⏭️ 现在才能开始检索
|
||||
```
|
||||
|
||||
禁止行为:
|
||||
|
||||
- ❌ 没读 `pdf_reading.md` 就直接处理 PDF
|
||||
- ❌ 没读 `excel_reading.md` / `excel_analysis.md` 就直接处理 Excel
|
||||
- ❌ 跳过文件处理直接对原始 PDF / Excel 检索
|
||||
|
||||
### 3. 渐进式检索
|
||||
|
||||
- 不读整文件。
|
||||
- 先用 `grep` 定位关键词。
|
||||
- 只读匹配处的窗口(`limit` ≈ 200–500 行)。
|
||||
- 最多 5 轮,每轮收紧关键词。
|
||||
|
||||
### 4. 按文件类型选工具
|
||||
|
||||
| 格式 | 工具 | 注意 |
|
||||
|---|---|---|
|
||||
| Markdown / 文本 | `grep` + 窗口 `read_file` | 必须 offset/limit,不要整文件读。 |
|
||||
| PDF | `pdftotext input.pdf output.txt` → 对结果文本 `grep` | **必须输出到文件**,不要走 stdout。超大 PDF 用 `-f / -l` 控制页范围。 |
|
||||
| Excel | pandas,先 `nrows` 学结构,再带条件读取 | 先识别关键列(id / time / category),再查询。 |
|
||||
|
||||
### 5. 迭代循环
|
||||
|
||||
每轮:
|
||||
|
||||
1. 生成 / 更新关键词
|
||||
2. 选择尚未充分检索的候选文件
|
||||
3. 执行 grep / 局部读取
|
||||
4. 分析返回的片段
|
||||
5. 判断信息是否够回答 → 够则停止;不够进入下一轮。
|
||||
|
||||
终止条件:信息足够 ✅ 或 达到 5 轮 ⏱️。
|
||||
|
||||
---
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 推荐
|
||||
|
||||
1. 永远先从 `data_structure.md` 开始。
|
||||
2. 碰到 PDF / Excel 之前**先**读匹配的 `references/*.md`。
|
||||
3. 从最相关的文件开始检索,必要时才扩展范围。
|
||||
4. 用 `offset` + `limit` 精确控制读取窗口。
|
||||
5. PDF 先抽取到文件再 grep,**不要**把二进制塞进 context。
|
||||
|
||||
### 避免
|
||||
|
||||
1. ❌ 一次性读取大文件
|
||||
2. ❌ 没读 references 就处理 PDF / Excel
|
||||
3. ❌ `pdftotext input.pdf -`(stdout)—— 吃 token
|
||||
4. ❌ 一次性读取整张 Excel
|
||||
5. ❌ 在所有目录里盲目搜索
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
**Q1:为什么要强制先读 `references/*.md`?**
|
||||
保证 Agent 用对的工具配对的参数——否则它要么把整个文件塞进 context,要么挑了个慢 / 坏掉的方法。
|
||||
|
||||
**Q2:超大 PDF 怎么办?**
|
||||
按页范围抽取(`pdftotext -f 1 -l 10`),对结果文本 grep,然后只读匹配页面附近的内容。
|
||||
|
||||
**Q3:知识库可以放别处吗?**
|
||||
可以,问问题时明确告诉 Agent 路径即可("用 `/data/my-kb` 回答")。
|
||||
|
||||
**Q4:怎么提高检索准确率?**
|
||||
使用更具体的关键词、缩小时间 / 文件名范围、用领域术语而非通用词汇。
|
||||
|
||||
---
|
||||
|
||||
## 工具依赖
|
||||
|
||||
本 Skill 假定 Agent 可以使用:
|
||||
|
||||
- `grep` —— 文本搜索
|
||||
- `read_file` —— 带 offset / limit 的窗口读取
|
||||
- `pdftotext`(poppler)或 `pdfplumber` —— PDF 文本抽取
|
||||
- `pandas` —— Excel 读取 / 分析
|
||||
|
||||
`scripts/convert_pdf_to_images.py` 是兜底脚本,给那种文本抽取一无所获的扫描版 PDF 用。
|
||||
|
||||
---
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user