createGraphRAGTool()
createGraphRAGTool()
は、ドキュメント間の意味的な関係のグラフを構築することで RAG を強化するツールを作成します。内部では GraphRAG
システムを用いてグラフベースの検索を実現し、直接的な類似性と、関係の連結によるつながりの両面から関連コンテンツを見つけます。
使用例
import { openai } from "@ai-sdk/openai";
import { createGraphRAGTool } from "@mastra/rag";
const graphTool = createGraphRAGTool({
vectorStoreName: "pinecone",
indexName: "docs",
model: openai.embedding("text-embedding-3-small"),
graphOptions: {
dimension: 1536,
threshold: 0.7,
randomWalkSteps: 100,
restartProb: 0.15,
},
});
パラメータ
パラメータ要件: ほとんどのフィールドは作成時にデフォルトとして設定できます。
一部のフィールドは、実行時コンテキストまたは入力を通じて実行時に上書きできます。必須フィールドが作成時と実行時の両方で欠落している場合はエラーになります。なお、model
、id
、description
は作成時にのみ設定できます。
id?:
string
ツールのカスタム ID。デフォルト: 'GraphRAG {vectorStoreName} {indexName} Tool'。(作成時のみ設定)
description?:
string
ツールのカスタム説明。デフォルト: 'ナレッジベース内の情報間の関係にアクセスして分析し、つながりやパターンに関する複雑な質問に回答します。'(作成時のみ設定)
vectorStoreName:
string
クエリ対象のベクトルストア名。(作成時に設定、または実行時に上書き可)
indexName:
string
ベクトルストア内のインデックス名。(作成時に設定、または実行時に上書き可)
model:
EmbeddingModel
ベクトル検索に使用する埋め込みモデル。(作成時のみ設定)
enableFilter?:
boolean
= false
メタデータに基づく結果のフィルタリングを有効化。(作成時のみ設定。ただし、実行時コンテキストでフィルターが指定された場合は自動的に有効化)
includeSources?:
boolean
= true
結果に取得オブジェクト一式を含める。(作成時に設定、または実行時に上書き可)
graphOptions?:
GraphOptions
= Default graph options
グラフベースの検索設定
providerOptions?:
Record<string, Record<string, any>>
埋め込みモデル向けのプロバイダー固有オプション(例: outputDimensionality)。**重要**: AI SDK の EmbeddingModelV2 モデルでのみ有効。V1 モデルではモデル作成時にオプションを設定してください。
GraphOptions
dimension?:
number
= 1536
埋め込みベクトルの次元数
threshold?:
number
= 0.7
ノード間にエッジを作成する際の類似度しきい値(0〜1)
randomWalkSteps?:
number
= 100
グラフ走査におけるランダムウォークのステップ数。(作成時に設定、または実行時に上書き可)
restartProb?:
number
= 0.15
クエリノードからランダムウォークを再開する確率。(作成時に設定、または実行時に上書き可)
返り値
このツールは次のオブジェクトを返します:
relevantContext:
string
グラフベースのランキングで取得した、最も関連性の高いドキュメントチャンクを結合したテキスト
sources:
QueryResult[]
取得結果の完全なオブジェクト配列。各オブジェクトには、元のドキュメント、チャンク、類似度スコアを参照するために必要な情報がすべて含まれます。
QueryResult オブジェクトの構造
{
id: string; // 一意のチャンク/ドキュメント識別子
metadata: any; // すべてのメタデータフィールド(ドキュメントIDなど)
vector: number[]; // 埋め込みベクトル(利用可能な場合)
score: number; // この取得における類似度スコア
document: string; // チャンク/ドキュメントの全文(利用可能な場合)
}
デフォルトのツール説明
デフォルトの説明では、以下に重点を置いています:
- 文書間の関係を分析する
- パターンや関連性を見つける
- 複雑なクエリに回答する
進んだ例
const graphTool = createGraphRAGTool({
vectorStoreName: "pinecone",
indexName: "docs",
model: openai.embedding("text-embedding-3-small"),
graphOptions: {
dimension: 1536,
threshold: 0.8, // 類似度のしきい値を高める
randomWalkSteps: 200, // 探索ステップを増やす
restartProb: 0.2, // 再開始確率を高める
},
});
カスタム説明の例
const graphTool = createGraphRAGTool({
vectorStoreName: "pinecone",
indexName: "docs",
model: openai.embedding("text-embedding-3-small"),
description:
"当社の履歴データにおける複雑なパターンやつながりを見つけるために、ドキュメント間の関係を分析します",
});
この例は、関係分析というツールの本来の目的を保ちつつ、特定のユースケースに合わせてツールの説明をカスタマイズする方法を示しています。
例: ランタイムコンテキストの使用
const graphTool = createGraphRAGTool({
vectorStoreName: "pinecone",
indexName: "docs",
model: openai.embedding("text-embedding-3-small"),
});
ランタイムコンテキストを使う場合は、必要なパラメータを実行時にランタイムコンテキスト経由で指定します。
const runtimeContext = new RuntimeContext<{
vectorStoreName: string;
indexName: string;
topK: number;
filter: any;
}>();
runtimeContext.set("vectorStoreName", "my-store");
runtimeContext.set("indexName", "my-index");
runtimeContext.set("topK", 5);
runtimeContext.set("filter", { category: "docs" });
runtimeContext.set("randomWalkSteps", 100);
runtimeContext.set("restartProb", 0.15);
const response = await agent.generate(
"Find documentation from the knowledge base.",
{
runtimeContext,
},
);
ランタイムコンテキストの詳細については、以下を参照してください。