Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Neo4j prend en charge deux modèles de fournisseur de contexte Agent Framework distincts. Ils partagent une base de données de graphe, mais utilisent des packages et des flux de données distincts.
| Modèle | Comportement |
|---|---|
| GraphRAG | Recherche un graphe de connaissances indexé existant avec vecteur, texte intégral ou récupération hybride et peut parcourir les entités associées avec Cypher. |
| Mémoire persistante | Extrait des entités, des faits, des préférences et du raisonnement à partir de conversations et crée un graphe de connaissances qui peut être rappelé entre les sessions. |
GraphRAG à partir d’un graphe de connaissances existant
Le fournisseur de contexte GraphRAG Neo4j ajoute des fonctionnalités de récupération de génération augmentée (RAG) aux agents Agent Framework à l’aide d’un graphe de connaissances Neo4j. Il prend en charge les modes de recherche vectorielle, de texte intégral et hybride, avec une traversée de graphique facultative pour enrichir les résultats avec des entités associées via des requêtes Cypher personnalisées.
Pour d’autres services de récupération managée, consultez Recherche Azure AI et Microsoft Foundry.
Pour les scénarios de graphe de connaissances où les relations entre les entités sont importantes, ce fournisseur récupère les sous-graphiques pertinents plutôt que les blocs de texte isolés, ce qui donne aux agents un contexte plus riche pour générer des réponses.
Pourquoi utiliser Neo4j pour GraphRAG ?
- Récupération améliorée du graphique : la recherche vectorielle standard retourne des blocs isolés ; La traversée de graphe suit les connexions aux entités associées à la surface, ce qui donne aux agents un contexte plus riche.
- Modes de recherche flexibles : combiner la similarité vectorielle, le mot clé/BM25 et la traversée de graphe dans une seule requête.
- Requêtes de récupération personnalisées : les requêtes Cypher vous permettent de contrôler exactement les relations à parcourir et le contexte à retourner.
Prerequisites
- Instance Neo4j (auto-hébergée ou Neo4j AuraDB) avec un index vectoriel ou de texte intégral configuré
- Un projet Azure AI Foundry avec un modèle de conversation déployé et un modèle d’incorporation (par exemple
text-embedding-3-small) - Ensemble de variables d’environnement :
NEO4J_URI, ,NEO4J_USERNAMENEO4J_PASSWORD,AZURE_AI_SERVICES_ENDPOINT,AZURE_AI_EMBEDDING_NAME - Identifiants Azure CLI configurés (
az login) - .NET 8.0 ou version ultérieure
Installation
dotnet add package Neo4j.AgentFramework.GraphRAG
Usage
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.OpenAI;
using Microsoft.Extensions.AI;
using Neo4j.AgentFramework.GraphRAG;
using Neo4j.Driver;
// Read connection details from environment variables
var neo4jSettings = new Neo4jSettings();
var azureEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_SERVICES_ENDPOINT")!;
// Create embedding generator
var credential = new DefaultAzureCredential();
var azureClient = new AzureOpenAIClient(new Uri(azureEndpoint), credential);
IEmbeddingGenerator<string, Embedding<float>> embedder = azureClient
.GetEmbeddingClient("text-embedding-3-small")
.AsIEmbeddingGenerator();
// Create Neo4j driver
await using var driver = GraphDatabase.Driver(
neo4jSettings.Uri, AuthTokens.Basic(neo4jSettings.Username, neo4jSettings.Password!));
// Create the Neo4j context provider
await using var provider = new Neo4jContextProvider(driver, new Neo4jContextProviderOptions
{
IndexName = "chunkEmbeddings",
IndexType = IndexType.Vector,
EmbeddingGenerator = embedder,
TopK = 5,
RetrievalQuery = """
MATCH (node)-[:FROM_DOCUMENT]->(doc:Document)
OPTIONAL MATCH (doc)<-[:FILED]-(company:Company)
RETURN node.text AS text, score, doc.title AS title, company.name AS company
ORDER BY score DESC
""",
});
// Create an agent with the provider
AIAgent agent = azureClient
.GetChatClient("gpt-4o")
.AsIChatClient()
.AsBuilder()
.UseAIContextProviders(provider)
.BuildAIAgent(new ChatClientAgentOptions
{
ChatOptions = new ChatOptions
{
Instructions = "You are a financial analyst assistant.",
},
});
var session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("What risks does Acme Corp face?", session));
Principales fonctionnalités
- Basé sur l’index : fonctionne avec n’importe quel vecteur Neo4j ou index plein texte
- Traversée du graphique : Les requêtes Cypher personnalisées enrichissent les résultats de recherche avec des entités associées
- Modes de recherche : Vecteur (similarité sémantique), texte intégral (mot clé/BM25) ou hybride (les deux combinés)
Resources
Prerequisites
- Instance Neo4j (auto-hébergée ou Neo4j AuraDB) avec un index vectoriel ou de texte intégral configuré
- Un projet Azure AI Foundry avec un modèle de conversation déployé et un modèle d’incorporation (par exemple
text-embedding-ada-002) - Ensemble de variables d’environnement :
NEO4J_URI, ,NEO4J_USERNAMENEO4J_PASSWORDFOUNDRY_PROJECT_ENDPOINT, ,FOUNDRY_MODELAZURE_AI_EMBEDDING_NAME - Identifiants Azure CLI configurés (
az login) - Python 3.10 ou version ultérieure
Installation
pip install agent-framework-neo4j
Usage
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_neo4j import Neo4jContextProvider, Neo4jSettings, AzureAISettings, AzureAIEmbedder
from azure.identity import DefaultAzureCredential
from azure.identity.aio import AzureCliCredential
# Reads NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD from environment variables
neo4j_settings = Neo4jSettings()
# Reads FOUNDRY_PROJECT_ENDPOINT, AZURE_AI_EMBEDDING_NAME from environment variables
azure_settings = AzureAISettings()
sync_credential = DefaultAzureCredential()
embedder = AzureAIEmbedder(
endpoint=azure_settings.inference_endpoint,
credential=sync_credential,
model=azure_settings.embedding_model,
)
neo4j_provider = Neo4jContextProvider(
uri=neo4j_settings.uri,
username=neo4j_settings.username,
password=neo4j_settings.get_password(),
index_name=neo4j_settings.vector_index_name,
index_type="vector",
embedder=embedder,
top_k=5,
retrieval_query="""
MATCH (node)-[:FROM_DOCUMENT]->(doc:Document)
OPTIONAL MATCH (doc)<-[:FILED]-(company:Company)
RETURN node.text AS text, score, doc.title AS title, company.name AS company
ORDER BY score DESC
""",
)
async with (
neo4j_provider,
AzureCliCredential() as credential,
Agent(
client=FoundryChatClient(
credential=credential,
project_endpoint=azure_settings.project_endpoint,
model=os.environ["FOUNDRY_MODEL"],
),
instructions="You are a financial analyst assistant.",
context_providers=[neo4j_provider],
) as agent,
):
session = agent.create_session()
response = await agent.run("What risks does Acme Corp face?", session=session)
Principales fonctionnalités
- Basé sur l’index : fonctionne avec n’importe quel vecteur Neo4j ou index plein texte
- Traversée du graphique : Les requêtes Cypher personnalisées enrichissent les résultats de recherche avec des entités associées
- Modes de recherche : Vecteur (similarité sémantique), texte intégral (mot clé/BM25) ou hybride (les deux combinés)
Resources
Note
La prise en charge de cette fonctionnalité dans Go sera disponible prochainement. Consultez le référentiel Agent Framework Go pour connaître l’état le plus récent.
Mémoire persistante de l’agent
Les intégrations de mémoire Neo4j stockent et rappellent les interactions de l’agent, extraient automatiquement des entités et créent un graphe de connaissances au fil du temps.
Les fournisseurs gèrent :
- Mémoire à court terme : historique des conversations et contexte récent.
- Mémoire à long terme : entités, préférences et faits extraits des interactions.
- Mémoire de raisonnement : traces de raisonnement passées et modèles d’utilisation des outils.
Pourquoi utiliser Neo4j pour la mémoire de l’agent ?
- Persistance du graphe de connaissances : les souvenirs sont stockés en tant qu’entités connectées, et non sous forme d’enregistrements plats, afin que l’agent puisse raisonner sur les relations entre les informations mémorisées.
- Extraction automatique d’entités : les conversations sont analysées en entités et relations structurées sans schéma défini manuellement.
- Rappel intersession : Les préférences, les faits et les traces de raisonnement persistent entre les sessions et surfacent par le biais de fournisseurs de contexte.
Note
Le package .NET (AgentMemory) est un port de .NET indépendant géré par la communauté du fournisseur de mémoire Neo4j Labs. Ce n’est pas un package Neo4j Labs officiel. Pour plus d’informations, consultez le référentiel AgentMemory (.NET).
Prerequisites
- Instance Neo4j (auto-hébergée ou Neo4j AuraDB).
- Un déploiement Azure OpenAI ou Microsoft Foundry avec un modèle de conversation et un modèle d’incorporation.
- Ensemble de variables d’environnement :
NEO4J_URI, ,NEO4J_USERNAMENEO4J_PASSWORD,AZURE_OPENAI_ENDPOINT. - identifiants Azure CLI configurés (
az login), ou une clé d’API. - .NET 8.0 ou version ultérieure.
Installation
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);
Principales fonctionnalités
-
Bidirectionnel :
Neo4jMemoryContextProviderrappelle la mémoire pertinente avant chaque exécution et conserve une nouvelle mémoire après celle-ci. - Extraction d’entité : le pipeline d’extraction configurable génère un graphe de connaissances à partir de conversations.
-
Apprentissage des préférences : les préférences, les faits et les entités peuvent être mémorisés par un nouveau
AgentSessionpour le même utilisateur. -
Outils de mémoire :
MemoryToolFactorymet à disposition des instancesAIFunctionpour des opérations explicites de recherche, de mémorisation et de récupération. -
Priorité à l’injection de dépendances :
AddNeo4jAgentMemoryetAddAgentMemoryFrameworks’intègrent à l’hôte générique et aux applications ASP.NET Core. - Au-delà de l’infrastructure de l’agent : la même bibliothèque s’intègre également aux clients Noyau sémantique et MCP et inclut l’observabilité OpenTelemetry.
Resources
Prerequisites
- Instance Neo4j (auto-hébergée ou Neo4j AuraDB).
- Projet Microsoft Foundry avec un modèle de conversation déployé.
- Une clé d’API OpenAI ou un déploiement Azure OpenAI pour les représentations vectorielles et l’extraction d’entités.
- Ensemble de variables d’environnement :
NEO4J_URI, ,NEO4J_PASSWORDFOUNDRY_PROJECT_ENDPOINT,FOUNDRY_MODEL,OPENAI_API_KEY. - Identifiants Azure CLI configurés (
az login). - Python 3.10 ou version ultérieure.
Installation
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)
Principales fonctionnalités
- Bidirectionnel : récupère le contexte pertinent avant l’appel et enregistre de nouveaux souvenirs après les réponses.
- Extraction d’entité : génère un graphe de connaissances à partir de conversations avec un pipeline d’extraction multi-étapes.
- Apprentissage des préférences : déduit et stocke les préférences utilisateur entre les sessions.
- Outils de mémoire : permet aux agents de rechercher explicitement la mémoire, de mémoriser les préférences et de rechercher des connexions d’entité.
Resources
Note
Les intégrations Neo4j GraphRAG et mémoire ne sont actuellement pas documentées pour Agent Framework Go. Consultez le référentiel Agent Framework Go pour connaître l’état le plus récent.