创建时间: 2026-08-01最后更新: 2026-08-06作者: yangbo(2fb9ff41e)
1. 为什么要手写最小 RAG
前面我们已经接触过 LangChain 的 Document、Embeddings 和 VectorStore。这些抽象可以减少重复代码,但如果第一条 RAG 链从头到尾都依赖封装,遇到检索结果不对时,往往只能不断调整参数,却说不清问题到底发生在哪一步。
这一篇先暂时绕开 VectorStore 和 Retriever。模型与 Embedding 仍然使用供应商适配器,索引、检索、上下文拼接和调试信息则由我们自己完成:
- 把文档转成向量并建立内存索引;
- 把用户问题转成查询向量;
- 计算余弦相似度并选出候选;
- 组装带来源的上下文;
- 调用模型生成答案;
- 同时返回引用和检索调试信息。
这个版本跑通以后,再回头看 LangChain 的抽象会更容易。它并没有改变 RAG 的基本原理,只是把上面这些职责整理成了可以组合、替换和扩展的接口。
订阅后可阅读剩余内容
AI 电子伴侣企业级项目实战
已发布239节计划发布120节目标已完成199%