一只阿木木

我用 Codex 3小时搭了一个「内部文档问答机器人」

我用 Codex 3小时搭了一个「内部文档问答机器人」


❗你一定经历过

每天这样的场景在发生——

“这个合同条款在哪?” “上次那个项目方案不是做过吗,找不到了” “培训手册第几页说了这个流程?” “新来的同事问你某个制度,你翻了二十分钟找不到”

文档越来越多,但找起来越来越难。

会议纪要、SOP 手册、产品说明、HR 制度…… 全部都在,但你用自然语言问它一句话,它给不了你答案。

这就是今天要解决的问题。


✅ 做完之后长什么样?

你问:“试用期考核标准是什么?” 系统答:“根据《员工手册 v2.3》第4章第2节,试用期考核分三个维度……【来源:员工手册_2024.pdf,第12页】”

能问能答,有出处,不瞎编。 这就是我们今天要搭的东西,技术名字叫 RAG(检索增强生成)系统。


📐 先搞清楚它是怎么工作的

用一个超简单的比喻:

传统搜索
关键词命中 → 给你一堆文件链接
这个系统
理解你的问题 → 找到相关段落 → 直接生成答案 + 注明来源

2 现代 RAG 架构包含六个核心组件:查询处理器负责接收原始查询;检索器从向量数据库中检索相关文档;重排序器对初步检索结果进行精排;上下文构建器将重排序后的文档拼接成适合 LLM 输入的上下文窗口;生成器根据上下文生成最终答案;后处理器对生成答案进行引用标注等后处理。

听起来复杂?没关系,Codex 帮你把这六步全部搭出来。你只需要知道三件事:

1. 文档进去 → 切碎 → 变成向量 → 存进数据库

2. 你提问 → 检索最相关的段落 → 交给 AI 生成答案

3. 答案出来 → 附带来源,追溯原文


🛠️ 正式开始:手把手 SOP

【准备清单】开始前 5 分钟

在进入 Codex 之前,先备齐这些:

text

✅ OpenAI API Key(需要有 Codex 访问权限)
✅ 你的内部文档(PDF/Word/Markdown 都行)
✅ Python 环境(3.10 以上)
✅ 一个空白项目文件夹

💡 没有编程经验怎么办? 不用担心。下面所有代码都由 Codex 写,你只需要复制 Prompt、看它跑、观察结果。


【第一步】启动 Codex,给它一个完整任务

进入项目目录,打开终端,输入 codex 启动。

然后发送这个 Prompt(可以直接复制):

text

我要搭建一个内部文档问答系统(RAG)。
技术栈:Python + FastAPI + ChromaDB + OpenAI API
任务拆分:
1. 文档解析模块:支持 PDF/Word/Markdown/txt,
   切分成 300-500 token 的 chunk,保留文件名、页码、章节
2. 向量入库模块:遍历 ./docs 目录,embedding 后存入 ChromaDB,
   支持增量更新(只处理新文件)
3. 问答接口:FastAPI /ask 接口,检索 Top5 相关段落,
   生成答案时必须标注来源,检索不到就明确拒答不要编造
4. 前端页面:单 HTML 文件,输入框+提交+回答展示+来源跳转
请先输出完整目录结构和执行计划,我确认后再写代码。

🔑 关键动作:让它先给计划再动手,这一步节省 80% 的返工时间。


【第二步】确认计划,看它生成项目骨架

Codex 会输出类似这样的目录结构:

text

rag-qa/
├── docs/              ← 放你的内部文档
├── ingest.py          ← 文档入库脚本
├── app.py             ← FastAPI 问答接口
├── frontend/
│   └── index.html     ← 前端页面
├── agents.md          ← 项目规范文件
├── requirements.txt
└── .env               ← 存 API Key

你确认后,1Codex 会完成一个完整的任务,而不只是写一个函数——它会依次创建所有文件、写代码、安装依赖,直到项目跑通。


【第三步】上传你的文档,跑入库脚本

把你的内部文档全部扔进 docs/ 目录,然后对 Codex 说:

text

帮我运行 ingest.py,把 docs/ 下所有文档入库,
运行完告诉我入库了多少个 chunk,有没有报错。

这一步是决定最终效果的关键。

6 生产系统使用混合检索后,检索精度一般会提升 10-30%。重排序环节是区分 demo 系统和生产系统的关键指标。

如果你的文档质量参差不齐(比如扫描件、格式混乱的 Word),追加这条指令:

text

在解析文档时,加入清洗逻辑:
- 去掉页眉页脚、页码、水印文字
- 合并因换行断开的句子
- 过滤掉少于 50 字的 chunk(太短没意义)

⚠️ 记住这条铁律: 好的 RAG 效果,70% 靠文档清洗,30% 靠检索策略。 别急着调模型参数,先把文档质量搞干净。


【第四步】测试问答,加上「拒答机制」

跑起来后,先发几个测试问题:

text

发送 3 个测试:
1. 一个文档里有答案的问题
2. 一个需要跨文档综合的问题
3. 一个文档里完全没有的问题
观察回答质量,特别是第三个——如果它编出了答案,告诉我修改提示词。

第三个测试最重要。

