流水线
RAG 分成 索引(离线) 和 查询(在线)。索引把文档变成可检索的向量;查询把问题变成向量,取出块,可选重排,再交给 LLM。
官方-ish 的一条链是:
查询时,用户问题走同一套 embed,再进入 retrieve。不要用聊天模型去「embed」。
两阶段分别做什么
索引可以批量、异步、夜间跑。查询要快:向量搜索是毫秒到几十毫秒;LLM 才是延迟大头。
每一跳的职责
- documents — Markdown、PDF 文本层、数据库字段。先能
print出纯文本,再谈检索。 - chunk — 切成语义完整、长度可控的块。见 切块。
- embed — 块 → 向量。见 Embeddings。
- vector store — 持久化并做近邻搜索:Chroma、pgvector、Qdrant。
- retrieve — 取 k 条;可加元数据过滤或关键词混合。
- optional rerank — 交叉编码器或规则,把「真相关」提前。见 检索与重排。
- LLM — 提示词写明「只根据上下文;没有依据就说不知道」。
框架课里的 Loader / Splitter / Retriever 只是这七步的包装:LangChain RAG、LlamaIndex、Dify 知识库。
最小可运行草图(内存,无数据库)
把「切 → 嵌 → 搜 → 拼提示词」串起来。嵌入可换成 OpenAI 或 Ollama;向量库章节再把 store 换成磁盘或 Postgres。
fake_embed 不能上线。它只证明数据流;真实向量来自 Embeddings。
哪一跳最容易坏
下一步
- 切块
- Embeddings
- Chroma — 第一条可持久化的流水线