<?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 KnightLi的博客</title>
        <link>https://knightli.com/tags/rag/</link>
        <description>Recent content in RAG on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Wed, 20 May 2026 23:51:37 +0800</lastBuildDate><atom:link href="https://knightli.com/tags/rag/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>PageIndex 是什么？不用向量库的推理式 RAG 文档索引解析</title>
        <link>https://knightli.com/2026/05/20/vectifyai-pageindex-vectorless-rag/</link>
        <pubDate>Wed, 20 May 2026 23:51:37 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/20/vectifyai-pageindex-vectorless-rag/</guid>
        <description>&lt;p&gt;&lt;code&gt;VectifyAI/PageIndex&lt;/code&gt; 是一个很有意思的 RAG 项目。它不从“再建一个向量库”开始，而是把长文档先整理成类似目录的树状结构，再让 LLM 沿着这棵树做推理式检索。&lt;/p&gt;
&lt;p&gt;项目地址：&lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/PageIndex&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;VectifyAI/PageIndex&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;截至本文整理时，GitHub 页面显示项目约有 31.8k stars、2.7k forks，许可证为 MIT。README 给它的定位是：&lt;code&gt;Vectorless, Reasoning-based RAG&lt;/code&gt;，也就是无向量库、基于推理的 RAG。&lt;/p&gt;
&lt;h2 id=&#34;它想解决什么问题&#34;&gt;它想解决什么问题
&lt;/h2&gt;&lt;p&gt;传统 RAG 的常见路径是：切块、向量化、写入向量数据库，再用相似度搜索召回片段。这套方法简单、通用，也很成熟，但在长篇专业文档里容易遇到几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;相似度不等于真正相关。&lt;/li&gt;
&lt;li&gt;文档结构被切块打散，章节关系丢失。&lt;/li&gt;
&lt;li&gt;召回结果可解释性弱，很难说明为什么命中这一段。&lt;/li&gt;
&lt;li&gt;对财报、监管文件、法律文书、技术手册这类材料，问题往往需要跨章节推理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PageIndex 的思路是反过来：先把文档组织成语义树，再让模型像人类读目录、翻章节、逐层定位一样查找相关内容。&lt;/p&gt;
&lt;h2 id=&#34;pageindex-的基本工作流&#34;&gt;PageIndex 的基本工作流
&lt;/h2&gt;&lt;p&gt;README 里把 PageIndex 的检索分成两步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;为文档生成类似 &lt;code&gt;Table-of-Contents&lt;/code&gt; 的树状结构索引。&lt;/li&gt;
&lt;li&gt;通过树搜索做 reasoning-based retrieval。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这棵树不是简单的文件目录，而是面向 LLM 使用的文档结构。节点里会有标题、页码范围、摘要、子节点等信息。这样模型在回答问题时，不必一开始就面对大量零散 chunk，而是可以先判断应该进入哪个章节，再继续向下搜索。&lt;/p&gt;
&lt;p&gt;这种方式更适合结构清晰但内容很长的文档，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;金融报告和 SEC filings。&lt;/li&gt;
&lt;li&gt;监管材料和合规文档。&lt;/li&gt;
&lt;li&gt;学术教材和论文。&lt;/li&gt;
&lt;li&gt;法律文件。&lt;/li&gt;
&lt;li&gt;技术手册和产品文档。&lt;/li&gt;
&lt;li&gt;超过模型上下文窗口的大型 PDF。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;和传统向量-rag-的差异&#34;&gt;和传统向量 RAG 的差异
&lt;/h2&gt;&lt;p&gt;PageIndex 的核心卖点可以概括成五点。&lt;/p&gt;
&lt;p&gt;第一，不需要 Vector DB。它依赖文档结构和 LLM 推理来定位内容，而不是只做向量相似度搜索。&lt;/p&gt;
&lt;p&gt;第二，不做传统 chunking。文档会按自然章节组织，而不是被切成固定长度片段。&lt;/p&gt;
&lt;p&gt;第三，可解释性更强。检索路径可以对应到页码、章节和树节点，比“向量相似度命中某段文本”更容易追踪。&lt;/p&gt;
&lt;p&gt;第四，检索是上下文感知的。问题、对话历史、领域背景都可以影响树搜索路径。&lt;/p&gt;
&lt;p&gt;第五，更接近人类专家读文档的方式。人通常不是把整本文档切成小块再算相似度，而是先看目录，再定位章节，最后读细节。&lt;/p&gt;
&lt;p&gt;这并不意味着向量库没有价值。更准确的说法是：PageIndex 适合那些“语义相似不够，需要结构和推理参与”的长文档场景。&lt;/p&gt;
&lt;h2 id=&#34;本地怎么跑&#34;&gt;本地怎么跑
&lt;/h2&gt;&lt;p&gt;README 提供了本地自托管方式。先安装依赖：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip3 install --upgrade -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后在项目根目录创建 &lt;code&gt;.env&lt;/code&gt;，写入 LLM API key。项目通过 &lt;code&gt;LiteLLM&lt;/code&gt; 支持多模型：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_openai_key_here
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;对 PDF 生成 PageIndex 结构：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 run_pageindex.py --pdf_path /path/to/your/document.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;也可以处理 Markdown：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 run_pageindex.py --md_path /path/to/your/document.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;常见可选参数包括：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--model
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--toc-check-pages
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--max-pages-per-node
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--max-tokens-per-node
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--if-add-node-id
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--if-add-node-summary
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--if-add-doc-description
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;README 里也提醒，本地开源版本使用标准 PDF 解析。如果是复杂 PDF，项目方的云服务会提供增强 OCR、树构建和检索流程。&lt;/p&gt;
&lt;h2 id=&#34;agentic-vectorless-rag-示例&#34;&gt;Agentic Vectorless RAG 示例
&lt;/h2&gt;&lt;p&gt;项目还提供了一个 agentic vectorless RAG 示例，使用自托管 PageIndex 和 OpenAI Agents SDK。安装可选依赖后运行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip3 install openai-agents
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 examples/agentic_vectorless_rag_demo.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个示例的价值在于，它把 PageIndex 从“生成文档树”推进到“让 Agent 使用文档树检索”。如果你正在做企业知识库、财报问答、法规问答或技术文档 Agent，这个示例比单纯看 README 更值得跑一遍。&lt;/p&gt;
&lt;h2 id=&#34;云服务mcp-和-api&#34;&gt;云服务、MCP 和 API
&lt;/h2&gt;&lt;p&gt;PageIndex 不只是一个 GitHub repo。项目页面还给了几类入口：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自托管：用开源代码本地运行，适合试验和可控部署。&lt;/li&gt;
&lt;li&gt;Chat Platform：类似 ChatGPT 的文档分析平台。&lt;/li&gt;
&lt;li&gt;MCP / API：方便接入现有 Agent 或自动化流程。&lt;/li&gt;
&lt;li&gt;Enterprise：面向私有化或本地部署。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这说明它的定位不是单纯的 demo，而是想把“推理式文档检索”做成一套可集成的文档智能基础设施。&lt;/p&gt;
&lt;h2 id=&#34;适合哪些场景&#34;&gt;适合哪些场景
&lt;/h2&gt;&lt;p&gt;PageIndex 比较适合这些任务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;长 PDF 问答。&lt;/li&gt;
&lt;li&gt;财报、年报、招股书、监管文件分析。&lt;/li&gt;
&lt;li&gt;法律和合规文档检索。&lt;/li&gt;
&lt;li&gt;技术手册问答。&lt;/li&gt;
&lt;li&gt;多章节教材或论文检索。&lt;/li&gt;
&lt;li&gt;需要可解释检索路径的企业知识库。&lt;/li&gt;
&lt;li&gt;给 Agent 提供结构化文档上下文。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你的材料本身很短、结构不明显，或者只是普通 FAQ，传统 embedding + vector DB 可能已经够用。PageIndex 的优势更容易出现在长文档、强结构、专业领域和需要推理的问题里。&lt;/p&gt;
&lt;h2 id=&#34;需要注意什么&#34;&gt;需要注意什么
&lt;/h2&gt;&lt;p&gt;第一，PageIndex 仍然依赖 LLM。树构建、摘要和检索质量会受模型能力、提示词、文档解析质量影响。&lt;/p&gt;
&lt;p&gt;第二，本地版本使用标准 PDF 解析，复杂扫描件、图表密集型 PDF、版式混乱材料可能需要 OCR 和更强的预处理。&lt;/p&gt;
&lt;p&gt;第三，无向量库不等于零成本。树构建本身也会消耗模型调用和时间，尤其是大规模文档库。&lt;/p&gt;
&lt;p&gt;第四，它更像是文档结构索引和推理检索框架，不是直接替代所有 RAG 技术栈。实际生产里，也可能和向量检索、关键词检索、权限控制、缓存、审计系统一起使用。&lt;/p&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;PageIndex 的有趣之处在于，它把 RAG 的重点从“文本相似度召回”转向“文档结构 + LLM 推理”。对于长文档和专业文档，这个方向很值得关注。&lt;/p&gt;
&lt;p&gt;如果你正在做企业文档问答、金融报告分析、法规检索或技术手册 Agent，可以把 PageIndex 当成一个新的 RAG 架构参考：先让文档有结构，再让模型沿着结构推理，而不是一开始就把所有内容切碎丢进向量库。&lt;/p&gt;
&lt;p&gt;参考来源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/PageIndex&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub：VectifyAI/PageIndex&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>OpenKB：把文档编译成可持续更新的 LLM 知识库</title>
        <link>https://knightli.com/2026/05/17/openkb-llm-knowledge-base/</link>
        <pubDate>Sun, 17 May 2026 17:15:08 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/17/openkb-llm-knowledge-base/</guid>
        <description>&lt;p&gt;OpenKB 是 VectifyAI 开源的 LLM 知识库工具。&lt;/p&gt;
