创建时间: 2026-08-01最后更新: 2026-08-06

1. 为什么要手写最小 RAG

前面我们已经接触过 LangChain 的 Document、Embeddings 和 VectorStore。这些抽象可以减少重复代码,但如果第一条 RAG 链从头到尾都依赖封装,遇到检索结果不对时,往往只能不断调整参数,却说不清问题到底发生在哪一步。

这一篇先暂时绕开 VectorStore 和 Retriever。模型与 Embedding 仍然使用供应商适配器,索引、检索、上下文拼接和调试信息则由我们自己完成:

  1. 把文档转成向量并建立内存索引;
  2. 把用户问题转成查询向量;
  3. 计算余弦相似度并选出候选;
  4. 组装带来源的上下文;
  5. 调用模型生成答案;
  6. 同时返回引用和检索调试信息。

这个版本跑通以后,再回头看 LangChain 的抽象会更容易。它并没有改变 RAG 的基本原理,只是把上面这些职责整理成了可以组合、替换和扩展的接口。

订阅后可阅读剩余内容
AI 电子伴侣企业级项目实战
已发布239计划发布120目标已完成199%