Agent相关-FAISS 与 LangChain 在文档检索中的分工

FAISS 与 LangChain 在文档检索中的分工

一句话结论

FAISS 只管"向量 → 编号",LangChain 负责其余全部:编码、存原文、编号转原文、打包返回、存盘。

1 整体流程

python 复制代码
db = FAISS.from_documents(chunks, embeddings)
retriever = db.as_retriever(search_kwargs={"k": 2})
docs = retriever.invoke(question)
store.save_local(save_path)

内部真正发生的事:

text 复制代码
chunks ──embedding──→ 向量 ──FAISS──→ index.faiss
   │
   └──────────────────────────────→ index.pkl(编号→原文)

question ──embedding──→ 查询向量
                          │
                          ▼
                    FAISS 检索 → 编号 [0, 2]
                          │
                          ▼
                   查 index.pkl → 原文
                          │
                          ▼
                   打包成 Document 返回

2 两个文件,两个归属(重点:别被同一路径骗了)

save_local(save_path) 会把两个文件存进同一个目录,很容易误以为都是 FAISS 的,其实归属不同:

文件 存什么 属于谁 FAISS 认不认
index.faiss 向量 FAISS ✅ 这是它的全部世界
index.pkl 编号 → 原文 LangChain ❌ 完全不知道它存在

为什么放一起? 因为 save_local 是 LangChain 封装的"一键保存",它顺手把两者放同一目录方便管理。但同目录 ≠ 同一家。

两边靠插入顺序保证编号一一对应:

text 复制代码
index.faiss[0]  ←→  index.pkl["0"]
index.faiss[1]  ←→  index.pkl["1"]
index.faiss[2]  ←→  index.pkl["2"]

3 逐行拆解职责

第 1 行:FAISS.from_documents(chunks, embeddings)

动作 谁做的
chunk → 向量 Embedding 模型
向量存进索引 FAISS
原文按编号存成字典 LangChain

结果 db 里挂着两样:向量索引(FAISS) + 编号→原文字典(LangChain)。

第 2 行:db.as_retriever(...)

纯 LangChain,只是把 db 包装成统一接口,不涉及 FAISS。

第 3 行:retriever.invoke(question)

步骤 做什么 谁做的
① question → 查询向量 Embedding 模型
② 向量 → 编号 [0, 2] FAISS
③ 编号 → 原文 LangChain
④ 打包成 Document 返回 LangChain

第 4 行:store.save_local(save_path)

动作 谁做的
存 index.faiss FAISS (faiss.write_index)
存 index.pkl LangChain(pickle 那个字典)
把两者打包成一个调用、放同一目录 LangChain

4 核心结论

  • FAISS 的戏份只有两处 :存向量、返回编号。存盘时也只负责 index.faiss。
  • LangChain 的戏份 :调 embedding、维护"编号→原文"映射、把编号还原成原文、打包返回、统一接口、存 index.pkl。
  • FAISS 是纯向量检索库 ,它不知道"文字"的存在 ;index.pkl 是 LangChain 为了补回原文而额外维护的,与 FAISS 无关。
  • save_local 把两个文件放同一目录,纯属 LangChain 的封装便利,不代表它们同源。

FAISS 提供向量检索能力,LangChain 提供"检索 + 原文回填 + 一键存盘"的完整链路。

相关推荐
Flynn Liang2 小时前
Agentic 工作流:子代理、Supervisor 与人工介入
java·langchain·多智能体·supervisor·agentic·langchain4j
GISer_Jing16 小时前
Agent核心内容
后端·ai·langchain
Flynn Liang19 小时前
可观测性与成本治理:一次对话的 17 个观测点
java·langchain·可观测性·micrometer·langchain4j·token 成本·llm 监控
郝学胜-神的一滴1 天前
LangChain Skill 实现(渐进披露 On-Demand Skill,LangChain 官方 Deep Agent Skill 模式)
开发语言·python·langchain·numpy
Flynn Liang2 天前
Rerank 与上下文工程:重排、压缩与引用溯源的收益边界
langchain·rag·langchain4j·rerank·上下文工程·引用溯源
Flynn Liang2 天前
RAG 评估体系:黄金集、检索指标与 LLM-as-Judge 落地
java·langchain·rag·评估·langchain4j·检索指标
啊吧怪不啊吧3 天前
LangChain之绑定工具
langchain
努力的小郑4 天前
数据查到了,回答去哪儿了?一次百炼 + LangChain 排查实录
后端·langchain·agent
承渊政道5 天前
LangChainAI应用开发框架【LangChain与LangGraph介绍】
langchain·大模型·langgraph·ai应用开发
Flynn Liang5 天前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices