Neo4j

Neo4j ondersteunt twee verschillende contextproviderpatronen van agentframework. Ze delen een grafiekdatabase, maar gebruiken afzonderlijke pakketten en gegevensstromen.

Patroon Gedrag
GraphRAG Doorzoekt een bestaande geïndexeerde kennisgrafiek met vector-, volledige-tekst- of hybride zoekopdrachten en kan met Cypher door gerelateerde entiteiten navigeren.
Permanent geheugen Extraheert entiteiten, feiten, voorkeuren en redenering uit gesprekken en bouwt een kennisgrafiek op die kan worden teruggehaald in sessies.

GraphRAG van een bestaande kennisgrafiek

De Neo4j GraphRAG-contextprovider voegt rag-mogelijkheden (Retrieval Augmented Generation) toe aan Agent Framework-agents met behulp van een Neo4j-kennisgrafiek. Het ondersteunt vector-, fulltext- en hybride zoekmodi, met optionele grafiekkruising om resultaten te verrijken met gerelateerde entiteiten via aangepaste Cypher-query's.

Zie Azure AI Zoeken en Microsoft Foundry voor andere beheerde ophaalservices.

Voor scenario's met kennisgrafieken waarbij relaties tussen entiteiten belangrijk zijn, haalt deze provider relevante subtekens op in plaats van geïsoleerde tekstsegmenten, waardoor agents uitgebreidere context krijgen voor het genereren van antwoorden.

Waarom Neo4j gebruiken voor GraphRAG?

  • Verbeterde graaf ophalen: Standard vector search retourneert geïsoleerde segmenten; graph traversal volgt verbindingen met surface-gerelateerde entiteiten, waardoor agents uitgebreidere context hebben.
  • Flexibele zoekmodi: vector-gelijkenis, trefwoord/BM25 en grafiekkruising combineren in één query.
  • Aangepaste ophaalquery's: Met cypher-query's kunt u precies bepalen welke relaties moeten worden doorlopen en welke context moet worden geretourneerd.

Prerequisites

  • Een Neo4j-exemplaar (zelf-hostend of Neo4j AuraDB) met een vector- of fulltext-index geconfigureerd
  • Een Azure AI Foundry-project met een geïmplementeerd chatmodel en een insluitmodel (bijvoorbeeld text-embedding-3-small)
  • Omgevingsvariabelen ingesteld: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, AZURE_AI_SERVICES_ENDPOINTAZURE_AI_EMBEDDING_NAME
  • Geconfigureerde Azure CLI-referenties (az login)
  • .NET 8.0 of hoger

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

Belangrijkste kenmerken

  • Indexgestuurd: werkt met een Neo4j-vector of fulltext-index
  • Graph traversal: Aangepaste Cypher-query's verrijken zoekresultaten met gerelateerde entiteiten
  • Zoekmodi: Vector (semantische gelijkenis), volledige tekst (trefwoord/BM25) of hybride (beide gecombineerd)

Resources

Prerequisites

  • Een Neo4j-exemplaar (zelf-hostend of Neo4j AuraDB) met een vector- of fulltext-index geconfigureerd
  • Een Azure AI Foundry-project met een geïmplementeerd chatmodel en een insluitmodel (bijvoorbeeld text-embedding-ada-002)
  • Omgevingsvariabelen ingesteld: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODELAZURE_AI_EMBEDDING_NAME
  • Geconfigureerde Azure CLI-referenties (az login)
  • Python 3.10 of hoger

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)

Belangrijkste kenmerken

  • Indexgestuurd: werkt met een Neo4j-vector of fulltext-index
  • Graph traversal: Aangepaste Cypher-query's verrijken zoekresultaten met gerelateerde entiteiten
  • Zoekmodi: Vector (semantische gelijkenis), volledige tekst (trefwoord/BM25) of hybride (beide gecombineerd)

Resources

Opmerking

Ondersteuning voor deze functie is binnenkort beschikbaar. Zie de opslagplaats Agent Framework Go voor de meest recente status.

Permanent agentgeheugen

De Neo4j-geheugenintegraties slaan interacties met agents op en halen deze op, extraheren entiteiten automatisch en bouwen een kennisgrafiek in de loop van de tijd.

De providers beheren:

  • Kort geheugen: Gespreksgeschiedenis en recente context.
  • Langetermijngeheugen: entiteiten, voorkeuren en feiten die zijn geëxtraheerd uit interacties.
  • Redeneringsgeheugen: traceringen en gebruikspatronen van hulpprogramma's in het verleden.