&lt;p&gt;它不是传统意义上“把文档切块、向量化、查询时再拼上下文”的 RAG 系统，而是把原始文档先编译成一个结构化 wiki：有文档摘要、有概念页、有交叉引用，也有后续查询和 lint 检查。换句话说，它更像是一个会持续整理资料的知识库 CLI。&lt;/p&gt;
&lt;p&gt;项目地址：&lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/OpenKB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/VectifyAI/OpenKB&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;先说结论&#34;&gt;先说结论
&lt;/h2&gt;&lt;p&gt;OpenKB 值得关注的地方有三点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;它把知识库输出成普通 Markdown 文件，而不是锁在某个专用数据库里。&lt;/li&gt;
&lt;li&gt;它用 PageIndex 处理长 PDF，主打无向量数据库的长文档检索。&lt;/li&gt;
&lt;li&gt;它强调“知识编译”，让 LLM 生成摘要、概念页和交叉链接，而不是每次提问都从零检索。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这让 OpenKB 更适合长期积累资料的场景，比如论文阅读、项目文档、公司内部资料、技术规范、产品调研和个人知识库。&lt;/p&gt;
&lt;p&gt;它也不是万能替代品。如果你需要高并发线上问答、复杂权限管理、Web 管理后台、企业级审计和大规模多租户能力，OpenKB 现在更像一个开发者工具和知识库原型，而不是完整企业知识平台。&lt;/p&gt;
&lt;h2 id=&#34;openkb-是什么&#34;&gt;OpenKB 是什么
&lt;/h2&gt;&lt;p&gt;OpenKB 的全名是 Open Knowledge Base。&lt;/p&gt;
&lt;p&gt;它以 CLI 形式工作，把放进知识库的原始文档转换、整理、总结，并生成一套 wiki 文件。官方 README 里的描述很直接：OpenKB 会用 LLM 把原始文档编译成结构化、互相链接的 wiki 风格知识库，并通过 PageIndex 支持无向量数据库的长文档检索。&lt;/p&gt;
&lt;p&gt;支持的输入格式包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;Word&lt;/li&gt;
&lt;li&gt;Markdown&lt;/li&gt;
&lt;li&gt;PowerPoint&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;纯文本&lt;/li&gt;
&lt;li&gt;其他可由 markitdown 转换的格式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;生成后的知识库位于 &lt;code&gt;wiki/&lt;/code&gt; 目录，主要包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index.md&lt;/code&gt;：知识库总览&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log.md&lt;/code&gt;：操作时间线&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;：知识库结构和维护说明&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sources/&lt;/code&gt;：转换后的原文&lt;/li&gt;
&lt;li&gt;&lt;code&gt;summaries/&lt;/code&gt;：每份文档的摘要&lt;/li&gt;
&lt;li&gt;&lt;code&gt;concepts/&lt;/code&gt;：跨文档概念页&lt;/li&gt;
&lt;li&gt;&lt;code&gt;explorations/&lt;/code&gt;：保存的查询结果&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reports/&lt;/code&gt;：lint 检查报告&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个设计最大的好处是透明。你可以直接打开 Markdown 文件查看知识库，而不是只能通过一个黑盒检索接口拿答案。&lt;/p&gt;
&lt;h2 id=&#34;它和传统-rag-有什么不同&#34;&gt;它和传统 RAG 有什么不同
&lt;/h2&gt;&lt;p&gt;传统 RAG 常见流程是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把文档切块。&lt;/li&gt;
&lt;li&gt;生成 embedding。&lt;/li&gt;
&lt;li&gt;存进向量数据库。&lt;/li&gt;
&lt;li&gt;查询时召回相关片段。&lt;/li&gt;
&lt;li&gt;把片段塞给 LLM 生成答案。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个流程很成熟，也很适合问答系统。但它有一个问题：知识本身没有真正沉淀。每次提问都在重新找片段、重新拼上下文、重新生成答案。&lt;/p&gt;
&lt;p&gt;OpenKB 的思路更偏“先整理，再问答”：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;文档进入 &lt;code&gt;raw/&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;短文档通过 markitdown 转成 Markdown。&lt;/li&gt;
&lt;li&gt;长 PDF 通过 PageIndex 生成树状索引和摘要。&lt;/li&gt;
&lt;li&gt;LLM 生成文档摘要。&lt;/li&gt;
&lt;li&gt;LLM 读取已有概念页，创建或更新跨文档概念。&lt;/li&gt;
&lt;li&gt;知识库索引、日志和交叉链接同步更新。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样做的结果是，新增一份文档不只是多了一个可检索文件，而是可能更新十几个 wiki 页面。知识会被写进概念页里，并和已有资料发生连接。&lt;/p&gt;
&lt;p&gt;这更像人类维护知识库的方式：新资料进来后，不只是存档，还要更新主题页、总结差异、补充引用。&lt;/p&gt;
&lt;h2 id=&#34;pageindex-解决什么问题&#34;&gt;PageIndex 解决什么问题
&lt;/h2&gt;&lt;p&gt;长文档一直是 RAG 和 LLM 知识库里的难点。&lt;/p&gt;
&lt;p&gt;如果直接把长 PDF 切成很多 chunk，容易遇到几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;章节关系丢失。&lt;/li&gt;
&lt;li&gt;表格、图片和脚注难处理。&lt;/li&gt;
&lt;li&gt;检索片段过碎，答案缺少全局结构。&lt;/li&gt;
&lt;li&gt;上下文窗口再大，也不适合把整本文档塞进去。&lt;/li&gt;
&lt;li&gt;摘要链路过长时，细节容易被压掉。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenKB 使用 PageIndex 来处理长 PDF。按项目说明，PageIndex 会为长文档建立树状索引和摘要，让 LLM 在文档树上推理，而不是直接读取整篇长文档。&lt;/p&gt;
&lt;p&gt;这条路线的重点不是“向量相似度最高的几段文本”，而是让模型利用文档层级结构找到相关内容。对于研究报告、论文、说明书、招股书、合规文档这类长材料，这个思路很有意义。&lt;/p&gt;
&lt;p&gt;OpenKB 默认可以使用开源版 PageIndex 本地运行；如果需要 OCR、复杂 PDF 处理或更快结构生成，也可以配置 &lt;code&gt;PAGEINDEX_API_KEY&lt;/code&gt; 使用 PageIndex Cloud。&lt;/p&gt;
&lt;h2 id=&#34;安装和快速开始&#34;&gt;安装和快速开始
&lt;/h2&gt;&lt;p&gt;OpenKB 可以直接通过 pip 安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install openkb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;也可以安装 GitHub 最新版本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install git+https://github.com/VectifyAI/OpenKB.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;从源码开发安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/VectifyAI/OpenKB.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; OpenKB
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -e .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;创建一个知识库目录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir my-kb &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; my-kb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;添加文档：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb add paper.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb add ~/papers/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;提问：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb query &lt;span class=&#34;s2&#34;&gt;&amp;#34;What are the main findings?&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;进入交互聊天：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb chat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果你想让知识库自动处理新文件，可以使用 watch 模式：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openkb watch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;之后把文件放进 &lt;code&gt;raw/&lt;/code&gt;，OpenKB 会自动更新 wiki。&lt;/p&gt;
&lt;h2 id=&#34;llm-配置&#34;&gt;LLM 配置
&lt;/h2&gt;&lt;p&gt;OpenKB 通过 LiteLLM 支持多种模型供应商，包括 OpenAI、Claude、Gemini 等。&lt;/p&gt;
&lt;p&gt;初始化时可以设置模型，也可以在 &lt;code&gt;.openkb/config.yaml&lt;/code&gt; 里配置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gpt-5.4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;en&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;pageindex_threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;模型名称遵循 LiteLLM 的 &lt;code&gt;provider/model&lt;/code&gt; 格式。OpenAI 模型可以省略 provider 前缀，例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gpt-5.4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Anthropic、Gemini 这类模型通常写成：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;anthropic/claude-sonnet-4-6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gemini/gemini-3.1-pro-preview&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;API key 放在 &lt;code&gt;.env&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LLM_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_llm_api_key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果启用 PageIndex Cloud，再补充：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PAGEINDEX_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_pageindex_api_key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;常用命令&#34;&gt;常用命令
&lt;/h2&gt;&lt;p&gt;OpenKB 的命令很适合开发者使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;openkb init&lt;/code&gt;：初始化知识库。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb add &amp;lt;file_or_dir&amp;gt;&lt;/code&gt;：添加文件或目录。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb remove &amp;lt;doc&amp;gt;&lt;/code&gt;：移除文档，并清理相关 wiki 页面、图片、注册表和 PageIndex 状态。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb query &amp;quot;question&amp;quot;&lt;/code&gt;：对知识库进行一次性提问。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb chat&lt;/code&gt;：进入多轮对话。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb watch&lt;/code&gt;：监听 &lt;code&gt;raw/&lt;/code&gt; 目录并自动更新。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb lint&lt;/code&gt;：检查知识库结构和内容健康状态。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb list&lt;/code&gt;：列出已索引文档和概念。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openkb status&lt;/code&gt;：查看知识库统计信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中 &lt;code&gt;openkb chat&lt;/code&gt; 比 &lt;code&gt;openkb query&lt;/code&gt; 更适合连续探索。它支持会话恢复、会话列表和删除，也支持在聊天中使用 slash commands，比如 &lt;code&gt;/status&lt;/code&gt;、&lt;code&gt;/list&lt;/code&gt;、&lt;code&gt;/add &amp;lt;path&amp;gt;&lt;/code&gt;、&lt;code&gt;/save&lt;/code&gt;、&lt;code&gt;/lint&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;为什么-markdown-wiki-很重要&#34;&gt;为什么 Markdown wiki 很重要
&lt;/h2&gt;&lt;p&gt;很多知识库工具的麻烦在于迁移成本。&lt;/p&gt;
&lt;p&gt;一旦资料进入专有数据库、专有索引或专有格式，你就很难直接审查、修改、备份和迁移。OpenKB 把结果写成普通 Markdown，这让它天然适合和现有工具配合。&lt;/p&gt;
&lt;p&gt;最直接的用法是用 Obsidian 打开 &lt;code&gt;wiki/&lt;/code&gt; 目录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;摘要页可以直接阅读。&lt;/li&gt;
&lt;li&gt;概念页可以用 &lt;code&gt;[[wikilinks]]&lt;/code&gt; 互相连接。&lt;/li&gt;
&lt;li&gt;图谱视图可以看到知识之间的关系。&lt;/li&gt;
&lt;li&gt;查询结果可以保存到 &lt;code&gt;explorations/&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; 可以定义知识库维护方式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这让 OpenKB 不只是一个问答工具，也可以变成个人或团队的知识整理流水线。&lt;/p&gt;
&lt;h2 id=&#34;适合哪些场景&#34;&gt;适合哪些场景
&lt;/h2&gt;&lt;p&gt;OpenKB 特别适合这些场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;论文和技术报告阅读。&lt;/li&gt;
&lt;li&gt;项目文档整理。&lt;/li&gt;
&lt;li&gt;产品调研资料库。&lt;/li&gt;
&lt;li&gt;开源项目源码外的文档知识库。&lt;/li&gt;
&lt;li&gt;公司内部规范、会议纪要和说明文档整理。&lt;/li&gt;
&lt;li&gt;个人 Obsidian 知识库自动维护。&lt;/li&gt;
&lt;li&gt;长 PDF、PPT、Word 和网页资料的结构化沉淀。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你经常面对一堆文档，却不只是想“问一句得到答案”，而是希望资料能逐步变成可浏览、可复用、可追踪的知识库，OpenKB 的方向就很对。&lt;/p&gt;
&lt;h2 id=&#34;使用时要注意什么&#34;&gt;使用时要注意什么
&lt;/h2&gt;&lt;p&gt;第一，OpenKB 依赖 LLM 质量。&lt;/p&gt;
&lt;p&gt;摘要、概念页和交叉链接都由模型生成。模型越强，知识编译质量越稳定；模型能力不足时，概念抽取、冲突识别和跨文档综合都会打折扣。&lt;/p&gt;
&lt;p&gt;第二，成本要提前估算。&lt;/p&gt;
&lt;p&gt;如果一次性导入大量长文档，LLM 调用成本可能不低。建议先用小规模资料集测试，确认输出结构和质量，再扩大导入范围。&lt;/p&gt;
&lt;p&gt;第三，生成的 wiki 仍然需要人工审阅。&lt;/p&gt;
&lt;p&gt;OpenKB 可以整理资料，但不等于自动保证事实完全正确。重要知识库仍然需要人工检查摘要、概念页和引用关系。&lt;/p&gt;
&lt;p&gt;第四，敏感资料要谨慎。&lt;/p&gt;
&lt;p&gt;如果使用云端 LLM 或 PageIndex Cloud，就要注意文档里的隐私、商业机密和合规要求。内部资料最好先确认模型供应商、数据保留策略和访问边界。&lt;/p&gt;
&lt;p&gt;第五，它目前更偏 CLI 工具。&lt;/p&gt;
&lt;p&gt;项目路线图里提到未来会有 Web UI、数据库存储、大规模集合支持和层级概念索引。但在当前阶段，如果团队成员不熟悉命令行，使用门槛仍然存在。&lt;/p&gt;
&lt;h2 id=&#34;和-obsidiannotebooklm企业-rag-的关系&#34;&gt;和 Obsidian、NotebookLM、企业 RAG 的关系
&lt;/h2&gt;&lt;p&gt;OpenKB 和 Obsidian 的关系更像“自动整理层”和“阅读编辑层”。&lt;/p&gt;
&lt;p&gt;Obsidian 适合人来写、改、浏览和建立链接；OpenKB 适合把原始文档批量整理成可以进入 Obsidian 的 wiki。&lt;/p&gt;
&lt;p&gt;OpenKB 和 NotebookLM 的关系则更偏“本地可控”和“开放文件形态”。&lt;/p&gt;
&lt;p&gt;NotebookLM 使用体验更直接，适合把资料丢进去快速问答和生成摘要；OpenKB 更适合开发者把整理结果留在本地目录里，用 Markdown 继续维护。&lt;/p&gt;
&lt;p&gt;OpenKB 和企业 RAG 的关系不是替代，而是补位。&lt;/p&gt;
&lt;p&gt;企业 RAG 更看重权限、审计、服务化、权限隔离、监控和稳定吞吐。OpenKB 更适合构建一个可读、可改、可长期沉淀的知识层。未来如果要做线上问答，也可以把 OpenKB 生成的 wiki 作为更高质量的语料来源。&lt;/p&gt;
&lt;h2 id=&#34;一个推荐工作流&#34;&gt;一个推荐工作流
&lt;/h2&gt;&lt;p&gt;如果你想试 OpenKB，可以按这个顺序来：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新建一个测试知识库目录。&lt;/li&gt;
&lt;li&gt;先放 3 到 5 份同一主题的文档。&lt;/li&gt;
&lt;li&gt;运行 &lt;code&gt;openkb add&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;打开 &lt;code&gt;wiki/&lt;/code&gt; 查看摘要和概念页。&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;openkb query&lt;/code&gt; 问几个具体问题。&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;openkb lint&lt;/code&gt; 检查知识库健康状态。&lt;/li&gt;
&lt;li&gt;用 Obsidian 打开 &lt;code&gt;wiki/&lt;/code&gt;，看链接图谱是否有意义。&lt;/li&gt;
&lt;li&gt;确认质量后，再导入更大的文档集合。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要一上来就把几百个文件全丢进去。先看它对你的资料类型是否理解得好，尤其是表格、图片、长 PDF 和多文档概念合并效果。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结
&lt;/h2&gt;&lt;p&gt;OpenKB 的价值在于，它把 LLM 知识库从“查询时临时拼上下文”往前推了一步：先把资料整理成 wiki，再在 wiki 上问答、聊天、检查和继续维护。&lt;/p&gt;
&lt;p&gt;这条路线不一定适合所有问答系统，但很适合需要长期沉淀的知识工作。Markdown 文件、Obsidian 兼容、PageIndex 长文档处理、多模型支持和 CLI 工作流，组合起来就是一个很适合开发者和研究型用户的知识库工具。&lt;/p&gt;
&lt;p&gt;如果你手上有大量 PDF、报告、网页、论文和项目文档，OpenKB 值得试一下。它未必能马上替代成熟企业知识库，但可以成为一个很实用的资料整理入口：先把文档变成可读、可链接、可追踪的知识，再让 LLM 在这套知识上工作。&lt;/p&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/VectifyAI/OpenKB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;VectifyAI/OpenKB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openkb.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenKB 项目页面&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://pageindex.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PageIndex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/microsoft/markitdown&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;markitdown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.litellm.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LiteLLM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>计算机术语人话版：TTS、STT、API、RAG、Agent 到底在说什么</title>
        <link>https://knightli.com/2026/05/12/computer-terms-in-plain-language/</link>
        <pubDate>Tue, 12 May 2026 22:15:34 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/12/computer-terms-in-plain-language/</guid>
        <description>&lt;p&gt;计算机领域有很多词，第一次听会觉得很高级。可一旦翻译成人话，往往就是日常生活里很简单的动作。&lt;/p&gt;
