Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Provedor de Memória Neo4j dá aos agentes do Agent Framework memória persistente suportada por um grafo de conhecimento. Ao contrário dos fornecedores RAG que recuperam de bases de conhecimento estáticas, o fornecedor de memória armazena e recupera interações com agentes, extraindo automaticamente entidades e construindo um grafo de conhecimento ao longo do tempo.
O prestador gere três tipos de memória:
- Memória de curto prazo: Histórico das conversas e contexto recente
- Memória de longo prazo: Entidades, preferências e factos extraídos das interações
- Memória de raciocínio: Traços de raciocínio passados e padrões de utilização de ferramentas
Porque usar o Neo4j para memória de agente?
- Persistência em grafos de conhecimento: As memórias são armazenadas como entidades conectadas, não como registos planos, para que o agente possa raciocinar sobre as relações entre coisas que recorda.
- Extração automática de entidades: As conversas são divididas em entidades estruturadas e relações sem design manual de esquemas.
- Recordação entre sessões: Preferências, factos e rastos de raciocínio persistem entre as sessões e surgem automaticamente através de provedores de contexto.
Observação
O Neo4j oferece duas integrações separadas para o Agent Framework. Este fornecedor (neo4j-agent-memory) destina-se à memória persistente — armazenando e recordando interações com agentes, extraindo entidades e construindo um grafo de conhecimento ao longo do tempo. Para GraphRAG a partir de um grafo de conhecimento existente usando pesquisa vetorial, texto completo ou híbrida, veja o Neo4j GraphRAG Context Provider.
Observação
O pacote .NET (AgentMemory) é uma porta .NET independente e mantida pela comunidade do fornecedor de memória Neo4j Labs — não é um pacote oficial da Neo4j Labs. Consulte o repositório AgentMemory (.NET) para a fonte e detalhes.
Pré-requisitos
- Uma instância Neo4j (autogerida ou Neo4j AuraDB)
- Uma implementação Azure OpenAI ou Microsoft Foundry (um modelo de chat + um modelo de embedding)
- Conjunto de variáveis de ambiente:
NEO4J_URI,NEO4J_USERNAME,NEO4J_PASSWORD,AZURE_OPENAI_ENDPOINT - credenciais CLI do Azure configuradas (
az login), ou uma chave API - .NET 8.0 ou posterior
Instalação
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);
Principais características
-
Bidirecional:
Neo4jMemoryContextProviderrecupera memória relevante antes de cada execução e mantém nova memória depois — não é necessário cablagem manual -
Extração de entidades: constrói um grafo de conhecimento a partir de conversas com um pipeline de extração configurável (
AutoExtractOnPersist) -
Aprendizagem de preferências: infere e armazena as preferências, factos e entidades do utilizador, recuperados automaticamente por um
AgentSessiontotalmente novo para o mesmo utilizador -
Ferramentas de memória:
MemoryToolFactorydisponibilizaAIFunctionpara que o modelo possa procurar, memorizar e recuperar informação de forma explícita -
Abordagem centrada na injeção de dependências: regista-se através de
AddNeo4jAgentMemory(faz a ligação interna entre o Core e o Neo4j) eAddAgentMemoryFramework, integrando-se naturalmente em aplicações Generic Host e ASP.NET Core - Beyond Agent Framework: a mesma biblioteca também se integra com clientes Kernel Semântico e MCP, e inclui a observabilidade OpenTelemetry incorporada
Recursos
Pré-requisitos
- Uma instância Neo4j (autogerida ou Neo4j AuraDB)
- Um projeto Azure AI Foundry com um modelo de chat implementado
- Uma chave API OpenAI ou implementação do Azure OpenAI para utilização em embeddings e extração de entidades.
- Conjunto de variáveis de ambiente:
NEO4J_URI,NEO4J_PASSWORD,FOUNDRY_PROJECT_ENDPOINT,FOUNDRY_MODEL,OPENAI_API_KEY - Credenciais configuradas do CLI do Azure (
az login) - Python 3.10 ou posterior
Instalação
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)
Principais características
- Bidirecional: Recupera automaticamente o contexto relevante antes da invocação e guarda novas memórias após as respostas
- Extração de entidades: Constrói um grafo de conhecimento a partir de conversas usando um pipeline de extração em múltiplos estágios
- Aprendizagem por preferências: Infere e armazena as preferências do utilizador ao longo das sessões
- Ferramentas de memória: Os agentes podem pesquisar explicitamente na memória, lembrar-se de preferências e encontrar ligações de entidades
Recursos
Observação
O suporte para esta funcionalidade do go está a chegar em breve. Consulte o repositório Agent Framework Go para o estado mais recente.