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.
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 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.
Note
Neo4j offre deux intégrations distinctes pour Agent Framework. Ce fournisseur est destiné à GraphRAG — rechercher un graphe de connaissances existant pour servir de base aux réponses de l'agent. Pour obtenir une mémoire persistante qui apprend des conversations et génère un graphe de connaissances au fil du temps, consultez le fournisseur de mémoire Neo4j.
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
Utilisation
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));
Fonctionnalités clé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)
Ressources
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
Utilisation
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)
Fonctionnalités clé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)