&lt;p&gt;比如 AI 能说话，叫 &lt;code&gt;TTS&lt;/code&gt;；AI 能听你说话，叫 &lt;code&gt;STT&lt;/code&gt;。听起来像复杂系统，拆开就是“把文字读出来”和“把声音写下来”。&lt;/p&gt;
&lt;p&gt;参考链接：&lt;a class=&#34;link&#34; href=&#34;https://www.zhihu.com/question/267978646/answer/2035405228460201515&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.zhihu.com/question/267978646/answer/2035405228460201515&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这篇就从这个角度串讲一些常见术语：保留术语本身，但把它们说成人话。&lt;/p&gt;
&lt;h2 id=&#34;tts-和-stt文字和语音互转&#34;&gt;TTS 和 STT：文字和语音互转
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;TTS&lt;/code&gt; 是 &lt;code&gt;Text-to-Speech&lt;/code&gt;，意思是“文本转语音”。你输入一段文字，系统把它变成声音。导航播报、电子书朗读、AI 客服开口说话，都属于这个方向。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;STT&lt;/code&gt; 是 &lt;code&gt;Speech-to-Text&lt;/code&gt;，意思是“语音转文本”。你对手机说一句话，系统先把语音识别成文字，再交给后面的程序处理。语音输入法、会议转写、自动字幕、智能音箱，都离不开它。&lt;/p&gt;
&lt;p&gt;很多语音 AI 产品的流程其实就是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;STT&lt;/code&gt;：把你说的话转成文字。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LLM&lt;/code&gt;：根据文字生成回答。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TTS&lt;/code&gt;：把回答读出来。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以它看起来像在和你自然聊天，底层往往是几个模块在接力。&lt;/p&gt;
&lt;h2 id=&#34;ocr从图片里抄字&#34;&gt;OCR：从图片里抄字
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;OCR&lt;/code&gt; 是 &lt;code&gt;Optical Character Recognition&lt;/code&gt;，中文常说“光学字符识别”。&lt;/p&gt;
&lt;p&gt;听起来很硬核，其实就是从图片里把文字抄出来。拍一张发票、扫描一页书、识别身份证上的姓名和号码，本质都是 OCR。&lt;/p&gt;
&lt;p&gt;以前 OCR 更像“看字形猜文字”，现在会结合深度学习，对复杂背景、倾斜文字、手写字和低清图片的容忍度更高。但它解决的核心问题仍然很直接：图片里有什么字？&lt;/p&gt;
&lt;h2 id=&#34;nlp-和-llm让机器处理人话&#34;&gt;NLP 和 LLM：让机器处理人话
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;NLP&lt;/code&gt; 是 &lt;code&gt;Natural Language Processing&lt;/code&gt;，自然语言处理。它处理的是人类语言，比如分词、翻译、摘要、情感分析、问答、分类。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LLM&lt;/code&gt; 是 &lt;code&gt;Large Language Model&lt;/code&gt;，大语言模型。它可以理解和生成文本，所以今天很多 NLP 任务都被 LLM 接管了。&lt;/p&gt;
&lt;p&gt;人话版理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NLP&lt;/code&gt;：让机器处理人说的话、写的字。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LLM&lt;/code&gt;：一个更大的文本模型，能接住很多语言任务。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你让 AI 总结文章、写邮件、改标题、解释代码，背后都属于这个大方向。&lt;/p&gt;
&lt;h2 id=&#34;api-和-sdk一个是接口一个是工具包&#34;&gt;API 和 SDK：一个是接口，一个是工具包
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;API&lt;/code&gt; 是 &lt;code&gt;Application Programming Interface&lt;/code&gt;，应用程序编程接口。&lt;/p&gt;
&lt;p&gt;人话就是：别人把能力开一个入口给你调用。比如天气 API，你传城市，它返回天气；支付 API，你传订单，它返回支付结果。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SDK&lt;/code&gt; 是 &lt;code&gt;Software Development Kit&lt;/code&gt;，软件开发工具包。&lt;/p&gt;
&lt;p&gt;人话就是：为了让你更方便调用 API，官方把常用代码、类型、示例和工具打包给你。API 像餐厅窗口，SDK 像点餐小程序。你可以直接去窗口说需求，也可以用小程序点得更省事。&lt;/p&gt;
&lt;h2 id=&#34;crud增删改查&#34;&gt;CRUD：增删改查
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CRUD&lt;/code&gt; 是 &lt;code&gt;Create&lt;/code&gt;、&lt;code&gt;Read&lt;/code&gt;、&lt;code&gt;Update&lt;/code&gt;、&lt;code&gt;Delete&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;翻译成人话就是：新增、查看、修改、删除。&lt;/p&gt;
&lt;p&gt;很多后台系统、管理系统、数据库操作，本质都在围绕 CRUD 打转。用户管理、文章管理、订单管理、库存管理，看起来业务不同，底层经常都是一组表单加一组增删改查。&lt;/p&gt;
&lt;p&gt;这也是为什么程序员会说“又写了一个 CRUD”。不是看不起这个工作，而是它确实太常见。&lt;/p&gt;
&lt;h2 id=&#34;cache先放一份省得每次重算&#34;&gt;Cache：先放一份，省得每次重算
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Cache&lt;/code&gt; 是缓存。&lt;/p&gt;
&lt;p&gt;人话就是：常用的东西先放在手边，下次直接拿，不要每次都重新找、重新算、重新请求。&lt;/p&gt;
&lt;p&gt;网页加载慢，可以把图片和脚本缓存起来；数据库查询慢，可以把热门结果放进 Redis；模型推理贵，可以缓存重复问题的答案。&lt;/p&gt;
&lt;p&gt;缓存的难点不在“放一份”，而在“什么时候更新”。数据变了，缓存没变，就会出现旧数据。这就是很多缓存问题的根源。&lt;/p&gt;
&lt;h2 id=&#34;queue排队慢慢处理&#34;&gt;Queue：排队慢慢处理
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Queue&lt;/code&gt; 是队列。&lt;/p&gt;
&lt;p&gt;人话就是：事情太多，先排队，一个一个处理。&lt;/p&gt;
&lt;p&gt;比如用户上传视频后，不一定马上转码完成。系统可以先把任务放进队列，后台服务慢慢处理。发短信、发邮件、生成报表、处理订单回调，也经常用队列。&lt;/p&gt;
&lt;p&gt;队列解决的是“不要所有事情都卡在当前请求里”。用户先得到响应，耗时任务放到后面做。&lt;/p&gt;
&lt;h2 id=&#34;index给数据库做目录&#34;&gt;Index：给数据库做目录
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Index&lt;/code&gt; 是索引。&lt;/p&gt;
&lt;p&gt;数据库里的索引，可以理解成书的目录。没有目录，你要从第一页翻到最后一页；有目录，你可以更快定位到目标内容。&lt;/p&gt;
&lt;p&gt;但索引不是越多越好。查询会变快，写入和更新可能变慢，因为数据改了，索引也要跟着维护。&lt;/p&gt;
&lt;p&gt;所以数据库优化里常见的一句话是：慢查询先看索引。但真正做索引时，还要看查询条件、排序字段、数据量和写入频率。&lt;/p&gt;
&lt;h2 id=&#34;rpcrest-和-webhook系统之间怎么说话&#34;&gt;RPC、REST 和 Webhook：系统之间怎么说话
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;RPC&lt;/code&gt; 是 &lt;code&gt;Remote Procedure Call&lt;/code&gt;，远程过程调用。&lt;/p&gt;
&lt;p&gt;人话就是：我像调用本地函数一样，去调用另一台机器上的函数。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;REST&lt;/code&gt; 常见于 Web API。它更像用 URL 和 HTTP 方法来表达资源操作，比如 &lt;code&gt;GET /users&lt;/code&gt; 查用户，&lt;code&gt;POST /orders&lt;/code&gt; 创建订单。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Webhook&lt;/code&gt; 则是反过来通知你。你不用一直问“好了没”，对方处理完后主动回调你的地址。&lt;/p&gt;
&lt;p&gt;简单记：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;RPC&lt;/code&gt;：像远程调用函数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REST&lt;/code&gt;：用 HTTP 管理资源。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Webhook&lt;/code&gt;：事情发生后主动通知你。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cdn-和-load-balancing离你近一点分担一点&#34;&gt;CDN 和 Load Balancing：离你近一点，分担一点
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CDN&lt;/code&gt; 是 &lt;code&gt;Content Delivery Network&lt;/code&gt;，内容分发网络。&lt;/p&gt;
&lt;p&gt;人话就是：把静态资源放到离用户更近的节点。用户访问图片、视频、CSS、JS 时，不必每次都跑到源站。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Load Balancing&lt;/code&gt; 是负载均衡。&lt;/p&gt;
&lt;p&gt;人话就是：访问量太大，不要让一台服务器硬扛，把请求分给多台机器。&lt;/p&gt;
&lt;p&gt;一个偏“离用户近”，一个偏“别让机器累死”。大型网站通常两个都会用。&lt;/p&gt;
&lt;h2 id=&#34;dockercontainer-和-kubernetes打包运行调度&#34;&gt;Docker、Container 和 Kubernetes：打包、运行、调度
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Docker&lt;/code&gt; 是常见的容器工具，&lt;code&gt;Container&lt;/code&gt; 是容器。&lt;/p&gt;
&lt;p&gt;人话就是：把程序和它依赖的环境打包在一起，换一台机器也尽量能一样运行。这样可以减少“我电脑上能跑，服务器上不能跑”的问题。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Kubernetes&lt;/code&gt;，常写作 &lt;code&gt;K8s&lt;/code&gt;，是容器编排系统。&lt;/p&gt;
&lt;p&gt;人话就是：当容器很多时，帮你安排它们运行在哪里、挂了怎么重启、流量怎么分、版本怎么更新。&lt;/p&gt;
&lt;p&gt;如果只有一个小服务，Docker 就够了；如果有很多服务、很多机器、很多副本，才会更需要 K8s。&lt;/p&gt;
&lt;h2 id=&#34;cicd自动构建自动发布&#34;&gt;CI/CD：自动构建、自动发布
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CI&lt;/code&gt; 是 &lt;code&gt;Continuous Integration&lt;/code&gt;，持续集成。&lt;/p&gt;
&lt;p&gt;人话就是：代码一提交，系统自动拉代码、跑测试、构建，尽早发现问题。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CD&lt;/code&gt; 可以指 &lt;code&gt;Continuous Delivery&lt;/code&gt; 或 &lt;code&gt;Continuous Deployment&lt;/code&gt;，持续交付或持续部署。&lt;/p&gt;
&lt;p&gt;人话就是：构建通过后，把代码更稳定、更自动地送到测试环境或生产环境。&lt;/p&gt;
&lt;p&gt;它解决的不是“写代码”，而是“写完代码之后，怎么少出错地上线”。&lt;/p&gt;
&lt;h2 id=&#34;serialization把对象打包成可传输格式&#34;&gt;Serialization：把对象打包成可传输格式
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Serialization&lt;/code&gt; 是序列化。&lt;/p&gt;
&lt;p&gt;人话就是：把程序里的对象变成能保存、能传输的格式，比如 JSON、XML、Protobuf。&lt;/p&gt;
&lt;p&gt;反过来，&lt;code&gt;Deserialization&lt;/code&gt; 是反序列化：把这些格式再还原成程序能用的对象。&lt;/p&gt;
&lt;p&gt;你在前后端之间传 JSON，在服务之间传 Protobuf，本质都离不开序列化。&lt;/p&gt;
&lt;h2 id=&#34;tokenembeddingvector-db把文字变成模型能处理的形式&#34;&gt;Token、Embedding、Vector DB：把文字变成模型能处理的形式
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Token&lt;/code&gt; 在大模型里通常指文本切分后的基本单位。它不一定等于一个汉字或一个英文单词，更像模型内部处理文本时的颗粒。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Embedding&lt;/code&gt; 是嵌入向量。&lt;/p&gt;
&lt;p&gt;人话就是：把文字、图片或其他内容变成一串数字，让模型可以比较它们之间的相似度。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Vector DB&lt;/code&gt; 是向量数据库。&lt;/p&gt;
&lt;p&gt;人话就是：专门存这些向量，并且能快速找出“意思相近”的内容。&lt;/p&gt;
&lt;p&gt;比如你问“怎么重置路由器”，系统可能去向量库里找“恢复出厂设置”“忘记 Wi-Fi 密码”“后台登录失败”等相近内容，再拿回来给模型参考。&lt;/p&gt;
&lt;h2 id=&#34;rag先查资料再回答&#34;&gt;RAG：先查资料，再回答
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;RAG&lt;/code&gt; 是 &lt;code&gt;Retrieval-Augmented Generation&lt;/code&gt;，检索增强生成。&lt;/p&gt;
&lt;p&gt;人话就是：模型回答前，先去资料库查相关内容，再带着资料回答。&lt;/p&gt;
&lt;p&gt;它解决的是大模型容易“凭记忆瞎说”的问题。把企业文档、知识库、产品手册、代码片段接进来，模型就不只是靠训练时的记忆，而是能参考你给它的最新资料。&lt;/p&gt;
&lt;p&gt;典型流程是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用户提问。&lt;/li&gt;
&lt;li&gt;系统把问题转成 &lt;code&gt;Embedding&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;去 &lt;code&gt;Vector DB&lt;/code&gt; 里找相关文档。&lt;/li&gt;
&lt;li&gt;把文档片段和问题一起交给 &lt;code&gt;LLM&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;模型生成回答。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以 RAG 听起来高级，本质是“先翻资料，再组织语言”。&lt;/p&gt;
&lt;h2 id=&#34;agent会自己拆任务的自动化流程&#34;&gt;Agent：会自己拆任务的自动化流程
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Agent&lt;/code&gt; 在 AI 语境里经常被翻译成智能体。&lt;/p&gt;
&lt;p&gt;人话就是：它不只是回答一句话，而是能根据目标拆步骤、调用工具、观察结果，再决定下一步。&lt;/p&gt;
&lt;p&gt;比如你让它“帮我分析这个仓库为什么测试失败”，普通聊天模型可能只给建议；Agent 则可能会读文件、运行测试、看报错、改代码、再跑测试。&lt;/p&gt;
&lt;p&gt;当然，Agent 不等于一定可靠。它只是把“模型 + 工具调用 + 状态循环”串起来。真正好不好用，还要看工具权限、任务边界、错误处理和人工确认机制。&lt;/p&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;很多计算机术语之所以显得高级，是因为它们被英文缩写、架构图和产品文案包了一层壳。拆开之后，大多是在描述很朴素的动作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;TTS&lt;/code&gt;：把文字读出来。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;STT&lt;/code&gt;：把声音写下来。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OCR&lt;/code&gt;：从图片里抄字。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;API&lt;/code&gt;：开放一个调用入口。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SDK&lt;/code&gt;：把调用工具打包好。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CRUD&lt;/code&gt;：增删改查。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cache&lt;/code&gt;：常用结果先存一份。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Queue&lt;/code&gt;：任务排队慢慢处理。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Index&lt;/code&gt;：给数据做目录。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CDN&lt;/code&gt;：把内容放近一点。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Load Balancing&lt;/code&gt;：把请求分散一点。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Docker&lt;/code&gt;：把运行环境打包。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CI/CD&lt;/code&gt;：让测试和发布自动化。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Embedding&lt;/code&gt;：把内容变成数字向量。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RAG&lt;/code&gt;：先查资料，再回答。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Agent&lt;/code&gt;：让模型带着工具分步做事。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;术语要保留，因为它们方便搜索、沟通和查文档。但理解时不用被它们吓住。先翻译成人话，再回到技术细节里看，很多概念会清楚得多。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;知乎回答：&lt;a class=&#34;link&#34; href=&#34;https://www.zhihu.com/question/267978646/answer/2035405228460201515&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.zhihu.com/question/267978646/answer/2035405228460201515&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Gemini Embedding 2：把文本、图像、视频和音频放进同一个向量空间</title>
        <link>https://knightli.com/2026/05/04/gemini-embedding-2-multimodal-rag/</link>
        <pubDate>Mon, 04 May 2026 06:01:10 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/04/gemini-embedding-2-multimodal-rag/</guid>
        <description>&lt;p&gt;Google Developers Blog 介绍了 Gemini Embedding 2 的开发用法。这个模型已经通过 Gemini API 和 Gemini Enterprise Agent Platform 进入 GA，重点不只是“新的 embedding 模型”，而是把文本、图像、视频、音频和文档映射到同一个语义空间。&lt;/p&gt;
