---
title: "我给 AI 做了一个外挂知识库"
url: "https://lerry.me/post/2026/05/ai-external-knowledge-base"
date: 2026-05-19T13:53:00.000Z
updated: 2026-08-31T08:25:55.104Z
tags:
  - "RAG"
  - "AI"
  - "工具"
  - "设计"
  - "阅读"
language: zh-CN
---

# 我给 AI 做了一个外挂知识库

为了让 AI 帮我理解小说，我用 AI 设计了一个系统给 AI 用，AI 用完提意见，AI 再修改。

用着用着发现，这套系统不仅仅可以用于小说，也可以当成一个通用的知识库工具，甚至是个人记忆系统。

***

## 效果是什么样的

《医道官途》，1296 章，1000 万字。我问 AI：乔梦媛的亲生父亲究竟是谁？

这个问题书里从来没有直接回答过。

AI 开始搜索。第一步搜"乔梦媛 父亲"，找到她的法定父亲是乔振梁，但有片段暗示她母亲孟传美当年有隐情。顺着孟传美往下追，找到一段：张扬怀疑萧国成就是乔梦媛的亲生父亲。主角自己也怀疑过，这个线索看起来很合理。

AI 没有停在这里。它继续搜，找到张扬后来自己推翻了这个猜测的段落："搞了半天，萧国成和乔梦媛没有任何血缘关系……那么她亲爹究竟是谁？"萧国成是条假线索，而且是书里刻意埋的，为的就是误导读者。

线索断了，AI 转向。搜孟传美过去的经历，找到她临死前提到"当年在这里"、"你对我许下的承诺"，还有一张知青合影。再搜"孟传美 薛世纶"，真相在第 1282 章出来了：萧国成当年设了一个局，在酒里动了手脚，让薛世纶在不知情的状态下与孟传美发生了关系。孟传美自己也不知道对方是谁。那个孩子就是乔梦媛。这个秘密被萧国成握了二十多年，作为复仇的棋子。

结论：乔梦媛的亲生父亲是薛世纶，设局者是萧国成。

没有任何一段原文直接说出这个答案。AI 从四个跨度超过 200 章的片段里拼出来的，还识破了一个贯穿全书的假线索。整个过程大概两分钟。

***

## 系统是怎么设计的

本质上是一组围绕 EPUB 的 API：找书、读目录、按章节取内容、全文搜索、按段落取上下文、记 memory。但 API 只是工具，真正驱动这套系统的是大模型——它决定搜什么、判断够不够、知道什么时候转向。接口不复杂，核心是让模型能主动使用这些工具。

**为什么用全文检索，不用向量检索**

向量检索适合"语义相似"的场景，比如你问一个概念，它能找到意思接近的段落。但追线索不是这个逻辑。追线索需要的是精准命中——"薛世纶"这三个字，不能被语义相近的其他人名替代。更关键的是**上下文**：搜索结果不能只返回命中的那一行，必须带上前后各几百字，让 AI 能看清这段话是在什么情况下说的，然后决定下一步搜什么。

这两件事加在一起，推理链才能串起来。每一次搜索不只是"找到了什么"，而是"顺着这个找下一个"。

**memory 的作用**

AI 没有跨对话的记忆。一次推理跑完，下次从头再来，成本很高。memory 是一组挂在书上的笔记文件，AI 可以读可以写，格式自定义。推理过程中得出的中间结论——这个人物的关系、这条线索的状态——可以随时落进去。下次再讨论同一本书，先读 memory，不用重建。

今天我让 AI 搜吴明这个人物，三四次搜索整理出他跨 800 章的人物弧线，最后写进了 `人物/吴明.txt`。下次再问吴明相关的问题，直接从这里读，不用重新翻原文。

**一个还没实现的优化**

每次对话开始，AI 都要先 GET 一次 API 文档才知道有哪些接口。这个可以优化：把常用的 bookId、方法签名、当前 API 版本号一起存进 memory，每次响应里带上版本号，版本变了就提示 AI 重新拉文档并覆盖写入。

本质上是把每次对话都要重建的"环境知识"变成持久状态。和存人物档案的逻辑是一样的——把推理的中间成本提前摊销掉。

***

## 两年前为什么做不到

