打造自己的 AI 知识库

在日常学习工作中,会沉淀许多知识,笔记,但当笔记多起来时查阅不方便,常常会忘记记在哪里,我在想在AI时代,应该让AI学习整理我们的笔记并形成知识库,使用时只需要问答模式即可得到想要的答案。

市面上基于 RAG(检索增强生成)的方案不少,但大多数重度依赖向量数据库和 Embedding 模型,搭建成本高、维护也麻烦。于是我自己动手写了一个轻量级的替代品------AnswerAgent

这篇文章聊聊它的设计思路、核心功能和部署方式,感兴趣的可以参考

仓库地址


用户界面:

管理后台:

为什么不做 RAG?

先说说技术选型上的取舍。

经典的 RAG 流程是:文档 → 切分 → Embedding → 向量数据库 → 语义检索 → LLM 生成。这套链路本身没问题,但对我来说有几个痛点:

  1. Embedding 模型需要额外维护,要么自己部署一套,要么调用商业 API,成本翻倍

  2. 分块策略很难调,块太大丢失精度,块太小丢失上下文

  3. 向量数据库多了一个中间件,小团队不值得为这点事上 ES 或 Milvus

  4. 知识更新需要重新 Embedding ,改了文档还得跑一遍入库流程
    AnswerAgent 的思路很直接:文件就放在目录里,LLM 自己读
    具体来说,采用了两阶段的「关键词粗筛 + LLM 精读」策略:

    用户提问
    → jieba 分词 + 关键词匹配,粗筛出候选文件(最多 10 个)
    → 把候选文件目录交给 LLM,让它选最相关的(最多 5 个)
    → LLM 读选中文件的内容,生成回答

这套方案的优点是零 Embedding 依赖、零向量数据库、零分块策略,知识库就是一个目录,加个 Markdown 文件就等于更新了知识。缺点也有:当知识库文件量很大的时候,关键词粗筛可能漏掉语义相关但字面不匹配的内容。实际使用下来,对于几百个文件量级的知识库,效果完全够用。


后端基于 FastAPI,数据库用的 SQLite------用户账户、对话元数据、运行时配置都存这里,对话的消息内容则存为 JSON 文件。为什么消息不也存数据库?因为 JSON 文件方便直接翻阅和备份,恢复起来也省事。


亮点功能

1. 多知识库自动路由

知识库是按目录组织的,比如你有一个 backend/knowledge/ 目录:

复制代码
knowledge/
├── 产品文档/
│   ├── 索引.md
│   ├── 需求文档.md
│   └── 更新日志.md
├── 技术架构/
│   ├── 索引.md
│   ├── API设计.md
│   └── 数据库设计.md
└── 运维手册/
    ├── 索引.md
    ├── 部署流程.md
    └── 故障处理.md

用户问「生产环境怎么部署?」时,AnswerAgent 会先调用 LLM 判断这个问题跟哪些知识库相关(匹配到「运维手册」),然后只从匹配的知识库里检索文件。支持多知识库合并------一个问题同时命中多个知识库时,结果会合并后送给 LLM。

2. 深度思考模式(Deep Agent)

普通的问答模式是把检索到的文件塞进系统提示词,让 LLM 直接回答。这够快,但遇到复杂问题------比如「比较我们新旧两版 API 设计的差异,分析各自的优缺点」------就需要更灵活的推理能力。

深度思考模式切换为 ReAct Agent,它有三个工具可以用:

  • list_knowledge_bases --- 列出所有知识库
  • search_kb_files --- 在知识库中搜索关键词
  • read_kb_file --- 读取具体文件内容
    Agent 会自己规划步骤:先列知识库 → 找到目标 → 搜索关键词定位 → 读取文件 → 综合回答。整个过程在 SSE 流中实时展示思考链和工具调用,前端可以展开查看推理过程。

Agent 自主规划、调用工具、逐步推理,前端实时展示思考链

3. 知识库自动生成

知识库的内容怎么来?手写当然可以,但更酷的方式是------从代码仓库自动生成

AnswerAgent 内置了一个知识库生成工作流:

  1. 输入:支持三种方式------本地目录路径、Git 仓库 URL、上传压缩包(zip/tar.gz)
  2. 预处理:如果是 Git 地址就 clone 下来,压缩包就解压
  3. 分析:扫描文件结构,判断仓库类型(代码仓库还是文档仓库),LLM 生成任务列表
  4. 执行 :DeepAgent 配合 kb-generator 技能文件,逐个生成模块文档、API 参考、架构说明
  5. 输出 :一个完整的知识库目录,包含 索引.md 和各模块文档