&lt;p&gt;这会让检索系统的边界变宽：过去很多 RAG 流程需要先把图片、视频、音频拆成文字或元数据，再单独建索引；Gemini Embedding 2 则可以直接处理多模态输入，让代理、搜索和分类系统更容易围绕真实业务材料工作。&lt;/p&gt;
&lt;p&gt;原文链接：&lt;a class=&#34;link&#34; href=&#34;https://developers.googleblog.com/building-with-gemini-embedding-2/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Building with Gemini Embedding 2: Agentic multimodal RAG and beyond&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;模型能力&#34;&gt;模型能力
&lt;/h2&gt;&lt;p&gt;Gemini Embedding 2 支持 100 多种语言。单次请求可以处理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最多 8,192 个文本 token&lt;/li&gt;
&lt;li&gt;最多 6 张图片&lt;/li&gt;
&lt;li&gt;最多 120 秒视频&lt;/li&gt;
&lt;li&gt;最多 180 秒音频&lt;/li&gt;
&lt;li&gt;最多 6 页 PDF&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它的关键点是“统一语义空间”。开发者可以把不同模态的内容放在同一套向量表示里，用同一种检索、聚类或重排序逻辑处理。&lt;/p&gt;
&lt;p&gt;例如，文本描述和图片可以放在同一次 embedding 请求里：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;google&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;google.genai&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;types&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dog.png&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;rb&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;image_bytes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;embed_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;gemini-embedding-2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;contents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;An image of a dog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;types&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image_bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;image/png&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;embeddings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果你希望每个输入分别得到 embedding，而不是聚合成一个向量，可以使用 Batch API。原文也提到，Agent Platform 对这类批量支持还在跟进中。&lt;/p&gt;
&lt;h2 id=&#34;对-rag-的意义&#34;&gt;对 RAG 的意义
&lt;/h2&gt;&lt;p&gt;多模态 embedding 对代理式 RAG 很有用。一个 AI agent 可能需要同时检查代码仓库、PDF、截图、图表、音频会议记录和产品图片。如果所有资料都能进入同一个语义空间，检索链路就不必为每种材料单独设计一套入口。&lt;/p&gt;
&lt;p&gt;Google 建议根据任务使用 task prefix，让 embedding 更贴近检索目标。例如问答、事实核查、代码检索和搜索结果，可以使用不同前缀：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Generate embedding for your task&amp;#39;s query:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;prepare_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;task: question answering | query: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#34;task: fact checking | query: {content}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#34;task: code retrieval | query: {content}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#34;task: search result | query: {content}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Generate embedding for document of an asymmetric retrieval task:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;prepare_document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;none&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; | text: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这种前缀适合非对称检索：用户查询往往很短，文档内容往往很长。把 query 和 document 分别按任务格式整理，可以改善短查询到长文档之间的匹配。&lt;/p&gt;
&lt;p&gt;原文给了两个落地反馈：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Harvey 在法律检索基准上，Recall@20 precision 相比上一代 embedding 提升 3%。&lt;/li&gt;
&lt;li&gt;Supermemory 在 Recall@1 搜索准确率上提升 40%，并把它用于记忆、索引、搜索和问答管线。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些数字不代表所有场景都会同幅度提升，但说明多模态 embedding 已经不只是演示能力，而是在真实检索产品中产生效果。&lt;/p&gt;
&lt;h2 id=&#34;视觉搜索&#34;&gt;视觉搜索
&lt;/h2&gt;&lt;p&gt;Gemini Embedding 2 也适合做以图搜图、图文混合搜索和商品识别。原文提到服装租赁公司 Nuuly 用它匹配仓库中未打标签的服装照片，使 Match@20 从 60% 提升到接近 87%，总体成功识别率从 74% 提升到 90% 以上。&lt;/p&gt;
&lt;p&gt;这类场景的关键不是生成内容，而是理解“这张图片和哪个库存、文档或商品记录最接近”。如果你的业务里有大量图片、视频片段或扫描件，多模态 embedding 会比纯文本索引更自然。&lt;/p&gt;
&lt;h2 id=&#34;检索重排序&#34;&gt;检索重排序
&lt;/h2&gt;&lt;p&gt;Embedding 还可以用于 rerank。常见做法是先用基础检索拿到一批候选结果，再计算候选结果和用户查询之间的相似度，把更相关的内容排到前面：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1. Define a function to calculate the dot product (cosine similarity)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;dot_product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ndarray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ndarray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2. Retrieve your embeddings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# (Assuming &amp;#39;summaries&amp;#39; is your list of search results)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;search_res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_embeddings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;summaries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;embedded_query&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_embeddings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 3. Calculate similarity scores&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sim_value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dot_product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;search_res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;embedded_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 4. Select the most relevant result&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;best_match_index&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argmax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sim_value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;原文还提到一种思路：先让模型根据内部知识生成一个假设答案，再把这个假设答案做 embedding，与候选内容比较相似度，用来挑出语义更贴近的结果。这对问答型 RAG 尤其有用。&lt;/p&gt;
&lt;h2 id=&#34;聚类分类和异常检测&#34;&gt;聚类、分类和异常检测
&lt;/h2&gt;&lt;p&gt;除了检索，embedding 也适合聚类、分类和异常检测。和前面的问答检索不同，这些属于对称任务，query 和 document 可以使用同一种任务前缀：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Generate embedding for query &amp;amp; document of your task.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;prepare_query_and_document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#39;task: clustering | query: {content}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#39;task: sentence similarity | query: {content}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# return f&amp;#39;task: classification | query: {content}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这类任务可以用于舆情分类、内容审核、相似资产归类、异常样本发现，也可以帮助 agent 对大量上下文材料先做整理，再进入后续推理。&lt;/p&gt;
&lt;h2 id=&#34;存储和成本&#34;&gt;存储和成本
&lt;/h2&gt;&lt;p&gt;Gemini Embedding 2 默认输出 3,072 维向量。它使用 Matryoshka Representation Learning，因此可以通过 &lt;code&gt;output_dimensionality&lt;/code&gt; 把向量截断到更小维度。Google 推荐在效率优先时使用 1,536 或 768 维：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;embed_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gemini-embedding-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;contents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;What is the meaning of life?&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;output_dimensionality&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;768&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;向量可以存到 Agent Platform Vector Search、Pinecone、Weaviate、Qdrant、ChromaDB 等系统里。成本方面，原文提到 Batch API 可提供更高吞吐，并达到默认 embedding 价格的 50%。&lt;/p&gt;
&lt;h2 id=&#34;开发者该怎么用&#34;&gt;开发者该怎么用
&lt;/h2&gt;&lt;p&gt;如果你已有文本 RAG，可以先从两类增量改造开始：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把 PDF、截图、图片说明和文本文档放入同一个索引，测试查询召回是否更稳定。&lt;/li&gt;
&lt;li&gt;给不同任务加 task prefix，例如问答、事实核查、代码检索、商品搜索，不要把所有内容都按同一种 embedding 方式处理。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果你在做新产品，可以优先考虑这些方向：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;企业知识库：同时检索文档、图表、演示稿截图和会议材料。&lt;/li&gt;
&lt;li&gt;视觉搜索：用图片、文本或混合输入查找商品、资产、设计稿和档案。&lt;/li&gt;
&lt;li&gt;Agent 工具链：让 coding agent、研究 agent 或客服 agent 检索多种格式的业务材料。&lt;/li&gt;
&lt;li&gt;内容治理：对文本、图片、视频片段做统一分类、聚类和异常检测。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gemini Embedding 2 的价值在于把多模态材料变成同一套可检索资产。对开发者来说，这会减少“先转文字再检索”的中间层，也让 RAG 系统更接近真实世界的数据形态。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>常见向量模型怎么选：OpenAI、BGE、E5、GTE、Jina 对比</title>
        <link>https://knightli.com/2026/04/23/compare-openai-bge-e5-gte-jina-embedding-models/</link>
        <pubDate>Thu, 23 Apr 2026 15:23:47 +0800</pubDate>
        
        <guid>https://knightli.com/2026/04/23/compare-openai-bge-e5-gte-jina-embedding-models/</guid>
        <description>&lt;p&gt;做 RAG、语义搜索、知识库召回时，很多人一开始会纠结同一个问题：向量模型这么多，到底该选哪一个。&lt;/p&gt;
