# 知识库

知识库用于让 Tinybot 使用你提供的固定资料回答问题。它适合“资料很多、以后还会反复问”的场景，例如产品手册、项目文档、制度流程、会议纪要、FAQ。

## 知识库和普通聊天有什么区别

普通聊天只依赖当前对话和模型已有知识。知识库会把你的文档切分、索引，在你提问时检索相关片段，再交给 AI 回答。

| 场景 | 是否建议用知识库 |
|------|------------------|
| 问一次临时问题 | 不需要 |
| 总结一个刚发来的短文本 | 不需要，直接粘贴即可 |
| 经常询问同一批文档 | 建议 |
| 公司内部制度、产品手册 | 建议 |
| 项目长期技术文档 | 建议 |

## 启用知识库

在配置中开启：

```json
{
  "knowledge": {
    "enabled": true,
    "autoRetrieve": true,
    "maxChunks": 5,
    "retrievalMode": "hybrid"
  }
}
```

也可以在网页界面的设置面板中开启。

## 添加资料

推荐先通过网页界面添加：

1. 启动 `uv run tinybot gateway`
2. 打开 `http://127.0.0.1:18790`
3. 进入右侧知识库面板
4. 添加文本、Markdown 或上传支持的文件
5. 等待索引完成

当前网页会话还支持临时上传 `txt`、`md`、`pdf` 文件，用于当前会话中的资料问答。

## 怎么提问

提问时说明你希望 Tinybot 优先参考知识库：

```text
请根据知识库里的产品文档，说明新用户开通账号的流程。
```

```text
请只参考我上传的 PDF，总结其中的风险点。
```

如果你发现回答没有引用到资料，可以直接要求：

```text
请重新检索知识库，并说明答案来自哪些文档内容。
```

## 检索设置怎么选

| 配置 | 新手建议 | 说明 |
|------|----------|------|
| `autoRetrieve` | 开启 | 每次提问自动查知识库 |
| `maxChunks` | 5 | 返回的资料片段数量 |
| `retrievalMode` | `hybrid` | 同时使用语义和关键词检索 |
| `rerankEnabled` | 先关闭 | 需要额外服务，搜索不准时再开 |

如果文档里有很多准确术语、编号、接口名，关键词很重要。如果用户问法和文档措辞差异大，语义检索更重要。`hybrid` 是两者结合，适合大多数情况。

## 资料整理建议

为了让检索更准确：

- 一个文档只放一个主题
- 标题写清楚，例如“退款流程”“部署步骤”“API 鉴权”
- 不要把大量无关内容塞进同一个文档
- 更新文档后重新索引
- 对长期有效资料使用知识库，对临时资料使用会话上传

## 知识库不是万能的

知识库能提高“参考你给的资料”的能力，但不能保证每次都完全正确。重要结论仍建议让 Tinybot列出依据，或要求它引用原文片段。

推荐问法：

```text
请根据知识库回答，并列出你参考到的关键片段。
```

## 常见问题

### AI 没用到我的文档

检查：

1. `knowledge.enabled` 是否为 `true`
2. `autoRetrieve` 是否开启
3. 文档是否已经索引完成
4. 问题是否和文档内容相关
5. 是否需要重建索引

### 搜索结果不准确

可以尝试：

1. 把问题问得更具体
2. 提高 `maxChunks`
3. 使用 `hybrid` 检索
4. 拆分过长文档
5. 开启重排序能力

### 什么时候不用知识库

如果只是让 Tinybot 读取当前项目的几个文件，直接告诉它文件路径更简单：

```text
请读取 docs/quickstart.md 并指出问题。
```

## 下一步

- [网页界面](webui.md)：通过浏览器管理知识库
- [工具功能](tools.md)：理解文件读取和知识库检索的区别
- [技能系统](skills.md)：把固定问答流程做成技能
