Neo4j GraphRAG Bağlam Sağlayıcısı

Neo4j GraphRAG Bağlam Sağlayıcısı, Bir Neo4j bilgi grafı kullanarak Agent Framework aracılarına Alma Artırılmış Nesil (RAG) özellikleri ekler. Özel Cypher sorguları aracılığıyla sonuçları ilgili varlıklarla zenginleştirmek için isteğe bağlı grafik geçişiyle vektör, tam metin ve karma arama modlarını destekler.

Varlıklar arasındaki ilişkilerin önemli olduğu bilgi grafiği senaryolarında, bu sağlayıcı yalıtılmış metin öbekleri yerine ilgili alt yazıları alır ve aracılara yanıt oluşturmak için daha zengin bağlam sağlar.

GraphRAG için Neo4j neden kullanılır?

  • Graf ile geliştirilen sorgulama: Standart vektör araması yalıtılmış öbekleri döndürür; graf geçişi işlemi, etmenlere daha zengin bağlam sağlayan ilgili varlıkları ortaya çıkaran bağlantıları izler.
  • Esnek arama modları: Vektör benzerliğini, anahtar sözcüğü/BM25'i ve graf geçişini tek bir sorguda birleştirin.
  • Özel alma sorguları: Cypher sorguları, tam olarak hangi ilişkilerin geçişini ve hangi bağlamı döndürebileceğinizi denetlemenize olanak sağlar.

Uyarı

Neo4j, Agent Framework için iki ayrı tümleştirme sunar. Bu sağlayıcı GraphRAG içindir; aracı yanıtlarını temel almak için mevcut bir bilgi grafını arar. Konuşmalardan öğrenen ve zaman içinde bir bilgi grafiği oluşturan kalıcı bellek için bkz. Neo4j Bellek Sağlayıcısı.

Önkoşullar

  • Vektör veya tam metin dizini yapılandırılmış bir Neo4j örneği (kendi kendine barındırılan veya Neo4j AuraDB)
  • Dağıtılan sohbet modeli ve ekleme modeline sahip bir Azure AI Foundry projesi (örn. text-embedding-3-small)
  • Ortam değişkenleri kümesi: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, AZURE_AI_SERVICES_ENDPOINT, AZURE_AI_EMBEDDING_NAME
  • Yapılandırılan Azure CLI kimlik bilgileri (az login)
  • .NET 8.0 veya üzeri

Installation

dotnet add package Neo4j.AgentFramework.GraphRAG

Kullanım

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));

Temel özellikler

  • Dizin temelli: Herhangi bir Neo4j vektörü veya tam metin dizini ile çalışır
  • Graf geçişi: Özel Cypher sorguları arama sonuçlarını ilgili varlıklarla zenginleştirir
  • Arama modları: Vektör (anlamsal benzerlik), tam metin (anahtar sözcük/BM25) veya karma (her ikisi de birleşik)

Kaynaklar

Önkoşullar

  • Vektör veya tam metin dizini yapılandırılmış bir Neo4j örneği (kendi kendine barındırılan veya Neo4j AuraDB)
  • Dağıtılan sohbet modeli ve ekleme modeline sahip bir Azure AI Foundry projesi (örn. text-embedding-ada-002)
  • Ortam değişkenleri kümesi: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, FOUNDRY_PROJECT_ENDPOINT, , FOUNDRY_MODEL, AZURE_AI_EMBEDDING_NAME
  • Yapılandırılan Azure CLI kimlik bilgileri (az login)
  • Python 3.10 veya üzeri

Installation

pip install agent-framework-neo4j

Kullanım

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)

Temel özellikler

  • Dizin temelli: Herhangi bir Neo4j vektörü veya tam metin dizini ile çalışır
  • Graf geçişi: Özel Cypher sorguları arama sonuçlarını ilgili varlıklarla zenginleştirir
  • Arama modları: Vektör (anlamsal benzerlik), tam metin (anahtar sözcük/BM25) veya karma (her ikisi de birleşik)

Kaynaklar

Sonraki Adımlar