&lt;p&gt;常见模型大致可以分成两组。一组是通用文本向量，覆盖中英文和多语言任务；另一组更适合中文场景，重点看中文检索、中文问答和中文知识库效果。&lt;/p&gt;
&lt;p&gt;如果先给一个很短的结论，可以这样看：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想省事、直接用 API：&lt;code&gt;text-embedding-3-small&lt;/code&gt; 或 &lt;code&gt;text-embedding-3-large&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;想做中文检索，且希望开源可自部署：&lt;code&gt;bge-base-zh-v1.5&lt;/code&gt;、&lt;code&gt;bge-m3&lt;/code&gt;、&lt;code&gt;gte-large-zh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;想兼顾多语言：&lt;code&gt;multilingual-e5-base&lt;/code&gt;、&lt;code&gt;multilingual-e5-large&lt;/code&gt;、&lt;code&gt;jina-embeddings-v3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;想在中文场景里压成本：&lt;code&gt;bge-small-zh-v1.5&lt;/code&gt;、&lt;code&gt;gte-base-zh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一先按类型看这些模型&#34;&gt;一、先按类型看这些模型
&lt;/h2&gt;&lt;h3 id=&#34;1-openai-系列&#34;&gt;1. OpenAI 系列
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;text-embedding-3-small&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text-embedding-3-large&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这类模型的特点是调用简单、稳定，适合直接接 API 做检索、RAG、分类和相似度匹配。它们的优势不在“某一个中文榜单分数特别高”，而在整体体验完整：接入门槛低、效果稳定、工程成本也低。&lt;/p&gt;
&lt;p&gt;如果团队不想自己托管模型、不想维护推理服务，OpenAI 这类方案通常最省时间。&lt;/p&gt;
&lt;h3 id=&#34;2-bge-系列&#34;&gt;2. BGE 系列
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BAAI/bge-small-zh-v1.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BAAI/bge-base-zh-v1.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-m3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;BGE 是中文检索里很常见的一条线。&lt;code&gt;bge-small-zh-v1.5&lt;/code&gt; 和 &lt;code&gt;bge-base-zh-v1.5&lt;/code&gt; 更偏中文单语任务，适合中文语义搜索、知识库召回、FAQ 匹配。&lt;code&gt;bge-m3&lt;/code&gt; 则更通用，能覆盖多语言、多粒度和更复杂的检索场景。&lt;/p&gt;
&lt;p&gt;如果你的数据主要是中文文本，BGE 往往是最容易进入候选名单的一组。&lt;/p&gt;
&lt;h3 id=&#34;3-e5-系列&#34;&gt;3. E5 系列
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;intfloat/multilingual-e5-base&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-large&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E5 系列的特点是多语言能力比较均衡，适合中英混合、跨语种检索、国际化内容库。它不是只盯中文，而是更强调“不同语言都能放到一个统一检索体系里”。&lt;/p&gt;
&lt;p&gt;如果你的语料不是纯中文，而是中文、英文、日文甚至更多语言混在一起，E5 通常比中文专用模型更稳。&lt;/p&gt;
&lt;h3 id=&#34;4-gte-系列&#34;&gt;4. GTE 系列
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Alibaba-NLP/gte-base-zh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte-large-zh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GTE 在中文任务里也很常见，定位和 BGE 有点接近，都是中文检索的实用型选手。它的特点通常是比较平衡，没有特别复杂的使用门槛，适合做中文知识库、站内搜索和企业内部文档召回。&lt;/p&gt;
&lt;p&gt;如果你想在中文开源模型里多做一组对照，GTE 很值得一起评测。&lt;/p&gt;
&lt;h3 id=&#34;5-jina-embeddings&#34;&gt;5. Jina Embeddings
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;jina-embeddings-v3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jina 这一类更偏通用和现代工程场景，常见于多语言检索、长文本、网页内容处理等任务。它经常出现在“一个模型覆盖更多任务形态”的讨论里，适合希望统一 embedding 层的团队。&lt;/p&gt;
&lt;p&gt;如果你的内容来源比较杂，既有网页、文档，也有多语言文本，Jina 往往是一个值得测试的备选。&lt;/p&gt;
&lt;h2 id=&#34;二中文场景里哪些模型更常用&#34;&gt;二、中文场景里，哪些模型更常用
&lt;/h2&gt;&lt;p&gt;如果把范围收窄到中文场景，常见候选基本就是这些：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bge-small-zh-v1.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-base-zh-v1.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-m3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte-base-zh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte-large-zh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-base&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-large&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这几类里，最典型的分法其实不是“谁绝对更强”，而是下面这三个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;你的数据是不是以中文为主&lt;/li&gt;
&lt;li&gt;你是不是需要多语言&lt;/li&gt;
&lt;li&gt;你更在意效果、成本，还是部署方便&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;三把这些模型放在一起看&#34;&gt;三、把这些模型放在一起看
&lt;/h2&gt;&lt;h3 id=&#34;1-如果只看中文效果&#34;&gt;1. 如果只看中文效果
&lt;/h3&gt;&lt;p&gt;纯中文知识库、中文问答、中文文档召回，一般优先看 BGE 和 GTE。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bge-small-zh-v1.5&lt;/code&gt;：更轻，适合成本敏感场景&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-base-zh-v1.5&lt;/code&gt;：通常是中文场景里更均衡的一档&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte-base-zh&lt;/code&gt;：和轻量 BGE 类似，适合先做基线&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte-large-zh&lt;/code&gt;：更适合追求召回质量的场景&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-m3&lt;/code&gt;：适合希望把中文检索和更复杂能力放到一起考虑的团队&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果语料几乎全是中文，E5 虽然也能用，但很多时候不会是第一优先。&lt;/p&gt;
&lt;h3 id=&#34;2-如果需要多语言&#34;&gt;2. 如果需要多语言
&lt;/h3&gt;&lt;p&gt;这时优先级会明显变化。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-base&lt;/code&gt; 和 &lt;code&gt;multilingual-e5-large&lt;/code&gt; 更适合多语言统一检索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jina-embeddings-v3&lt;/code&gt; 也适合多语言和通用文本任务&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-m3&lt;/code&gt; 比传统中文专用模型更适合扩展到多语言&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text-embedding-3-small&lt;/code&gt; 和 &lt;code&gt;text-embedding-3-large&lt;/code&gt; 适合想直接上 API 的场景&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你的库里同时有中文、英文、产品文档、网页文案和用户问题，多语言模型会比中文专用模型省掉很多后续改造成本。&lt;/p&gt;
&lt;h3 id=&#34;3-如果要控制推理和存储成本&#34;&gt;3. 如果要控制推理和存储成本
&lt;/h3&gt;&lt;p&gt;轻量模型更有优势。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bge-small-zh-v1.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte-base-zh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-base&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text-embedding-3-small&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这类模型通常更适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文档量大&lt;/li&gt;
&lt;li&gt;更新频繁&lt;/li&gt;
&lt;li&gt;需要批量向量化&lt;/li&gt;
&lt;li&gt;对延迟和成本比较敏感&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果数据规模很大，embedding 维度、推理速度、索引占用都会直接影响总成本，所以“先上小模型做基线”通常是更稳的做法。&lt;/p&gt;
&lt;h3 id=&#34;4-如果优先追求上限&#34;&gt;4. 如果优先追求上限
&lt;/h3&gt;&lt;p&gt;更大的模型通常更适合复杂检索或高质量召回，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;text-embedding-3-large&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-large&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte-large-zh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-base-zh-v1.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-m3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但这里要注意，模型越大不代表线上体验一定越好。很多项目最后的瓶颈不是模型本身，而是切分策略、召回条数、重排、数据清洗和评测方式。&lt;/p&gt;
&lt;h2 id=&#34;四每个模型更适合什么任务&#34;&gt;四、每个模型更适合什么任务
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;模型&lt;/th&gt;
          &lt;th&gt;更适合的场景&lt;/th&gt;
          &lt;th&gt;简单判断&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;text-embedding-3-small&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;通用检索、RAG、快速接入&lt;/td&gt;
          &lt;td&gt;API 省事，成本友好&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;text-embedding-3-large&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;更重视质量的通用检索&lt;/td&gt;
          &lt;td&gt;效果优先，工程最省心&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;bge-small-zh-v1.5&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;中文轻量检索&lt;/td&gt;
          &lt;td&gt;中文常用入门款&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;bge-base-zh-v1.5&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;中文知识库、FAQ、语义搜索&lt;/td&gt;
          &lt;td&gt;中文场景很均衡&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;bge-m3&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;中文为主但希望兼顾更复杂检索&lt;/td&gt;
          &lt;td&gt;扩展性更强&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;multilingual-e5-base&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;多语言基础检索&lt;/td&gt;
          &lt;td&gt;国际化项目常用&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;multilingual-e5-large&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;多语言高质量召回&lt;/td&gt;
          &lt;td&gt;更偏效果导向&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gte-base-zh&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;中文轻量召回&lt;/td&gt;
          &lt;td&gt;适合先做基线&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gte-large-zh&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;中文质量优先场景&lt;/td&gt;
          &lt;td&gt;可作为 BGE 对照组&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;jina-embeddings-v3&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;多语言、网页、通用文本任务&lt;/td&gt;
          &lt;td&gt;统一 embedding 层时值得测&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;五实际选型时可以怎么决策&#34;&gt;五、实际选型时可以怎么决策