举个例子,把 AnswerAgent 自己的源码仓库丢进去,它就能生成一份关于 AnswerAgent 的知识库文档

4. 管理后台

管理后台放在 /admin 路径下,有四个功能模块:

模型配置 :LLM 提供商、API Key、模型名称、温度参数等都可以在页面上修改,支持热更新------改完立即生效,不需要重启服务。配置持久化到 SQLite,重启后依然生效。

用户管理:查看注册用户、创建用户、删除用户、切换管理员权限。

会话管理:查看所有用户的对话记录,支持按用户筛选和标题搜索。

知识库生成:触发知识库生成工作流的界面,可以实时查看日志流、暂停/恢复/取消任务。

5. 其他细节

  • 双主题:亮色/暗色模式随意切换,偏好会记住
  • Markdown 导出:对话可以导出为 Markdown 文件,方便分享
  • 外部 API:支持免登录的外部流式问答接口,可以嵌入到其他系统
  • SSE 流式输出:Token 逐个展示,体验跟 ChatGPT 一样流畅

部署方式

本地开发

后端启动:

bash 复制代码
cd backend
pip install -r requirements.txt
cp .env.example .env   # 编辑填入 API Key
python -m app.main      # 监听 0.0.0.0:8765

前端启动:

bash 复制代码
cd frontend
npm install
npm run dev             # 监听 localhost:5173

然后打开浏览器访问 http://localhost:5173,注册账号即可使用。默认管理员账号是 admin / admin123,登录后进管理后台配置 LLM。

Docker 部署

生产环境推荐用 Docker Compose 一键部署:

bash 复制代码
docker compose build
docker compose up -d

Docker 部署时有两个设计细节值得一提:

一是 skills 同步机制 。内置的技能文件打包在镜像的 /app/skills_builtin/ 目录下,容器启动时通过 entrypoint 脚本同步到 /app/skills/。如果用户通过 volume 挂载了自己的技能文件,同名文件不会被覆盖------既保留了自定义能力,又不会在升级时丢失定制内容。

二是 数据持久化。知识库、数据库、对话文件配置都通过 volume 挂载到宿主机目录,容器销毁后数据不丢失。


一些使用心得

知识库怎么组织?

经过一段时间的试用,我推荐这样组织知识库:

  • 每个知识库一个目录,粒度不宜太细也不宜太粗。比如「产品文档」是一个知识库,「技术架构」是另一个,而不是按每个功能模块拆一个
  • 每个知识库根目录放一个 索引.md,用几句话描述这个知识库的内容。LLM 路由时优先看这个文件
  • 文件格式优先用 Markdown,它既是人类可读的,也是 LLM 最擅长的格式。代码文件、配置文件可以直接放进去
  • 单个文件控制在 20KB 以内,单个知识库控制在 60KB 以内------系统会做截断

什么时候用「深度思考」?

日常简单问答用默认模式就够了。遇到以下场景可以开启深度思考模式:

  • 对比分析:比如「对比 v2 和 v3 版本的接口差异」
  • 跨知识库综合:比如「从产品需求和技术实现两个角度分析这个功能」
  • 需要多步推理:比如「找出所有涉及用户权限的配置项,并说明它们的优先级关系」

仓库地址

相关推荐
一次旅行8 小时前
HyperTool:突破传统工具调用限制,让Agent更高效执行复杂任务
人工智能
陈天伟教授9 小时前
图解人工智能(58)人工智能应用-围棋国手
人工智能·语音识别·机器翻译
闻道参看9 小时前
2026年AI优质企业培训系统综合测评:合规管控/数据量化
人工智能
老虾头9 小时前
科技贴近烟火:本地化 AI,赋能各行各业日常经营
人工智能
毒爪的小新9 小时前
Linux 环境极速部署 vLLM:从零搭建生产级大模型推理服务
linux·人工智能·ai·语言模型·vllm
老大白菜9 小时前
25美元,DIY开源可穿戴智能AI眼镜:Arduino+乐鑫ESP32+DeepSeek项目
人工智能
岁月宁静10 小时前
RAG 文档摄入全链路,从原理到生产落地
vue.js·人工智能·python
小和尚同志10 小时前
AI 自动化测试探索(一):Playwright MCP
前端·人工智能·aigc