公司制度、项目文档散在一堆 Markdown 里,每次找一句话都要翻半天。这篇讲怎么做本地文档问答:让 Claude Code 写一个只用 Python 标准库的脚本 ask.py,读取你的文档、检索出最相关的原句,并标出来自哪个文件;文档里没有的,就直接说「文档中未找到」。
我们用 3 份制度文档实测:67 秒写完脚本,4 个问题全部答对,文档里没有的“健身补贴”老实回答了「文档中未找到」。脚本本身不调用任何 API,写脚本这一步用的是接 AICodeWith 的 Claude Code。

本地文档问答:ask.py 实跑结果
实测成品:ask.py 回答 4 个问题,每条都给出原句和出处文件;第 4 题文档里没有,脚本直接输出「文档中未找到」。
先配好环境:两步接上 AICodeWith
环境只配一次,之后所有场景通用:
- 装 Claude Code:按 Claude Code 官方安装文档 安装,终端输入
claude --version能看到版本号就行。 - 创建 Key 并改全局配置:登录后进控制台「密钥管理」,点「创建密钥」。然后打开全局配置
~/.claude/settings.json,在env里填上 Base URL 和 Key:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
"ANTHROPIC_AUTH_TOKEN": "sk-你的Key"
}
}
Base URL 末尾不要加/v1。改完重开终端,运行claude能正常对话就说明接通了。各字段的含义和更多报错处理见《Claude Code 如何接入第三方 API》。
第一步:准备文档,一句话让它写脚本
新建一个文件夹,把文档放进 docs/ 子目录(Markdown 格式),然后在文件夹里运行 claude。我们实测用的提示词:
docs/ 文件夹里是我们公司的几份制度文档。帮我做一个本地问答小工具:写一个不依赖任何第三方 API Key 的 Python 脚本 ask.py,读取 docs/ 下的 Markdown,按段落切块,用关键词/BM25 检索出最相关的段落,输出答案和出处(文件名+原句)。然后用它回答这 4 个问题并把结果写进 qa-results.md:1. 去上海出差住宿每晚最多报多少?2. 入职 12 年有几天年假?3. 借测试手机找谁、能借多久?4. 公司有没有健身补贴?(文档里没有的要明确说"文档中未找到",不能编)
最后那句“文档里没有的要明确说文档中未找到,不能编”一定要写,它决定了脚本会不会硬凑答案。
第二步:它写出的脚本怎么工作
Claude Code 写出的 ask.py 只用了 Python 标准库,不用装任何包:
- 读取
docs/下所有 Markdown,按空行和列表项切成段落。 - 中文按两个字一组切词,用 BM25 给每个段落打分。
- 计算问题关键词在最佳段落里出现的比例,低于 30% 就直接输出「文档中未找到」,不拿相近的条目凑数。
- 输出原句和出处文件名。
用法很简单:
python3 ask.py "入职 12 年有几天年假?"
python3 ask.py -k 3 "借测试手机找谁?" # 看前 3 个候选段落
第三步:实测结果
| 问题 | 脚本返回的原句 | 出处 | 最终答案 |
|---|---|---|---|
| 去上海出差住宿每晚最多报多少? | 差旅住宿:一线城市每晚上限 600 元,其他城市 400 元。 | 报销制度.md | 600 元 |
| 入职 12 年有几天年假? | 年假:入职满 1 年 5 天,满 10 年 10 天,满 20 年 15 天。 | 请假制度.md | 10 天 |
| 借测试手机找谁、能借多久? | 测试手机找 IT 部王磊登记,借期最长 14 天。 | 设备借用.md | 找 IT 部王磊,最长 14 天 |
| 公司有没有健身补贴? | 文档中未找到 | — | 文档中未找到 |
哪些是脚本做的,哪些是 Claude 推理的
这一点要分清楚:ask.py 只负责检索,返回的是文档里的原句,它不会推理。
- 第 1 题,文档原文写的是“一线城市”,没有写上海。“上海算一线城市,所以是 600 元”这一步是 Claude 推理的。为了让“上海”能检索到这一句,Claude 还在脚本里加了一个小同义词表,把北上广深对应到“一线城市”。
- 第 2 题,脚本返回的是年假那一整句。“12 年满 10 年、不满 20 年,所以是 10 天”这一步也是 Claude 推理后写进
qa-results.md的。
单独运行 ask.py 时,你拿到的是原句和出处,需要自己读一下得出结论;如果想要直接给结论的回答,就在 Claude Code 里提问,让它先调用 ask.py 检索,再根据原句作答,并要求它注明哪些是推理。
常见错误和自查
| 现象 | 怎么办 |
|---|---|
| 明明文档里有,却返回「文档中未找到」 | 问题里的说法和文档不一致(比如“上海”与“一线城市”),让 Claude 往同义词表里加对应词 |
| 返回的段落不对 | 加 -k 3 看前几个候选,或让 Claude 调整切段方式 |
| 401 或请求失败 | 检查 Key 是否完整,Base URL 是否为 https://api.aicodewith.ai(不带 /v1),改完重开终端 |
常见问题
本地文档问答会把文档上传到外部吗?
ask.py 只在本机读文件、本机检索,不调用任何 API。用 Claude Code 写脚本、让它读结果的过程会把相关内容发给模型,敏感文档请先确认公司规定。
需要装向量数据库或别的依赖吗?
不需要。实测脚本只用 Python 标准库,复制到任何装了 Python 3 的电脑都能跑。
要多久?
实测这一次从写脚本到回答完 4 个问题用了 67 秒。之后单独运行 ask.py 是纯本地计算,不再调用模型。
支持 PDF 或 Word 吗?
我们实测的是 Markdown。其他格式可以先转成 Markdown 或纯文本放进 docs/,再用同一个脚本。
文档多了还能用吗?
可以让 Claude 按你的文档量调整切段和检索方式。我们实测用的是 3 份小文档,大规模文档建议先抽几个问题验证答得对不对。
相关阅读
- 想把“回答必须标出处”写成长期规则,见《Claude Code 的 CLAUDE.md 怎么写》。
- 把问答结果整理成汇报材料,见《用 Claude 做 PPT》。
- 不确定用哪个模型,见《Claude Code 用哪个模型》。
参考来源
- Claude Code 安装:code.claude.com/docs/en/setup
- BM25 算法简介:en.wikipedia.org/wiki/Okapi_BM25
同类场景
想看用 AI 搭本地知识库的更多用法,可以看AI 本地知识库场景页。



