我用 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。
📊 一张表:各阶段时间预估
| 合计 | 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数字大脑实践
我相信:在 AI 时代,每个普通人都该拥有一个自动生长的知识系统
欢迎关注【一只阿木木】🌊