<?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/ja/tags/rag/</link>
        <description>Recent content in RAG on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Wed, 20 May 2026 23:51:37 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/rag/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>PageIndexとは？ベクトルDBを使わない推論型RAG文書インデックスを解説</title>
        <link>https://knightli.com/ja/2026/05/20/vectifyai-pageindex-vectorless-rag/</link>
        <pubDate>Wed, 20 May 2026 23:51:37 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/20/vectifyai-pageindex-vectorless-rag/</guid>
        <description>&lt;p&gt;&lt;code&gt;VectifyAI/PageIndex&lt;/code&gt; は興味深いRAGプロジェクトです。「また別のベクトルDBを作る」ことから始めるのではなく、長文書をまず目次のようなツリー構造に整理し、そのツリーに沿ってLLMに推論型検索を行わせます。&lt;/p&gt;
&lt;p&gt;プロジェクトURL：&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;、つまりベクトルDBを使わない、推論ベースのRAGです。&lt;/p&gt;
&lt;h2 id=&#34;何を解決しようとしているのか&#34;&gt;何を解決しようとしているのか
&lt;/h2&gt;&lt;p&gt;従来のRAGでよくある流れは、文書をチャンク化し、ベクトル化し、ベクトルDBに格納し、類似度検索で断片を取得するというものです。この方法はシンプルで汎用的、かつ成熟していますが、長い専門文書ではいくつかの問題が起きやすくなります。&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;これはベクトルDBに価値がないという意味ではありません。より正確には、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;このプロジェクトには、セルフホストしたPageIndexとOpenAI Agents SDKを使う agentic vectorless RAG の例もあります。オプション依存関係を入れて実行します。&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が文書ツリーを使って検索する」段階へ進めていることです。企業ナレッジベース、財務報告Q&amp;amp;A、規制文書Q&amp;amp;A、技術文書Agentを作っているなら、READMEだけを読むより、この例を一度動かす価値があります。&lt;/p&gt;
&lt;h2 id=&#34;クラウドサービスmcpapi&#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のQ&amp;amp;A。&lt;/li&gt;
&lt;li&gt;財務報告、年次報告、目論見書、規制文書の分析。&lt;/li&gt;
&lt;li&gt;法律・コンプライアンス文書検索。&lt;/li&gt;
&lt;li&gt;技術マニュアルQ&amp;amp;A。&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;第三に、ベクトルDBなしはゼロコストを意味しません。ツリー構築自体もモデル呼び出しと時間を消費します。大規模文書コレクションでは特にそうです。&lt;/p&gt;
&lt;p&gt;第四に、PageIndexは文書構造インデックスと推論検索のフレームワークに近く、すべての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;企業文書Q&amp;amp;A、財務報告分析、規制文書検索、技術マニュアルAgentを作っているなら、PageIndexは新しいRAGアーキテクチャの参考になります。最初からすべてを細かく切ってベクトルDBに入れるのではなく、まず文書に構造を与え、その構造に沿ってモデルに推論させるという考え方です。&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/ja/2026/05/17/openkb-llm-knowledge-base/</link>
        <pubDate>Sun, 17 May 2026 17:15:08 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/05/17/openkb-llm-knowledge-base/</guid>
        <description>&lt;p&gt;OpenKB は、VectifyAI が公開しているオープンソースの LLM ナレッジベースツールです。&lt;/p&gt;
