Kevin's blog Kevin's blog
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档

Kevin

你可以迷茫,但不可以虚度
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档
  • AI基础

  • 提示词

  • RAG技术

    • RAG技术简介
    • RAG + Embedding + 向量库
    • RAG 向量体系与知识库实战篇
      • 🧩 一、Embedding 与大模型分离后的协作问题
        • ✅ 推荐架构:
      • 📦 二、多模型支持下的向量一致性解决方案
        • ❌ 错误做法:
        • ✅ 解决方案:
      • 🧠 三、RAG 系统中的向量压缩与摘要策略
        • ✅ 建议做法:
      • 🏗 四、本地知识库构建实战流程
        • 1️⃣ 文档预处理:
        • 2️⃣ 向量转化并存库(FAISS):
        • 3️⃣ 用户 query 检索:
        • 4️⃣ 拼接 Prompt 给大模型:
      • 🔚 小结
      • 🧮 五、Hybrid Search 混合检索策略
        • ✅ 背景:
        • ✅ 实现方式:
        • ✅ LangChain 示例策略:
      • 🔗 六、LangChain + FAISS + Chat API 的集成方案
        • ✅ 核心组件结构:
        • ✅ 示例代码片段(本地 embedding + OpenAI LLM)
      • 🤖 七、Agent + RAG 的融合策略
        • ✅ 使用 LangChain 实现方式:
        • ✅ 场景举例:
      • ✅ 总结:构建稳健、可拓展的 RAG 系统的关键点
    • RAG微调Agent的联系与区别
  • MCP技术

  • SpringAI

  • AI
  • RAG技术
kevin
2025-06-06
目录

RAG 向量体系与知识库实战篇

# RAG 向量体系与知识库实战篇

📌 本文承接上篇《RAG + Embedding + 向量库 完整理解》,聚焦于如何在实践中构建一个稳定、可扩展、支持多模型的 RAG 系统。我们将讲清楚:如何处理 embedding 一致性、多模型接入问题、如何压缩向量、如何构建本地知识库。

# 🧩 一、Embedding 与大模型分离后的协作问题

在真实项目中,很多人希望:

  • 文档知识库用 OpenAI 向量建好
  • 但用户提问用本地模型(比如 DeepSeek、通义千问)来生成回答

这就涉及一个核心前提:

🧠 “大模型用于生成,不一定是用来构建知识库的。” 但“用户提问时的向量,一定要和知识库建库时使用的 embedding 模型一致。”

# ✅ 推荐架构:

阶段 使用模型 描述
文档建库 OpenAI embedding(或 bge/E5) 把文本变成向量,存入向量库(一次性)
用户提问向量化 同上 必须用同一个 embedding 模型计算 query 向量(每次)
大模型回答生成 可选(GPT/DeepSeek/通义等) 使用语义补全的 prompt 生成文本

⚠️ 向量库 ≠ LLM,大模型用哪个不影响向量检索逻辑。

# 📦 二、多模型支持下的向量一致性解决方案

# ❌ 错误做法:

  • 建库时用 text-embedding-ada-002
  • 提问时用 bge-small-zh 做 embedding
  • 结果:语义空间不同,向量比对失败

# ✅ 解决方案:

  1. 所有 embedding 请求统一通过向量服务调用:如 POST /embed 由服务内部封装 embedding 模型
  2. 封装对文档和 query 使用同一个模型,无论调用 LLM 是什么
  3. 把 embedding 模型 ID 加入文档索引版本中,确保检索安全性

✨ 甚至可以做多 embedding 模型向量共存,但要独立索引与检索逻辑,不推荐初期使用

# 🧠 三、RAG 系统中的向量压缩与摘要策略

在向量库中存储整篇文档会导致:

  • 相似度不精准(噪声太多)
  • 返回的内容太长,Prompt 塞不下

# ✅ 建议做法:

  • 文档拆分: 按段/句/标题分段
  • 摘要压缩: 使用本地模型提前生成 300 字精华摘要
  • embedding 入库: 只存精华片段,而非全文
  • 多轮 query 匹配 + rerank:
    • 初步用向量查 Top 10
    • 再用大模型对匹配内容打分 rerank,选前3拼入 Prompt

📌 记住:RAG 本质是「高召回 + 精排序」

# 🏗 四、本地知识库构建实战流程

以 markdown 文档为例,构建完整向量库:

# 1️⃣ 文档预处理:

from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_text(document_text)
1
2
3
4

# 2️⃣ 向量转化并存库(FAISS):

from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings

emb = HuggingFaceEmbeddings(model_name="BAAI/bge-base-zh-v1.5")
vectorstore = FAISS.from_texts(chunks, emb)
vectorstore.save_local("./faiss_db")
1
2
3
4
5
6

# 3️⃣ 用户 query 检索:

query = "2024年员工入职制度有哪些变化?"
matched_docs = vectorstore.similarity_search(query, k=5)
1
2

