<?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/zh-tw/tags/rag/</link>
        <description>Recent content in RAG on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Wed, 20 May 2026 23:51:37 +0800</lastBuildDate><atom:link href="https://knightli.com/zh-tw/tags/rag/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>PageIndex 是什麼？不用向量庫的推理式 RAG 文件索引解析</title>
        <link>https://knightli.com/zh-tw/2026/05/20/vectifyai-pageindex-vectorless-rag/</link>
        <pubDate>Wed, 20 May 2026 23:51:37 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/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/zh-tw/2026/05/17/openkb-llm-knowledge-base/</link>
        <pubDate>Sun, 17 May 2026 17:15:08 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/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/zh-tw/2026/05/12/computer-terms-in-plain-language/</link>
        <pubDate>Tue, 12 May 2026 22:15:34 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/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/zh-tw/2026/05/04/gemini-embedding-2-multimodal-rag/</link>
        <pubDate>Mon, 04 May 2026 06:01:10 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/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;這種前綴適合非對稱檢索：使用者查詢往往很短，文件內容往往很長。把 &lt;code&gt;query&lt;/code&gt; 和 &lt;code&gt;document&lt;/code&gt; 分別按任務格式整理，可以改善短查詢到長文件之間的匹配。&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 也適合聚類、分類和異常檢測。和前面的問答檢索不同，這些屬於對稱任務，&lt;code&gt;query&lt;/code&gt; 和 &lt;code&gt;document&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;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/zh-tw/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/zh-tw/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/zh-tw/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/zh-tw/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 名詞壓縮成一套更容易記住的意思。目標不是講得多學術，而是先幫你建立一個能跟上日常 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;所以很多企業知識庫、AI 客服和內部問答系統，底層都會用到 &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/zh-tw/2026/04/15/ragflow-rag-engine-guide/</link>
        <pubDate>Wed, 15 Apr 2026 22:09:25 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/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>