&lt;/h2&gt;&lt;p&gt;如果你只是要落地，而不是写论文，选型顺序可以简单一点：&lt;/p&gt;
&lt;h3 id=&#34;场景一中文知识库&#34;&gt;场景一：中文知识库
&lt;/h3&gt;&lt;p&gt;优先测试这几组：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bge-base-zh-v1.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gte-large-zh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bge-small-zh-v1.5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果预算紧，先从小模型开始；如果更重视召回质量，再往更大的模型试。&lt;/p&gt;
&lt;h3 id=&#34;场景二中英混合知识库&#34;&gt;场景二：中英混合知识库
&lt;/h3&gt;&lt;p&gt;优先测试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-base&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-large&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text-embedding-3-small&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text-embedding-3-large&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果不想自部署，OpenAI 会更直接；如果要自己托管，E5 更常见。&lt;/p&gt;
&lt;h3 id=&#34;场景三中文为主但未来可能扩到多语言&#34;&gt;场景三：中文为主，但未来可能扩到多语言
&lt;/h3&gt;&lt;p&gt;优先测试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bge-m3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multilingual-e5-base&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jina-embeddings-v3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这类场景最怕的是一开始只看中文，后面又要重做整个向量库。&lt;/p&gt;
&lt;h2 id=&#34;六最后怎么选关键不是榜单第一&#34;&gt;六、最后怎么选，关键不是“榜单第一”
&lt;/h2&gt;&lt;p&gt;向量模型选型里，最容易踩的坑就是只看公开分数，然后直接上线。&lt;/p&gt;
&lt;p&gt;更靠谱的方式通常是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先挑 2 到 4 个候选模型&lt;/li&gt;
&lt;li&gt;用自己的真实数据做 embedding&lt;/li&gt;
&lt;li&gt;跑一轮召回评测&lt;/li&gt;
&lt;li&gt;再结合成本、延迟、部署方式做决定&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;因为真正决定结果的，往往不是模型名本身，而是模型和你的语料、分块策略、查询形式到底合不合。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结
&lt;/h2&gt;&lt;p&gt;如果只想记住一版实用结论，可以这样：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中文优先：先看 &lt;code&gt;bge-base-zh-v1.5&lt;/code&gt;、&lt;code&gt;gte-large-zh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;成本优先：先看 &lt;code&gt;bge-small-zh-v1.5&lt;/code&gt;、&lt;code&gt;gte-base-zh&lt;/code&gt;、&lt;code&gt;text-embedding-3-small&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;多语言优先：先看 &lt;code&gt;multilingual-e5-base&lt;/code&gt;、&lt;code&gt;multilingual-e5-large&lt;/code&gt;、&lt;code&gt;jina-embeddings-v3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;直接上 API：先看 &lt;code&gt;text-embedding-3-small&lt;/code&gt;、&lt;code&gt;text-embedding-3-large&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;想兼顾中文和后续扩展：先看 &lt;code&gt;bge-m3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没有一个模型适合所有项目，但大多数项目都可以先从这几组里很快筛出第一批候选。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>AI 名词解释：用大白话讲清楚 Agent、MCP、RAG 和 Token</title>
        <link>https://knightli.com/2026/04/23/ai-terms-agent-mcp-rag-token-explained/</link>
        <pubDate>Thu, 23 Apr 2026 13:13:40 +0800</pubDate>
        
        <guid>https://knightli.com/2026/04/23/ai-terms-agent-mcp-rag-token-explained/</guid>
        <description>&lt;p&gt;刚开始接触 AI，最容易劝退人的通常不是模型本身，而是讨论里那些一串串名词。&lt;code&gt;Agent&lt;/code&gt;、&lt;code&gt;MCP&lt;/code&gt;、&lt;code&gt;RAG&lt;/code&gt;、&lt;code&gt;AIGC&lt;/code&gt;、&lt;code&gt;Token&lt;/code&gt; 看起来都很常见，但如果没人先用人话讲一遍，很多人其实只是在“眼熟”，并没有真正听懂。&lt;/p&gt;