# 4️⃣ 拼接 Prompt 给大模型:

你是一个HR助手,请根据以下资料回答:
<知识片段1>
<知识片段2>
...
问题:2024年员工入职制度有哪些变化?
1
2
3
4
5

# 🔚 小结

RAG 系统设计远不只是简单地“把文档塞给大模型”,而是一整套围绕 embedding 策略、数据切分策略、向量存储优化与上下文拼接调度 的工程体系。

理解并实现以下三点,才能让你的 RAG 系统真正稳定可用:

  1. 向量生成模型要统一
  2. 向量切分要干净精准,避免上下文干扰
  3. 上下文注入 Prompt 要遵循 token 上限原则与上下文意图设计

# 🧮 五、Hybrid Search 混合检索策略

Hybrid Search(混合检索)是将“语义向量检索”和“关键词关键词精确匹配”结合的一种更鲁棒的检索方式。

# ✅ 背景:

  • 纯向量搜索容易召回“不相关但语义接近”的内容
  • 关键词检索可以提供准确性补偿

# ✅ 实现方式:

  1. 用户提问时,同时:
    • 做向量 embedding → 检索 top-N
    • 提取关键词(如分词后筛名词) → Elasticsearch/Whoosh 精确匹配
  2. 对两个结果集合做合并:
    • 可以先 union → 再 rerank
    • 或打分融合(加权打分)
  3. 拼接内容进入 prompt

# ✅ LangChain 示例策略:

# 向量检索结果
semantic_docs = vectorstore.similarity_search(query, k=5)
# 关键词检索结果(例如使用 BM25)
token_docs = keyword_index.search(query, top_k=5)
# 合并去重
all_docs = list({doc.page_content: doc for doc in (semantic_docs + token_docs)}.values())
1
2
3
4
5
6

📌 混合检索适用于内容存在专业术语、命名实体或全文过大不易 embedding 的场景。

# 🔗 六、LangChain + FAISS + Chat API 的集成方案

# ✅ 核心组件结构:

[用户问题] → [Embedding 模型] → [FAISS 检索] → [Prompt 构造器] → [LLM API 调用] → [返回答案]
1

# ✅ 示例代码片段(本地 embedding + OpenAI LLM)

from langchain.chat_models import ChatOpenAI
from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA

embedding = HuggingFaceEmbeddings(model_name="bge-base-zh")
vectorstore = FAISS.load_local("./faiss_db", embedding)
llm = ChatOpenAI(model_name="gpt-4")

qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 5}),
    return_source_documents=True
)

response = qa.run("请告诉我2024年合同法的最新调整内容?")
print(response)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

📌 LangChain 是非常适合构建 RAG 应用的工具,核心优点:组件标准化、支持本地/远程混用、支持向量库/搜索混合接入。

# 🤖 七、Agent + RAG 的融合策略

RAG 解决了“知识来源”问题,Agent 解决了“任务决策与工具调度”问题。

结合方式:

让 Agent 把 RAG 作为一种 Tool 挂载,当任务需要知识时自动调用。

# ✅ 使用 LangChain 实现方式:

from langchain.agents import initialize_agent, Tool
from langchain.agents.agent_types import AgentType

qa_tool = Tool(
    name="KnowledgeBaseQA",
    func=qa.run,
    description="查询内部法律知识库回答提问"
)

agent = initialize_agent(
    tools=[qa_tool],
    llm=ChatOpenAI(),
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

agent.run("帮我查一下2024年入职试用期变动")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# ✅ 场景举例:

  • Agent 先判断任务意图:是否需要查知识?
  • 是 → 自动调用 RAG 工具 → 拼接进多工具工作流中(如计划生成 + 数据调用 + 查询法务)

📌 RAG 可以作为 Agent 的底层知识接口,未来结合 Tool Calling / Function Calling / Action Plan,将形成完整“具知识感知力的智能体”。

# ✅ 总结:构建稳健、可拓展的 RAG 系统的关键点

  1. 统一的 Embedding 向量空间(数据和 query 必须来自同一模型)
  2. 混合检索策略(Hybrid)+ Rerank 提升准确率
  3. 向量切分、摘要与 Prompt 拼接策略决定结果上限
  4. LangChain 架构是集成 RAG + Agent 的最佳实践载体
  5. Agent 驱动的 RAG 工具化是构建智能系统的未来方向

📌 后续专题可扩展:RAG 分布式部署、知识更新机制、LangGraph 任务编排、Chunk 动态缓存等

上次更新: 2025/05/19, 17:31:24
RAG + Embedding + 向量库
RAG微调Agent的联系与区别

← RAG + Embedding + 向量库 RAG微调Agent的联系与区别→

最近更新
01
AI是如何学习的
06-06
02
提示词工程实践指南
06-06
03
chatGpt提示原则
06-06
更多文章>
| Copyright © 2022-2025 Kevin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式