Neo4j

Neo4j stöder två distinkta Agent Framework-kontextprovidermönster. De delar en grafdatabas men använder separata paket och dataflöden.

Mönster Behavior
GraphRAG Söker i ett befintligt indexerat kunskapsdiagram med vektor, fulltext eller hybridhämtning och kan bläddra igenom relaterade entiteter med Cypher.
Beständigt minne Extraherar entiteter, fakta, inställningar och resonemang från konversationer och skapar ett kunskapsdiagram som kan återkallas mellan sessioner.

GraphRAG från ett befintligt kunskapsdiagram

Neo4j GraphRAG-kontextprovidern lägger till RAG-funktioner (Retrieval Augmented Generation) till Agent Framework-agenter med hjälp av ett Neo4j-kunskapsdiagram. Den stöder vektor-, fulltext- och hybridsöklägen, med valfri grafbläddering för att utöka resultat med relaterade entiteter via anpassade Cypher-frågor.

Andra hanterade hämtningstjänster finns i Azure AI-sökning och Microsoft Foundry.

För kunskapsgrafscenarier där relationer mellan entiteter är viktiga hämtar den här providern relevanta undergrafer i stället för isolerade textsegment, vilket ger agenter ett bättre sammanhang för att generera svar.

Varför ska du använda Neo4j för GraphRAG?

  • Förbättrad hämtning av diagram: Standardvektorsökning returnerar isolerade segment; graph traversal följer anslutningar till ytrelaterade entiteter, vilket ger agenter ett bättre sammanhang.
  • Flexibla söklägen: Kombinera vektorlikhet, nyckelord/BM25 och grafbläddering i en enda fråga.
  • Anpassade hämtningsfrågor: Med Cypher-frågor kan du styra exakt vilka relationer som ska passeras och vilken kontext som ska returneras.

Förutsättningar

  • En Neo4j-instans (lokalt installerad eller Neo4j AuraDB) med ett vektor- eller fulltextindex konfigurerat
  • Ett Azure AI Foundry-projekt med en distribuerad chattmodell och en inbäddningsmodell (t.ex. text-embedding-3-small)
  • Miljövariabler ställda: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, AZURE_AI_SERVICES_ENDPOINT, AZURE_AI_EMBEDDING_NAME
  • Konfigurerade Azure CLI-autentiseringsuppgifter (az login)
  • .NET 8.0 eller senare

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

Viktiga funktioner

  • Indexdriven: Fungerar med valfri Neo4j-vektor eller fulltextindex
  • Diagrambläddering: Anpassade Cypher-frågor berikar sökresultat med relaterade entiteter
  • Söklägen: Vektor (semantisk likhet), fulltext (nyckelord/BM25) eller hybrid (båda kombinerade)

Resources

Förutsättningar

  • En Neo4j-instans (lokalt installerad eller Neo4j AuraDB) med ett vektor- eller fulltextindex konfigurerat
  • Ett Azure AI Foundry-projekt med en distribuerad chattmodell och en inbäddningsmodell (t.ex. text-embedding-ada-002)
  • Miljövariabler satta: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODEL, AZURE_AI_EMBEDDING_NAME
  • Konfigurerade Azure CLI-autentiseringsuppgifter (az login)
  • Python 3.10 eller senare

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)

Viktiga funktioner

  • Indexdriven: Fungerar med valfri Neo4j-vektor eller fulltextindex
  • Diagrambläddering: Anpassade Cypher-frågor berikar sökresultat med relaterade entiteter
  • Söklägen: Vektor (semantisk likhet), fulltext (nyckelord/BM25) eller hybrid (båda kombinerade)

Resources

Anmärkning

Go-stöd för den här funktionen kommer snart. Se Agent Framework Go-lagringsplatsen för den senaste statusen.

Beständigt agentminne

Neo4j-minnesintegrering lagrar och återkallar agentinteraktioner, extraherar automatiskt entiteter och skapar ett kunskapsdiagram över tid.

Leverantörerna hanterar:

  • Kortsiktigt minne: Konversationshistorik och aktuell kontext.
  • Långtidsminne: Entiteter, inställningar och fakta som extraherats från interaktioner.
  • Resonemangsminne: Tidigare resonemangsspårningar och användningsmönster för verktyg.

Varför använda Neo4j för agentminne?

  • Kunskapsdiagramspersistens: Minnen lagras som anslutna entiteter, inte platta poster, så agenten kan resonera om relationer mellan ihågkommen information.
  • Automatisk entitetsextrahering: Konversationer parsas i strukturerade entiteter och relationer utan ett manuellt definierat schema.
  • Minne mellan sessioner: Inställningar, fakta och resonemangsspår sparas mellan sessioner och visas via kontextleverantörer.

Anmärkning

.NET-paketet (AgentMemory) är en oberoende, community-underhållen .NET port för Neo4j Labs-minnesprovidern. Det är inte ett officiellt Neo4j Labs-paket. Se AgentMemory-repot (.NET) för källkod och mer information.

Förutsättningar

  • En Neo4j-instans (lokalt installerad eller Neo4j AuraDB).
  • En Azure OpenAI- eller Microsoft Foundry-distribution med en chattmodell och en inbäddningsmodell.
  • Miljövariabler inställda: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, AZURE_OPENAI_ENDPOINT.
  • konfigurerade Azure CLI-autentiseringsuppgifter (az login), eller en API-nyckel.
  • .NET 8.0 eller senare.

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

Viktiga funktioner

  • Dubbelriktad: Neo4jMemoryContextProvider hämtar relevant minne inför varje körning och lagrar nytt minne efteråt.
  • Entitetsextrahering: Den konfigurerbara extraheringspipelinen skapar ett kunskapsdiagram från konversationer.
  • Inställningsinlärning: Inställningar, fakta och entiteter kan återkallas av en ny AgentSession för samma användare.
  • Minnesverktyg: MemoryToolFactory exponerar AIFunction instanser för explicita sök-, kom ihåg- och återkallelseåtgärder.
  • Beroendeinmatning först: AddNeo4jAgentMemory och AddAgentMemoryFramework integrera med generiska värd- och ASP.NET Core-program.
  • Beyond Agent Framework: Samma bibliotek integreras också med Semantic Kernel- och MCP-klienter och innehåller OpenTelemetry-observerbarhet.

Resources

Förutsättningar

  • En Neo4j-instans (lokalt installerad eller Neo4j AuraDB).
  • Ett Microsoft Foundry-projekt med en distribuerad chattmodell.
  • En OpenAI API-nyckel eller Azure OpenAI-distribution för inbäddningar och entitetsextrahering.
  • Miljövariabler inställda: NEO4J_URI, NEO4J_PASSWORD, FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODEL, OPENAI_API_KEY.
  • Autentiseringsuppgifter konfigurerade i Azure CLI (az login).
  • Python 3.10 eller senare.

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)

Viktiga funktioner

  • Dubbelriktad: Hämtar relevant kontext före anrop och sparar nya minnen efter svar.
  • Entitetsextrahering: Skapar ett kunskapsdiagram från konversationer med en pipeline för extrahering i flera steg.
  • Inställningsinlärning: Härleder och lagrar användarinställningar mellan sessioner.
  • Minnesverktyg: Låter agenter uttryckligen söka efter minne, komma ihåg inställningar och hitta entitetsanslutningar.

Resources

Anmärkning

Neo4j GraphRAG och minnesintegreringar är för närvarande inte dokumenterade för Agent Framework Go. Se Agent Framework Go-lagringsplatsen för den senaste statusen.

Nästa steg