Skip to main content
RAGエンジン(KnowledgeEngine)コンポーネントにより、プラグインはLangBotにナレッジベースの完全なインデックス作成と検索機能を提供できます。ユーザーがLangBotでナレッジベースを作成する際、プラグインが提供するRAGエンジンを選択して、ドキュメントの取り込み、検索、削除を管理できます。また、プラグインを通じてDify、RAGFlow、FastGPTなどの業界先進のナレッジベースサービスとブリッジすることも可能です。

RAGエンジンコンポーネントの追加

1つのプラグインには任意の数のRAGエンジンを追加できます。プラグインディレクトリでコマンドlbp comp KnowledgeEngineを実行し、プロンプトに従ってRAGエンジンの設定を入力します。
これにより、components/knowledge_engine/ディレクトリにsimple_rag.yamlsimple_rag.pyファイルが生成されます。.yamlファイルはRAGエンジンの基本情報と設定スキーマを定義し、.pyファイルはこのエンジンのハンドラです:

マニフェストファイル: RAGエンジン

設定項目フォーマットのリファレンスについては、プラグインマニフェスト設定フォーマットを参照してください。

creation_schema と retrieval_schema

旧バージョンのKnowledgeRetrieverコンポーネントが単一のspec.configを使用していたのとは異なり、KnowledgeEngineは2つの独立したスキーマを使用します:
  • creation_schema: ナレッジベース作成時にユーザーが入力するパラメータ。取り込みと検索時にcreation_settingsを通じてプラグインに渡されます。
  • retrieval_schema: ナレッジベースのクエリ時にユーザーが調整できるパラメータ。retrieval_settingsを通じてプラグインに渡されます。

能力宣言

KnowledgeEngineはサポートする能力を宣言でき、LangBotはこれらの能力宣言に基づいてUIの表示と利用可能な操作を決定します:
利用可能な能力定数:
その他の検索動作(リランキング、ハイブリッド検索など)はプラグインのretrieval_schemaで制御され、能力フラグは不要です。

プラグインハンドラ

以下のコードがデフォルトで生成されます(components/knowledge_engine/<エンジン名>.py)。ingestretrievedelete_documentの3つのコアメソッドを実装する必要があります。完全なコードはlangbot-plugin-demoSimpleKnowledgeEngineで見つけることができます。

ライフサイクルフック

KnowledgeEngineは、ナレッジベースの作成・削除時に呼び出される2つのライフサイクルフックを提供します:

ドキュメントの取り込み

ingestメソッドは、ユーザーがナレッジベースにドキュメントをアップロードした時に呼び出されます:
IngestionContextには以下の情報が含まれます:
FileObjectにはファイルのメタ情報が含まれます:
IngestionResultは取り込み結果を返す必要があります:

ナレッジ検索

retrieveメソッドは、ナレッジベースがクエリされた時に呼び出されます:
RetrievalContextには以下の情報が含まれます:
LangBotホストはretrieval_settingsをプラグインに渡す前にデフォルトのtop_k値(デフォルト5)を自動的に注入します。プラグインはcontext.retrieval_settings.get('top_k', 5)でアクセスできます。filtersフィールドにはretrieval_settingsから抽出されたChromaスタイルのwhereフィルター条件が含まれます。呼び出し元が検索設定でfiltersを指定した場合(例:時間範囲、ファイルタイプ、カスタムメタデータフィールドによるドキュメントフィルタリング)、ホストがこのフィールドを設定し、プラグインは検索時にフィルタリングを適用できます。フィルターが指定されていない場合、このフィールドは空のdictです。
RetrievalResponseは検索結果を返す必要があります:
RetrievalResultEntryは単一の検索結果を表します:

ドキュメントの削除

delete_documentメソッドは、ユーザーがナレッジベースからドキュメントを削除した時に呼び出されます:

ホストRAG API

KnowledgeEngineコンポーネントはself.pluginを通じて、LangBotホストが提供する埋め込みモデル呼び出し、ベクトルデータベース操作、ファイル読み取りなどのRAG関連APIを呼び出すことができます。

埋め込みモデルの呼び出し

ベクトルの書き込み

ベクトル検索

vector_searchが返す各結果はdictで、id(ベクトルID)、score(距離スコア)、metadata(upsert時に提供したメタデータ)の3つのフィールドを含みます。検索結果にテキスト内容が必要な場合は、取り込み時にmetadataにテキストを保存してください。

ベクトルの削除

filtersパラメータはChromaスタイルのwhere構文によるメタデータフィルタリングをサポートしています。複数のトップレベルキーはAND条件として結合されます。サポートされる演算子:$eq$ne$gt$gte$lt$lte$in$nin。例:{"file_id": {"$eq": "abc"}}注意: Chroma、Qdrant、SeekDBは完全なメタデータを保存し、任意のフィールドでフィルタリングできます。MilvusとpgvectorはDB側にtextfile_idchunk_uuidのみ保存しており、それ以外のフィールドでのフィルタリングは無視されます。

RAGエンジンのテスト

作成後、プラグインディレクトリでコマンドlbp runを実行してデバッグを開始します。その後、LangBotで:
  1. 「ナレッジベース」ページに移動
  2. 「ナレッジベースを作成」をクリック
  3. プラグインが提供するRAGエンジンを選択し、エンジンのcreation_schemaに基づいて設定を入力
  4. 作成後、ドキュメントをアップロードして取り込み機能をテスト(エンジンがDOC_INGESTION能力を宣言している場合)
  5. パイプラインにナレッジベースをバインドし、検索機能をテスト