Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De Neo4j-geheugenprovider biedt Agent Framework-agents permanent geheugen dat wordt ondersteund door een kennisgrafiek. In tegenstelling tot RAG-providers die worden opgehaald uit statische knowledge bases, slaat de geheugenprovider agentinteracties op en roept deze op, waarbij entiteiten automatisch worden geëxtraheerd en een kennisgrafiek in de loop van de tijd wordt gebouwd.
De provider beheert drie soorten geheugen:
- Kortlopend geheugen: Gespreksgeschiedenis en recente context
- Langetermijngeheugen: Entiteiten, voorkeuren en feiten die zijn geëxtraheerd uit interacties
- Redeneringsgeheugen: Verleden redeneringssporen en gebruikspatronen van hulpprogramma's
Waarom Neo4j gebruiken voor agentgeheugen?
- Persistentie van knowledge graph: herinneringen worden opgeslagen als verbonden entiteiten, niet platte records, zodat de agent kan reden hebben voor relaties tussen dingen die worden onthouden.
- Automatische entiteitextractie: gesprekken worden geparseerd in gestructureerde entiteiten en relaties zonder handmatig schemaontwerp.
- Cross-sessie herinnering: Voorkeuren, feiten en redeneringssporen blijven behouden tussen sessies en worden automatisch weergegeven via contextproviders.
Opmerking
Neo4j biedt twee afzonderlijke integraties voor Agent Framework. Deze provider (neo4j-agent-memory) is bedoeld voor permanent geheugen : het opslaan en intrekken van agentinteracties, het extraheren van entiteiten en het bouwen van een kennisgrafiek in de loop van de tijd. Zie de Neo4j GraphRAG Context Provider voor GraphRAG vanuit een bestaande kennisgrafiek met behulp van vector-, fulltekst- of hybride zoekopdrachten.
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.
Vereiste voorwaarden
- Een Neo4j-exemplaar (zelf-hostend of Neo4j AuraDB)
- Een Azure OpenAI of Microsoft Foundry-implementatie (een chatmodel + een insluitmodel)
- Omgevingsvariabelen ingesteld:
NEO4J_URI,NEO4J_USERNAME,NEO4J_PASSWORDAZURE_OPENAI_ENDPOINT - Azure CLI-inloggegevens geconfigureerd (
az login), of een API-sleutel - .NET 8.0 of hoger
Installation
dotnet add package AgentMemory
dotnet add package AgentMemory.AgentFramework
Gebruik
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:
Neo4jMemoryContextProviderroept relevante geheugen terug voor elke uitvoering en houdt nieuw geheugen na - geen handmatig bedrading nodig -
Entiteitextractie: bouwt een kennisgrafiek op basis van gesprekken met een configureerbare extractiepijplijn (
AutoExtractOnPersist) -
Voorkeursleer: gebruikersvoorkeuren, feiten en entiteiten afleiden en opslaan, automatisch teruggehaald door een gloednieuwe
AgentSessiongebruiker voor dezelfde gebruiker -
Geheugentools:
MemoryToolFactorysteltAIFunctions beschikbaar zodat het model expliciet kan zoeken, onthouden en oproepen -
Dependency-injectie als uitgangspunt: wordt geregistreerd via
AddNeo4jAgentMemory(verbindt Core + Neo4j intern) enAddAgentMemoryFramework, en past natuurlijk in de Generic Host en ASP.NET Core-apps - Beyond Agent Framework: dezelfde bibliotheek kan ook worden geïntegreerd met Semantic Kernel- en MCP-clients en bevat ingebouwde OpenTelemetry-waarneembaarheid
Middelen
Vereiste voorwaarden
- Een Neo4j-exemplaar (zelf-hostend of Neo4j AuraDB)
- Een Azure AI 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_MODELOPENAI_API_KEY - Geconfigureerde Azure CLI-referenties (
az login) - Python 3.10 of hoger
Installation
pip install neo4j-agent-memory[microsoft-agent]
Gebruik
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 automatisch relevante context op voordat u aanroept en slaat nieuwe herinneringen op na reacties
- Entiteitextractie: bouwt een kennisgrafiek op basis van gesprekken met behulp van een pijplijn voor extractie in meerdere fasen
- Voorkeursleer: gebruikersvoorkeuren afleiden en opslaan in sessies
- Geheugenhulpprogramma's: Agents kunnen expliciet zoeken in geheugen, voorkeuren onthouden en entiteitsverbindingen zoeken
Middelen
Opmerking
Ondersteuning voor deze functie is binnenkort beschikbaar. Zie de opslagplaats Agent Framework Go voor de meest recente status.