&lt;p&gt;これは、ドキュメントをチャンク化し、ベクトル化し、問い合わせ時にコンテキストを組み直すだけの従来型 RAG システムではありません。OpenKB はまず生のドキュメントを構造化された 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 で注目したい点は 3 つあります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ナレッジベースを専用データベースに閉じ込めず、通常の Markdown ファイルとして出力する。&lt;/li&gt;
&lt;li&gt;PageIndex で長い PDF を処理し、ベクトル DB なしの長文ドキュメント検索を重視している。&lt;/li&gt;
&lt;li&gt;「知識のコンパイル」を重視し、毎回ゼロから検索するのではなく、LLM が要約、概念ページ、相互リンクを生成する。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;そのため OpenKB は、論文読解、プロジェクト文書、社内資料、技術仕様、製品調査、個人ナレッジベースのように、資料を長期的に蓄積する場面に向いています。&lt;/p&gt;
&lt;p&gt;一方で万能の代替ではありません。高並行のオンライン Q&amp;amp;A、複雑な権限管理、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;この流れは成熟しており、Q&amp;amp;A システムにも向いています。ただし、知識そのものは本当の意味では蓄積されません。質問のたびに、関連片を探し、コンテキストを組み立て、回答を生成し直すことになります。&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;その結果、新しいドキュメントを 1 つ追加することは、単に検索可能なファイルを 1 つ増やすことではありません。十数個の 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 は長い PDF の処理に PageIndex を使います。プロジェクト説明によると、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; より向いています。セッションの再開、一覧、削除に対応し、チャット内では &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; のような slash commands も使えます。&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 は単なる Q&amp;amp;A ツールではなく、個人やチームの知識整理パイプラインにもなります。&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、Web 資料の構造化。&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 は、読みやすく編集しやすく長期的に蓄積できる知識レイヤーを作るのに向いています。将来的にオンライン Q&amp;amp;A を作る場合でも、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;この方向性はすべての Q&amp;amp;A システムに合うわけではありませんが、長期的な蓄積が必要な知識作業には向いています。Markdown ファイル、Obsidian 互換、PageIndex による長文処理、複数モデル対応、CLI ワークフローを組み合わせると、開発者や調査型ユーザーにとって実用的なナレッジベースツールになります。&lt;/p&gt;
&lt;p&gt;大量の PDF、レポート、Web ページ、論文、プロジェクト文書を持っているなら、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/ja/2026/05/12/computer-terms-in-plain-language/</link>
        <pubDate>Tue, 12 May 2026 22:15:34 +0800</pubDate>
        
        <guid>https://knightli.com/ja/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 を中心に回っています。ユーザー管理、記事管理、注文管理、在庫管理は業務としては違って見えますが、内部ではフォームと 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;Web ページでは画像やスクリプトをキャッシュできます。遅いデータベースクエリでは人気の結果を 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;たとえばユーザーが動画をアップロードしても、変換がすぐ終わるとは限りません。システムはタスクをキューに入れ、バックグラウンドサービスで後から処理できます。SMS 送信、メール送信、レポート生成、注文コールバック処理にもよく使われます。&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;rpcrestwebhookシステム同士の話し方&#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; は逆方向の通知です。こちらが「終わった？」と何度も聞くのではなく、相手が処理完了後にこちらの URL へ通知します。&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;dockercontainerkubernetesパッケージ化実行配置&#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;平易に言えば、プログラムと依存環境をまとめてパッケージ化し、別のマシンでもできるだけ同じように動かす仕組みです。「自分の PC では動くのにサーバーでは動かない」問題を減らします。&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;AI 文脈での &lt;code&gt;Agent&lt;/code&gt; は、しばしばエージェントや智能体と呼ばれます。&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;Zhihu 回答：&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/ja/2026/05/04/gemini-embedding-2-multimodal-rag/</link>
        <pubDate>Mon, 04 May 2026 06:01:10 +0800</pubDate>
        
        <guid>https://knightli.com/ja/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 以上の言語をサポートする。1 回のリクエストで処理できる内容は次の通り。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最大 8,192 text tokens&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 が必要で、集約された 1 つのベクトルでは困る場合は 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 が検索目的に合いやすくなる。たとえば、質問応答、ファクトチェック、コード検索、検索結果には異なる prefix を使える。&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;この prefix は非対称検索に適している。ユーザーのクエリは短く、ドキュメントは長いことが多い。&lt;code&gt;query&lt;/code&gt; と &lt;code&gt;document&lt;/code&gt; をタスクに合わせて別々に整形すると、短い検索語と長い文書のマッチングを改善できる。&lt;/p&gt;
&lt;p&gt;原文では 2 つの導入例が紹介されている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Harvey は法律検索ベンチマークで、以前の embedding と比べて Recall@20 precision が 3% 向上した。&lt;/li&gt;
&lt;li&gt;Supermemory は Recall@1 の検索精度が 40% 向上し、記憶、インデックス、検索、Q&amp;amp;A パイプラインに利用している。&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 は、画像検索、画像とテキストを組み合わせた検索、商品識別にも使いやすい。原文では、URBN の衣料レンタル会社 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; に同じ task prefix を使える。&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 がある場合は、まず次の 2 種類の改善から始めるとよい。&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、research agent、customer support 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/ja/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/ja/2026/04/23/compare-openai-bge-e5-gte-jina-embedding-models/</guid>
        <description>&lt;p&gt;RAG、セマンティック検索、ナレッジベース検索を始めると、多くの人が最初に同じ疑問にぶつかります。埋め込みモデルはたくさんあるけれど、結局どれを選べばいいのか、ということです。&lt;/p&gt;