&lt;p&gt;这篇就顺着一组常见入门解释的思路，把 10 个高频 AI 名词压缩成一套更容易记住的解释。目标不是讲得多学术，而是先帮你建立一个能跟上日常讨论的基础框架。&lt;/p&gt;
&lt;h2 id=&#34;10-个常见-ai-名词分别是什么意思&#34;&gt;10 个常见 AI 名词，分别是什么意思
&lt;/h2&gt;&lt;h3 id=&#34;1-agent不只会聊天的执行型-ai&#34;&gt;1. Agent：不只会聊天的执行型 AI
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Agent&lt;/code&gt; 可以先理解成“会干活的 AI 助手”。&lt;/p&gt;
&lt;p&gt;普通聊天机器人更像是你问一句、它答一句；&lt;code&gt;Agent&lt;/code&gt; 则更进一步，它会把任务拆开、安排步骤、调用工具，再把结果交回来。比如你让它帮你整理资料、查信息、生成文档，它不只是给建议，而是可能直接把这些动作串起来做完。&lt;/p&gt;
&lt;p&gt;所以 &lt;code&gt;Agent&lt;/code&gt; 的关键，不在“会不会说”，而在“能不能做”。&lt;/p&gt;
&lt;h3 id=&#34;2-openclaw驻留在电脑里的-ai-助手&#34;&gt;2. OpenClaw：驻留在电脑里的 AI 助手
&lt;/h3&gt;&lt;p&gt;视频里把 &lt;code&gt;OpenClaw&lt;/code&gt; 形容成一种“住在电脑里的 AI 管家”。&lt;/p&gt;
&lt;p&gt;你可以把这类工具理解成更贴近桌面操作的 AI 助手：它不只是接收文字，还可能直接观察界面、调用本地工具、按流程执行任务。和普通网页聊天相比，这类工具更强调实际操作能力。&lt;/p&gt;
&lt;p&gt;如果说 &lt;code&gt;Agent&lt;/code&gt; 是抽象层面的“执行型 AI”，那这类桌面型助手更像是它在个人电脑上的一种具体落地形式。&lt;/p&gt;
&lt;h3 id=&#34;3-skills给-agent-装上的能力包&#34;&gt;3. Skills：给 Agent 装上的能力包
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Skills&lt;/code&gt; 可以理解成 &lt;code&gt;Agent&lt;/code&gt; 的功能模块或操作说明。&lt;/p&gt;
&lt;p&gt;同一个 &lt;code&gt;Agent&lt;/code&gt;，装上不同的 &lt;code&gt;Skills&lt;/code&gt;，就能表现出不同的专长。比如有的偏文案生成，有的偏数据整理，有的偏代码处理。它们有点像手机里的 App，也有点像一套套可复用的工作流程。&lt;/p&gt;
&lt;p&gt;所以很多时候，不是模型突然“变聪明”了，而是它背后多了一组明确的规则、工具和步骤。&lt;/p&gt;
&lt;h3 id=&#34;4-mcpai-连接外部工具的统一接口&#34;&gt;4. MCP：AI 连接外部工具的统一接口
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;MCP&lt;/code&gt; 全称是 &lt;code&gt;Model Context Protocol&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;如果用生活里的比喻，它有点像 AI 世界里的 &lt;code&gt;Type-C&lt;/code&gt; 接口。以前模型想接不同工具，往往要一套一套单独对接；有了统一协议之后，接入方式会更标准，也更容易复用。&lt;/p&gt;
&lt;p&gt;对普通用户来说，最值得记住的一点是：&lt;code&gt;MCP&lt;/code&gt; 解决的不是“模型会不会回答”，而是“模型怎么安全、稳定地连上外部工具和资源”。&lt;/p&gt;
&lt;h3 id=&#34;5-抽卡ai-生成结果带有随机性&#34;&gt;5. 抽卡：AI 生成结果带有随机性
&lt;/h3&gt;&lt;p&gt;“抽卡”这个说法常见于 &lt;code&gt;AI&lt;/code&gt; 绘图、视频生成和内容创作场景。&lt;/p&gt;
&lt;p&gt;意思很简单：同样的提示词、同样的大方向，每次生成出来的结果也可能不一样。有时候效果惊艳，有时候明显翻车，所以很多人会把反复尝试生成结果这件事，形容成像游戏里抽卡。&lt;/p&gt;
&lt;p&gt;它提醒我们的其实是同一件事：AI 生成不是固定公式，而是带概率和波动的过程。&lt;/p&gt;
&lt;h3 id=&#34;6-api应用和模型之间的连接方式&#34;&gt;6. API：应用和模型之间的连接方式
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;API&lt;/code&gt; 全称是 &lt;code&gt;Application Programming Interface&lt;/code&gt;，也就是应用程序接口。&lt;/p&gt;
&lt;p&gt;它可以理解成程序之间沟通的标准入口。你在自己的应用、脚本或编辑器里调用模型服务，本质上就是通过 &lt;code&gt;API&lt;/code&gt; 发请求、拿结果。&lt;/p&gt;
&lt;p&gt;如果把模型服务比作一家餐厅，那么：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;菜单像 &lt;code&gt;API&lt;/code&gt; 文档&lt;/li&gt;
&lt;li&gt;点菜像发起 &lt;code&gt;API&lt;/code&gt; 请求&lt;/li&gt;
&lt;li&gt;后厨出餐像模型返回结果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以很多工具表面上看起来不一样，底层其实都是在调用某种 &lt;code&gt;API&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;7-多模态ai-不只处理文字&#34;&gt;7. 多模态：AI 不只处理文字
&lt;/h3&gt;&lt;p&gt;“多模态”说的是 AI 不再只会读写文本，而是可以同时处理多种信息形态。&lt;/p&gt;
&lt;p&gt;比如它可以看图、听语音、理解视频、生成图片，甚至做实时语音和视频交互。和早期只会处理文字的模型相比，多模态模型更像是在同时拥有“看、听、说、写”的能力。&lt;/p&gt;
&lt;p&gt;这也是为什么现在很多 AI 产品的交互方式，已经不再局限于一个输入框。&lt;/p&gt;
&lt;h3 id=&#34;8-rag先检索资料再组织答案&#34;&gt;8. RAG：先检索资料，再组织答案
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;RAG&lt;/code&gt; 是 &lt;code&gt;Retrieval-Augmented Generation&lt;/code&gt;，通常译作检索增强生成。&lt;/p&gt;
&lt;p&gt;它适合解决一个很现实的问题：模型本身的训练数据有时间边界，也不知道你企业内部的新文档、客服记录和业务规则。&lt;code&gt;RAG&lt;/code&gt; 的思路就是，先从指定资料里把相关内容找出来，再结合这些资料生成回答。&lt;/p&gt;
&lt;p&gt;它的价值通常体现在三点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;答案更容易贴近真实资料&lt;/li&gt;
&lt;li&gt;可以追溯回答依据来自哪里&lt;/li&gt;
&lt;li&gt;新文档加入后，知识可随时更新&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以很多企业知识库、智能客服和内部问答系统，底层都会用到 &lt;code&gt;RAG&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;9-aigcai-生成内容的总称&#34;&gt;9. AIGC：AI 生成内容的总称
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;AIGC&lt;/code&gt; 是 &lt;code&gt;AI Generated Content&lt;/code&gt; 的缩写。&lt;/p&gt;
&lt;p&gt;它不是某一个单独工具，而是一个总称，泛指 AI 生成出来的内容，包括文本、图片、音频、视频等各种形式。你看到的 AI 写稿、AI 制图、AI 做短视频、AI 配音，都可以放进 &lt;code&gt;AIGC&lt;/code&gt; 这个大框里理解。&lt;/p&gt;
&lt;p&gt;这个词真正重要的地方在于，它描述的是一种内容生产方式，而不是某个具体模型。&lt;/p&gt;
&lt;h3 id=&#34;10-token模型处理内容时的计量单位&#34;&gt;10. Token：模型处理内容时的计量单位
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Token&lt;/code&gt; 可以理解成模型处理文本时使用的基础计量单位。&lt;/p&gt;
&lt;p&gt;它不完全等于“一个字”或者“一个单词”，但在使用层面上，你可以先把它当成模型计算和计费时的通用单位。你的输入会消耗 &lt;code&gt;Token&lt;/code&gt;，模型的输出会消耗 &lt;code&gt;Token&lt;/code&gt;，上下文里保留的历史内容同样会占用 &lt;code&gt;Token&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;所以为什么很多模型服务都在强调上下文长度、成本控制和压缩提示词，本质上都和 &lt;code&gt;Token&lt;/code&gt; 有关。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>RAGFlow 项目整理：开源 RAG 引擎的功能与使用方法</title>
        <link>https://knightli.com/2026/04/15/ragflow-rag-engine-guide/</link>
        <pubDate>Wed, 15 Apr 2026 22:09:25 +0800</pubDate>
        
        <guid>https://knightli.com/2026/04/15/ragflow-rag-engine-guide/</guid>
        <description>&lt;p&gt;&lt;code&gt;RAGFlow&lt;/code&gt; 是 &lt;code&gt;infiniflow&lt;/code&gt; 开源的 RAG（Retrieval-Augmented Generation，检索增强生成）引擎。它的目标不是只做一个“上传文件然后问答”的知识库外壳，而是把文档解析、切分、检索、重排、引用溯源、模型配置、Agent 能力和 API 集成放进一套完整工作流里。&lt;/p&gt;
