用 50 行 Python 从零搭建本地 RAG 问答系统

Tim 只用 Python、numpy、Ollama、Nomic 嵌入模型和 Qwen3 4B,在自己电脑上免费为一份 markdown 手册搭建了检索增强问答机器人。

Tech With Tim · YouTube · 发布于 2026年10月30日 · 软件开发与运维

用 50 行 Python 从零搭建本地 RAG 问答系统,Tech With Tim 的视频▶ 在 YouTube 观看
提示词
写一个纯 Python 的 RAG 脚本(只用 requests 和 numpy):用 Ollama 的 nomic-embed-text 做向量嵌入,用 qwen3:4b-instruct 生成回答;把 docs/ 下每个 .md 文件按段落切块并嵌入,每次提问用余弦相似度取最相近的 3 个块,并仅依据这些上下文回答。

图解

Tim 不用任何框架和向量数据库搭建 RAG:把手册按段落切块,用本地小模型做嵌入,用余弦相似度找出和问题最接近的块,再把它们放进本地聊天模型的提示词里。全程在自己电脑上免费运行,不到 50 行代码。

要解决的问题: 普通 AI 模型回答不了关于私有文档的问题(比如咖啡店的报警密码),因为这些内容不在训练数据里,它要么拒答,要么胡编。

RAG 如何回答一个问题

  1. 手册 markdowndocs/handbook.md 里一份虚构咖啡店的员工手册,每段一个主题
  2. 切块按空行切分:10 个段落加标题,共 11 个块
  3. 块嵌入Nomic embed text(274MB)把每个块变成 768 个数字
  4. 余弦相似度搜索嵌入问题,用 numpy 与每个块比较,取最相近的 k(3)个
    丢弃: 其余相似度较低的块
  5. 组装提示词“只根据下面的上下文回答”,然后是这些块,最后是问题
  6. Qwen3 4B本地聊天模型读取提示词并写出答案
  7. 有依据的回答例如:狗只能待在露台上
你的文档普通 Python本地模型产出

RAG 的三个步骤

  1. 检索:在文档中搜索与问题相关的片段
  2. 增强:把这些片段加入提示词
  3. 生成:模型读取提示词并写出答案

关键数字

< 50行 Python 代码
274MB嵌入模型
约 2.5GB聊天模型
768每个嵌入的数字个数

自己动手搭

全部在本地免费运行,只需用 uv 安装 requests 和 numpy。

  1. 安装 Ollama,然后运行 ollama pull nomic-embed-text,并拉取 Qwen3 4B instruct 模型
  2. 在新文件夹里运行 uv init,并添加 requests 和 numpy
  3. 编写 embed() 和 ask_llm() 函数,调用 localhost:11434 上 Ollama 的本地服务
  4. 把 markdown 放进 docs/,每个文件按空行切成块
  5. 嵌入所有块,再用余弦相似度写 retrieve(question, k)
  6. 用最相近的块和问题组装提示词,并循环提问

如果你的电脑跑不动本地模型,也可以改用 OpenAI 或 Anthropic 的云端模型。

要记住的几点

  • 模型并没有学到新东西,只是在回答前拿到了正确的笔记,就像开卷考试。
  • 块切小一点,匹配更精准,提示词也更短,模型更不容易出错。
  • 切块策略会影响回答的准确度。
  • 生产系统还会加入向量数据库(PG vector 或 Chroma)、带重叠的更智能切块、重排序和评测。

根据视频字幕提炼

怎么上手

  1. 打开 Ollama。
  2. 复制提示词,把 [方括号] 里的内容换成你自己的。
  3. 观看 Tech With Tim 的视频,了解完整流程和配置方法。

相关用例

分享

微博XTelegram