Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il provider di memoria Neo4j offre agli agenti di Agent Framework la memoria persistente supportata da un grafico delle conoscenze. A differenza dei provider RAG che recuperano da knowledge base statiche, il provider di memoria archivia e richiama le interazioni dell'agente, estraendo automaticamente le entità e creando un grafico delle informazioni nel tempo.
Il provider gestisce tre tipi di memoria:
- Memoria a breve termine: cronologia delle conversazioni e contesto recente
- Memoria a lungo termine: entità, preferenze e fatti estratti dalle interazioni
- Memoria di ragionamento: tracce di ragionamento passate e modelli di utilizzo degli strumenti
Perché usare Neo4j per la memoria dell'agente?
- Persistenza del grafico delle conoscenze: le memorie vengono archiviate come entità connesse, non come record flat, in modo che l'agente possa ragionare sulle relazioni tra elementi che ricorda.
- Estrazione automatica di entità: le conversazioni vengono analizzate in entità strutturate e relazioni senza progettazione manuale dello schema.
- Richiamo cross-sessione: preferenze, fatti e tracce di ragionamento persistono tra sessioni e sono visualizzati automaticamente tramite fornitori di contesto.
Annotazioni
Neo4j offre due integrazioni separate per Agent Framework. Questo provider (neo4j-agent-memory) è per la memoria persistente , ovvero l'archiviazione e il richiamo delle interazioni dell'agente, l'estrazione di entità e la creazione di un grafico delle informazioni nel tempo. Per GraphRAG da un grafo delle conoscenze esistente usando la ricerca vettoriale, fulltext o ibrida, vedere il Provider di contesto GraphRAG di Neo4j.
Annotazioni
Il pacchetto .NET (AgentMemory) è una porta indipendente e gestita dalla community .NET del provider di memoria Neo4j Labs, non è un pacchetto ufficiale di Neo4j Labs. Vedere il repository AgentMemory (.NET) per il codice sorgente e i dettagli.
Prerequisiti
- Istanza Neo4j (autogestito o Neo4j AuraDB)
- Una distribuzione openAI Azure o Microsoft Foundry (un modello di chat e un modello di incorporamento)
- Set di variabili di ambiente:
NEO4J_URI,NEO4J_USERNAME,NEO4J_PASSWORD,AZURE_OPENAI_ENDPOINT - credenziali di interfaccia della riga di comando di Azure configurate (
az login) o una chiave API - .NET 8.0 o versione successiva
Installazione
dotnet add package AgentMemory
dotnet add package AgentMemory.AgentFramework
Utilizzo
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);
Funzionalità principali
-
Bidirezionale:
Neo4jMemoryContextProviderrichiama la memoria pertinente prima di ogni esecuzione e rende persistente la nuova memoria dopo , senza dover collegare manualmente -
Estrazione di entità: crea un grafico delle informazioni dalle conversazioni con una pipeline di estrazione configurabile (
AutoExtractOnPersist) -
Apprendimento delle preferenze: deduce e memorizza le preferenze, i fatti e le entità dell’utente, richiamati automaticamente da una nuova istanza di
AgentSessionper lo stesso utente -
Strumenti di memoria:
MemoryToolFactoryespone sAIFunctionin modo che il modello possa cercare, ricordare e richiamare in modo esplicito -
Inserimento delle dipendenze prima: registra tramite
AddNeo4jAgentMemory(collega internamente Core + Neo4j) eAddAgentMemoryFramework, adattandosi naturalmente alle app Host generiche e ASP.NET Core - Beyond Agent Framework: la stessa libreria si integra anche con i client Kernel semantico e MCP e include l'osservabilità predefinita di OpenTelemetry
risorse
Prerequisiti
- Istanza Neo4j (autogestito o Neo4j AuraDB)
- Un progetto Azure AI Foundry con un modello di chat distribuito
- Una chiave API OpenAI o una distribuzione OpenAI di Azure (per incorporamenti ed estrazione di entità)
- Set di variabili di ambiente:
NEO4J_URI,NEO4J_PASSWORD,FOUNDRY_PROJECT_ENDPOINT,FOUNDRY_MODEL,OPENAI_API_KEY - Credenziali di interfaccia della riga di comando di Azure configurate (
az login) - Python 3.10 o versione successiva
Installazione
pip install neo4j-agent-memory[microsoft-agent]
Utilizzo
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)
Funzionalità principali
- Bidirezionale: recupera automaticamente il contesto pertinente prima della chiamata e salva nuovi ricordi dopo le risposte
- Estrazione di entità: crea un grafico delle conoscenze dalle conversazioni usando una pipeline di estrazione a più fasi
- Apprendimento delle preferenze: deduce e archivia le preferenze utente tra le sessioni
- Strumenti di memoria: gli agenti possono cercare in modo esplicito la memoria, memorizzare le preferenze e trovare connessioni entità
risorse
Annotazioni
Il supporto per questa funzionalità sarà presto disponibile. Vedere il repository di Agent Framework Go per lo stato più aggiornato.