&lt;p&gt;如果你正在做企业知识库、文档问答、客服助手、内部资料检索，或者想给 LLM 加一层更可靠的上下文来源，RAGFlow 属于值得重点看的开源方案。&lt;/p&gt;
&lt;h2 id=&#34;01-ragflow-解决什么问题&#34;&gt;01 RAGFlow 解决什么问题
&lt;/h2&gt;&lt;p&gt;普通 RAG 系统最容易遇到的问题有三个：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;文档解析质量不稳定，尤其是 PDF、扫描件、表格、图片、复杂排版文档。&lt;/li&gt;
&lt;li&gt;切分策略不透明，命中结果看起来像“搜到了”，但上下文并不完整。&lt;/li&gt;
&lt;li&gt;回答缺少可靠引用，用户很难判断答案来自哪里。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;RAGFlow 的重点正好放在这些地方。项目 README 里强调了 &lt;code&gt;Deep document understanding&lt;/code&gt;、模板化切分、可视化 chunk、引用溯源和多路召回加重排。换句话说，它更关注“高质量数据进入，高质量答案出来”，而不是只把向量数据库和聊天框接起来。&lt;/p&gt;
&lt;h2 id=&#34;02-核心功能&#34;&gt;02 核心功能
&lt;/h2&gt;&lt;h3 id=&#34;1-深度文档理解&#34;&gt;1. 深度文档理解
&lt;/h3&gt;&lt;p&gt;RAGFlow 支持从复杂格式的非结构化数据中抽取知识。README 中列出的数据类型包括 Word、PPT、Excel、TXT、图片、扫描件、结构化数据、网页等。&lt;/p&gt;
&lt;p&gt;这对企业知识库很关键。真实资料通常不是干净的 Markdown，而是合同、报告、表格、扫描 PDF、产品手册、截图和网页混在一起。如果解析质量不够，后面的向量检索和 LLM 回答都会被拖垮。&lt;/p&gt;
&lt;h3 id=&#34;2-模板化切分&#34;&gt;2. 模板化切分
&lt;/h3&gt;&lt;p&gt;RAGFlow 提供模板化 chunking。它的价值在于：切分策略不是黑盒，可以根据文档类型选择更合适的方式。&lt;/p&gt;
&lt;p&gt;例如普通文章、论文、表格、问答文档、图片说明、合同条款，对 chunk 的粒度和边界要求都不一样。模板化切分可以减少“句子被切碎”“表格上下文丢失”“标题和正文分离”这类问题。&lt;/p&gt;
&lt;h3 id=&#34;3-可追溯引用&#34;&gt;3. 可追溯引用
&lt;/h3&gt;&lt;p&gt;RAGFlow 强调 grounded citations，也就是回答要能追溯到来源片段。它还提供 chunk 可视化，方便人工干预解析和切分结果。&lt;/p&gt;
&lt;p&gt;这点对生产环境尤其重要。企业内部问答不是只要“看起来像答案”，还要能查证来源。对于政策、合规、财务、技术文档、客户支持资料来说，引用和溯源几乎是刚需。&lt;/p&gt;
&lt;h3 id=&#34;4-自动化-rag-工作流&#34;&gt;4. 自动化 RAG 工作流
&lt;/h3&gt;&lt;p&gt;RAGFlow 把 RAG 流程做成相对完整的链路：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建知识库&lt;/li&gt;
&lt;li&gt;上传或同步数据&lt;/li&gt;
&lt;li&gt;解析文档&lt;/li&gt;
&lt;li&gt;查看和干预 chunk&lt;/li&gt;
&lt;li&gt;配置 LLM 与 embedding 模型&lt;/li&gt;
&lt;li&gt;执行多路召回与重排&lt;/li&gt;
&lt;li&gt;构建聊天助手&lt;/li&gt;
&lt;li&gt;通过 API 集成到业务系统&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这让它更像一个 RAG 平台，而不是一个单点库。对于团队来说，UI、可视化和 API 都有价值：非研发人员可以维护知识库，研发人员可以把能力接入已有系统。&lt;/p&gt;
&lt;h3 id=&#34;5-agentmcp-与工作流能力&#34;&gt;5. Agent、MCP 与工作流能力
&lt;/h3&gt;&lt;p&gt;RAGFlow 的近期更新里已经包含 Agentic workflow、MCP、Agent Memory、代码执行组件等内容。这说明它不只想做传统知识库问答，也在向 Agent 场景延伸。&lt;/p&gt;
&lt;p&gt;典型方向是：Agent 在执行任务时，可以把 RAGFlow 作为可靠的企业知识上下文层；需要查资料时从知识库召回，生成回答时保留引用，必要时再组合工具调用或工作流。&lt;/p&gt;
&lt;h2 id=&#34;03-基本使用流程&#34;&gt;03 基本使用流程
&lt;/h2&gt;&lt;p&gt;按照官方快速开始文档，RAGFlow 的常见使用路径可以概括为下面几步。&lt;/p&gt;
&lt;h3 id=&#34;1-准备运行环境&#34;&gt;1. 准备运行环境
&lt;/h3&gt;&lt;p&gt;官方 README 给出的基础要求是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU &amp;gt;= 4 cores&lt;/li&gt;
&lt;li&gt;RAM &amp;gt;= 16 GB&lt;/li&gt;
&lt;li&gt;Disk &amp;gt;= 50 GB&lt;/li&gt;
&lt;li&gt;Docker &amp;gt;= 24.0.0&lt;/li&gt;
&lt;li&gt;Docker Compose &amp;gt;= v2.26.1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果要使用代码执行器的沙箱功能，还需要 &lt;code&gt;gVisor&lt;/code&gt;。另外要注意，官方 Docker 镜像主要面向 x86 平台；如果是 ARM64，需要按官方说明自行构建镜像。&lt;/p&gt;
&lt;h3 id=&#34;2-拉取项目&#34;&gt;2. 拉取项目
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/infiniflow/ragflow.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ragflow/docker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;3-检查-vmmax_map_count&#34;&gt;3. 检查 &lt;code&gt;vm.max_map_count&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;RAGFlow 部署会依赖 Elasticsearch / OpenSearch 这类组件，因此 Linux 上通常需要确认：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl vm.max_map_count
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果数值低于 &lt;code&gt;262144&lt;/code&gt;，可以临时设置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sysctl -w vm.max_map_count&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;262144&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果希望重启后仍然生效，需要写入 &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;4-使用-docker-compose-启动&#34;&gt;4. 使用 Docker Compose 启动
&lt;/h3&gt;&lt;p&gt;CPU 模式可以直接启动：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose -f docker-compose.yml up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果要用 GPU 加速 DeepDoc 任务，README 中给出的方式是在 &lt;code&gt;.env&lt;/code&gt; 中启用 &lt;code&gt;DEVICE=gpu&lt;/code&gt; 后再启动：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;1i DEVICE=gpu&amp;#39;&lt;/span&gt; .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose -f docker-compose.yml up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;启动后查看日志：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker logs -f docker-ragflow-cpu-1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;看到服务启动完成后，再通过浏览器访问服务器地址。默认配置下，通常可以直接访问：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://IP_OF_YOUR_MACHINE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;5-配置模型-api-key&#34;&gt;5. 配置模型 API Key
&lt;/h3&gt;&lt;p&gt;RAGFlow 需要配置 LLM 和 embedding 模型。README 提到可以在 &lt;code&gt;service_conf.yaml.template&lt;/code&gt; 中选择默认 LLM factory，并更新对应的 &lt;code&gt;API_KEY&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;实际使用时，你需要根据自己的模型供应商配置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;聊天模型&lt;/li&gt;
&lt;li&gt;embedding 模型&lt;/li&gt;
&lt;li&gt;rerank 模型&lt;/li&gt;
&lt;li&gt;多模态模型（如果要理解 PDF / DOCX 中的图片）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;6-创建知识库并上传文档&#34;&gt;6. 创建知识库并上传文档
&lt;/h3&gt;&lt;p&gt;服务启动后，典型操作是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;登录 Web UI。&lt;/li&gt;
&lt;li&gt;创建 dataset / knowledge base。&lt;/li&gt;
&lt;li&gt;上传文档或配置数据源同步。&lt;/li&gt;
&lt;li&gt;等待解析完成。&lt;/li&gt;
&lt;li&gt;查看 chunk 结果，必要时人工调整。&lt;/li&gt;
&lt;li&gt;创建聊天助手，选择知识库。&lt;/li&gt;
&lt;li&gt;测试问答效果和引用来源。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果要接入业务系统，可以继续使用 RAGFlow 的 API 或 SDK，把知识库检索和聊天能力接到自己的应用里。&lt;/p&gt;
&lt;h2 id=&#34;04-适合哪些场景&#34;&gt;04 适合哪些场景
&lt;/h2&gt;&lt;p&gt;RAGFlow 适合这些需求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;企业内部知识库问答&lt;/li&gt;
&lt;li&gt;产品手册、技术文档、FAQ 检索&lt;/li&gt;
&lt;li&gt;客服助手和售前支持助手&lt;/li&gt;
&lt;li&gt;合同、报告、制度文件的可追溯问答&lt;/li&gt;
&lt;li&gt;多格式资料统一整理&lt;/li&gt;
&lt;li&gt;需要 UI 维护知识库，同时又要 API 集成的团队&lt;/li&gt;
&lt;li&gt;想把 RAG 能力作为 Agent 上下文层的系统&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它尤其适合文档格式复杂、需要引用溯源、希望人工干预解析结果的场景。&lt;/p&gt;
&lt;h2 id=&#34;05-使用时要注意什么&#34;&gt;05 使用时要注意什么
&lt;/h2&gt;&lt;p&gt;第一，RAGFlow 不是轻量脚本。它对机器资源有要求，官方建议至少 4 核 CPU、16GB 内存和 50GB 磁盘。如果只是给少量 Markdown 做问答，可能没必要上这么完整的平台。&lt;/p&gt;
&lt;p&gt;第二，文档质量仍然重要。RAGFlow 能改善解析和切分，但不能让低质量、过期、互相矛盾的资料自动变得可靠。真正上线前，知识库治理仍然要做。&lt;/p&gt;
&lt;p&gt;第三，模型配置会直接影响效果。embedding、rerank、聊天模型、多模态模型的选择，都会影响召回和回答质量。RAGFlow 提供了工作流，但效果仍然要靠数据、模型和参数一起调。&lt;/p&gt;
&lt;p&gt;第四，生产环境要关注权限和数据安全。企业知识库里往往有内部资料，部署方式、访问控制、日志、API Key、模型供应商数据策略都要提前设计。&lt;/p&gt;
&lt;h2 id=&#34;06-简短判断&#34;&gt;06 简短判断
&lt;/h2&gt;&lt;p&gt;RAGFlow 的优势在于把 RAG 里最麻烦的部分做成了平台化能力：复杂文档解析、可解释切分、引用溯源、多路召回、重排、模型配置、Web UI、API 和 Agent 扩展。&lt;/p&gt;
&lt;p&gt;如果你要做的是可验证、可维护、可接入业务系统的企业知识库，RAGFlow 比“向量库 + 简单聊天 UI”的方案更完整。反过来，如果只是个人小规模资料问答，或者数据格式非常简单，轻量 RAG 框架可能更省资源。&lt;/p&gt;
&lt;h2 id=&#34;相关链接&#34;&gt;相关链接
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;GitHub 项目：&lt;a class=&#34;link&#34; href=&#34;https://github.com/infiniflow/ragflow&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/infiniflow/ragflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;官方文档：&lt;a class=&#34;link&#34; href=&#34;https://ragflow.io/docs/dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://ragflow.io/docs/dev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;在线 Demo：&lt;a class=&#34;link&#34; href=&#34;https://cloud.ragflow.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://cloud.ragflow.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
