Neo4j GraphRAG Kontextus Szolgáltató

A Neo4j GraphRAG kontextus szolgáltatás egy Neo4j-tudásgráf használatával hozzáadja a visszakeresés-alapú kiterjesztett generálási (RAG) képességeket az Agent Framework ügynökeihez. Támogatja a vektoros, a teljes szöveges és a hibrid keresési módokat, opcionális gráfbejárással, hogy a találatokat egyéni Cypher-lekérdezésekkel bővítse a kapcsolódó entitásokkal.

Az olyan tudásgráf-forgatókönyvek esetében, amelyekben az entitások közötti kapcsolatok számítanak, ez a szolgáltató a releváns algráfokat kéri le izolált szöveges adattömbök helyett, így az ügynökök gazdagabb környezetet kapnak a válaszok generálásához.

Miért érdemes a Neo4j for GraphRAG-t használni?

  • Gráf továbbfejlesztett lekérése: A standard vektoros keresés izolált adattömböket ad vissza; A gráfbejárás a felszínhez kapcsolódó entitásokkal való kapcsolatokat követi, így az ügynökök gazdagabb környezetet kapnak.
  • Rugalmas keresési módok: Egyetlen lekérdezésben kombinálhatja a vektoros hasonlóságot, a kulcsszót/BM25-öt és a gráfbejárást.
  • Egyéni lekérési lekérdezések: A Cypher lekérdezésekkel pontosan szabályozhatja, hogy mely kapcsolatokat járja be, és milyen kontextus térjen vissza.

Megjegyzés:

A Neo4j két különálló integrációt kínál az Agent Frameworkhez. Ez a szolgáltató a GraphRAG-hoz tartozik – egy meglévő tudásgráfban keresve az ügynök válaszait. A beszélgetésekből tanult és a tudásgráfot idővel összeállító állandó memóriáért tekintse meg a Neo4j Memóriaszolgáltatót.

Előfeltételek

  • Egy Neo4j-példány (saját üzemeltetésű vagy Neo4j AuraDB), amelyhez vektor vagy teljes szöveges index lett konfigurálva
  • Azure AI Foundry-projekt üzembe helyezett csevegőmodellel és beágyazási modellel (pl. text-embedding-3-small)
  • Környezeti változók készlete: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, AZURE_AI_SERVICES_ENDPOINTAZURE_AI_EMBEDDING_NAME
  • Konfigurált Azure CLI-hitelesítő adatok (az login)
  • .NET 8.0 vagy újabb

Installation

dotnet add package Neo4j.AgentFramework.GraphRAG

Usage

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));

Legfontosabb funkciók

  • Indexalapú: Bármilyen Neo4j-vektorral vagy teljes szöveges indexel működik
  • Gráfbejárás: Az egyéni Cipher-lekérdezések a keresési eredményeket kapcsolódó entitásokkal bővítik
  • Keresési módok: Vektor (szemantikai hasonlóság), teljes szöveges (kulcsszó/BM25) vagy hibrid (mindkettő kombinálva)

Resources

Előfeltételek

  • Egy Neo4j-példány (saját üzemeltetésű vagy Neo4j AuraDB), amelyhez vektor vagy teljes szöveges index lett konfigurálva
  • Azure AI Foundry-projekt üzembe helyezett csevegőmodellel és beágyazási modellel (pl. text-embedding-ada-002)
  • Környezeti változók készlete: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODELAZURE_AI_EMBEDDING_NAME
  • Konfigurált Azure CLI-hitelesítő adatok (az login)
  • Python 3.10 vagy újabb verzió

Installation

pip install agent-framework-neo4j

Usage

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)

Legfontosabb funkciók

  • Indexalapú: Bármilyen Neo4j-vektorral vagy teljes szöveges indexel működik
  • Gráfbejárás: Az egyéni Cipher-lekérdezések a keresési eredményeket kapcsolódó entitásokkal bővítik
  • Keresési módok: Vektor (szemantikai hasonlóság), teljes szöveges (kulcsszó/BM25) vagy hibrid (mindkettő kombinálva)

Resources

Következő lépések