Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Neo4j-Speicheranbieter bietet Agent Framework-Agents beständigen Speicher, der von einem Wissensdiagramm unterstützt wird. Im Gegensatz zu RAG-Anbietern, die aus statischen Wissensdatenbanken Informationen abrufen, speichert der Memory-Anbieter Interaktionen mit Agenten und ruft diese ab, indem er automatisch Entitäten extrahiert und im Laufe der Zeit einen Wissensgraph erstellt.
Der Anbieter verwaltet drei Speichertypen:
- Kurzfristiger Speicher: Aufgezeichnete Unterhaltungen und aktueller Kontext
- Langzeitspeicher: Entitäten, Präferenzen und Fakten, die aus Interaktionen extrahiert werden
- Reasoning memory: Vergangene Argumentationsspuren und Werkzeugnutzungsmuster
Gründe für die Verwendung von Neo4j für den Agent-Speicher?
- de-DE: Wissensgraphpersistenz: Erinnerungen werden als verbundene Entitäten gespeichert, nicht als flache Datensätze, sodass der Agent über Beziehungen zwischen Dingen nachdenken kann, die er sich erinnert.
- Automatische Entitätsextraktion: Unterhaltungen werden ohne manuelles Schemadesign in strukturierte Entitäten und Beziehungen analysiert.
- Sitzungsübergreifende Erinnerung: Einstellungen, Fakten und Ablaufspuren bleiben sitzungsübergreifend verfügbar und werden automatisch über Kontextanbieter bereitgestellt.
Hinweis
Neo4j bietet zwei separate Integrationen für Agent Framework. Dieser Anbieter (neo4j-agent-memory) dient für beständigen Speicher – Speichern und Zurückrufen von Agentinteraktionen, Extrahieren von Entitäten und Erstellen eines Wissensdiagramms im Laufe der Zeit.
Informationen zu GraphRAG aus einem vorhandenen Wissensdiagramm mit Vektor-, Volltext- oder Hybridsuche finden Sie im Neo4j GraphRAG-Kontextanbieter.
Hinweis
Das .NET-Paket (AgentMemory) ist ein unabhängiges, von der Community verwaltetes .NET Port des Neo4j Labs Speicheranbieters – es handelt sich nicht um ein offizielles Neo4j Labs-Paket. Weitere Informationen finden Sie im AgentMemory-Repository (.NET).
Voraussetzungen
- Eine Neo4j-Instanz (selbst gehostet oder Neo4j AuraDB)
- Eine Azure OpenAI- oder Microsoft Foundry-Bereitstellung (ein Chatmodell und ein Einbettungsmodell)
- Umgebungsvariablen gesetzt:
NEO4J_URI,NEO4J_USERNAME,NEO4J_PASSWORD,AZURE_OPENAI_ENDPOINT - für Azure CLI konfigurierte Anmeldeinformationen (
az login) oder ein API-Schlüssel - .NET 8.0 oder höher
Installation
dotnet add package AgentMemory
dotnet add package AgentMemory.AgentFramework
Verwendung
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);
Wichtigste Funktionen
-
Bidirektional:
Neo4jMemoryContextProviderruft relevanten Speicher vor jeder Ausführung zurück und speichert neuen Speicher nach – keine manuelle Verkabelung erforderlich -
Entitätsextraktion: Erstellt ein Wissensdiagramm aus Unterhaltungen mit einer konfigurierbaren Extraktionspipeline (
AutoExtractOnPersist) -
Präferenzlernen: Ermittelt und speichert Nutzerpräferenzen, Fakten und Entitäten, die von einem brandneuen
AgentSessionfür denselben Nutzer automatisch abgerufen werden. -
Speicherwerkzeuge:
MemoryToolFactorystelltAIFunctions bereit, damit das Modell explizit suchen, sich erinnern und abrufen kann. -
Dependency Injection an erster Stelle: registriert über
AddNeo4jAgentMemory(bindet Core + Neo4j intern ein) undAddAgentMemoryFrameworkund fügt sich natürlich in Generic-Host- und ASP.NET-Core-Apps ein. - Beyond Agent Framework: Die gleiche Bibliothek ist auch in Semantischer Kernel- und MCP-Clients integriert und umfasst integrierte OpenTelemetry-Observability
Ressourcen
Voraussetzungen
- Eine Neo4j-Instanz (selbst gehostet oder Neo4j AuraDB)
- Ein Azure AI Foundry -Projekt mit einem bereitgestellten Chatmodell
- Ein OpenAI-API-Schlüssel oder eine Azure OpenAI-Bereitstellung (für Einbettungen und Entitätsextraktion)
- Umgebungsvariablen gesetzt:
NEO4J_URI,NEO4J_PASSWORD,FOUNDRY_PROJECT_ENDPOINT,FOUNDRY_MODEL,OPENAI_API_KEY - Konfigurierte Azure CLI-Anmeldeinformationen (
az login) - Python 3.10 oder höher
Installation
pip install neo4j-agent-memory[microsoft-agent]
Verwendung
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)
Wichtigste Funktionen
- Bidirektional: Ruft automatisch relevanten Kontext vor dem Aufruf ab und speichert neue Erinnerungen nach Antworten.
- Entitätsextraktion: Erstellt ein Wissensdiagramm aus Unterhaltungen mithilfe einer mehrstufigen Extraktionspipeline
- Einstellungslernen: Leitet Benutzereinstellungen über Sitzungen hinweg ab und speichert sie.
- Speichertools: Agents können Arbeitsspeicher explizit durchsuchen, Einstellungen speichern und Entitätsverbindungen suchen
Ressourcen
Hinweis
Unterstützung für dieses Feature wird in Kürze verfügbar sein. Den neuesten Status finden Sie im Agent Framework Go-Repository .