&lt;p&gt;代表的なモデルは大きく二つに分けられます。一つは中国語・英語・多言語タスクを広くカバーする汎用テキスト埋め込みです。もう一つは中国語向けの用途により適していて、中国語検索、中国語 QA、中国語ナレッジベースでの性能を重視したものです。&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;1-まずは種類ごとに見る&#34;&gt;1. まずは種類ごとに見る
&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 はより汎用的で、現代的な実装シナリオに寄った選択肢です。多言語検索、長文、Web コンテンツ処理などでよく使われます。「一つのモデルでより多くのタスク形態をカバーしたい」という文脈でよく名前が挙がり、embedding 層を統一したいチームに向いています。&lt;/p&gt;
&lt;p&gt;Web ページ、文書、多言語テキストなど、データソースが混在しているなら、Jina は試す価値のある候補です。&lt;/p&gt;
&lt;h2 id=&#34;2-中国語シナリオでよく使われるモデル&#34;&gt;2. 中国語シナリオでよく使われるモデル
&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;3-これらのモデルを並べて考える&#34;&gt;3. これらのモデルを並べて考える
&lt;/h2&gt;&lt;h3 id=&#34;1-中国語性能だけを見る場合&#34;&gt;1. 中国語性能だけを見る場合
&lt;/h3&gt;&lt;p&gt;中国語ナレッジベース、中国語 QA、中国語文書検索であれば、まず 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;中国語、英語、製品ドキュメント、Web コピー、ユーザー問い合わせが同じ基盤に入るなら、多言語モデルの方が後からの改修コストをかなり減らせます。&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;4-各モデルはどんなタスクに向くか&#34;&gt;4. 各モデルはどんなタスクに向くか
&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;多言語、Web、汎用テキストタスク&lt;/td&gt;
          &lt;td&gt;embedding 層を統一したいときに試す価値がある&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;5-実際の選定をどう進めるか&#34;&gt;5. 実際の選定をどう進めるか
&lt;/h2&gt;&lt;p&gt;論文を書くのではなく、実際にシステムを作るなら、選定手順はもっとシンプルで大丈夫です。&lt;/p&gt;
&lt;h3 id=&#34;シナリオ-1-中国語ナレッジベース&#34;&gt;シナリオ 1: 中国語ナレッジベース
&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;シナリオ-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;/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;シナリオ-3-今は中国語中心だが将来的に多言語へ広げる可能性がある&#34;&gt;シナリオ 3: 今は中国語中心だが、将来的に多言語へ広げる可能性がある
&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;6-最後に大事なのはランキング1位ではない&#34;&gt;6. 最後に大事なのは「ランキング1位」ではない
&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/ja/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/ja/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;この記事では、よくある入門向けの説明の流れに沿って、AI で頻出する 10 個の用語を覚えやすい形にまとめます。学術的に厳密に説明することよりも、日常的な AI の話題についていける基本イメージを作ることを目的にしています。&lt;/p&gt;
&lt;h2 id=&#34;10-個の代表的な-ai-用語は何を意味するのか&#34;&gt;10 個の代表的な AI 用語は何を意味するのか
&lt;/h2&gt;&lt;h3 id=&#34;1-agent-会話だけでなく実行もする-ai&#34;&gt;1. Agent: 会話だけでなく実行もする AI
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Agent&lt;/code&gt; は、実際に作業を進めてくれる AI アシスタントだと考えると分かりやすいです。&lt;/p&gt;
&lt;p&gt;普通のチャットボットは、質問すると答えるという形にとどまりがちです。&lt;code&gt;Agent&lt;/code&gt; はそこから一歩進み、タスクを分解し、手順を組み立て、ツールを呼び出し、最後に結果を返します。資料整理、調査、文書生成のような依頼でも、助言だけで終わらず、一連の動作をつないで実行することがあります。&lt;/p&gt;
&lt;p&gt;だから &lt;code&gt;Agent&lt;/code&gt; の本質は、話せるかどうかではなく、動けるかどうかにあります。&lt;/p&gt;
&lt;h3 id=&#34;2-openclaw-pc-に常駐する-ai-アシスタント&#34;&gt;2. OpenClaw: PC に常駐する AI アシスタント
&lt;/h3&gt;&lt;p&gt;ここでの &lt;code&gt;OpenClaw&lt;/code&gt; は、PC の中に住む AI アシスタントのようなものとして説明されています。&lt;/p&gt;
&lt;p&gt;この種のツールは、デスクトップ操作に近い AI 支援だと考えると分かりやすいです。文字入力を受け取るだけでなく、画面を見たり、ローカルツールを呼び出したり、手順に沿って作業したりすることがあります。一般的な Web チャットと比べると、実際の操作能力がより重視されます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Agent&lt;/code&gt; が実行型 AI という抽象的な概念だとすれば、こうしたデスクトップ型アシスタントは、その考え方の PC 上での具体例だと言えます。&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; を持つかによって得意分野が変わります。文章作成寄りのものもあれば、データ整理向けのものもあり、コード処理に向いたものもあります。スマートフォンのアプリに少し似ていますし、再利用できるワークフロー集にも近いです。&lt;/p&gt;
&lt;p&gt;つまり、モデルそのものが急に賢くなったというより、背後にあるルール、ツール、手順が明確になった結果だと言えます。&lt;/p&gt;
&lt;h3 id=&#34;4-mcp-ai-が外部ツールにつながるための共通方式&#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;&lt;code&gt;マルチモーダル&lt;/code&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;価値が出やすい点は主に 3 つあります。&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 カスタマーサポート、社内 Q&amp;amp;A では &lt;code&gt;RAG&lt;/code&gt; がよく使われます。&lt;/p&gt;
&lt;h3 id=&#34;9-aigc-ai-が作るコンテンツ全体を指す言葉&#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;これは 1 文字や 1 単語と完全に一致するわけではありませんが、実用上は計算量や課金の共通単位として捉えて問題ありません。入力でも &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/ja/2026/04/15/ragflow-rag-engine-guide/</link>
        <pubDate>Wed, 15 Apr 2026 22:09:25 +0800</pubDate>
        
        <guid>https://knightli.com/ja/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;企業向けナレッジベース、ドキュメント Q&amp;amp;A、サポートアシスタント、社内情報検索、あるいは 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;、テンプレート化されたチャンク分割、チャンクの可視化、引用のグラウンディング、多経路検索とリランキングが強調されています。つまり、単にベクトルデータベースとチャット UI をつなぐのではなく、「高品質な入力が高品質な回答につながる」ことを重視しているということです。&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、画像、スキャン文書、構造化データ、Web ページなどがあります。&lt;/p&gt;
