Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dostawca pamięci Neo4j udostępnia agentom platformy Agent Framework trwały pamięć wspieraną przez graf wiedzy. W przeciwieństwie do dostawców RAG, którzy pobierają ze statycznych baz wiedzy, dostawca pamięci przechowuje i przypomina interakcje agentów, automatycznie wyodrębniając jednostki i tworząc wykres wiedzy w czasie.
Dostawca zarządza trzema typami pamięci:
- Pamięć krótkoterminowa: historia konwersacji i ostatni kontekst
- Pamięć długoterminowa: Jednostki, preferencje i fakty wyodrębnione z interakcji
- Pamięć rozumowania: poprzednie ślady rozumowania i wzorce użycia narzędzi
Dlaczego warto używać neo4j do pamięci agenta?
- Trwałość grafu wiedzy: pamięci są przechowywane jako połączone jednostki, a nie rekordy płaskie, dzięki czemu agent może wnioskować o relacjach między elementami, które zapamiętuje.
- Automatyczne wyodrębnianie jednostek: konwersacje są analizowane w jednostkach strukturalnych i relacjach bez ręcznego projektowania schematu.
- Przywoływanie między sesjami: Preferencje, fakty i ślady rozumowania są przechowywane między sesjami i pojawiają się automatycznie za pośrednictwem dostawców kontekstu.
Uwaga / Notatka
Neo4j oferuje dwie oddzielne integracje dla platformy Agent Framework. Ten dostawca (neo4j-agent-memory) jest przeznaczony dla pamięci trwałej — przechowywanie i odwoływanie interakcji z agentem, wyodrębnianie jednostek i tworzenie grafu wiedzy w czasie. Aby używać GraphRAG z istniejącego grafu wiedzy przy wykorzystaniu wektora, pełnotekstu lub wyszukiwania hybrydowego, zobacz Neo4j GraphRAG Context Provider.
Uwaga / Notatka
Pakiet .NET (AgentMemory) to niezależny, utrzymywany przez społeczność port .NET dostawcy pamięci Neo4j Labs — nie jest to oficjalny pakiet Neo4j Labs. Zobacz repozytorium AgentMemory (.NET), aby uzyskać kod źródłowy i szczegółowe informacje.
Wymagania wstępne
- Instancja Neo4j (samodzielnie hostowana lub Neo4j AuraDB)
- Wdrożenie Azure OpenAI lub Microsoft Foundry (model czatu i model osadzania)
- Zestaw zmiennych środowiskowych:
NEO4J_URI,NEO4J_USERNAME, ,NEO4J_PASSWORDAZURE_OPENAI_ENDPOINT - poświadczenia skonfigurowane w interfejsie wiersza polecenia Azure CLI (
az login) lub klucz API - .NET 8.0 lub nowszy
Installation
dotnet add package AgentMemory
dotnet add package AgentMemory.AgentFramework
Użycie
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);
Kluczowe funkcje
-
Dwukierunkowe:
Neo4jMemoryContextProviderprzypomina odpowiednią pamięć przed każdym uruchomieniem i utrwala nową pamięć po — nie jest wymagane ręczne okablowanie -
Wyodrębnianie jednostek: tworzy wykres wiedzy z konwersacji przy użyciu konfigurowalnego potoku wyodrębniania (
AutoExtractOnPersist) -
Uczenie się preferencji: wyciąga wnioski na temat preferencji użytkownika, faktów i encji oraz przechowuje je, automatycznie przywoływane przez zupełnie nowe
AgentSessiondla tego samego użytkownika -
Narzędzia pamięci:
MemoryToolFactoryudostępnia elementyAIFunction, aby model mógł w sposób jawny wyszukiwać, zapamiętywać i przywoływać -
Najpierw wstrzykiwanie zależności: rejestruje się za pośrednictwem
AddNeo4jAgentMemory(podłącza wewnętrznie Core + Neo4j) iAddAgentMemoryFramework, w sposób naturalny dopasowany do ogólnego hosta i aplikacji ASP.NET Core - Oprócz Agent Framework: ta sama biblioteka integruje się także z klientami Semantic Kernel i MCP oraz obejmuje wbudowaną obserwowalność OpenTelemetry
Zasoby
Wymagania wstępne
- Instancja Neo4j (samodzielnie hostowana lub Neo4j AuraDB)
- Projekt usługi Azure AI Foundry z wdrożonym modelem czatu
- Klucz interfejsu API openAI lub wdrożenie usługi Azure OpenAI (na potrzeby osadzania i wyodrębniania jednostek)
- Zestaw zmiennych środowiskowych:
NEO4J_URI, ,NEO4J_PASSWORDFOUNDRY_PROJECT_ENDPOINT, ,FOUNDRY_MODELOPENAI_API_KEY - Skonfigurowane poświadczenia Azure CLI (
az login) - Python 3.10 lub nowszy
Installation
pip install neo4j-agent-memory[microsoft-agent]
Użycie
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)
Kluczowe funkcje
- Dwukierunkowe: automatycznie pobiera odpowiedni kontekst przed wywołaniem i zapisuje nowe wspomnienia po odpowiedziach
- Wyodrębnianie jednostek: tworzy wykres wiedzy z konwersacji przy użyciu potoku wyodrębniania wieloetapowego
- Uczenie preferencji: wnioskowanie i przechowywanie preferencji użytkownika między sesjami
- Narzędzia pamięci: Agenci mogą jawnie wyszukiwać pamięć, pamiętać preferencje i znajdować połączenia jednostek
Zasoby
Uwaga / Notatka
Obsługa tej funkcji w języku Go będzie dostępna wkrótce. Aktualny status znajdziesz w repozytorium Agent Framework dla Go.