<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RAG 生态与选型 on 扎塔-Zata</title><link>https://www.zata.cc/tags/rag-%E7%94%9F%E6%80%81%E4%B8%8E%E9%80%89%E5%9E%8B/</link><description>Recent content in RAG 生态与选型 on 扎塔-Zata</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>扎塔-Zata</copyright><lastBuildDate>Thu, 24 Sep 2026 17:09:06 +0800</lastBuildDate><atom:link href="https://www.zata.cc/tags/rag-%E7%94%9F%E6%80%81%E4%B8%8E%E9%80%89%E5%9E%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>Graph RAG 开源项目全景：从微软 GraphRAG 到 LightRAG</title><link>https://www.zata.cc/p/graph-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%85%A8%E6%99%AF%E4%BB%8E%E5%BE%AE%E8%BD%AF-graphrag-%E5%88%B0-lightrag/</link><pubDate>Fri, 27 Mar 2026 16:00:00 +0800</pubDate><guid>https://www.zata.cc/p/graph-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%85%A8%E6%99%AF%E4%BB%8E%E5%BE%AE%E8%BD%AF-graphrag-%E5%88%B0-lightrag/</guid><description>&lt;img src="https://www.zata.cc/p/graph-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%85%A8%E6%99%AF%E4%BB%8E%E5%BE%AE%E8%BD%AF-graphrag-%E5%88%B0-lightrag/images/index/index.png" alt="Featured image of post Graph RAG 开源项目全景：从微软 GraphRAG 到 LightRAG" />&lt;p>传统 RAG 的核心思路是&amp;quot;向量检索 + 生成&amp;quot;，但在处理需要多跳推理、全局理解的问题时，效果往往不理想。&lt;/p>
&lt;p>Graph RAG（知识图谱 + RAG）通过构建文档间的实体关系网络，让检索不再局限于局部相似度匹配，而是能够进行图遍历、社区发现、路径推理。这让 RAG 系统能回答更复杂的问题。&lt;/p>
&lt;p>这篇文章系统梳理 Graph RAG 的主流开源项目，帮你快速了解和选型。&lt;/p>
&lt;h2 id="一为什么需要-graph-rag">一、为什么需要 Graph RAG
&lt;/h2>&lt;h3 id="传统-rag-的局限">传统 RAG 的局限
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题 1：多跳推理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户问：&amp;#34;A 公司的合作方的竞争对手有哪些？&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">传统 RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 检索&amp;#34;A 公司的合作方&amp;#34; → 找到 B 公司
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 检索&amp;#34;B 公司的竞争对手&amp;#34; → 找到 C、D 公司
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">问题：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要两轮检索，中间结果可能丢失
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 无法自动发现推理路径
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Graph RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">A 公司 --合作--&amp;gt; B 公司 --竞争--&amp;gt; C、D 公司
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">一次图遍历即可完成
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题 2：全局理解
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户问：&amp;#34;这篇文章的核心观点是什么？&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">传统 RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 检索 Top-K 相关段落
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 但核心观点可能分散在各处
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 无法形成全局视角
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Graph RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 通过社区发现，将文档划分为多个主题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 每个社区生成摘要
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 整合社区摘要，形成全局理解
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="graph-rag-的核心思路">Graph RAG 的核心思路
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">传统 RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档 → Chunk → 向量化 → 向量检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Graph RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档 → 实体抽取 → 关系抽取 → 知识图谱
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 图检索 + 向量检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM 生成
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="二主流框架概览">二、主流框架概览
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>框架&lt;/th>
&lt;th>Stars&lt;/th>
&lt;th>作者&lt;/th>
&lt;th>核心特点&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>LightRAG&lt;/strong>&lt;/td>
&lt;td>36K+&lt;/td>
&lt;td>港大 HKUDS&lt;/td>
&lt;td>轻量快速，双层检索&lt;/td>
&lt;td>中小规模，实时更新&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>GraphRAG&lt;/strong>&lt;/td>
&lt;td>33K+&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>社区摘要，全局理解&lt;/td>
&lt;td>大规模文档&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>HippoRAG&lt;/strong>&lt;/td>
&lt;td>3.5K+&lt;/td>
&lt;td>俄亥俄州立&lt;/td>
&lt;td>模拟海马体记忆&lt;/td>
&lt;td>长期记忆系统&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Fast-GraphRAG&lt;/strong>&lt;/td>
&lt;td>3.8K+&lt;/td>
&lt;td>Circlemind&lt;/td>
&lt;td>自适应，快速&lt;/td>
&lt;td>快速部署&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Neo4j Graph Builder&lt;/strong>&lt;/td>
&lt;td>4.7K+&lt;/td>
&lt;td>Neo4j&lt;/td>
&lt;td>企业级图数据库&lt;/td>
&lt;td>可视化，企业应用&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>R2R&lt;/strong>&lt;/td>
&lt;td>7.8K+&lt;/td>
&lt;td>SciPhi AI&lt;/td>
&lt;td>生产级，完整方案&lt;/td>
&lt;td>企业部署&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>下面逐一详细介绍。&lt;/p>
&lt;h2 id="三microsoft-graphrag">三、Microsoft GraphRAG
&lt;/h2>&lt;h3 id="基本信息">基本信息
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/microsoft/graphrag
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 33,800+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">论文: GraphRAG: Unlocking LLM Discovery on Narrative Private Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">语言: Python
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="核心原理">核心原理
&lt;/h3>&lt;p>GraphRAG 的核心创新是&lt;strong>社区发现 + 社区摘要&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Step 1: 知识图谱构建
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档 → 实体抽取 → 关系抽取 → 图存储
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 2: 社区发现
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用 Leiden 算法将图划分为多个社区
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每个社区是一个紧密相关的实体群组
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 3: 社区摘要
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">对每个社区，用 LLM 生成摘要
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">摘要包含社区的核心实体和关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 4: 检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">局部查询：从相关实体出发，图遍历
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">全局查询：检索社区摘要，整合回答
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="架构图">架构图
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Microsoft GraphRAG Pipeline │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 文档输入 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────┼───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼ ▼ ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┐ ┌──────────┐ ┌──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 文本分块 │ │ 实体抽取 │ │ 关系抽取 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────┬────┘ └────┬─────┘ └────┬─────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────┼───────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 知识图谱 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ (NetworkX) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 社区发现 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ (Leiden) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 社区摘要 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ (LLM 生成) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────┼───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼ ▼ ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┐ ┌──────────┐ ┌──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 局部查询 │ │ 全局查询 │ │ 混合查询 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────┬────┘ └────┬─────┘ └────┬─────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────┼───────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ LLM 生成答案 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="快速开始">快速开始
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pip&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">graphrag&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 初始化项目&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">python&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span> &lt;span class="n">graphrag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">index&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">init&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">root&lt;/span> &lt;span class="o">./&lt;/span>&lt;span class="n">ragtest&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 配置（settings.yaml）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">graphrag&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llm&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">type&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">openai_chat&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">gpt&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="n">o&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">embeddings&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">type&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">openai_embedding&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">embedding&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">small&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 构建索引&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">python&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span> &lt;span class="n">graphrag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">index&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">root&lt;/span> &lt;span class="o">./&lt;/span>&lt;span class="n">ragtest&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查询&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">python&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span> &lt;span class="n">graphrag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">root&lt;/span> &lt;span class="o">./&lt;/span>&lt;span class="n">ragtest&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">method&lt;/span> &lt;span class="n">local&lt;/span> &lt;span class="s2">&amp;#34;What is the main topic?&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">python&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span> &lt;span class="n">graphrag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">root&lt;/span> &lt;span class="o">./&lt;/span>&lt;span class="n">ragtest&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">method&lt;/span> &lt;span class="k">global&lt;/span> &lt;span class="s2">&amp;#34;What are the key themes?&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="查询模式">查询模式
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Local Search（局部查询）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 从问题中识别实体
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 扩展实体的邻居节点
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 用局部子图生成答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 适合：具体事实查询
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Global Search（全局查询）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 检索相关社区摘要
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 整合多个社区的信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 形成全局视角
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 适合：&amp;#34;核心观点&amp;#34;、&amp;#34;主要主题&amp;#34;类问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DRIFT Search（混合查询）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 结合局部和全局
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 动态调整检索范围
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 适合：复杂推理问题
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="优缺点">优缺点
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">优点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 全局理解能力强（社区摘要）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 微软官方维护，质量有保障
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 论文驱动，原理清晰
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 支持多种查询模式
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">缺点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 索引构建慢（需要多次 LLM 调用）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 成本高（实体抽取、关系抽取、社区摘要）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 不适合实时更新（重建索引代价大）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 需要一定学习成本
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="适用场景">适用场景
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">✅ 推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 大规模文档库（10K+ 文档）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要全局理解（&amp;#34;核心观点&amp;#34;、&amp;#34;主要趋势&amp;#34;）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要多跳推理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 离线构建，在线查询
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 不推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 小规模知识库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要实时更新
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 成本敏感
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="四lightrag">四、LightRAG
&lt;/h2>&lt;h3 id="基本信息-1">基本信息
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/HKUDS/LightRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 36,600+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">论文: LightRAG: Simple and Fast Retrieval-Augmented Generation (EMNLP 2025)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">作者: 香港大学数据科学实验室
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">语言: Python
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="核心创新">核心创新
&lt;/h3>&lt;p>LightRAG 针对 GraphRAG 的痛点做了优化：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GraphRAG 的问题：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 索引构建慢：需要多次 LLM 调用
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 成本高：实体抽取、关系抽取、社区摘要
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 不支持实时更新
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LightRAG 的解决方案：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 双层检索：低层（实体）+ 高层（关键概念）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 无需社区发现：用双层图代替
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 流式插入：支持实时更新
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 轻量存储：无需图数据库，文件即可
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="双层检索原理">双层检索原理
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">传统 GraphRAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档 → 实体 → 图 → 社区发现 → 社区摘要 → 检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LightRAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档 → 实体 + 关键概念 → 双层图 → 直接检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">双层图结构：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌─────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 高层（关键概念层） │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ [AI] ── [机器学习] ── [深度学习] │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├─────────┼───────────┼───────────┼───┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ▼ ▼ ▼ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 低层（实体层） │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ [GPT-4] [神经网络] [CNN/RNN] │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">查询时：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 先在高层找到相关概念
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 再在低层找到具体实体
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 双层结果融合
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="快速开始-1">快速开始
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pip&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">lightrag&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">hku&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 基础使用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">lightrag&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">LightRAG&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">lightrag.llm&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">openai_complete_if_cache&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">openai_embedding&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 初始化&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">LightRAG&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">working_dir&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;./rag_storage&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llm_model_func&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">openai_complete_if_cache&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">embedding_func&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">openai_embedding&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 插入文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;document.txt&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;r&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查询&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;What is machine learning?&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;hybrid&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查询模式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;...&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;naive&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 纯向量检索&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;...&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;local&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 局部图检索&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;...&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;global&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 全局图检索&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;...&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;hybrid&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 混合检索&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="性能对比官方数据">性能对比（官方数据）
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">索引构建时间：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- GraphRAG: 100 分钟
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- LightRAG: 10 分钟
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 提升: 10x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">查询时间：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- GraphRAG: 2 秒
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- LightRAG: 0.3 秒
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 提升: 6x
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">成本（Token 消耗）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- GraphRAG: $10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- LightRAG: $1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 降低: 90%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">准确率：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- GraphRAG: 45%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- LightRAG: 52%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 提升: 7%
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="优缺点-1">优缺点
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">优点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 快：索引和查询都很快
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 省：成本降低 50-90%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 灵活：支持实时插入更新
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 简单：无需图数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✅ 准确：双层检索更精准
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">缺点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 全局理解不如 GraphRAG（无社区摘要）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 大规模场景下，图文件可能很大
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 功能相对简单
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="适用场景-1">适用场景
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">✅ 推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 中小规模知识库（&amp;lt; 10K 文档）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要实时更新
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 成本敏感
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 快速原型
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 不推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 超大规模文档
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要深度全局理解
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="五hipporag">五、HippoRAG
&lt;/h2>&lt;h3 id="基本信息-2">基本信息
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/OSU-NLP-Group/HippoRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 3,500+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">论文: HippoRAG: A Neurobiological Framework for Long-Term Memory (NeurIPS 2024)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">作者: 俄亥俄州立大学
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">语言: Python
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="核心原理模拟海马体">核心原理：模拟海马体
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">人类记忆机制：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">海马体（Hippocampus）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 索引新记忆
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 将记忆整合到大脑皮层
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">大脑皮层：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 存储长期记忆
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 知识以网络形式组织
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">检索时：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 从海马体获取线索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 在大脑皮层中激活相关记忆
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 通过联想找到答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">HippoRAG 的实现：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">海马体 → 向量索引（快速找到入口）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">大脑皮层 → 知识图谱（关联检索）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">检索 → Personalized PageRank（模拟联想）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="架构图-1">架构图
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ HippoRAG 架构 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">索引阶段：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档 → Passage 节点 → 向量化（海马体索引）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> → 实体抽取 → 实体节点
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> → 关系抽取 → 边
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> → 知识图谱（大脑皮层）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">检索阶段：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → 向量化 → 找到相关 Passage 节点
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Personalized PageRank
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> （从入口节点扩散）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 激活相关实体和 Passage
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> LLM 生成答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="personalized-pagerank">Personalized PageRank
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">传统 PageRank：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 所有节点平等
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 计算全局重要性
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Personalized PageRank：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 从特定节点出发（Query 相关的 Passage）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 计算相对这些节点的重要性
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 模拟&amp;#34;联想&amp;#34;过程
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;GPT-4 的训练数据&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 1: 向量检索找到入口 Passage
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">入口节点: [Passage_A, Passage_B]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 2: Personalized PageRank
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">从 Passage_A、Passage_B 出发
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">计算其他节点的激活程度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 3: 激活扩散
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Passage_A → 实体&amp;#34;GPT-4&amp;#34; → 实体&amp;#34;训练数据&amp;#34; → Passage_C
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Passage_B → 实体&amp;#34;OpenAI&amp;#34; → 实体&amp;#34;GPT-4&amp;#34; → ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 4: 收集高激活度的 Passage
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Top-K: [Passage_A, Passage_B, Passage_C, ...]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 5: LLM 生成答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="快速开始-2">快速开始
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pip&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">hipporag&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">hipporag&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">HippoRAG&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">HippoRAG&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">graph_db&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;neo4j&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 支持 Neo4j 或 NetworkX&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llm_model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;gpt-4&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">embedding_model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;text-embedding-3-small&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 索引&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">index&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./documents&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查询&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;What are the key features of GPT-4?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="适用场景-2">适用场景
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">✅ 推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 长期记忆系统
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 持续学习的知识库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要精准检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 个性化 RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 不推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 简单问答场景
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 成本敏感
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="六neo4j--rag-方案">六、Neo4j + RAG 方案
&lt;/h2>&lt;h3 id="neo4j-llm-graph-builder">Neo4j LLM Graph Builder
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/neo4j-labs/llm-graph-builder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 4,700+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">作者: Neo4j 官方
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">语言: Python
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="核心特点">核心特点
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Neo4j 的优势：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 成熟的图数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 强大的 Cypher 查询语言
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 可视化工具（Neo4j Browser）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 企业级支持
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LLM Graph Builder 的功能：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 从非结构化文本构建知识图谱
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 支持多种 LLM（OpenAI、Azure、Gemini、Ollama）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 实体和关系抽取
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 图谱可视化
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="工作流程">工作流程
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Neo4j Graph Builder Pipeline │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 文档输入 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ (PDF/TXT/URL) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 文本分块 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ LLM 实体抽取 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ &amp;#34;苹果公司&amp;#34; → Organization │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ &amp;#34;库克&amp;#34; → Person │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ LLM 关系抽取 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ (苹果公司, CEO, 库克) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 存入 Neo4j │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ CREATE (a:Org {name:&amp;#34;苹果&amp;#34;})│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ CREATE (b:Person {name:&amp;#34;库克&amp;#34;})│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ CREATE (a)-[:CEO]-&amp;gt;(b) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 图检索 + LLM │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="快速开始-3">快速开始
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pip&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">neo4j&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">graphrag&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">neo4j&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">GraphDatabase&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">neo4j_graphrag.llm&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">OpenAILLM&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">neo4j_graphrag.embeddings&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">OpenAIEmbeddings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">neo4j_graphrag.generation&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">GraphRAG&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 连接 Neo4j&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">driver&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">GraphDatabase&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">driver&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;bolt://localhost:7687&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">auth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;neo4j&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;password&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 初始化&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">llm&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">OpenAILLM&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model_name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;gpt-4&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">embedder&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">OpenAIEmbeddings&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">GraphRAG&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">driver&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">llm&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">embedder&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 构建图谱&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">build_graph&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./documents&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查询&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rag&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Who is the CEO of Apple?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="适用场景-3">适用场景
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">✅ 推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 企业级应用
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要可视化
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 已有 Neo4j 基础设施
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 复杂图查询
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 不推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 小规模、轻量场景
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 不想维护图数据库
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="七其他值得关注的项目">七、其他值得关注的项目
&lt;/h2>&lt;h3 id="1-fast-graphrag">1. Fast-GraphRAG
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/circlemind-ai/fast-graphrag
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 3,800+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 自适应：根据数据和查询自动调整
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 快速：优化的检索算法
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 简单：开箱即用
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">适用：快速部署，数据多样
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-r2r-reason-to-retrieve">2. R2R (Reason to Retrieve)
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/SciPhi-AI/R2R
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 7,800+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 生产级 RAG 系统
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Agentic RAG（Agent + RAG）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 支持知识图谱
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 完整 RESTful API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 评估工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">适用：企业级部署
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-graph-rag-agent拼好rag">3. graph-rag-agent（拼好RAG）
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/1517005260/graph-rag-agent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 2,200+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 融合 GraphRAG + LightRAG + Neo4j
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- DeepSearch 推理能力
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 自制 GraphRAG 评估框架
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 国产项目，中文友好
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">适用：学习对比，评估测试
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-medical-graph-rag">4. Medical-Graph-RAG
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/ImprintLab/Medical-Graph-RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 800+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">论文: ACL 2025
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 医疗领域专用
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 循证医学信息检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 医学实体识别优化
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">适用：医疗知识库
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="5-graphrag-local-ui">5. GraphRAG-Local-UI
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">GitHub: https://github.com/severian42/GraphRAG-Local-UI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Stars: 2,300+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 支持本地 LLM（Ollama）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 完整 UI 界面
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 索引/调参/查询/可视化
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 无需云端 API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">适用：本地部署，隐私敏感
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="八框架对比">八、框架对比
&lt;/h2>&lt;h3 id="性能对比">性能对比
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>指标&lt;/th>
&lt;th>GraphRAG&lt;/th>
&lt;th>LightRAG&lt;/th>
&lt;th>HippoRAG&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>索引速度&lt;/td>
&lt;td>慢&lt;/td>
&lt;td>快 10x&lt;/td>
&lt;td>中等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>查询速度&lt;/td>
&lt;td>中等&lt;/td>
&lt;td>快 5x&lt;/td>
&lt;td>快&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>成本&lt;/td>
&lt;td>高&lt;/td>
&lt;td>低 50-90%&lt;/td>
&lt;td>中等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>全局理解&lt;/td>
&lt;td>强&lt;/td>
&lt;td>中等&lt;/td>
&lt;td>中等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>局部检索&lt;/td>
&lt;td>强&lt;/td>
&lt;td>强&lt;/td>
&lt;td>很强&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>实时更新&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="功能对比">功能对比
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>功能&lt;/th>
&lt;th>GraphRAG&lt;/th>
&lt;th>LightRAG&lt;/th>
&lt;th>HippoRAG&lt;/th>
&lt;th>Neo4j&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>社区发现&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>双层检索&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>❌&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PageRank&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>可视化&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>本地部署&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>流式插入&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="适用场景对比">适用场景对比
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">大规模文档（10K+）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. GraphRAG（全局理解）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. Neo4j + RAG（企业级）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">中小规模（&amp;lt; 10K）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. LightRAG（快速、低成本）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. Fast-GraphRAG（简单部署）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">长期记忆：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. HippoRAG（模拟海马体）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">医疗/专业领域：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. Medical-Graph-RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. KG_RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">本地部署：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. GraphRAG-Local-UI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. LightRAG + Ollama
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="九选型决策树">九、选型决策树
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">开始选型
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─ 需要全局理解（&amp;#34;核心观点&amp;#34;、&amp;#34;主要趋势&amp;#34;）？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├─ 是 → Microsoft GraphRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └─ 否 → 继续
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─ 需要实时更新？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├─ 是 → LightRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └─ 否 → 继续
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─ 需要可视化？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├─ 是 → Neo4j + RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └─ 否 → 继续
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─ 长期记忆系统？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├─ 是 → HippoRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └─ 否 → 继续
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─ 成本敏感？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├─ 是 → LightRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └─ 否 → 继续
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─ 快速原型？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ ├─ 是 → LightRAG / Fast-GraphRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ └─ 否 → 继续
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─ 企业级部署？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─ 是 → R2R / Neo4j + RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─ 否 → LightRAG
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="十学习资源">十、学习资源
&lt;/h2>&lt;h3 id="必读论文">必读论文
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">1. GraphRAG: Unlocking LLM Discovery on Narrative Private Data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - Microsoft GraphRAG 原始论文
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - 社区发现 + 社区摘要的核心思想
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. LightRAG: Simple and Fast Retrieval-Augmented Generation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - EMNLP 2025
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - 双层检索的设计
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. HippoRAG: A Neurobiological Framework for Long-Term Memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - NeurIPS 2024
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - 模拟海马体的记忆机制
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. From Local to Global: A Graph RAG Approach to Query-Focused Summarization
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - 图检索到全局理解的演进
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="开源资源">开源资源
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Awesome-GraphRAG:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">https://github.com/DEEP-PolyU/Awesome-GraphRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 论文、项目、基准测试汇总
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GraphRAG 深度学习:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">https://github.com/JayLZhou/GraphRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- GraphRAG 源码解读
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LightRAG 实验对比:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">https://github.com/NanGePlus/LightRAGTest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- LightRAG vs GraphRAG 性能对比
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="官方文档">官方文档
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Microsoft GraphRAG:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">https://microsoft.github.io/graphrag/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LightRAG:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">https://github.com/HKUDS/LightRAG/blob/main/README.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neo4j GraphRAG:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">https://neo4j.com/docs/graphrag-manual/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="十一总结">十一、总结
&lt;/h2>&lt;p>Graph RAG 是 RAG 技术的重要演进方向，让检索从&amp;quot;局部相似度匹配&amp;quot;升级为&amp;quot;全局图推理&amp;quot;。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">核心框架对比：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Microsoft GraphRAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 定位：大规模文档，全局理解
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 优势：社区摘要，全局视角
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 代价：构建慢，成本高
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LightRAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 定位：中小规模，快速部署
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 优势：快速、低成本、实时更新
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 代价：全局理解较弱
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">HippoRAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 定位：长期记忆，精准检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 优势：模拟海马体，联想检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 代价：相对复杂
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Neo4j + RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 定位：企业级，可视化
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 优势：成熟图数据库，生态完善
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 代价：需要维护数据库
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>选型建议&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>快速上手：LightRAG&lt;/li>
&lt;li>全局理解：Microsoft GraphRAG&lt;/li>
&lt;li>企业部署：Neo4j + RAG 或 R2R&lt;/li>
&lt;li>长期记忆：HippoRAG&lt;/li>
&lt;li>本地部署：GraphRAG-Local-UI&lt;/li>
&lt;/ul>
&lt;p>没有银弹，关键是根据场景选择合适的工具。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>相关文章&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://www.zata.cc/p/rag-%E6%8A%80%E6%9C%AF%E5%85%A8%E6%99%AF%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9B%E9%98%B6/" >RAG 技术全景：从入门到进阶&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.zata.cc/p/ragflow-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%98%AF%E6%9C%80%E5%80%BC%E5%BE%97%E5%85%B3%E6%B3%A8%E7%9A%84-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/" >RAGFlow 深度解析：为什么它是最值得关注的 RAG 开源项目&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>RAG 技术全景：从入门到进阶</title><link>https://www.zata.cc/p/rag-%E6%8A%80%E6%9C%AF%E5%85%A8%E6%99%AF%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9B%E9%98%B6/</link><pubDate>Thu, 26 Mar 2026 16:00:00 +0800</pubDate><guid>https://www.zata.cc/p/rag-%E6%8A%80%E6%9C%AF%E5%85%A8%E6%99%AF%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9B%E9%98%B6/</guid><description>&lt;img src="https://www.zata.cc/p/rag-%E6%8A%80%E6%9C%AF%E5%85%A8%E6%99%AF%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9B%E9%98%B6/images/index/index.png" alt="Featured image of post RAG 技术全景：从入门到进阶" />&lt;p>前面我们分析了 RAGFlow，它解决了&amp;quot;从文档到答案&amp;quot;的核心问题。但 RAG 领域发展极快，除了文档解析、Chunking、混合检索这些基础能力，还有很多值得关注的技术方向。&lt;/p>
&lt;p>这篇文章会系统梳理 RAG 的技术演进路线，帮你建立完整的知识图谱。&lt;/p>
&lt;h2 id="一rag-的技术演进">一、RAG 的技术演进
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RAG 1.0：检索 + 生成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → 向量检索 → LLM 生成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAG 2.0：多路检索 + Rerank + 引用溯源
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → 多路检索 → 融合 → Rerank → 生成 + 引用
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAG 3.0：Agentic RAG + Graph RAG + 多模态
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → Agent 规划 → 多轮检索/推理 → 反思修正 → 生成
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>下面按技术方向逐一展开。&lt;/p>
&lt;h2 id="二graph-rag知识图谱--rag">二、Graph RAG：知识图谱 + RAG
&lt;/h2>&lt;blockquote>
&lt;p>本文对 Graph RAG 做概要介绍，详细的开源项目分析和选型指南请参阅 &lt;a class="link" href="https://www.zata.cc/p/graph-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%85%A8%E6%99%AF%E4%BB%8E%E5%BE%AE%E8%BD%AF-graphrag-%E5%88%B0-lightrag/" >Graph RAG 开源项目全景：从微软 GraphRAG 到 LightRAG&lt;/a>。&lt;/p>
&lt;/blockquote>
&lt;h3 id="为什么需要-graph-rag">为什么需要 Graph RAG
&lt;/h3>&lt;p>传统 RAG 的局限：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题：&amp;#34;A 公司的合作方的竞争对手有哪些？&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">传统 RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 检索&amp;#34;A 公司的合作方&amp;#34; → 找到 B 公司
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 检索&amp;#34;B 公司的竞争对手&amp;#34; → 找到 C、D 公司
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">问题：需要多轮检索，且中间结果可能丢失
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Graph RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 从知识图谱中找到 A → 合作 → B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 从知识图谱中找到 B → 竞争 → C、D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">优势：一次图遍历即可完成多跳推理
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="graph-rag-的架构">Graph RAG 的架构
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Graph RAG Pipeline │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────────────┼───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼ ▼ ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┐ ┌──────────┐ ┌──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 文档输入 │ │ 实体抽取 │ │ 关系抽取 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────┬────┘ └────┬─────┘ └────┬─────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────┼───────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 知识图谱构建 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ (Neo4j / NetworkX) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────┼───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼ ▼ ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┐ ┌──────────┐ ┌──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 向量检索 │ │ 图检索 │ │ 混合检索 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────┬────┘ └────┬─────┘ └────┬─────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────┼───────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ LLM 生成答案 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="核心技术点">核心技术点
&lt;/h3>&lt;p>&lt;strong>1. 实体抽取&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">输入文档：&amp;#34;苹果公司由史蒂夫·乔布斯于 1976 年创立，总部位于加利福尼亚州库比蒂诺。&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">实体抽取结果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 苹果公司（Organization）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 史蒂夫·乔布斯（Person）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 1976 年（Date）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 加利福尼亚州库比蒂诺（Location）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">技术方案：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- NER 模型（spaCy、Stanford NER）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- LLM 抽取（GPT-4、Qwen）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 开源工具（DeepKE、OpenIE）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. 关系抽取&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">关系抽取结果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 苹果公司 -- 创立者 --&amp;gt; 史蒂夫·乔布斯
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 苹果公司 -- 创立时间 --&amp;gt; 1976 年
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 苹果公司 -- 总部位置 --&amp;gt; 加利福尼亚州库比蒂诺
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>3. 图检索策略&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">策略 1：子图检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 找到问题中的实体节点
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 扩展 N 跳邻居
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 将子图转为文本，喂给 LLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">策略 2：路径检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 找到起点和终点实体
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 检索两点间的路径
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 路径上的节点/边作为上下文
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">策略 3：社区检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 预先对图谱做社区发现
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 检索相关社区
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 社区摘要作为上下文
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="代表项目">代表项目
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>项目&lt;/th>
&lt;th>特点&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Microsoft GraphRAG&lt;/strong>&lt;/td>
&lt;td>微软官方，社区摘要&lt;/td>
&lt;td>大规模文档全局理解&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>LightRAG&lt;/strong>&lt;/td>
&lt;td>轻量级，无图数据库依赖&lt;/td>
&lt;td>快速部署&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Neo4j + LangChain&lt;/strong>&lt;/td>
&lt;td>成熟图数据库，生态完善&lt;/td>
&lt;td>企业级应用&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>LlamaIndex GraphRAG&lt;/strong>&lt;/td>
&lt;td>与 LlamaIndex 深度集成&lt;/td>
&lt;td>已有 LlamaIndex 项目&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="适用场景">适用场景
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">✅ 推荐使用 Graph RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要多跳推理（&amp;#34;A 的 B 的 C 是什么&amp;#34;）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要全局理解（&amp;#34;这篇文章的核心观点&amp;#34;）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 实体关系密集（知识库、企业图谱）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要可解释的推理路径
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 不推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 文档间无关联
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 问题简单，单次检索可解
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 实体稀疏，图构建成本高
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="三agentic-ragagent--rag">三、Agentic RAG：Agent + RAG
&lt;/h2>&lt;h3 id="从被动检索到主动规划">从被动检索到主动规划
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">传统 RAG（被动）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → 检索 → 生成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">问题：检索策略固定，无法应对复杂问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Agentic RAG（主动）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → Agent 规划 → 执行 → 反思 → 再规划 → ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="agentic-rag-的核心能力">Agentic RAG 的核心能力
&lt;/h3>&lt;p>&lt;strong>1. 查询理解与改写&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原始问题：&amp;#34;那个产品怎么样&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ LLM 分析
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">问题太模糊，需要澄清
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">改写策略：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 分解问题：&amp;#34;那个产品&amp;#34; → 识别具体产品
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 扩展问题：生成多个相关 Query
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. HyDE：生成假设性答案，用答案检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;报销流程&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">改写为：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. &amp;#34;公司报销流程步骤&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. &amp;#34;报销需要哪些材料&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. &amp;#34;报销审批流程&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. 迭代检索&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">第一轮检索：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;A 公司的融资情况&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">结果: A 公司 B 轮融资 5000 万
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">判断：信息不完整，缺少投资方
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第二轮检索：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;A 公司 B 轮投资方&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">结果: 红杉资本领投
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">判断：信息完整
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">生成答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>3. 工具调用&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Agent 可用的工具：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 向量检索：检索内部知识库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 关键词检索：BM25 搜索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 联网搜索：Google/Bing API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- SQL 查询：查询结构化数据
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- API 调用：获取实时信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;今天北京天气怎么样，适合户外活动吗？&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ Agent 规划
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 调用天气 API 获取北京天气
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 检索知识库中&amp;#34;户外活动适宜条件&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 综合判断并回答
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>4. 自我反思&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">生成答案后，Agent 自我评估：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">评估维度：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 答案是否完整？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 是否需要补充检索？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 是否有矛盾信息？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">答案：&amp;#34;A 公司成立于 2010 年&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">反思：检索结果中有两个年份（2010 和 2012），需要验证
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">再次检索：&amp;#34;A 公司成立时间 官方&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">修正答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="agentic-rag-架构">Agentic RAG 架构
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Agentic RAG │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Query 分析 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 意图识别 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 实体抽取 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 查询改写 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 规划器 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 分解任务 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 选择工具 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 生成执行计划 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────┼───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼ ▼ ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┐ ┌──────────┐ ┌──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 向量检索 │ │ 联网搜索 │ │ SQL 查询 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────┬────┘ └────┬─────┘ └────┬─────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────┼───────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 反思器 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 结果评估 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 是否继续检索 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 是否需要修正 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ LLM 生成答案 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="代表框架">代表框架
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>框架&lt;/th>
&lt;th>特点&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>LangGraph&lt;/strong>&lt;/td>
&lt;td>LangChain 出品，状态机模型&lt;/td>
&lt;td>复杂工作流&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>AutoGPT + RAG&lt;/strong>&lt;/td>
&lt;td>自主 Agent&lt;/td>
&lt;td>开放域任务&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>CrewAI&lt;/strong>&lt;/td>
&lt;td>多 Agent 协作&lt;/td>
&lt;td>团队式任务&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>LlamaIndex Agent&lt;/strong>&lt;/td>
&lt;td>内置 RAG Agent&lt;/td>
&lt;td>快速构建&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="适用场景-1">适用场景
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">✅ 推荐使用 Agentic RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 问题复杂，需要多步推理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要调用多种工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要实时信息（联网、API）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要自我纠错
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 不推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 问题简单，单次检索可解
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 对延迟敏感（Agent 会增加延迟）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 成本敏感（多轮 LLM 调用）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="四多模态-rag">四、多模态 RAG
&lt;/h2>&lt;h3 id="为什么需要多模态">为什么需要多模态
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">企业知识库不只是文本：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 产品手册：文字 + 图片 + 示意图
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 技术文档：文字 + 代码 + 架构图
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 财务报告：文字 + 表格 + 图表
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 培训视频：音频 + 视频 + 字幕
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="多模态-rag-架构">多模态 RAG 架构
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 多模态 RAG Pipeline │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌───────────────┼───────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼ ▼ ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┐ ┌──────────┐ ┌──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 文本 │ │ 图片 │ │ 表格 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 处理 │ │ 处理 │ │ 处理 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────┬────┘ └────┬─────┘ └────┬─────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼ ▼ ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌─────────┐ ┌──────────┐ ┌──────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 文本 │ │ VLM 描述 │ │ 结构化 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ Embedding│ │ Embedding│ │ 存储 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────┬────┘ └────┬─────┘ └────┬─────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────┼───────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 统一向量存储 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 多模态检索 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 文本 Query │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ - 图片 Query │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └────────┬─────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 多模态生成 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ (GPT-4V, Qwen-VL)│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └──────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="各模态的处理方式">各模态的处理方式
&lt;/h3>&lt;p>&lt;strong>1. 图片&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">方案 1：VLM 描述
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">图片 → VLM → 文字描述 → Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">方案 2：直接 Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">图片 → CLIP/SigLIP → 图片向量
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">方案 3：混合
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">图片 → VLM 描述 + CLIP 向量 → 双路检索
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. 表格&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">方案 1：Markdown 化
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">表格 → Markdown 格式 → Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">方案 2：结构化存储
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">表格 → DataFrame → SQL 数据库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">查询时：自然语言 → SQL → 执行查询
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">方案 3：行列切分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">表格 → 每行一个 Chunk → 保留表头上下文
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>3. 音频/视频&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">音频：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">音频 → ASR → 文字 → Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">视频：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">视频 → 关键帧提取 → VLM 描述 → Embedding
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> → ASR（音轨） → 文字 → Embedding
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="代表技术">代表技术
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>技术&lt;/th>
&lt;th>用途&lt;/th>
&lt;th>特点&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>CLIP / SigLIP&lt;/strong>&lt;/td>
&lt;td>图文联合 Embedding&lt;/td>
&lt;td>支持以图搜文、以文搜图&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>GPT-4V / Qwen-VL&lt;/strong>&lt;/td>
&lt;td>视觉语言模型&lt;/td>
&lt;td>理解图片内容，生成描述&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>ColPali&lt;/strong>&lt;/td>
&lt;td>端到端文档检索&lt;/td>
&lt;td>直接用文档图片检索，无需 OCR&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Whisper&lt;/strong>&lt;/td>
&lt;td>语音识别&lt;/td>
&lt;td>音频转文字&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="适用场景-2">适用场景
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">✅ 推荐使用多模态 RAG：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 知识库包含大量图片/图表
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要检索产品图片
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需要理解架构图/流程图
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 视频内容检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">❌ 不推荐：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 纯文本知识库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 对成本敏感（VLM 调用昂贵）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="五长上下文-vs-rag">五、长上下文 vs RAG
&lt;/h2>&lt;h3 id="长上下文模型的崛起">长上下文模型的崛起
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">2023 年：Claude 2（100K）、GPT-4 Turbo（128K）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2024 年：Claude 3（200K）、Gemini 1.5 Pro（1M）、Kimi（200K）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2025 年：上下文窗口继续扩大...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="长上下文能替代-rag-吗">长上下文能替代 RAG 吗？
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">长上下文方案：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query + 全部文档 → LLM → 答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">优势：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 不需要检索，不会遗漏信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 全局理解能力强
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 实现简单
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">劣势：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 成本高（每 token 都要计费）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 延迟高（处理长上下文需要时间）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 不适合大规模知识库（100 万 token 放不下）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="rag-的优势">RAG 的优势
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RAG 方案：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → 检索 Top-K → LLM → 答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">优势：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 成本可控（只处理相关文档）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 延迟低
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 可扩展（知识库无限大）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 可追溯（知道答案来自哪里）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">劣势：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 可能检索不准，遗漏信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 缺乏全局理解
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="结论互补而非替代">结论：互补而非替代
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">场景分析：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 场景 | 推荐方案 | 理由 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|------|----------|------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 小规模文档（&amp;lt;100K） | 长上下文 | 简单，不会遗漏 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 大规模知识库 | RAG | 成本、延迟可控 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 需要全局理解 | 长上下文 | RAG 擅长局部检索 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 需要精确引用 | RAG | 可追溯来源 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 实时更新知识库 | RAG | 长上下文需要重新处理 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">最佳实践：RAG + 长上下文
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- RAG 检索相关文档
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 长上下文模型处理检索结果
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 兼顾成本和效果
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="六检索技术进阶">六、检索技术进阶
&lt;/h2>&lt;h3 id="1-dense-retrieval-的演进">1. Dense Retrieval 的演进
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">第一代：Single Vector（单向量）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档 → 一个向量
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">问题：语义压缩过度，细节丢失
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第二代：Multi-Vector（多向量，ColBERT）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档 → 每个 token 一个向量
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">问题：存储成本高，但精度提升
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第三代：Late Interaction（延迟交互，ColPali）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">检索时不压缩，最后才做交互
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">优势：精度最高，适合文档检索
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>ColBERT 的核心思想&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">传统向量检索：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;机器学习&amp;#34; → 向量 Q
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc: &amp;#34;机器学习是人工智能的分支...&amp;#34; → 向量 D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">相似度 = Q · D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ColBERT：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;机器学习&amp;#34; → [q1, q2]（每个 token 一个向量）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc: &amp;#34;机器学习是人工智能的分支...&amp;#34; → [d1, d2, d3, d4, ...]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">相似度 = Σ max(qi · dj) ← 每个 Query token 找最相似的 Doc token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">优势：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- &amp;#34;机器学习&amp;#34;中的&amp;#34;机器&amp;#34;和&amp;#34;学习&amp;#34;分别匹配
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 精度更高
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-query-理解技术">2. Query 理解技术
&lt;/h3>&lt;p>&lt;strong>HyDE（Hypothetical Document Embeddings）&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="err">问题：&lt;/span>&lt;span class="n">Query&lt;/span> &lt;span class="err">很短，语义信息不足&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">HyDE&lt;/span> &lt;span class="err">的思路：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">1.&lt;/span> &lt;span class="err">让&lt;/span> &lt;span class="n">LLM&lt;/span> &lt;span class="err">生成一个假设性答案&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">2.&lt;/span> &lt;span class="err">用假设答案的向量检索&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mf">3.&lt;/span> &lt;span class="err">假设答案与真实文档更相似&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">示例：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Query&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Python 如何读取 JSON 文件？&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">↓&lt;/span> &lt;span class="n">LLM&lt;/span> &lt;span class="err">生成假设答案&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">假设答案&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;可以使用 json.load() 函数读取 JSON 文件。首先导入 json 模块，然后用 open() 打开文件...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">↓&lt;/span> &lt;span class="err">用假设答案检索&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">检索结果&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="err">找到真实的&lt;/span> &lt;span class="n">JSON&lt;/span> &lt;span class="err">读取教程&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Multi-Query（多查询）&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题：用户的 Query 可能表述不清
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Multi-Query 的思路：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 用 LLM 生成多个相关 Query
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 多路检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 结果融合
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;报销流程&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ LLM 生成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query 1: &amp;#34;公司报销流程步骤&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query 2: &amp;#34;报销需要哪些材料&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query 3: &amp;#34;报销审批流程&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ 多路检索，融合结果
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-自适应检索self-rag">3. 自适应检索（Self-RAG）
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题：不是所有问题都需要检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Self-RAG 的思路：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. LLM 自己判断是否需要检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 如果需要，检索并生成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 生成后，LLM 自我评估答案质量
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 如果不满意，重新检索
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;写一个 Python Hello World&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ LLM 判断
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">不需要检索（LLM 自己会写）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ 直接生成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query: &amp;#34;公司最新的报销政策&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ LLM 判断
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">需要检索（LLM 不知道）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ 检索 → 生成
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="七生成技术进阶">七、生成技术进阶
&lt;/h2>&lt;h3 id="1-citation引用溯源">1. Citation（引用溯源）
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RAG 的可信度关键：答案来自哪里？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出格式：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">答案：参数 timeout 的类型是 int，默认值是 30 秒。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">引用：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [1] API 文档.pdf, 第 3 页, 表格 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [2] 配置说明.md, 第 15 行
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">实现方式：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 检索时记录每个 Chunk 的来源
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 生成时让 LLM 标注使用了哪些 Chunk
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 前端支持点击引用跳转原文
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-fact-checking事实核查">2. Fact Checking（事实核查）
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题：RAG 也可能产生幻觉
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">方案：生成后验证
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">流程：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. LLM 生成答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 提取答案中的事实陈述
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 再次检索验证每个事实
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 标注置信度或修正错误
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">答案：&amp;#34;A 公司成立于 2010 年，创始人张三&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ 提取事实
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">事实 1: A 公司成立于 2010 年
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">事实 2: 创始人是张三
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ 验证
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">事实 1: ✅ 文档确认
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">事实 2: ❌ 文档说是李四，不是张三
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ 修正
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">答案：&amp;#34;A 公司成立于 2010 年，创始人李四&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="八工程优化">八、工程优化
&lt;/h2>&lt;h3 id="1-增量索引">1. 增量索引
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题：知识库每天都在更新
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">方案：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 只索引新增/修改的文档
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 向量数据库支持增量写入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 版本管理（可回滚）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">实现：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 记录每个文档的 hash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 检测变更
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 只索引变更部分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 定期全量重建（避免碎片化）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-多级缓存">2. 多级缓存
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">缓存层级：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Level 1: Exact Match Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">完全相同的问题 → 直接返回缓存答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">命中率：10-20%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Level 2: Semantic Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">语义相似的问题 → 返回缓存答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：&amp;#34;报销流程&amp;#34; ≈ &amp;#34;如何报销&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">命中率：20-30%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Level 3: Query Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">缓存检索结果，只重新生成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">命中率：30-40%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">效果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 延迟降低 60-80%
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 成本降低 50-70%
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-rag-评估">3. RAG 评估
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">评估维度：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">检索质量：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Recall@K：前 K 个结果中相关文档的比例
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- MRR：正确答案的平均排名
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- NDCG：考虑排序的检索质量
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">生成质量：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Faithfulness：答案是否忠实于检索内容
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Relevance：答案是否回答了问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Coherence：答案是否连贯
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">端到端：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Correctness：答案是否正确
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Completeness：答案是否完整
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Latency：响应延迟
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">评估工具：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- RAGAS：自动化 RAG 评估
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- TruLens：LLM 应用评估
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- DeepEval：开源评估框架
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="九技术选型指南">九、技术选型指南
&lt;/h2>&lt;h3 id="按场景选择">按场景选择
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">场景 1：企业知识库（文档密集）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">推荐：RAGFlow / Dify / FastGPT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">理由：开箱即用，文档解析强
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">场景 2：需要多跳推理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">推荐：GraphRAG / LightRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">理由：知识图谱支持复杂推理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">场景 3：需要 Agent 编排
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">推荐：LangGraph / CrewAI
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">理由：灵活的工作流控制
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">场景 4：多模态知识库
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">推荐：RAGFlow / LlamaIndex + VLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">理由：支持图片、表格、视频
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">场景 5：快速原型
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">推荐：Dify / AnythingLLM
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">理由：低代码，快速落地
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">场景 6：深度定制
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">推荐：LangChain / LlamaIndex
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">理由：底层控制能力强
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="按技术栈选择">按技术栈选择
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">已有 LangChain 项目：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 继续用 LangChain + LangGraph
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">已有 LlamaIndex 项目：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 继续用 LlamaIndex + GraphRAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">从零开始：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 考虑 RAGFlow（一站式）或 Dify（低代码）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">需要图数据库：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ Neo4j + LangChain/LlamaIndex
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">需要极致性能：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">→ 自建向量库 + 自定义检索逻辑
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="十开源项目速览">十、开源项目速览
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>项目&lt;/th>
&lt;th>Stars&lt;/th>
&lt;th>特点&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>RAGFlow&lt;/strong>&lt;/td>
&lt;td>82K+&lt;/td>
&lt;td>DeepDoc 文档解析&lt;/td>
&lt;td>企业知识库&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>MinerU&lt;/strong>&lt;/td>
&lt;td>67K+&lt;/td>
&lt;td>通用文档解析&lt;/td>
&lt;td>文档转 Markdown&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Dify&lt;/strong>&lt;/td>
&lt;td>50K+&lt;/td>
&lt;td>RAG + Agent 平台&lt;/td>
&lt;td>低代码构建&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>FastGPT&lt;/strong>&lt;/td>
&lt;td>20K+&lt;/td>
&lt;td>国产 RAG 平台&lt;/td>
&lt;td>快速落地&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>LangGraph&lt;/strong>&lt;/td>
&lt;td>10K+&lt;/td>
&lt;td>Agent 编排&lt;/td>
&lt;td>复杂工作流&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>LightRAG&lt;/strong>&lt;/td>
&lt;td>10K+&lt;/td>
&lt;td>轻量级 Graph RAG&lt;/td>
&lt;td>多跳推理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>GraphRAG&lt;/strong>&lt;/td>
&lt;td>10K+&lt;/td>
&lt;td>Microsoft 出品&lt;/td>
&lt;td>企业级图谱&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>QAnything&lt;/strong>&lt;/td>
&lt;td>10K+&lt;/td>
&lt;td>多模态 RAG&lt;/td>
&lt;td>端到端方案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>AnythingLLM&lt;/strong>&lt;/td>
&lt;td>20K+&lt;/td>
&lt;td>全功能平台&lt;/td>
&lt;td>企业部署&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="十一学习资源">十一、学习资源
&lt;/h2>&lt;p>&lt;strong>必读论文&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks（RAG 原始论文）&lt;/li>
&lt;li>Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection&lt;/li>
&lt;li>GraphRAG: Unlocking LLM Discovery on Narrative Private Data&lt;/li>
&lt;li>Dense Passage Retrieval for Open-Domain Question Answering&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>官方文档&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>LlamaIndex Documentation&lt;/li>
&lt;li>LangChain RAG Tutorial&lt;/li>
&lt;li>RAGFlow Documentation&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>评估框架&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>RAGAS: &lt;a class="link" href="https://github.com/explodinggradients/ragas" target="_blank" rel="noopener"
>https://github.com/explodinggradients/ragas&lt;/a>&lt;/li>
&lt;li>TruLens: &lt;a class="link" href="https://www.trulens.org/" target="_blank" rel="noopener"
>https://www.trulens.org/&lt;/a>&lt;/li>
&lt;li>DeepEval: &lt;a class="link" href="https://github.com/confident-ai/deepeval" target="_blank" rel="noopener"
>https://github.com/confident-ai/deepeval&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="十二总结">十二、总结
&lt;/h2>&lt;p>RAG 技术正在快速演进，从简单的&amp;quot;检索 + 生成&amp;quot;发展为复杂的多技术融合系统。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">技术演进路线：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAG 1.0 → RAG 2.0 → RAG 3.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">基础检索 → 多路融合 → Agent + Graph + 多模态
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">核心趋势：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 从被动检索到主动规划
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 从单一模态到多模态融合
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 从局部检索到全局理解
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 从固定流程到自适应调整
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>选择技术方案时，关键是明确需求：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>简单场景&lt;/strong>：用 RAGFlow、Dify 这类一站式方案&lt;/li>
&lt;li>&lt;strong>复杂推理&lt;/strong>：引入 Graph RAG&lt;/li>
&lt;li>&lt;strong>Agent 编排&lt;/strong>：用 LangGraph&lt;/li>
&lt;li>&lt;strong>多模态&lt;/strong>：选择支持 VLM 的方案&lt;/li>
&lt;li>&lt;strong>深度定制&lt;/strong>：用 LangChain/LlamaIndex 自建&lt;/li>
&lt;/ul>
&lt;p>没有银弹，只有最适合的方案。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>相关文章&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://www.zata.cc/p/graph-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%85%A8%E6%99%AF%E4%BB%8E%E5%BE%AE%E8%BD%AF-graphrag-%E5%88%B0-lightrag/" >Graph RAG 开源项目全景：从微软 GraphRAG 到 LightRAG&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.zata.cc/p/ragflow-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%98%AF%E6%9C%80%E5%80%BC%E5%BE%97%E5%85%B3%E6%B3%A8%E7%9A%84-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/" >RAGFlow 深度解析：为什么它是最值得关注的 RAG 开源项目&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>RAGFlow 深度解析：为什么它是最值得关注的 RAG 开源项目</title><link>https://www.zata.cc/p/ragflow-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%98%AF%E6%9C%80%E5%80%BC%E5%BE%97%E5%85%B3%E6%B3%A8%E7%9A%84-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/</link><pubDate>Wed, 25 Mar 2026 16:00:00 +0800</pubDate><guid>https://www.zata.cc/p/ragflow-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%98%AF%E6%9C%80%E5%80%BC%E5%BE%97%E5%85%B3%E6%B3%A8%E7%9A%84-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/</guid><description>&lt;img src="https://www.zata.cc/p/ragflow-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%98%AF%E6%9C%80%E5%80%BC%E5%BE%97%E5%85%B3%E6%B3%A8%E7%9A%84-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/images/index.png" alt="Featured image of post RAGFlow 深度解析：为什么它是最值得关注的 RAG 开源项目" />&lt;p>过去两年，RAG 领域涌现了无数框架：LangChain、LlamaIndex、Haystack……它们各有侧重，但解决的核心问题相似——如何让 LLM 接地气。&lt;/p>
&lt;p>但如果你实际做过企业级 RAG 项目，会发现一个被忽视的问题：&lt;strong>文档解析&lt;/strong>。&lt;/p>
&lt;p>大部分框架默认你已经有干净、结构化的文本。现实却是：PDF 扫描件、嵌套表格、数学公式、多栏排版……这些&amp;quot;脏活累活&amp;quot;往往占据项目 60% 以上的时间。&lt;/p>
&lt;p>RAGFlow 的定位很明确：&lt;strong>从文档到答案的全流程解决方案&lt;/strong>，而不是又一个&amp;quot;需要你自己处理文档&amp;quot;的检索框架。&lt;/p>
&lt;p>这篇文章会深入分析 RAGFlow 的设计思路、核心技术和适用场景。&lt;/p>
&lt;h2 id="一ragflow-的差异化定位">一、RAGFlow 的差异化定位
&lt;/h2>&lt;h3 id="现有框架的盲区">现有框架的盲区
&lt;/h3>&lt;p>LangChain 和 LlamaIndex 的设计假设是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">输入：干净的文本 / 简单的 PDF
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">处理：Chunk → Embed → Retrieve → Generate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但企业真实场景是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">输入：扫描件 PDF、带表格的年报、技术手册、合同......
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">预处理：OCR、布局分析、表格识别、公式识别......
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">处理：Chunk → Embed → Retrieve → Generate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：答案 + 引用
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>预处理阶段的复杂度，往往被框架忽略。&lt;/strong>&lt;/p>
&lt;h3 id="ragflow-的思路">RAGFlow 的思路
&lt;/h3>&lt;p>RAGFlow 的核心定位：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">不只是 RAG 框架，而是&amp;#34;文档理解 + RAG&amp;#34;的一体化方案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它的技术栈覆盖：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>阶段&lt;/th>
&lt;th>能力&lt;/th>
&lt;th>技术方案&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>文档解析&lt;/td>
&lt;td>OCR、布局分析、表格识别&lt;/td>
&lt;td>DeepDoc（自研）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>文档切分&lt;/td>
&lt;td>8 种切分策略&lt;/td>
&lt;td>按文档类型选择&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>检索&lt;/td>
&lt;td>向量 + 关键词 + Rerank&lt;/td>
&lt;td>混合检索 + RRF 融合&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>生成&lt;/td>
&lt;td>多模型支持&lt;/td>
&lt;td>OpenAI、Qwen、Ollama 等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>运维&lt;/td>
&lt;td>可视化 UI、API、监控&lt;/td>
&lt;td>企业级特性&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>一句话总结&lt;/strong>：RAGFlow 解决的是&amp;quot;从 PDF 到答案&amp;quot;的完整链路，而不是&amp;quot;从文本到答案&amp;quot;。&lt;/p>
&lt;h2 id="二deepdocragflow-的核心护城河">二、DeepDoc：RAGFlow 的核心护城河
&lt;/h2>&lt;p>DeepDoc 是 RAGFlow 自研的文档理解引擎，也是它区别于其他框架的核心竞争力。&lt;/p>
&lt;h3 id="为什么需要-deepdoc">为什么需要 DeepDoc
&lt;/h3>&lt;p>传统 PDF 解析的问题：&lt;/p>
&lt;p>&lt;strong>问题 1：OCR 质量差&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原文：错误码 E0028
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OCR 结果：错误码 E002B（8 被识别成 B）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户问：错误码 E0028 是什么意思
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">检索：找不到（因为文档里是 E002B）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>问题 2：布局信息丢失&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原文（两栏排版）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────┬──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 左栏内容 │ 右栏内容 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 跨多行... │ 跨多行... │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────┴──────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">普通解析结果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">左栏内容
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">右栏内容 ← 两栏混在一起，语义被打断
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>问题 3：表格结构破坏&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原文表格：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌────────┬────────┬────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 参数 │ 类型 │ 说明 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├────────┼────────┼────────┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ timeout│ int │ 超时时间│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ retry │ bool │ 是否重试│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└────────┴────────┴────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">普通解析结果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数 类型 说明 timeout int 超时时间 retry bool 是否重试
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">← 变成一行，结构全丢了
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="deepdoc-的技术方案">DeepDoc 的技术方案
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">DeepDoc Pipeline：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────┐ ┌──────────┐ ┌──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Input │───▶│ Layout │───▶│ OCR Engine │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ File │ │ Analysis│ │ (PaddleOCR) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────┘ └──────────┘ └──────┬───────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Structure Recognition │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Table │ │ Figure │ │ Formula │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Parser │ │ Parser │ │ Parser │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────┘ └──────────┘ └──────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Semantic Understanding │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ • 标题识别 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ • 章节分割 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ • 关系提取 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Markdown / Structured Output │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>核心技术点&lt;/strong>：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>模块&lt;/th>
&lt;th>技术方案&lt;/th>
&lt;th>解决的问题&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>OCR&lt;/strong>&lt;/td>
&lt;td>PaddleOCR&lt;/td>
&lt;td>高精度文字识别&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>布局分析&lt;/strong>&lt;/td>
&lt;td>YOLO/LayoutLM&lt;/td>
&lt;td>检测文本、表格、图片区域&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>表格识别&lt;/strong>&lt;/td>
&lt;td>Table-Transformer&lt;/td>
&lt;td>还原表格结构&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>公式识别&lt;/strong>&lt;/td>
&lt;td>LaTeX-OCR&lt;/td>
&lt;td>数学公式转 LaTeX&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>图片描述&lt;/strong>&lt;/td>
&lt;td>VLM&lt;/td>
&lt;td>生成图片文字描述&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="表格识别的原理">表格识别的原理
&lt;/h3>&lt;p>表格是最难处理的文档元素之一。DeepDoc 的表格识别流程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Step 1: 表格检测
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用目标检测模型定位表格区域
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 2: 结构识别
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Table-Transformer 识别：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 行边界
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 列边界
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 单元格合并关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 3: 内容识别
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">对每个单元格做 OCR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 4: 结构化输出
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌────────┬────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ A1 │ A2 │ → [{&amp;#34;row&amp;#34;:1,&amp;#34;col&amp;#34;:1,&amp;#34;text&amp;#34;:&amp;#34;A1&amp;#34;}, ...]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├────────┼────────┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ B1 │ B2 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└────────┴────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>为什么这件事重要&lt;/strong>？&lt;/p>
&lt;p>如果表格结构丢了，用户问&amp;quot;参数 timeout 的类型是什么&amp;quot;，系统找不到答案——因为表格已经变成一团乱码。&lt;/p>
&lt;h3 id="与其他解析方案的对比">与其他解析方案的对比
&lt;/h3>&lt;p>|| 方案 | OCR | 布局分析 | 表格识别 | 公式识别 | 输出格式 |
|&amp;mdash;&amp;mdash;|&amp;mdash;&amp;ndash;|&amp;mdash;&amp;mdash;&amp;mdash;-|&amp;mdash;&amp;mdash;&amp;mdash;-|&amp;mdash;&amp;mdash;&amp;mdash;-|&amp;mdash;&amp;mdash;&amp;mdash;-|
| PyPDF2 | ❌ | ❌ | ❌ | ❌ | 纯文本 |
| pdfplumber | ❌ | ⚠️ 基础 | ⚠️ 基础 | ❌ | 纯文本 |
| Unstructured | ⚠️ 外部 | ✅ | ⚠️ 基础 | ❌ | 结构化 |
| &lt;strong>MinerU&lt;/strong> | ✅ | ✅ | ✅ | ✅ | Markdown/JSON |
| &lt;strong>DeepDoc&lt;/strong> | ✅ | ✅ | ✅ | ✅ | 结构化 + 语义信息 |&lt;/p>
&lt;h3 id="deepdoc-vs-mineru不同的设计哲学">DeepDoc vs MinerU：不同的设计哲学
&lt;/h3>&lt;p>MinerU 是 2024 年上海人工智能实验室开源的文档解析工具，同样具备强大的 OCR、表格识别、公式识别能力。但 DeepDoc 和 MinerU 的设计目标有本质区别：&lt;/p>
&lt;p>&lt;strong>MinerU：通用文档解析工具&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">定位：将文档转换为 LLM 可用的 Markdown/JSON
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：标准化的文本格式
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">目标：服务于各种下游应用（RAG、Agent、知识库等）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">集成：支持 LangChain、Dify、FastGPT、RAGFlow 等
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>DeepDoc：RAG 原生文档理解引擎&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">定位：RAGFlow 的核心组件，深度集成
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：保留语义结构的中间表示（标题层级、章节边界、表格结构等）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">目标：直接服务于 Chunking 和检索策略
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：与后续流程紧密耦合，非独立工具
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>核心差异：输出是否保留结构语义&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">MinerU 输出（Markdown）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 第一章 概述
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 1.1 背景
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 1.2 目标
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">↓ 丢失了什么？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 标题的层级深度信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 章节边界的精确位置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 表格的行列结构（变成 Markdown 表格，但丢失原始坐标）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DeepDoc 输出（结构化表示）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;chunks&amp;#34;: [
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;text&amp;#34;: &amp;#34;文本内容...&amp;#34;,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;metadata&amp;#34;: {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;hierarchy&amp;#34;: [&amp;#34;第一章&amp;#34;, &amp;#34;概述&amp;#34;, &amp;#34;1.1&amp;#34;, &amp;#34;背景&amp;#34;],
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;level&amp;#34;: 3,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;bbox&amp;#34;: [x1, y1, x2, y2],
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;type&amp;#34;: &amp;#34;paragraph&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ],
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;tables&amp;#34;: [
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;cells&amp;#34;: [[...]],
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;headers&amp;#34;: [&amp;#34;参数&amp;#34;, &amp;#34;类型&amp;#34;, &amp;#34;说明&amp;#34;],
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;bbox&amp;#34;: [...]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>为什么 RAGFlow 不用 MinerU？&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>时间线&lt;/strong>：RAGFlow（2023.12）比 MinerU（2024.02）更早，DeepDoc 已经开发成熟&lt;/li>
&lt;li>&lt;strong>深度集成&lt;/strong>：DeepDoc 的输出直接适配 8 种 Chunking 策略，需要语义和结构信息&lt;/li>
&lt;li>&lt;strong>核心护城河&lt;/strong>：文档理解是 RAGFlow 的差异化竞争力，不依赖外部工具&lt;/li>
&lt;li>&lt;strong>输出差异&lt;/strong>：MinerU 输出 Markdown，DeepDoc 输出保留更多结构信息&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>选择建议&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>场景&lt;/th>
&lt;th>推荐&lt;/th>
&lt;th>理由&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>只需要文档转 Markdown&lt;/td>
&lt;td>MinerU&lt;/td>
&lt;td>开箱即用，输出标准&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>构建企业 RAG 系统&lt;/td>
&lt;td>RAGFlow + DeepDoc&lt;/td>
&lt;td>文档解析与检索一体化&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>已有 RAG 框架，需补充解析能力&lt;/td>
&lt;td>MinerU&lt;/td>
&lt;td>作为独立组件集成&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>需要自定义 Chunking 逻辑&lt;/td>
&lt;td>MinerU + 自己实现&lt;/td>
&lt;td>更灵活&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>DeepDoc 是目前开源方案中唯一为 RAG 场景深度优化的文档解析引擎。&lt;/p>
&lt;h2 id="三chunking-策略一种文档一种切法">三、Chunking 策略：一种文档一种切法
&lt;/h2>&lt;p>RAGFlow 提供了 8 种 Chunking 策略，针对不同文档类型：&lt;/p>
&lt;h3 id="为什么需要多种策略">为什么需要多种策略
&lt;/h3>&lt;p>不同类型文档的结构差异很大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">FAQ 文档：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q: 问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">A: 答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">─────────
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每个 QA 对是独立的语义单元
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">技术手册：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 安装
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">步骤 1...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">步骤 2...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 配置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数 1...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数 2...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">─────────
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">按章节切分，保留标题上下文
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">法律文档：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第一条 ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第二条 ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第三条 ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">─────────
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">按条款切分，每条有独立法律意义
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>用同一种&amp;quot;固定长度切分&amp;quot;处理所有文档，效果必然不好。&lt;/p>
&lt;h3 id="ragflow-的-8-种策略">RAGFlow 的 8 种策略
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>策略&lt;/th>
&lt;th>适用文档&lt;/th>
&lt;th>切分依据&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Naive&lt;/strong>&lt;/td>
&lt;td>简单文本&lt;/td>
&lt;td>固定字符数&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Q&amp;amp;A&lt;/strong>&lt;/td>
&lt;td>FAQ 文档&lt;/td>
&lt;td>问题-答案对&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Book&lt;/strong>&lt;/td>
&lt;td>书籍、长文档&lt;/td>
&lt;td>章节层级&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Manual&lt;/strong>&lt;/td>
&lt;td>技术手册&lt;/td>
&lt;td>小节&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Law&lt;/strong>&lt;/td>
&lt;td>法律、合同&lt;/td>
&lt;td>条款&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Paper&lt;/strong>&lt;/td>
&lt;td>学术论文&lt;/td>
&lt;td>摘要、章节&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Table&lt;/strong>&lt;/td>
&lt;td>表格数据&lt;/td>
&lt;td>行/单元格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Picture&lt;/strong>&lt;/td>
&lt;td>图片&lt;/td>
&lt;td>VLM 描述&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="核心思路保留语义完整性">核心思路：保留语义完整性
&lt;/h3>&lt;p>无论哪种策略，核心原则相同：&lt;strong>一个 chunk 应该能独立回答一个问题&lt;/strong>。&lt;/p>
&lt;p>以 Book Chunking 为例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原始文档：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 第一章 概述
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 1.1 背景
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 1.2 目标
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 第二章 设计
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 2.1 架构
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">切分结果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chunk 1: 【第一章 概述 &amp;gt; 1.1 背景】文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chunk 2: 【第一章 概述 &amp;gt; 1.2 目标】文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chunk 3: 【第二章 设计 &amp;gt; 2.1 架构】文本内容...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>关键设计：&lt;strong>把父级标题拼到 chunk 前面&lt;/strong>。&lt;/p>
&lt;p>这样做的原因我在 RAG 进阶篇详细讲过：Embedding 只能看到 chunk 内部的文字。如果 chunk 里没有&amp;quot;第一章&amp;quot;、&amp;ldquo;概述&amp;rdquo;、&amp;ldquo;背景&amp;quot;这些关键词，用户问&amp;quot;第一章的背景是什么&amp;quot;时就召不回。&lt;/p>
&lt;h3 id="table-chunking-的特殊性">Table Chunking 的特殊性
&lt;/h3>&lt;p>表格数据的切分需要特殊处理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">方案 1：行级切分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每行一个 chunk，保留表头
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">方案 2：单元格级切分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每个单元格一个 chunk，附带行列信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAGFlow 的做法：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 检测表格结构
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 保留表头作为上下文
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 行级切分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 每个 chunk 包含：表头 + 该行内容
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">原始表格：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 参数 | 类型 | 说明 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|------|------|------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| timeout | int | 超时时间 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">切分后的 chunk：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">【表：API 参数配置】
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数: timeout | 类型: int | 说明: 超时时间
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样用户问&amp;quot;timeout 参数的类型是什么&amp;rdquo;，就能精确召回这一行。&lt;/p>
&lt;h2 id="四检索架构混合检索--rrf-融合">四、检索架构：混合检索 + RRF 融合
&lt;/h2>&lt;p>RAGFlow 的检索架构是标准的混合检索方案：&lt;/p>
&lt;h3 id="整体架构">整体架构
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Query
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─── 向量检索（Dense）───┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─── 关键词检索（BM25）──┤──→ RRF 融合 ──→ Rerank ──→ Top-K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─── Metadata 过滤 ─────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="rrf-融合算法">RRF 融合算法
&lt;/h3>&lt;p>RRF（Reciprocal Rank Fusion）的核心思想：&lt;strong>不依赖分数，只依赖排名&lt;/strong>。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RRF 公式：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">score(d) = Σ 1 / (k + rank_i(d))
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">其中：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- d：文档
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- rank_i(d)：文档 d 在第 i 路检索中的排名
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- k：平滑参数（通常 60）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>为什么有效&lt;/strong>？&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题：向量分数（0.82）和 BM25 分数（5.2）不在同一尺度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">传统方案：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 分数归一化：复杂，不稳定
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 加权融合：权重难调
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RRF 的做法：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 不管分数多少
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 只看排名
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 排名第 1 → 得分 1/61
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 排名第 2 → 得分 1/62
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 两路都召回的文档，得分更高
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>示例&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Query：&amp;#34;错误码 401&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">向量检索：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#1 Doc_A
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#2 Doc_B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#3 Doc_C
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BM25 检索：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#1 Doc_D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#2 Doc_C ← 两路都有
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#3 Doc_A ← 两路都有
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RRF 融合：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc_C: 1/(60+3) + 1/(60+2) = 0.032 ← 最高
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc_A: 1/(60+1) + 1/(60+3) = 0.032
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc_B: 1/(60+2) + 0 = 0.016
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc_D: 0 + 1/(60+1) = 0.016
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>两路都召回的文档，得分更高，自然排在前面。&lt;/p>
&lt;h3 id="rerank-实现">Rerank 实现
&lt;/h3>&lt;p>RAGFlow 内置 Cross-Encoder Rerank：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原理：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query + Document → Transformer → Relevance Score
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么比向量检索更准：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 向量检索：Query 和 Document 各自编码，交互少
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Cross-Encoder：Query 和 Document 拼在一起编码，充分交互
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>支持的 Rerank 模型：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>模型&lt;/th>
&lt;th>特点&lt;/th>
&lt;th>延迟（100 候选）&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>bge-reranker-v2-m3&lt;/td>
&lt;td>多语言，效果好&lt;/td>
&lt;td>~180ms&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>bge-reranker-large&lt;/td>
&lt;td>效果好&lt;/td>
&lt;td>~150ms&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ms-marco-MiniLM&lt;/td>
&lt;td>轻量，快速&lt;/td>
&lt;td>~45ms&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Rerank 的成本很高，只能对小规模候选做精排。RAGFlow 的默认配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">召回：top-50（向量 + BM25）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Rerank：top-50 全部重排
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：top-5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="五与其他框架的对比">五、与其他框架的对比
&lt;/h2>&lt;h3 id="功能对比">功能对比
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>维度&lt;/th>
&lt;th>RAGFlow&lt;/th>
&lt;th>LangChain&lt;/th>
&lt;th>LlamaIndex&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>文档解析&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ DeepDoc&lt;/td>
&lt;td>⭐⭐⭐ 基础&lt;/td>
&lt;td>⭐⭐⭐ 基础&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Chunking&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 8 种策略&lt;/td>
&lt;td>⭐⭐⭐ 需自己实现&lt;/td>
&lt;td>⭐⭐⭐⭐ 较丰富&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>检索&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 混合 + RRF&lt;/td>
&lt;td>⭐⭐⭐ 需组合&lt;/td>
&lt;td>⭐⭐⭐⭐ 较完整&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>可视化 UI&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 完整&lt;/td>
&lt;td>⭐⭐ LangSmith&lt;/td>
&lt;td>⭐⭐⭐ LlamaCloud&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>开箱即用&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 高&lt;/td>
&lt;td>⭐⭐⭐ 需组装&lt;/td>
&lt;td>⭐⭐⭐⭐ 较高&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>自定义扩展&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐ 中等&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 高&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 高&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="架构理念对比">架构理念对比
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RAGFlow：应用导向
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;我要做一个企业知识库&amp;#34; → RAGFlow 提供完整方案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：一站式，开箱即用
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LangChain：组件导向
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;我要组装一个 Agent&amp;#34; → LangChain 提供各种组件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：灵活，但需要自己组装
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LlamaIndex：数据导向
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;我要索引和查询数据&amp;#34; → LlamaIndex 提供数据框架
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：数据处理能力强，适合研究
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="代码风格对比">代码风格对比
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># RAGFlow：高层抽象，配置驱动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">ragflow&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">RAGFlow&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">app&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">RAGFlow&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dataset&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_dataset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;knowledge&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dataset&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_documents&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">chat&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_chat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">dataset&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">dataset&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">chat&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;What is RAG?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># LangChain：Chain 组合式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain.chains&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">RetrievalQA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain.vectorstores&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Chroma&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain.embeddings&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">OpenAIEmbeddings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vectorstore&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Chroma&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_documents&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">docs&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">OpenAIEmbeddings&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qa&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">RetrievalQA&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_chain_type&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llm&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">ChatOpenAI&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">retriever&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">vectorstore&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">as_retriever&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">qa&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;What is RAG?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># LlamaIndex：索引为中心&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">llama_index&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">VectorStoreIndex&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">SimpleDirectoryReader&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">documents&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">SimpleDirectoryReader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">load_data&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">index&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">VectorStoreIndex&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_documents&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">documents&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">query_engine&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">index&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">as_query_engine&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">query_engine&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;What is RAG?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="选型建议">选型建议
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>场景&lt;/th>
&lt;th>推荐&lt;/th>
&lt;th>理由&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>企业知识库&lt;/td>
&lt;td>RAGFlow&lt;/td>
&lt;td>开箱即用，DeepDoc 解析复杂文档&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>复杂 Agent 应用&lt;/td>
&lt;td>LangChain&lt;/td>
&lt;td>灵活的 Chain/Tool 组合&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>数据分析研究&lt;/td>
&lt;td>LlamaIndex&lt;/td>
&lt;td>强大的索引策略&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>快速原型&lt;/td>
&lt;td>RAGFlow&lt;/td>
&lt;td>最快落地&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>高度定制化&lt;/td>
&lt;td>LangChain/LlamaIndex&lt;/td>
&lt;td>更底层的控制&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="六生产级特性">六、生产级特性
&lt;/h2>&lt;h3 id="api-设计">API 设计
&lt;/h3>&lt;p>RAGFlow 提供完整的 REST API：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建数据集&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">POST /api/dataset
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">{&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>: &lt;span class="s2">&amp;#34;my_knowledge&amp;#34;&lt;/span>&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 上传文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">POST /api/document/upload
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-F &lt;span class="s2">&amp;#34;file=@document.pdf&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-F &lt;span class="s2">&amp;#34;dataset_id={id}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 对话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">POST /api/chat/completion
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;question&amp;#34;&lt;/span>: &lt;span class="s2">&amp;#34;什么是 RAG?&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;dataset_ids&amp;#34;&lt;/span>: &lt;span class="o">[&lt;/span>&lt;span class="s2">&amp;#34;{id}&amp;#34;&lt;/span>&lt;span class="o">]&lt;/span>,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stream&amp;#34;&lt;/span>: &lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="部署方案">部署方案
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">最小部署（Docker Compose）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── ragflow（API 服务）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── milvus（向量库）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── mysql（元数据）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── elasticsearch（可选，全文检索）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">生产部署（Kubernetes）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Ingress
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── ragflow deployment（多副本）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── milvus cluster
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── mysql primary/replica
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── 监控（Prometheus + Grafana）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="多租户与权限">多租户与权限
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">租户隔离：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 每个租户独立的数据集
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 数据集级别的访问控制
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- API Key 认证
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">权限模型：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 管理员：全部权限
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 编辑者：上传、解析、编辑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 查看者：仅查询
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="可观测性">可观测性
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">指标监控：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 文档处理吞吐量
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 检索延迟（P50/P95/P99）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- LLM 调用耗时
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 向量库查询性能
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">日志追踪：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 请求级 Trace ID
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 结构化日志
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 全链路追踪
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="七ragflow-的优势与局限">七、RAGFlow 的优势与局限
&lt;/h2>&lt;h3 id="优势">优势
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>维度&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>DeepDoc&lt;/strong>&lt;/td>
&lt;td>业界最强的开源文档解析能力&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>开箱即用&lt;/strong>&lt;/td>
&lt;td>完整 UI + API，快速落地&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>企业级&lt;/strong>&lt;/td>
&lt;td>多租户、权限、监控完备&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>多策略 Chunking&lt;/strong>&lt;/td>
&lt;td>针对不同文档类型优化&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>混合检索&lt;/strong>&lt;/td>
&lt;td>向量 + BM25 + Rerank 完整支持&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="局限">局限
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>维度&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>灵活性&lt;/strong>&lt;/td>
&lt;td>不如 LangChain/LlamaIndex 灵活&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Agent 能力&lt;/strong>&lt;/td>
&lt;td>不适合复杂多 Agent 场景&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>定制成本&lt;/strong>&lt;/td>
&lt;td>深度定制需要理解源码&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>学习曲线&lt;/strong>&lt;/td>
&lt;td>概念较多，需要时间熟悉&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="适用场景">适用场景
&lt;/h3>&lt;p>&lt;strong>强烈推荐&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>企业内部知识库&lt;/li>
&lt;li>需要处理复杂文档（PDF、表格）&lt;/li>
&lt;li>追求快速落地&lt;/li>
&lt;li>需要可视化管理和审计&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>谨慎选择&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>复杂 Agent 编排&lt;/li>
&lt;li>需要深度定制检索逻辑&lt;/li>
&lt;li>已有 LangChain/LlamaIndex 生态&lt;/li>
&lt;/ul>
&lt;h2 id="八快速入门">八、快速入门
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 克隆项目&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/infiniflow/ragflow.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ragflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Docker Compose 启动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker compose up -d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 访问 Web UI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">open http://localhost:9380
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建数据集、上传文档、开始对话&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>核心概念：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Dataset（数据集）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Document（文档）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Chunk（切片）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── Embedding（向量）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── Chat（对话）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">流程：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">上传文档 → DeepDoc 解析 → 切分 → 向量化 → 存储
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → 检索 → Rerank → LLM 生成 → 答案 + 引用
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="九总结">九、总结
&lt;/h2>&lt;p>RAGFlow 不是&amp;quot;又一个 RAG 框架&amp;quot;，而是&lt;strong>从文档到答案的全流程解决方案&lt;/strong>。&lt;/p>
&lt;p>它的核心价值：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">1. DeepDoc：解决被忽视的文档解析问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 多策略 Chunking：不同文档不同切法
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 混合检索：向量 + BM25 + Rerank
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 开箱即用：UI + API + 部署方案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果你在做企业级 RAG 项目，尤其是需要处理复杂文档的场景，RAGFlow 是目前最值得尝试的开源方案。&lt;/p>
&lt;p>它不一定是灵活性最高的，但可能是落地最快的。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>相关链接&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>GitHub: &lt;a class="link" href="https://github.com/infiniflow/ragflow" target="_blank" rel="noopener"
>https://github.com/infiniflow/ragflow&lt;/a>&lt;/li>
&lt;li>文档: &lt;a class="link" href="https://ragflow.io/docs" target="_blank" rel="noopener"
>https://ragflow.io/docs&lt;/a>&lt;/li>
&lt;li>Demo: &lt;a class="link" href="https://ragflow.io" target="_blank" rel="noopener"
>https://ragflow.io&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>相关文章&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://www.zata.cc/p/rag-%E6%8A%80%E6%9C%AF%E5%85%A8%E6%99%AF%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9B%E9%98%B6/" >RAG 技术全景：从入门到进阶&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.zata.cc/p/graph-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%85%A8%E6%99%AF%E4%BB%8E%E5%BE%AE%E8%BD%AF-graphrag-%E5%88%B0-lightrag/" >Graph RAG 开源项目全景：从微软 GraphRAG 到 LightRAG&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>vector-database</title><link>https://www.zata.cc/p/vector-database/</link><pubDate>Thu, 20 Nov 2025 16:41:12 +0800</pubDate><guid>https://www.zata.cc/p/vector-database/</guid><description>&lt;img src="https://www.zata.cc/p/vector-database/images/index/index.png" alt="Featured image of post vector-database" />&lt;h1 id="向量数据库的教程">向量数据库的教程
&lt;/h1>&lt;p>&lt;a class="link" href="https://www.pinecone.io/learn/vector-database/" target="_blank" rel="noopener"
>松果&lt;/a>&lt;/p>
&lt;h1 id="ai-的海马体选型指南2026-年主流向量数据库全景对比">AI 的“海马体”选型指南：2026 年主流向量数据库全景对比
&lt;/h1>&lt;blockquote>
&lt;p>&lt;strong>摘要&lt;/strong>：在构建 RAG（检索增强生成）和 AI Agent 系统时，向量数据库（Vector Database）充当着“长期记忆”的关键角色。面对市场上琳琅满目的选项——Milvus、Qdrant、Weaviate、pgvector……架构师该如何抉择？本文将从架构轻重、运维成本和适用场景三个维度，为您深度解析主流向量数据库的优劣势。&lt;/p>
&lt;/blockquote>
&lt;p>在构建 RAG（检索增强生成）和 AI Agent 系统时，向量数据库（Vector Database）充当着“长期记忆”的关键角色。通过将文本、图片等非结构化数据转化为高维向量（Embeddings），向量数据库允许我们进行语义搜索。当用户问“还是老规矩”时，系统能从数据库中检索出该用户过去的行为偏好，而不是仅仅匹配关键词。但在 2026 年的今天，选型变得异常困难：是追求极致性能？还是追求开发效率？&lt;/p>
&lt;p>我们来聊聊主流的向量数据库，它们各有特色，也有不同的适用场景。以下是第一梯队的原生向量数据库：&lt;/p>
&lt;p>Milvus 是全球最流行的开源向量数据库之一，由 Zilliz 主导。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>核心定位&lt;/strong>：企业级、云原生、追求极致扩展性。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>✅ 核心优势&lt;/strong>：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>十亿级吞吐：分布式架构极其成熟，轻松支撑 Billion-scale（十亿级）向量存储。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>生态完善：国内社区最活跃，文档支持最好，索引类型（HNSW, IVF 等）丰富。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>❌ 潜在短板&lt;/strong>：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>架构极重：标准版部署依赖 Etcd（元数据）、MinIO（存储）和 Pulsar/Kafka（消息流）。在 &lt;code>docker-compose&lt;/code> 中启动它需要拉起 4-5 个容器，运维成本高。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>资源门槛：起步资源要求较高，不适合 MVP（最小可行性产品）阶段的小微项目。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>适用场景&lt;/strong>：大型互联网应用、核心推荐系统、海量知识库。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Qdrant 是用 Rust 编写的新一代向量数据库，也是许多 Agent 框架的首选。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>核心定位&lt;/strong>：兼顾高性能与易用性，开发者友好。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>✅ 核心优势&lt;/strong>：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>架构轻量：Rust 编写，内存安全且高效。部署只需&lt;strong>一个 Docker 容器&lt;/strong>，无外部依赖。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>元数据过滤：它的 Payload Filtering 机制非常强大，支持像 MongoDB 一样灵活地过滤 JSON 字段（例如：“查找昨天情绪为‘开心’的对话记忆”）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>本地模式：支持 Python 本地内存模式，开发阶段甚至无需启动服务。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>❌ 潜在短板&lt;/strong>：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>超大规模验证：虽然支持分布式，但在百亿级规模的公开案例略少于 Milvus。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>适用场景&lt;/strong>：AI Agent 记忆系统、中大型 RAG 应用、快速迭代的初创项目。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Weaviate 是一款 AI 原生的向量数据库，具有模块化特性。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>核心定位&lt;/strong>：模块化、对象存储风格。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>✅ 核心优势&lt;/strong>：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>内置模块：可直接集成 OpenAI/HuggingFace 模型，自动处理 Embedding，无需应用层操心。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>混合搜索：原生支持 BM25（关键词）+ 向量的混合检索，搜索效果通常优于纯向量。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>❌ 潜在短板&lt;/strong>：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>学习曲线：使用 GraphQL 接口查询，Schema 定义方式独特，需要一定的上手时间。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>适用场景&lt;/strong>：Notebook 演示、Hackathon、个人知识库。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Chroma 是一款面向 Python 全栈开发者的向量数据库，设计极简。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>核心定位&lt;/strong>：面向 Python 全栈开发者，极简。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>✅ 核心优势&lt;/strong>：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>上手最快：&lt;code>pip install chromadb&lt;/code> 即可，API 设计极其简单。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>❌ 潜在短板&lt;/strong>：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>性能瓶颈：在大规模并发和分布式能力上弱于上述三位“老大哥”。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>适用场景&lt;/strong>：Notebook 演示、Hackathon、个人知识库。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>如果你的技术栈已经很成熟，不想引入新的组件，传统数据库的扩展方案可能是更好的选择。&lt;/p>
&lt;p>PostgreSQL (pgvector) 是全球最强开源关系型数据库的插件。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>定位&lt;/strong>：全球最强开源关系型数据库的插件。&lt;/li>
&lt;li>&lt;strong>优点&lt;/strong>：&lt;strong>单一数据源&lt;/strong>。无需在 SQL 数据库和向量库之间同步数据，完美支持 ACID 事务。如果你的数据量在百万级以内，直接开插件是最省事的选择。&lt;/li>
&lt;li>&lt;strong>缺点&lt;/strong>：在高并发 QPS 或超高维向量场景下，索引构建速度和查询延迟不如原生向量库。&lt;/li>
&lt;/ul>
&lt;p>Elasticsearch (ES) / OpenSearch 是全文检索的王者。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>定位&lt;/strong>：全文检索的王者。&lt;/li>
&lt;li>&lt;strong>优点&lt;/strong>：如果你需要极强的&lt;strong>关键词搜索&lt;/strong>（BM25）能力，向量检索只是辅助，ES 是不二之选。&lt;/li>
&lt;li>&lt;strong>缺点&lt;/strong>：Java 编写，资源消耗大（内存吞噬者），纯向量检索性能并非顶尖。&lt;/li>
&lt;/ul>
&lt;p>Redis (RediSearch) 是一款基于内存的数据库。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>定位&lt;/strong>：基于内存的极致速度。&lt;/li>
&lt;li>&lt;strong>优点&lt;/strong>：亚毫秒级延迟，适合高频读写的&lt;strong>短期记忆&lt;/strong>缓存。&lt;/li>
&lt;li>&lt;strong>缺点&lt;/strong>：内存昂贵，存储海量历史数据成本太高。&lt;/li>
&lt;/ul>
&lt;p>为了方便大家决策，我整理了这份决策矩阵：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>你的需求场景&lt;/th>
&lt;th>推荐选型&lt;/th>
&lt;th>核心理由&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>MVP 原型 / 个人开发&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Chroma&lt;/strong> / &lt;strong>Qdrant (Local)&lt;/strong>&lt;/td>
&lt;td>代码量最少，环境搭建最快。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>中型生产环境 / 追求性价比&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Qdrant&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Rust 高效、Docker 单容器部署、Filter 语法极佳。&lt;/strong> (这也是我们 V1.2 架构的首选)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>超大规模 / 十亿级数据&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Milvus&lt;/strong>&lt;/td>
&lt;td>经过大规模验证的分布式能力，Zilliz 企业级支持。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>已有 Postgres 且数据量不大&lt;/strong>&lt;/td>
&lt;td>&lt;strong>pgvector&lt;/strong>&lt;/td>
&lt;td>架构最简单，不用维护新数据库。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>强依赖关键词搜索&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Elasticsearch&lt;/strong>&lt;/td>
&lt;td>混合检索生态最强。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>没有“最好”的数据库，只有“最适合”的架构。&lt;/p>
&lt;p>在我们的**“变色龙”进化型对话系统&lt;strong>项目中，我们最终选择了 &lt;strong>Qdrant&lt;/strong>。原因很简单：在快速迭代阶段，我们需要一个&lt;/strong>部署足够轻量**（不拖累 Docker Compose）、&lt;strong>查询足够灵活&lt;/strong>（处理复杂的记忆元数据）且&lt;strong>性能足够强&lt;/strong>的组件。Qdrant 完美击中了这三个甜点。&lt;/p>
&lt;h1 id="tutorial">tutorial
&lt;/h1>&lt;h2 id="milvus">Milvus
&lt;/h2>&lt;p>Milvus 专为大规模向量数据的存储、索引和搜索而设计，常用于构建 RAG（检索增强生成）、图像检索、推荐系统等应用。&lt;/p>
&lt;p>以下教程将涵盖：&lt;strong>环境部署&lt;/strong>、&lt;strong>核心概念&lt;/strong>、以及&lt;strong>完整的 Python 代码实战&lt;/strong>。&lt;/p>
&lt;hr>
&lt;p>1. 什么是 Milvus？&lt;/p>
&lt;p>Milvus 是一款云原生的向量数据库。它的核心作用是存储“向量”（Embeddings，即由 AI 模型生成的浮点数数组），并利用算法快速找出与查询向量“最相似”的数据。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>非结构化数据处理：&lt;/strong> 它可以让图片、视频、文本等非结构化数据通过向量化后进行语义搜索。&lt;/li>
&lt;li>&lt;strong>高性能：&lt;/strong> 支持十亿级向量规模的毫秒级搜索。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>2. 环境部署 (基于 Docker)&lt;/p>
&lt;p>使用 Docker 是运行 Milvus 最简单、最标准的方式。&lt;/p>
&lt;p>第一步：下载 Docker Compose 文件&lt;/p>
&lt;p>在你的终端中执行以下命令，下载官方的单机版配置文件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -L https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -o docker-compose.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>第二步：启动 Milvus&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker-compose up -d
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>启动后，Milvus 会暴露以下端口：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>19530&lt;/strong>: gRPC 端口（主要用于代码连接）。&lt;/li>
&lt;li>&lt;strong>9091&lt;/strong>: 管理端口。&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>&lt;strong>推荐工具：&lt;/strong> 建议安装 &lt;strong>Attu&lt;/strong> (Milvus 的官方可视化管理界面)，可以通过 Docker 一并安装，方便查看数据。&lt;/p>
&lt;/blockquote>
&lt;p>docker run -p 8000:3000 -e MILVUS_URL=localhost:19530 zilliz/attu:v2.6&lt;/p>
&lt;p>&lt;a class="link" href="https://milvus.io/docs/zh/quickstart_with_attu.md" target="_blank" rel="noopener"
>桌面端安装&lt;/a>&lt;/p>
&lt;p>如果你是使用docker 容器安装在mac或者windows的docker desktop里面，你可以使用host.docker.internal:19530连接&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/vector-database/images/index/image.png"
width="1912"
height="1004"
srcset="https://www.zata.cc/p/vector-database/images/index/image_hu17960773405178075392.png 480w, https://www.zata.cc/p/vector-database/images/index/image_hu14563518848814044501.png 1024w"
loading="lazy"
alt="端口地址"
class="gallery-image"
data-flex-grow="190"
data-flex-basis="457px"
>&lt;/p>
&lt;hr>
&lt;p>3. Python 代码实战&lt;/p>
&lt;p>我们将使用 Python SDK (&lt;code>pymilvus&lt;/code>) 来完成从连接、建表、插入数据到相似度搜索的全过程。&lt;/p>
&lt;p>0. 安装 SDK&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">uv add pymilvus
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>1. 完整代码示例&lt;/p>
&lt;p>这个脚本模拟了一个场景：我们有 10,000 条文本数据（已转化为向量），我们要找出与某条查询最相似的 3 条数据。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">random&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pymilvus&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">connections&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">utility&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">CollectionSchema&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DataType&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Collection&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 连接 Milvus&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 正在连接 Milvus...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">connections&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">connect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;default&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">host&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;host.docker.internal&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">port&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;19530&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 连接成功！&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 定义集合 (Schema)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 类似于关系型数据库中的“表”&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;tutorial_demo&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dim&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">128&lt;/span> &lt;span class="c1"># 向量维度 (根据你的 Embedding 模型决定，如 OpenAI text-embedding-3 是 1536)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果集合已存在，先删除（为了演示方便）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">utility&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">has_collection&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">collection_name&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">utility&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">drop_collection&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">collection_name&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 定义字段&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">fields&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 主键 ID (自动增长)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;id&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DataType&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">INT64&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">is_primary&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">auto_id&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 向量字段 (FLOAT_VECTOR)，必须指定维度&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;embeddings&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DataType&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">FLOAT_VECTOR&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dim&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">dim&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 元数据字段 (例如文章标题、日期等)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DataType&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">VARCHAR&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">max_length&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;count&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DataType&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">INT64&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">schema&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">CollectionSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">fields&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">description&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Milvus 基础教程演示&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Collection&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">collection_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">schema&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">schema&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 集合 &amp;#39;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">collection_name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#39; 创建成功&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 插入数据 (Insert)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">num_entities&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3000&lt;/span> &lt;span class="c1"># 插入 3000 条数据&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成随机向量数据模拟 Embeddings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rng&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">default_rng&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">seed&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">19530&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vectors&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rng&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="n">num_entities&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dim&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">float32&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 生成随机浮点数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成一些元数据&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">titles&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Article_&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num_entities&lt;/span>&lt;span class="p">)]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">counts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num_entities&lt;/span>&lt;span class="p">)]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 组织数据 (列表的顺序必须与 Schema 定义的顺序一致，排除 auto_id 的主键)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 注意：Milvus 插入数据是列式存储格式 [Column1_List, Column2_List, ...]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vectors&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 对应 embeddings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">titles&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 对应 title&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">counts&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 对应 count&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">insert_result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 即使插入了，数据还在内存缓冲区，需要 flush 到磁盘才能确保立即可见（生产环境通常不需要手动频繁 flush）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">flush&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 已插入 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">insert_result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert_count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 条数据&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. 创建索引 (Indexing)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 向量搜索如果是暴力搜索 (Flat) 会很慢，必须建立索引。&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># IVF_FLAT 是一种基于倒排文件的常见索引。&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">index_params&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;metric_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;L2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 距离度量：L2 (欧氏距离) 或 IP (内积/余弦相似度)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;index_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;IVF_FLAT&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 索引类型&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;params&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;nlist&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">128&lt;/span>&lt;span class="p">},&lt;/span> &lt;span class="c1"># nlist 是聚类中心的数量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 正在构建索引...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_index&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">field_name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;embeddings&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">index_params&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">index_params&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 索引构建完成&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 5. 加载集合 (Load)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># *关键步骤*：Milvus 必须将集合加载到内存中才能进行搜索&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">load&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 6. 向量搜索 (Search)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 模拟一个查询向量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">search_vectors&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">rng&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dim&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">float32&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 搜索参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">search_params&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;metric_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;L2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;params&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;nprobe&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">},&lt;/span> &lt;span class="c1"># nprobe: 在多少个聚类中心里搜索，值越大越准但越慢&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 开始搜索...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">results&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">search_vectors&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 查询向量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">anns_field&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;embeddings&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 在哪个字段搜索&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">param&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">search_params&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 搜索参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">limit&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># Top K：返回最相似的 3 个&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output_fields&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;count&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="c1"># 同时返回这些元数据字段&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">end_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 7. 解析结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 搜索耗时: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">end_time&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.4f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 秒&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-&amp;#34;&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">hits&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">results&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">hit&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">hits&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># hit.id 是主键, hit.distance 是距离, hit.entity.get() 获取元数据&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;ID: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">hit&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">id&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, Distance: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">hit&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">distance&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.4f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, Title: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">hit&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">entity&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 8. 清理 (可选)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># collection.drop()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># connections.disconnect(&amp;#34;default&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/vector-database/images/index/image-1.png"
width="529"
height="217"
srcset="https://www.zata.cc/p/vector-database/images/index/image-1_hu9517740438945300126.png 480w, https://www.zata.cc/p/vector-database/images/index/image-1_hu9772564493831020652.png 1024w"
loading="lazy"
alt="代码运行结果"
class="gallery-image"
data-flex-grow="243"
data-flex-basis="585px"
>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/vector-database/images/index/image-2.png"
width="1912"
height="1003"
srcset="https://www.zata.cc/p/vector-database/images/index/image-2_hu9726437583620320690.png 480w, https://www.zata.cc/p/vector-database/images/index/image-2_hu7528629460368888339.png 1024w"
loading="lazy"
alt="数据库内容"
class="gallery-image"
data-flex-grow="190"
data-flex-basis="457px"
>&lt;/p>
&lt;hr>
&lt;p>4. 关键概念详解&lt;/p>
&lt;p>为了用好 Milvus，你需要理解以下几个核心参数：&lt;/p>
&lt;p>A. Metric Type (距离度量)&lt;/p>
&lt;p>这是衡量两个向量“相似度”的标准，必须在建立索引和搜索时保持一致。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>L2 (欧氏距离):&lt;/strong> 也就是几何距离。值&lt;strong>越小&lt;/strong>表示越相似。适用于大多数场景。&lt;/li>
&lt;li>&lt;strong>IP (内积):&lt;/strong> 如果向量已归一化，它等同于余弦相似度。值&lt;strong>越大&lt;/strong>表示越相似。适用于文本语义搜索。&lt;/li>
&lt;/ul>
&lt;p>B. Index Type (索引类型)&lt;/p>
&lt;ul>
&lt;li>&lt;strong>FLAT:&lt;/strong> 暴力搜索，准确率 100%，但速度最慢。仅适用于少量数据 (&amp;lt;1万)。&lt;/li>
&lt;li>&lt;strong>IVF_FLAT / IVF_SQ8:&lt;/strong> 基于倒排聚类。速度快，但在召回率上有一点点损失。最常用。&lt;/li>
&lt;li>&lt;strong>HNSW:&lt;/strong> 基于图的索引。性能极高，是目前最流行的索引算法，但内存占用比 IVF 大。&lt;/li>
&lt;/ul>
&lt;p>C. Consistency Level (一致性级别)&lt;/p>
&lt;p>Milvus 是分布式的，搜索时可以指定一致性：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Strong:&lt;/strong> 保证刚插入的数据立马能搜到（性能最慢）。&lt;/li>
&lt;li>&lt;strong>Bounded:&lt;/strong> 允许几秒钟的延迟（性能最好，默认推荐）。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>5. 进阶：结合 RAG 的应用流程&lt;/p>
&lt;p>如果你在做 AI 应用，Milvus 的工作流通常是这样的：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Embedding:&lt;/strong> 用户输入问题 -&amp;gt; 调用 OpenAI/HuggingFace API -&amp;gt; 获得向量 &lt;code>[0.1, 0.5, ...]&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Search:&lt;/strong> 将这个向量传给 Milvus (&lt;code>collection.search&lt;/code>)。&lt;/li>
&lt;li>&lt;strong>Context:&lt;/strong> Milvus 返回 Top 3 相似的文本片段 (通过 &lt;code>output_fields&lt;/code> 返回文本内容)。&lt;/li>
&lt;li>&lt;strong>Generation:&lt;/strong> 将 &amp;ldquo;用户问题 + Milvus 返回的文本片段&amp;rdquo; 拼成 Prompt，发给 ChatGPT。&lt;/li>
&lt;li>&lt;strong>Answer:&lt;/strong> ChatGPT 根据参考资料回答问题。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;p>6. 常见问题 (FAQ)&lt;/p>
&lt;ol>
&lt;li>&lt;strong>为什么搜索报错 &lt;code>Collection not loaded&lt;/code>？&lt;/strong>
&lt;ul>
&lt;li>Milvus 为了性能，搜索前必须显式调用 &lt;code>collection.load()&lt;/code> 将数据加载到内存。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>向量维度不匹配？&lt;/strong>
&lt;ul>
&lt;li>创建集合时的 &lt;code>dim&lt;/code> 必须与你的 Embedding 模型输出维度完全一致（例如 BERT 是 768，OpenAI &lt;code>text-embedding-3-small&lt;/code> 是 1536）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>如何删除数据？&lt;/strong>
&lt;ul>
&lt;li>使用 &lt;code>collection.delete(&amp;quot;id in [1, 2]&amp;quot;)&lt;/code>。注意，删除操作是软删除，物理空间不会立即释放。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;hr>
&lt;p>以下是一个非常实用的企业级开发场景。&lt;strong>阿里云百炼 (DashScope)&lt;/strong> 提供了强大的通义千问 (Qwen) 大模型和文本向量化服务，结合 &lt;strong>Milvus&lt;/strong> 的存储检索能力，可以快速搭建一个私有知识库问答系统。&lt;/p>
&lt;p>以下是完整的 &lt;strong>Python 代码示例&lt;/strong>，涵盖了从“文本向量化”到“存入 Milvus”，再到“检索并生成回答”的全流程。&lt;/p>
&lt;p>&lt;strong>前置准备&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>获取 API Key&lt;/strong>：你需要去 &lt;a class="link" href="https://bailian.console.aliyun.com/" target="_blank" rel="noopener"
>阿里云百炼控制台&lt;/a> 开通服务并获取 API Key。&lt;/li>
&lt;li>&lt;strong>安装依赖库&lt;/strong>：
你需要安装阿里云的官方 SDK &lt;code>dashscope&lt;/code> 和 Milvus SDK &lt;code>pymilvus&lt;/code>。&lt;/li>
&lt;/ol>
&lt;!-- end list -->
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install dashscope pymilvus
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>&lt;strong>完整代码示例&lt;/strong>&lt;/p>
&lt;p>新建一个 Python 文件（例如 &lt;code>rag_bailian_milvus.py&lt;/code>），填入你的 API Key 即可运行。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">dashscope&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">dashscope&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Generation&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pymilvus&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">connections&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">utility&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">CollectionSchema&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DataType&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Collection&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">http&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">HTTPStatus&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 0. 配置部分&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 【重要】请替换为你的阿里云百炼 API Key&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dashscope&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">api_key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Milvus 配置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">MILVUS_HOST&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;localhost&amp;#34;&lt;/span> &lt;span class="c1"># 如果在 Docker 内运行且用 host 模式，或者是本地运行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">MILVUS_PORT&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;19530&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 模型配置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">EMBEDDING_MODEL&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;text-embedding-v2&amp;#34;&lt;/span> &lt;span class="c1"># 阿里云通用文本向量模型&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">LLM_MODEL&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;qwen-turbo&amp;#34;&lt;/span> &lt;span class="c1"># 通义千问-Turbo (性价比高)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">VECTOR_DIM&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1536&lt;/span> &lt;span class="c1"># text-embedding-v2 的维度是 1536&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 辅助函数：调用百炼 API&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_embedding&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;调用阿里云百炼 Embedding API 将文本转换为向量&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">resp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dashscope&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">TextEmbedding&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">call&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">EMBEDDING_MODEL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">input&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">resp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status_code&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">HTTPStatus&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">OK&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 获取向量数据&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">resp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">output&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;embeddings&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;embedding&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Embedding API 报错: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">resp&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">raise&lt;/span> &lt;span class="ne">Exception&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Failed to generate embedding&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">call_llm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">prompt&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">str&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;调用通义千问生成回答&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[{&lt;/span>&lt;span class="s1">&amp;#39;role&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;user&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">prompt&lt;/span>&lt;span class="p">}]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">resp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Generation&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">call&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">LLM_MODEL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">messages&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result_format&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;message&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 设置返回格式为 message&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">resp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status_code&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">HTTPStatus&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">OK&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">resp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">output&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;message&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;LLM API 报错: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">resp&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;抱歉，生成回答时出错了。&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 初始化 Milvus 集合&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 连接 Milvus...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">connections&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">connect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;default&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">host&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">MILVUS_HOST&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">port&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">MILVUS_PORT&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;bailian_rag_demo&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果存在旧集合则删除，保证每次运行都是干净的环境&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">utility&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">has_collection&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">collection_name&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">utility&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">drop_collection&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">collection_name&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 定义 Schema&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">fields&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;id&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DataType&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">INT64&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">is_primary&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">auto_id&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;vector&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DataType&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">FLOAT_VECTOR&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dim&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">VECTOR_DIM&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">FieldSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DataType&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">VARCHAR&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">max_length&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2048&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 存储原始文本用于构建 Prompt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">schema&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">CollectionSchema&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">fields&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">description&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;阿里云百炼 RAG 演示&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Collection&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">collection_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">schema&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">schema&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建索引 (IVF_FLAT 适合大多数场景)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">index_params&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;metric_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;L2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 欧氏距离 (阿里云 Embedding 推荐用 Cosine，但在归一化后 L2 效果也能接受，这里演示用 L2)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;index_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;IVF_FLAT&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;params&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;nlist&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1024&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_index&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">field_name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;vector&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">index_params&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">index_params&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">load&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="c1"># 加载到内存&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 集合 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">collection_name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 准备就绪&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 模拟私有数据并入库 (Ingestion)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 假设这是一些只有你知道，ChatGPT 此时此刻可能不知道的“私有知识”&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">knowledge_base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;TransMaster 项目是一个由 Python 开发的高效翻译管理系统。&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Zata 计划在 2025年9月 去温州旅行。&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Milvus 是一款高性能的开源向量数据库，支持十亿级数据检索。&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;在 Python 中使用 Celery 可以轻松处理异步任务队列。&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;阿里云百炼是阿里巴巴推出的一站式大模型服务平台。&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 正在向量化并存入数据...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data_vectors&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data_texts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">text&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">knowledge_base&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vec&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_embedding&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data_vectors&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">vec&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data_texts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 插入 Milvus&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">data_vectors&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">data_texts&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">flush&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 成功插入 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">knowledge_base&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 条知识数据&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. RAG 核心流程：检索 + 生成&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">rag_chat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">user_query&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">[用户提问]: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">user_query&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># A. 检索 (Retrieval)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 1. 把用户的问题变成向量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query_vector&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_embedding&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">user_query&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 2. 在 Milvus 中搜最相似的 2 条&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">search_params&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;metric_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;L2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;params&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;nprobe&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">results&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">query_vector&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">anns_field&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;vector&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">param&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">search_params&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">limit&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># Top 2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output_fields&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="c1"># 记得把原始文本拿回来&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 3. 提取上下文&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">retrieved_texts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">hits&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">results&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">hit&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">hits&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># print(f&amp;#34; (命中参考资料: {hit.entity.get(&amp;#39;text&amp;#39;)} - 距离: {hit.distance})&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">retrieved_texts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hit&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">entity&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">context_str&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">retrieved_texts&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># B. 生成 (Generation)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 4. 组装 Prompt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">prompt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 请根据以下参考资料回答用户的问题。如果参考资料中没有答案，请回答“我不知道”。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 【参考资料】：
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">context_str&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 【用户问题】：
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">user_query&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 5. 调用大模型&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 正在思考...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">answer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">call_llm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">prompt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;[AI 回答]: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">answer&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 5. 测试运行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==========================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 测试 1: 问一个库里有的私有知识&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rag_chat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Zata 打算什么时候去温州？&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 测试 2: 问一个库里有的技术知识&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rag_chat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;TransMaster 是什么项目？&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 测试 3: 问一个库里没有的无关问题&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rag_chat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;西红柿炒鸡蛋怎么做？&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/vector-database/images/index/image-3.png"
width="694"
height="256"
srcset="https://www.zata.cc/p/vector-database/images/index/image-3_hu11806571009225573423.png 480w, https://www.zata.cc/p/vector-database/images/index/image-3_hu7241470505063214243.png 1024w"
loading="lazy"
alt="运行示例"
class="gallery-image"
data-flex-grow="271"
data-flex-basis="650px"
>&lt;/p>
&lt;hr>
&lt;p>代码核心逻辑解析&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>统一模型：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>入库时：使用 &lt;code>text-embedding-v2&lt;/code> 将知识转为向量。&lt;/li>
&lt;li>搜索时：使用&lt;strong>同一个&lt;/strong> &lt;code>text-embedding-v2&lt;/code> 将用户问题转为向量。这是向量搜索准确的前提。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Schema 设计：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>我们在 Milvus 中定义了 &lt;code>text&lt;/code> 字段。这是 RAG 的关键技巧：向量数据库不仅存向量，最好也存一份&lt;strong>原始文本&lt;/strong>。这样搜索到向量后，直接就能取出对应的文字喂给大模型，不需要再去查 MySQL。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Prompt 组装：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>代码中的 &lt;code>prompt&lt;/code> 变量展示了经典的 RAG 提示词模板。强制要求 AI 基于【参考资料】回答，可以有效减少大模型的“幻觉”（胡说八道）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>可能遇到的问题&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Dimension 错误：&lt;/strong>
如果你换了模型（比如换成了 &lt;code>text-embedding-v1&lt;/code>），请务必确认它的维度。&lt;code>v2&lt;/code> 是 1536 维，如果报错 &lt;code>dimension mismatch&lt;/code>，请检查 Milvus 建表时的 &lt;code>dim&lt;/code> 参数。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>DashScope API 报错：&lt;/strong>
如果提示 &lt;code>InvalidApiKey&lt;/code>，请检查环境变量或代码中 Key 是否复制完整。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>下一步&lt;/p>
&lt;p>现在你已经跑通了最核心的流程。如果你想把这个应用到实际的 &lt;strong>TransMaster&lt;/strong> 项目中，下一步通常是**“文档切分”**：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>任务：&lt;/strong> 把长的 PDF 或 Markdown 文档切成 500 字左右的小块。&lt;/li>
&lt;li>&lt;strong>工具：&lt;/strong> 可以使用 &lt;code>LangChain&lt;/code> 的 &lt;code>RecursiveCharacterTextSplitter&lt;/code> 来做切分，然后再传给这个脚本入库。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>演示如何用 Python 切分长文本&lt;/p>
&lt;p>在实际的 RAG 应用（比如你的 TransMaster 项目）中，直接把整篇几千字的文章扔给 Embedding 模型是不行的，因为：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>模型限制&lt;/strong>：Embedding 模型通常有 Token 长度限制（比如 8192 token）。&lt;/li>
&lt;li>&lt;strong>搜索精度&lt;/strong>：如果一段文本太长，里面包含的信息太杂，搜索匹配的精准度会下降。&lt;/li>
&lt;/ol>
&lt;p>因此，我们需要&lt;strong>切分 (Chunking)&lt;/strong>。&lt;/p>
&lt;p>业界最常用的是 &lt;strong>LangChain&lt;/strong> 提供的 &lt;code>RecursiveCharacterTextSplitter&lt;/code>（递归字符文本分割器）。它很聪明，会优先在段落（&lt;code>\n\n&lt;/code>）处切分，如果不行再在换行（&lt;code>\n&lt;/code>）切，尽量保证句子的完整性。&lt;/p>
&lt;hr>
&lt;p>1. 安装必要的库&lt;/p>
&lt;p>为了轻量化，我们只安装 LangChain 的文本切分组件，不需要安装整个庞大的 LangChain。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">uv add langchain-text-splitters
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>2. 独立演示代码：长文本切分&lt;/p>
&lt;p>这个脚本演示了如何把一篇关于“TransMaster 项目开发规范”的长文档，切分成适合入库的小块。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain_text_splitters&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">RecursiveCharacterTextSplitter&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 模拟一个长文档 (假设这是你项目里的 README 或需求文档)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">long_text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"># TransMaster 项目开发规范 V1.0
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">## 1. 项目简介
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">TransMaster 是一个基于 Python 的高效翻译管理系统，旨在解决多语言项目中的协同翻译痛点。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">它集成了 Redis 缓存、Celery 异步任务队列以及 Docker 容器化部署方案。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">后端主要使用 Flask/FastAPI 框架，数据库采用 PostgreSQL。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">## 2. 核心功能
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 2.1 自动翻译
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">系统接入了百度翻译、DeepL 以及 Google Translate API。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">当用户上传文档时，后台会通过 Celery Worker 自动将文档解析并进行预翻译。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">为了防止 API 超时，所有网络请求都必须设置 timeout 参数，建议值为 10 秒。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 2.2 术语库管理
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">用户可以上传 TMX 格式的术语库。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">在翻译过程中，系统会优先匹配术语库中的词汇，确保专业名词的统一性。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">术语库的匹配算法采用了最长字符串匹配策略。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">## 3. 部署指南
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 3.1 Docker 环境
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">请确保本地安装了 Docker 和 Docker Compose。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">运行 `docker-compose up -d` 即可启动所有服务，包括 Web、Redis 和 Postgres。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">数据库的默认端口映射为 5432，Redis 为 6379。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 3.2 数据库迁移
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">我们使用 Alembic 进行数据库版本管理。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">如果修改了 models.py，请务必执行 `alembic revision --autogenerate` 生成迁移脚本，
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">然后执行 `alembic upgrade head` 应用变更。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">## 4. 常见问题
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">Q: 为什么上传大文件会失败？
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">A: 请检查 Nginx 配置中的 client_max_body_size 设置，默认限制为 1MB，建议调整为 50MB。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 初始化切分器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">text_splitter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">RecursiveCharacterTextSplitter&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># chunk_size: 每个块的目标大小（字符数）。&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 设置为 100-500 之间通常比较适合做 Embedding。&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">chunk_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># chunk_overlap: 重叠部分。&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 这是一个关键技巧！让两个块之间有重叠，防止切分时把一句话切断，导致上下文丢失。&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">chunk_overlap&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">50&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># separators: 切分优先级。先试着按双换行切，不行就按单换行，再不行按空格。&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">separators&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34; &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 执行切分&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">chunks&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">text_splitter&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_documents&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">long_text&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. 打印结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 原始文本长度: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">long_text&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 切分后的块数: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">chunks&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;--- 切分详情 ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">chunk&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">enumerate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">chunks&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">content&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">chunk&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">page_content&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;[块 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">] (长度 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">content&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">):&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">content&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 打印内容&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-&amp;#34;&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>运行结果分析&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/vector-database/images/index/image-4.png"
width="702"
height="630"
srcset="https://www.zata.cc/p/vector-database/images/index/image-4_hu15591082956297286550.png 480w, https://www.zata.cc/p/vector-database/images/index/image-4_hu10616313382388845115.png 1024w"
loading="lazy"
alt="结果"
class="gallery-image"
data-flex-grow="111"
data-flex-basis="267px"
>&lt;/p>
&lt;p>你会发现，它不会在“TransMaster”这个词中间切开，而是尽量在段落结束的地方切开。同时，由于设置了 &lt;code>chunk_overlap=50&lt;/code>，你可以观察到&lt;strong>块1的结尾和块2的开头会有部分重复的内容&lt;/strong>。&lt;/p>
&lt;hr>
&lt;p>3. 如何集成到刚才的 RAG 代码中？&lt;/p>
&lt;p>把你刚才那个 &lt;code>rag_bailian_milvus.py&lt;/code> 的 &lt;strong>“3. 模拟私有数据并入库”&lt;/strong> 部分替换为下面的逻辑：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ... (前面的代码保持不变) ...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain_text_splitters&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">RecursiveCharacterTextSplitter&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 假设这是从文件读取出来的超长内容&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">raw_content&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;......这里是很长的 TransMaster 项目文档......&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 切分&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">splitter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">RecursiveCharacterTextSplitter&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">chunk_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">500&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">chunk_overlap&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">split_docs&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">splitter&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_documents&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">raw_content&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 文档已切分为 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">split_docs&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 个片段，开始向量化...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data_vectors&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data_texts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 遍历切分后的片段进行 Embedding&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">doc&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">split_docs&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">chunk_text&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">doc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">page_content&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 调用百炼 API 获得向量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vec&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_embedding&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">chunk_text&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data_vectors&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">vec&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data_texts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">chunk_text&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; - 已处理片段: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">chunk_text&lt;/span>&lt;span class="p">[:&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 打印前30个字示意&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; x 跳过出错片段: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 批量插入 Milvus&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">data_vectors&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">data_vectors&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">data_texts&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">collection&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">flush&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&amp;gt;&amp;gt;&amp;gt; 成功入库 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data_vectors&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 个知识片段！&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ... (后面的搜索代码保持不变) ...&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/vector-database/images/index/image-5.png"
width="708"
height="361"
srcset="https://www.zata.cc/p/vector-database/images/index/image-5_hu17783599375848062197.png 480w, https://www.zata.cc/p/vector-database/images/index/image-5_hu10161293550995157055.png 1024w"
loading="lazy"
alt="结果"
class="gallery-image"
data-flex-grow="196"
data-flex-basis="470px"
>&lt;/p>
&lt;p>总结：最佳实践参数&lt;/p>
&lt;p>对于中文技术文档（如你的 Python 后端开发文档），我推荐以下参数：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Model&lt;/strong>: 阿里云 &lt;code>text-embedding-v2&lt;/code>&lt;/li>
&lt;li>&lt;strong>Chunk Size&lt;/strong>: &lt;code>300 - 500&lt;/code> 字符 (中文含金量高，不需要太长)&lt;/li>
&lt;li>&lt;strong>Overlap&lt;/strong>: &lt;code>50 - 100&lt;/code> 字符 (保证上下文连续)&lt;/li>
&lt;li>&lt;strong>Separators&lt;/strong>: &lt;code>[&amp;quot;\n\n&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;。&amp;quot;, &amp;quot;！&amp;quot;, &amp;quot;？&amp;quot;]&lt;/code> (优先按段落切，其次按句号切)&lt;/li>
&lt;/ul>
&lt;p>这样切分后存入 Milvus，当你问“TransMaster 用什么数据库？”时，RAG 就能精准定位到包含“PostgreSQL”的那一小段文字，而不是把整篇文档都拉出来。&lt;/p></description></item></channel></rss>