&lt;p&gt;これは企業ナレッジベースにとって非常に重要です。現実の資料はきれいな Markdown ではなく、契約書、レポート、表、スキャン PDF、製品マニュアル、スクリーンショット、Web ページが混在していることが多いからです。解析品質が低いと、その後のベクトル検索も 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;たとえば通常の記事、論文、表、Q&amp;amp;A 文書、画像説明、契約条項では、チャンクの粒度や境界の考え方が異なります。テンプレート化された分割により、「文が途中で切れる」「表の文脈が失われる」「見出しと本文が分かれてしまう」といった問題を減らせます。&lt;/p&gt;
&lt;h3 id=&#34;3-追跡可能な引用&#34;&gt;3. 追跡可能な引用
&lt;/h3&gt;&lt;p&gt;RAGFlow は grounded citations を重視しています。つまり、回答がどのソース断片に基づくのかを追えるということです。さらにチャンクの可視化もあり、解析結果やチャンク分割結果を人が確認して調整しやすくなっています。&lt;/p&gt;
&lt;p&gt;これは本番環境では特に重要です。企業内 Q&amp;amp;A は、ただ「それっぽい答え」を返せばよいわけではなく、検証可能である必要があります。ポリシー、コンプライアンス、財務、技術文書、サポート情報のような分野では、引用と追跡性はほぼ必須です。&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;チャンクの確認と調整&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、コード実行コンポーネントなども含まれています。これは、従来型のナレッジベース Q&amp;amp;A にとどまらず、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;DeepDoc を GPU で高速化したい場合、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;チャンク結果を確認し、必要なら調整する。&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;企業内ナレッジベース Q&amp;amp;A&lt;/li&gt;
&lt;li&gt;製品マニュアル、技術文書、FAQ の検索&lt;/li&gt;
&lt;li&gt;カスタマーサポートや営業支援アシスタント&lt;/li&gt;
&lt;li&gt;契約書、レポート、規程文書に対する追跡可能な Q&amp;amp;A&lt;/li&gt;
&lt;li&gt;複数形式の資料を一元的に扱いたい場合&lt;/li&gt;
&lt;li&gt;UI による運用と API 統合の両方が必要なチーム&lt;/li&gt;
&lt;li&gt;Agent のコンテキスト層として RAG を使いたいシステム&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 RAM、50GB ディスクです。少量の Markdown に対して Q&amp;amp;A をしたいだけなら、ここまで大きなプラットフォームは不要かもしれません。&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」より完成度の高い選択肢です。逆に、個人用途の小規模な Q&amp;amp;A や、扱うデータ形式が非常に単純な場合は、より軽量な 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>