Waarom Neo4j gebruiken voor agentgeheugen?

  • Persistentie van kennisgrafieken: Herinneringen worden opgeslagen als verbonden entiteiten, niet platte records, zodat de agent kan reden hebben voor relaties tussen onthouden informatie.
  • Automatische entiteitextractie: gesprekken worden geparseerd in gestructureerde entiteiten en relaties zonder een handmatig gedefinieerd schema.
  • Sessie-overstijgende herinnering: Voorkeuren, feiten en redeneringssporen blijven over sessies heen behouden en komen via contextproviders beschikbaar.

Opmerking

Het .NET-pakket (AgentMemory) is een onafhankelijke, door de community onderhouden .NET poort van de Neo4j Labs-geheugenprovider. Het is geen officieel Neo4j Labs-pakket. Zie de opslagplaats agentMemory (.NET) voor bron en details.

Prerequisites

  • Een Neo4j-exemplaar (zelf-hostend of Neo4j AuraDB).
  • Een Azure OpenAI- of Microsoft Foundry-implementatie met een chatmodel en een insluitmodel.
  • Omgevingsvariabelen ingesteld: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD. AZURE_OPENAI_ENDPOINT
  • met geconfigureerde Azure CLI-inloggegevens (az login), of een API-sleutel.
  • .NET 8.0 of hoger.

Installation

dotnet add package AgentMemory
dotnet add package AgentMemory.AgentFramework

Usage

using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using AgentMemory;
using AgentMemory.Abstractions.Services;
using AgentMemory.AgentFramework;
using AgentMemory.AgentFramework.Tools;

var builder = Host.CreateApplicationBuilder(args);

// Registers Core + Neo4j infrastructure in one call (reads NEO4J_URI / NEO4J_USERNAME /
// NEO4J_PASSWORD, falling back to local-dev defaults). Passing configureLlm opts in to
// LLM-backed entity/fact/preference extraction, using the IChatClient registered below.
builder.Services.AddNeo4jAgentMemory(
    configureMemory: _ => { },
    configureNeo4j: neo4j =>
    {
        neo4j.Uri = Environment.GetEnvironmentVariable("NEO4J_URI") ?? "bolt://localhost:7687";
        neo4j.Username = Environment.GetEnvironmentVariable("NEO4J_USERNAME") ?? "neo4j";
        neo4j.Password = Environment.GetEnvironmentVariable("NEO4J_PASSWORD") ?? "password";
    },
    configureLlm: _ => { });

