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
= デフォルトのグラフオプション
グラフベース取得の設定
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,
},
);
ランタイムコンテキストの詳細は、次をご覧ください。