用自己的文档做本地问答:Claude Code + Python 零依赖实现

让 Claude Code 写一个只用 Python 标准库的本地文档问答脚本,按段落检索、给出原句和出处,文档里没有的就答「文档中未找到」。实测 67 秒写完,4 个问题全部答对。

4 分钟阅读
用自己的文档做本地问答:Claude Code + Python 零依赖实现

公司制度、项目文档散在一堆 Markdown 里,每次找一句话都要翻半天。这篇讲怎么做本地文档问答:让 Claude Code 写一个只用 Python 标准库的脚本 ask.py,读取你的文档、检索出最相关的原句,并标出来自哪个文件;文档里没有的,就直接说「文档中未找到」。

我们用 3 份制度文档实测:67 秒写完脚本,4 个问题全部答对,文档里没有的“健身补贴”老实回答了「文档中未找到」。脚本本身不调用任何 API,写脚本这一步用的是接 AICodeWith 的 Claude Code。

本地文档问答:ask.py 实跑结果

实测成品:ask.py 回答 4 个问题,每条都给出原句和出处文件;第 4 题文档里没有,脚本直接输出「文档中未找到」。

先配好环境:两步接上 AICodeWith

环境只配一次,之后所有场景通用:

  1. 装 Claude Code:按 Claude Code 官方安装文档 安装,终端输入 claude --version 能看到版本号就行。
  2. 创建 Key 并改全局配置:登录后进控制台「密钥管理」,点「创建密钥」。然后打开全局配置 ~/.claude/settings.json,在 env 里填上 Base URL 和 Key:

创建 API Key →

json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
    "ANTHROPIC_AUTH_TOKEN": "sk-你的Key"
  }
}
Base URL 末尾不要加 /v1。改完重开终端,运行 claude 能正常对话就说明接通了。各字段的含义和更多报错处理见《Claude Code 如何接入第三方 API》。

第一步:准备文档,一句话让它写脚本

新建一个文件夹,把文档放进 docs/ 子目录(Markdown 格式),然后在文件夹里运行 claude。我们实测用的提示词:

text
docs/ 文件夹里是我们公司的几份制度文档。帮我做一个本地问答小工具:写一个不依赖任何第三方 API Key 的 Python 脚本 ask.py,读取 docs/ 下的 Markdown,按段落切块,用关键词/BM25 检索出最相关的段落,输出答案和出处(文件名+原句)。然后用它回答这 4 个问题并把结果写进 qa-results.md:1. 去上海出差住宿每晚最多报多少?2. 入职 12 年有几天年假?3. 借测试手机找谁、能借多久?4. 公司有没有健身补贴?(文档里没有的要明确说"文档中未找到",不能编)

最后那句“文档里没有的要明确说文档中未找到,不能编”一定要写,它决定了脚本会不会硬凑答案。

第二步:它写出的脚本怎么工作

Claude Code 写出的 ask.py 只用了 Python 标准库,不用装任何包:

  1. 读取 docs/ 下所有 Markdown,按空行和列表项切成段落。
  2. 中文按两个字一组切词,用 BM25 给每个段落打分。
  3. 计算问题关键词在最佳段落里出现的比例,低于 30% 就直接输出「文档中未找到」,不拿相近的条目凑数。
  4. 输出原句和出处文件名。

用法很简单:

bash
python3 ask.py "入职 12 年有几天年假?"
python3 ask.py -k 3 "借测试手机找谁?"   # 看前 3 个候选段落

第三步:实测结果

问题脚本返回的原句出处最终答案
去上海出差住宿每晚最多报多少?差旅住宿:一线城市每晚上限 600 元,其他城市 400 元。报销制度.md600 元
入职 12 年有几天年假?年假:入职满 1 年 5 天,满 10 年 10 天,满 20 年 15 天。请假制度.md10 天
借测试手机找谁、能借多久?测试手机找 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 份小文档,大规模文档建议先抽几个问题验证答得对不对。

相关阅读

注册 AICodeWith → 查看价格 →

参考来源

同类场景

想看用 AI 搭本地知识库的更多用法,可以看AI 本地知识库场景页。

相关文章

Claude Code 怎么控制 Unreal Engine?Epic 官方插件安装、MCP 连接与安全设置(UE5 实操)

Claude Code 怎么控制 Unreal Engine?Epic 官方插件安装、MCP 连接与安全设置(UE5 实操)

Epic Games 在 Anthropic 官方插件市场提供了 Claude Code Unreal Engine 插件 unreal-engine-skills-for-claude-code,配合编辑器里的 Unreal MCP,就能让 Claude Code 直接操作 UE5 编辑器。本文讲清编辑器端要开哪两个插件、怎么启动 MCP 服务、Claude Code 端怎么装插件和验证连接,以及 execute_tool_script 等安全设置。我们用 AICodeWith 的 Key 实测:插件 2.5 秒装好,全程不需要登录 Anthropic 账号。