// Any Microsoft.Extensions.AI-compatible chat + embedding client works
var azureClient = new AzureOpenAIClient(
    new Uri(Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")!), new DefaultAzureCredential());
builder.Services.AddSingleton(azureClient.GetChatClient("gpt-4o-mini").AsIChatClient());
builder.Services.AddSingleton(azureClient.GetEmbeddingClient("text-embedding-3-small").AsIEmbeddingGenerator());

// AutoExtractOnPersist builds the knowledge graph from every conversation turn
builder.Services.AddAgentMemoryFramework(options =>
{
    options.AutoExtractOnPersist = true;
    options.ContextFormat.IncludeEntities = true;
    options.ContextFormat.IncludeFacts = true;
    options.ContextFormat.IncludePreferences = true;
});

using var host = builder.Build();
await using var scope = host.Services.CreateAsyncScope();
var services = scope.ServiceProvider;

// Bootstraps Neo4j schema/indexes on first run (idempotent)
await services.GetRequiredService<ISchemaBootstrapper>().BootstrapAsync();

var memoryProvider = services.GetRequiredService<Neo4jMemoryContextProvider>();
var memoryTools = services.GetRequiredService<MemoryToolFactory>().CreateAIFunctions();

// WithMemoryOwnerScoping wraps the whole invocation — recall, the tool-calling loop, and
// persistence — in the owner scope set by WithMemoryIdentity below, so no manual
// BeginOwnerScope call is needed around RunAsync.
AIAgent agent = services.GetRequiredService<IChatClient>().AsAIAgent(new ChatClientAgentOptions
{
    ChatOptions = new ChatOptions
    {
        Instructions = "You are a helpful assistant with persistent memory.",
        Tools = [.. memoryTools],
    },
    AIContextProviders = [memoryProvider],
}).WithMemoryOwnerScoping(services);

var session = (await agent.CreateSessionAsync())
    .WithMemoryIdentity(userId: "user-123", sessionId: "session-1", applicationId: "my-app");

var response = await agent.RunAsync("Remember that I prefer window seats on flights.", session);

Belangrijkste kenmerken

  • Bidirectioneel: Neo4jMemoryContextProvider herinnert relevante geheugen aan voordat elke uitvoering wordt uitgevoerd en behoudt na elke uitvoering nieuw geheugen.
  • Entiteitextractie: De configureerbare extractiepijplijn bouwt een kennisgrafiek van gesprekken.
  • Voorkeuren leren: Voorkeuren, feiten en entiteiten kunnen door een nieuwe AgentSession voor dezelfde gebruiker worden opgehaald.
  • Geheugenhulpprogramma's: MemoryToolFactory maakt exemplaren beschikbaar AIFunction voor expliciete zoek-, onthoud- en terugroepbewerkingen.
  • Afhankelijkheidsinjectie eerst: AddNeo4jAgentMemory en AddAgentMemoryFramework integreer met Generic Host- en ASP.NET Core-toepassingen.
  • Beyond Agent Framework: dezelfde bibliotheek kan ook worden geïntegreerd met Semantic Kernel- en MCP-clients en bevat waarneembaarheid van OpenTelemetry.

Resources

Prerequisites

  • Een Neo4j-exemplaar (zelf-hostend of Neo4j AuraDB).
  • Een Microsoft Foundry-project met een geïmplementeerd chatmodel.
  • Een OpenAI API-sleutel of Azure OpenAI-implementatie voor insluitingen en entiteitextractie.
  • Omgevingsvariabelen ingesteld: NEO4J_URI, NEO4J_PASSWORD, FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODEL, . OPENAI_API_KEY
  • Azure CLI-aanmeldingsgegevens geconfigureerd (az login).
  • Python 3.10 of hoger.

Installation

pip install neo4j-agent-memory[microsoft-agent]

Usage

import os
from pydantic import SecretStr
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity.aio import AzureCliCredential
from neo4j_agent_memory import MemoryClient, MemorySettings
from neo4j_agent_memory.integrations.microsoft_agent import (
    Neo4jMicrosoftMemory,
    create_memory_tools,
)

# Pass Neo4j and embedding configuration directly via constructor arguments.
# MemorySettings also supports loading from environment variables or .env files
# using the NAM_ prefix (e.g. NAM_NEO4J__URI, NAM_EMBEDDING__MODEL).
settings = MemorySettings(
    neo4j={
        "uri": os.environ["NEO4J_URI"],
        "username": os.environ.get("NEO4J_USERNAME", "neo4j"),
        "password": SecretStr(os.environ["NEO4J_PASSWORD"]),
    },
    embedding={
        "provider": "openai",
        "model": "text-embedding-3-small",
    },
)

memory_client = MemoryClient(settings)

async with memory_client:
    memory = Neo4jMicrosoftMemory.from_memory_client(
        memory_client=memory_client,
        session_id="user-123",
    )
    tools = create_memory_tools(memory)

    async with AzureCliCredential() as credential, Agent(
        client=FoundryChatClient(
            credential=credential,
            project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
            model=os.environ["FOUNDRY_MODEL"],
        ),
        instructions="You are a helpful assistant with persistent memory.",
        tools=tools,
        context_providers=[memory.context_provider],
    ) as agent:
        session = agent.create_session()
        response = await agent.run("Remember that I prefer window seats on flights.", session=session)

Belangrijkste kenmerken

  • Bidirectioneel: haalt relevante context op voordat u aanroept en slaat nieuwe herinneringen op na reacties.
  • Entiteitextractie: bouwt een kennisgrafiek op basis van gesprekken met een pijplijn voor extractie met meerdere fasen.
  • Voorkeursleer: hiermee worden gebruikersvoorkeuren afgeleid en opgeslagen in sessies.
  • Geheugenhulpprogramma's: hiermee kunnen agents expliciet zoeken in geheugen, voorkeuren onthouden en entiteitsverbindingen zoeken.

Resources

Opmerking

Neo4j GraphRAG en geheugenintegraties worden momenteel niet gedocumenteerd voor Agent Framework Go. Zie de opslagplaats Agent Framework Go voor de meest recente status.

Volgende stappen