LangChain 多轮 RAG:4 条链各自干什么(终于搞懂了)
近在啃 LangChain Next.js 模板里的 retrieval 案例,一开始被 4 条链绕晕了,理顺后发现其实就是一条「带历史的客服流水线」。
场景
多轮聊天 + 向量库检索。用户追问「它和普通 chain 有啥区别?」——「它」对人清楚,对向量检索是灾难。
4 条链,各干一件事
1️⃣ 问题改写链 standaloneQuestionChain
把「它是什么」改成「LCEL 和普通 chain 有什么区别」
→ 只为检索服务,让 embedding 能搜到对的文档
2️⃣ 检索链 retrievalChain
用完整问题去向量库查资料,拼成 context
→ 翻资料
3️⃣ 回答链 answerChain
把 文档 + 聊天历史 + 问题 一起交给模型生成答案
→ 看资料后组织话术(不是只给文档+问题,因为要延续多轮语气、偏好,比如「用小白话」「举例子」)
4️⃣ 总链 conversationalRetrievalQAChain
上面三步串成一条,.stream() 流式返回给前端
→ 总导演
❓ 1. 为啥要拆?
改写链:解决「指代词 它 这 那」检索搜不到
检索链:RAG 必须先有 context
回答链:检索结果 ≠ 最终回答
总链:一次调用搞定全流程