一个能被信任的内部问答系统,必须做到"不知道就说不知道"。如果 Codex 发现模型在瞎编,让它加上这段 System Prompt:

Python

system_prompt = """
你是公司内部文档助手。
只基于提供的参考资料回答问题。
如果参考资料中没有足够信息,请直接回答:
"抱歉,我在现有文档中未找到相关内容,建议联系对应负责人确认。"
绝对不允许凭空推断或编造信息。
每条回答必须注明来源文件名和页码。
"""

【第五步】写 AGENTS.md,让 Codex 长期维护这个项目

在项目根目录创建 AGENTS.md,内容如下:

Markdown

# 内部文档问答系统 - 项目规范

## 核心原则
- 所有回答必须带来源引用,不允许无来源回答
- 检索不到内容时必须明确拒答,禁止幻觉输出
- embedding 模型统一使用 text-embedding-3-small

## 文档处理规范
- chunk 大小:300-500 token
- 必须保留元数据:文件名、页码、章节标题
- 新增文档走增量更新,不重复入库

## 修改规范
- 修改向量库 schema 前必须先备份
- 新增功能必须写测试用例

1 审批策略:新手建议保持权限收紧,对危险命令开启"执行前询问"。 AGENTS.md 让 Codex 从「一次性工具」变成「长期队友」——每次打开项目,它都自动遵守这些规则,不用每次重复交代。


【第六步】进阶——接入团队工具

系统跑通之后,这三个扩展方向可以按需追加:

① 接入飞书/Slack(让同事直接在聊天工具里问)

text

帮我加一个 Webhook 接口,接收飞书机器人的消息,
调用 /ask 接口后把回答发回对应群组。

② 加上权限隔离(不同部门只能查自己的文档)

text

在向量库里加 metadata 字段 department,
检索时根据用户角色过滤,法务文档只有法务角色可以检索。

③ 自动监听文档更新(文件一更新,知识库自动同步)

text

帮我写一个文件监听脚本,监听 docs/ 目录,
有新文件或文件更新时自动触发 ingest,
同时记录入库日志到 logs/ingest.log。

【遇到报错怎么办?】

不要慌,这是正确的做法:

把报错日志直接丢给 Codex:

text

运行 ingest.py 时报错如下,帮我定位并修复:
[粘贴完整报错信息]

1 Codex 拥有操作级沙箱,可以限制其访问特定目录,防止误删核心文件。 它会在沙箱环境里直接帮你定位和修复,不用自己翻 Stack Overflow。


📊 一张表:各阶段时间预估

阶段
任务
预计时间
准备
备好文档 + 环境
15 分钟
第一步
发 Prompt + 确认计划
10 分钟
第二步
Codex 生成项目骨架
20 分钟
第三步
文档入库
10-30 分钟(取决于文档量)
第四步
测试 + 调整拒答机制
20 分钟
第五步
写 AGENTS.md
10 分钟
第六步
接入团队工具(可选)
30-60 分钟
合计MVP 完整跑通约 2-3 小时

💡 最后说三句实在话

第一句: 这套系统的价值不在于"酷",在于让知识真正流动起来。4当 RAG 系统具备了强大且智能的 Ingestion pipeline,它就真正从一个"问答系统"升级为企业内部散落知识资产的统一处理与访问平台。

第二句: 不要追求第一版完美。先跑通最简单的版本(哪怕只支持 txt),有人用了、有反馈了,再迭代加 PDF 解析、权限隔离、多轮对话。

第三句: 使用 Codex 的关键在于思维转变:不要把它当作 ChatGPT,而要把它当作一名「会自动写代码 + 自动执行」的工程师。 你是需求方,它是执行方,说清楚要什么,让它跑。


📎 附:完整 Prompt 模板(直接复制使用)

text

【角色】你是一个资深全栈工程师
【任务】帮我从零搭建内部文档问答系统(RAG)
【技术栈】Python + FastAPI + ChromaDB + OpenAI API
【交付要求】
1. 完整项目结构 + requirements.txt
2. 文档入库脚本:支持 PDF/Word/MD,含清洗和增量更新
3. 问答接口:Top5 检索 + 答案带来源引用 + 检索不到拒答
4. 极简前端:输入框+展示回答+来源跳转
5. 写5条测试用例并跑通
【约束】先输出目录结构和执行计划,我确认后再写代码。

普通人如何用 AI 搭建自己的知识操作系统?

一个程序员出身的知识工作者,公开记录自己如何用 AI 工具搭建个人知识系统、把读过的书和做过的项目变成可复用资产的全过程。

我是【一只阿木木】——公开建造我的 AI 第二大脑。

我们的方向是——AI + Obsidian 的结合。但请记住:Obsidian 的灵魂不是效率,是自由。不是自动化,是代理力。不是工具帮你想,而是你借工具想得更好。

在一个许多工具承诺代替用户思考的市场中,Obsidian 赌的是我们仍然想要一个可以自己思考的地方。 欢迎加入行动营👇

获取更多Obsidian + AI数字大脑实践

Image

我相信:在 AI 时代,每个普通人都该拥有一个自动生长的知识系统

欢迎关注【一只阿木木】🌊