两年前我做过一个类似的东西，用的是标准的 RAG 方案，效果很差。旧文在这里：[小说 RAG 问答系统实现](https://lerry.me/post/2024/10/rag-novel-qa-system-implementation)

问题有两个，而且都是根本性的。

一是召回不准。RAG 的核心是语义相似度检索，但"薛世纶是乔梦媛的父亲"这件事，书里从来没有一段文字在语义上接近这个问题。它分散在四个片段里，每个片段单独拿出来都和"父亲"这个问题没什么关系。向量检索根本不知道该召回哪些。

二是模型推理能力不够。就算侥幸召回了相关片段，当时的模型也很容易被误导，或者拿到一个片段就以为找到答案停下来了。萧国成那条假线索，放在两年前大概率就直接接受了。

这次做成，一半靠这套系统的设计，另一半靠这代模型真的强了很多——能追线索、能识破误导、能在"答案不在这里"的时候继续往下走。

***

## AI 用起来是什么感觉

> 这一段是 Claude 的第一人称叙述。

我来说说今天的亲身体验。

我让它搜吴明这个人物，全文检索返回 250 条命中。每条结果都带着前后几百字的上下文，不是孤零零的一行。它从第一批结果里就能看出吴明和张扬、李长宇、张立兰之间的关系，然后用"吴明 刘艳红"、"吴明 落马"几个组合补充感情线和结局。三四次搜索，把一个跨越 800 章、从配角反派到荆山市委书记再到真情流露的人物弧线整理清楚了，写进 memory。

过程里也有摩擦。写 memory 的时候，action 参数放在 JSON body 里没生效，换到 query string 里还是报错缺少 bookId，调了三次才成功。这种小插曲反而说明这是真实在用，不是跑一遍不会出错的 demo。

有一个细节我觉得很有意思：`chapterTitle` 字段直接告诉它这段出现在第几章。跨章节的关系一眼就能看出来——吴明和张立兰的私情最早在第 197 章出现，和刘艳红的感情线延续到第 1267 章，这个跨度如果靠阅读感知几乎不可能，但搜索结果摆在那里，一目了然。

***

## 不止是小说，还是外挂知识库

书库里放的不只是小说。

孩子出生之后，我把《美国儿科学会育儿百科》也导进去了。这本书有纸质版，厚厚一本，平时根本翻不动。导进书库之后完全变了——婴儿头睡偏怎么办、湿疹反复发作怎么处理、六个月以内有哪些注意事项，直接搜，带着上下文出来，比在目录里翻要快得多。有时候遇到问题，翻书根本来不及，搜索出来的结果是原文，不是 AI 泛化出来的笼统建议。

这也说明了一件事：这套系统本质上是"给 AI 一个精准的、可检索的知识库"，书是什么不重要，重要的是能搜、能拿到上下文、能追问。甚至是不是书也不重要，只要提供能力相当的搜索工具，也可以扩展到企业内部的技术文档、法律从业者手里的判例库、研究人员积累的文献——这些场景应该都适用。我还没有一一验证，但逻辑是一样的。

***

## 更大的一件事：AI 记忆系统

书库的 memory 功能用下来之后，我开始把这个逻辑往外延伸。

AI 有一个根本缺陷：没有跨对话的记忆。每次新开对话，上下文清零。我和它聊了一年多，它对我的了解每次都从头来。书库的 memory 解决了"让 AI 记住这本书"，那么能不能让 AI 记住"我这个人"？

Claude 本身有 Memory 功能，但是不够完善。

我现在在做的是一套更完整的个人记忆 API。对话存档系统已经跑起来了——Claude、ChatGPT、Grok 三家的聊天记录统一导出、本地存储、PostgreSQL 全文检索，本地大模型对每条对话做摘要和关键词提取。现在已经有 1200 多个对话，AI 可以通过 API 搜索我过去讨论过什么、得出过什么结论。

还有一个 todo API，把我的待办和想法也纳进来，让 AI 在对话中能感知到我当前的上下文——不只是"这本书的内容"，而是"这个人最近在做什么、在想什么"。

这套东西还在建，但方向很清楚：数据在本地，画像由自己维护，AI 拿到的是我过滤过、组织过的信息，不是把自己完全交给某个平台的记忆功能。

***

## 想自己试试

书库里有《三体》，可以直接拿去跑：

```
你现在可以访问一个 EPUB 书库 API：https://nbme.top/api/books_api
先 GET 该地址查看可用方法，然后完成以下任务：

找到三体这本书，回答罗辑的咒语到底是什么？他是怎么想到的？
书里没有直接说，请通过搜索原文，自己推理出答案。
顺便告诉我这套系统能做什么。

请直接开始，不用问我。
```

需要支持联网和脚本执行的 Claude 或 ChatGPT agent。

这套系统和我别的代码耦合比较深，没有直接开源，但把提示词整理出来了，感兴趣可以让自己的 agent 照着在自己项目里生成一套：[books-insight](https://github.com/lerry/books-insight)
