Neo4j GraphRAG コンテキスト プロバイダーは、Neo4j ナレッジ グラフを使用して、エージェント フレームワーク エージェントに検索拡張生成 (RAG) 機能を追加します。 ベクター、フルテキスト、ハイブリッド検索モードをサポートし、オプションのグラフ トラバーサルを使用して、カスタム のCyher クエリを介して関連エンティティで結果を強化します。
エンティティ間のリレーションシップが重要なナレッジ グラフ シナリオの場合、このプロバイダーは分離されたテキスト チャンクではなく関連するサブグラフを取得し、エージェントに応答を生成するための豊富なコンテキストを提供します。
GraphRAG に Neo4j を使用する理由
- グラフの強化された取得: 標準ベクター検索は分離されたチャンクを返します。グラフ トラバーサルは、サーフェス関連エンティティへの接続に従い、エージェントに豊富なコンテキストを提供します。
- 柔軟な検索モード: ベクトルの類似性、キーワード/BM25、グラフトラバーサルを 1 つのクエリで結合します。
- カスタム取得クエリ: Cypher クエリを使用すると、走査するリレーションシップと返すコンテキストを正確に制御できます。
注
Neo4j は、Agent Framework 用に 2 つの個別の統合を提供します。 このプロバイダーは GraphRAG 用であり、既存のナレッジ グラフを検索して、エージェントの応答を地上に送信します。 会話から学習し、時間の経過とともにナレッジ グラフを構築する 永続的なメモリ については、 Neo4j メモリ プロバイダーを参照してください。
前提条件
- ベクターまたはフルテキスト インデックスが構成された Neo4j インスタンス (セルフホステッドまたは Neo4j AuraDB)
- デプロイされたチャット モデルと埋め込みモデルを含む Azure AI Foundry プロジェクト (例:
text-embedding-3-small) - 環境変数セット:
NEO4J_URI、NEO4J_USERNAME、NEO4J_PASSWORD、AZURE_AI_SERVICES_ENDPOINT、AZURE_AI_EMBEDDING_NAME - 構成された Azure CLI 資格情報 (
az login) - .NET 8.0 以降
Installation
dotnet add package Neo4j.AgentFramework.GraphRAG
使用方法
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.OpenAI;
using Microsoft.Extensions.AI;
using Neo4j.AgentFramework.GraphRAG;
using Neo4j.Driver;
// Read connection details from environment variables
var neo4jSettings = new Neo4jSettings();
var azureEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_SERVICES_ENDPOINT")!;
// Create embedding generator
var credential = new DefaultAzureCredential();
var azureClient = new AzureOpenAIClient(new Uri(azureEndpoint), credential);
IEmbeddingGenerator<string, Embedding<float>> embedder = azureClient
.GetEmbeddingClient("text-embedding-3-small")
.AsIEmbeddingGenerator();
// Create Neo4j driver
await using var driver = GraphDatabase.Driver(
neo4jSettings.Uri, AuthTokens.Basic(neo4jSettings.Username, neo4jSettings.Password!));
// Create the Neo4j context provider
await using var provider = new Neo4jContextProvider(driver, new Neo4jContextProviderOptions
{
IndexName = "chunkEmbeddings",
IndexType = IndexType.Vector,
EmbeddingGenerator = embedder,
TopK = 5,
RetrievalQuery = """
MATCH (node)-[:FROM_DOCUMENT]->(doc:Document)
OPTIONAL MATCH (doc)<-[:FILED]-(company:Company)
RETURN node.text AS text, score, doc.title AS title, company.name AS company
ORDER BY score DESC
""",
});
// Create an agent with the provider
AIAgent agent = azureClient
.GetChatClient("gpt-4o")
.AsIChatClient()
.AsBuilder()
.UseAIContextProviders(provider)
.BuildAIAgent(new ChatClientAgentOptions
{
ChatOptions = new ChatOptions
{
Instructions = "You are a financial analyst assistant.",
},
});
var session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("What risks does Acme Corp face?", session));
主要な機能
- インデックス駆動型: 任意の Neo4j ベクターまたはフルテキスト インデックスで動作します
- グラフ トラバーサル: カスタム サイファー クエリは、関連するエンティティを使用して検索結果を強化します
- 検索モード: ベクター (セマンティック類似性)、フルテキスト (キーワード/BM25)、またはハイブリッド (両方を組み合わせたもの)
リソース
前提条件
- ベクターまたはフルテキスト インデックスが構成された Neo4j インスタンス (セルフホステッドまたは Neo4j AuraDB)
- デプロイされたチャット モデルと埋め込みモデルを含む Azure AI Foundry プロジェクト (例:
text-embedding-ada-002) - 環境変数セット:
NEO4J_URI、NEO4J_USERNAME、NEO4J_PASSWORD、FOUNDRY_PROJECT_ENDPOINT、FOUNDRY_MODEL、AZURE_AI_EMBEDDING_NAME - 構成された Azure CLI 資格情報 (
az login) - Python 3.10 以降
Installation
pip install agent-framework-neo4j
使用方法
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_neo4j import Neo4jContextProvider, Neo4jSettings, AzureAISettings, AzureAIEmbedder
from azure.identity import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential
# Reads NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD from environment variables
neo4j_settings = Neo4jSettings()
# Reads FOUNDRY_PROJECT_ENDPOINT, AZURE_AI_EMBEDDING_NAME from environment variables
azure_settings = AzureAISettings()
sync_credential = DefaultAzureCredential()
embedder = AzureAIEmbedder(
endpoint=azure_settings.inference_endpoint,
credential=sync_credential,
model=azure_settings.embedding_model,
)
neo4j_provider = Neo4jContextProvider(
uri=neo4j_settings.uri,
username=neo4j_settings.username,
password=neo4j_settings.get_password(),
index_name=neo4j_settings.vector_index_name,
index_type="vector",
embedder=embedder,
top_k=5,
retrieval_query="""
MATCH (node)-[:FROM_DOCUMENT]->(doc:Document)
OPTIONAL MATCH (doc)<-[:FILED]-(company:Company)
RETURN node.text AS text, score, doc.title AS title, company.name AS company
ORDER BY score DESC
""",
)
async with (
neo4j_provider,
AzureCliCredential() as credential,
Agent(
client=FoundryChatClient(
credential=credential,
project_endpoint=azure_settings.project_endpoint,
model=os.environ["FOUNDRY_MODEL"],
),
instructions="You are a financial analyst assistant.",
context_providers=[neo4j_provider],
) as agent,
):
session = agent.create_session()
response = await agent.run("What risks does Acme Corp face?", session=session)
主要な機能
- インデックス駆動型: 任意の Neo4j ベクターまたはフルテキスト インデックスで動作します
- グラフ トラバーサル: カスタム サイファー クエリは、関連するエンティティを使用して検索結果を強化します
- 検索モード: ベクター (セマンティック類似性)、フルテキスト (キーワード/BM25)、またはハイブリッド (両方を組み合わせたもの)