Freigeben über


Neo4j GraphRAG-Kontextanbieter

Der Neo4j GraphRAG Context Provider fügt Agent-Framework-Agenten Funktionen zur Retrieval-Augmented Generation (RAG) hinzu, indem er ein Neo4j-Wissensdiagramm verwendet. Es unterstützt Vektor-, Volltext- und Hybridsuchmodi, mit optionalen Diagrammdurchgängen, um Ergebnisse mit verwandten Entitäten über benutzerdefinierte Cypher-Abfragen zu bereichern.

Für Wissensdiagrammszenarien, in denen Beziehungen zwischen Entitäten wichtig sind, ruft dieser Anbieter relevante Subgraphen anstelle von isolierten Textblöcken ab, sodass Agents einen umfassenderen Kontext zum Generieren von Antworten erhalten.

Warum Neo4j für GraphRAG verwenden?

  • Graph enhanced retrieval: Standard vector search returns isolated chunks; Graph-Traversal folgt Verbindungen zu oberflächenbezogenen Entitäten, wodurch Agents umfassenderen Kontext erhalten.
  • Flexible Suchmodi: Kombinieren von Vektorähnlichkeit, Schlüsselwort/BM25 und Diagrammdurchquerung in einer einzigen Abfrage.
  • Benutzerdefinierte Abrufabfragen: Cypher-Abfragen ermöglichen Es Ihnen, genau zu steuern, welche Beziehungen durchlaufen werden sollen und welcher Kontext zurückgegeben werden soll.

Hinweis

Neo4j bietet zwei separate Integrationen für Agent Framework. Dieser Anbieter ist für GraphRAG – sucht ein vorhandenes Wissensgraphen, um die Antworten von Agenten zu untermauern. Informationen zum beständigen Speicher , der aus Unterhaltungen lernt und im Laufe der Zeit ein Wissensdiagramm erstellt, finden Sie im Neo4j-Speicheranbieter.

Voraussetzungen

  • Eine Neo4j-Instanz (selbst gehostet oder Neo4j AuraDB) mit konfiguriertem Vektor- oder Volltextindex
  • Ein Azure AI Foundry-Projekt mit einem bereitgestellten Chatmodell und einem Einbettungsmodell (z. B. text-embedding-3-small)
  • Umgebungsvariablen gesetzt: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, AZURE_AI_SERVICES_ENDPOINT, AZURE_AI_EMBEDDING_NAME
  • Konfigurierte Azure CLI-Anmeldeinformationen (az login)
  • .NET 8.0 oder höher

Installation

dotnet add package Neo4j.AgentFramework.GraphRAG

Verwendung

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

Wichtigste Funktionen

  • Indexgesteuert: Funktioniert mit jedem Neo4j-Vektor oder Volltextindex
  • Graph-Traversal: Benutzerdefinierte Cypher-Abfragen bereichern Suchergebnisse mit verwandten Entitäten
  • Suchmodi: Vektor (semantische Ähnlichkeit), Volltext (Schlüsselwort/BM25) oder Hybrid (beide kombiniert)

Ressourcen

Voraussetzungen

  • Eine Neo4j-Instanz (selbst gehostet oder Neo4j AuraDB) mit konfiguriertem Vektor- oder Volltextindex
  • Ein Azure AI Foundry-Projekt mit einem bereitgestellten Chatmodell und einem Einbettungsmodell (z. B. text-embedding-ada-002)
  • Umgebungsvariablen gesetzt: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODEL, AZURE_AI_EMBEDDING_NAME
  • Konfigurierte Azure CLI-Anmeldeinformationen (az login)
  • Python 3.10 oder höher

Installation

pip install agent-framework-neo4j

Verwendung

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)

Wichtigste Funktionen

  • Indexgesteuert: Funktioniert mit jedem Neo4j-Vektor oder Volltextindex
  • Graph-Traversal: Benutzerdefinierte Cypher-Abfragen bereichern Suchergebnisse mit verwandten Entitäten
  • Suchmodi: Vektor (semantische Ähnlichkeit), Volltext (Schlüsselwort/BM25) oder Hybrid (beide kombiniert)

Ressourcen

Nächste Schritte