Neo4j

Neo4j, iki farklı Agent Framework bağlam sağlayıcısı deseni destekler. Graf veritabanını paylaşır, ancak ayrı paketler ve veri akışları kullanırlar.

Pattern Davranış
GraphRAG Vektör, tam metin veya karma alma ile mevcut dizinlenmiş bilgi grafı arar ve Cypher ile ilgili varlıkların çapraz geçişini yapabilir.
Kalıcı bellek Konuşmalardaki varlıkları, olguları, tercihleri ve mantığı ayıklar ve oturumlar arasında geri çağrılabilen bir bilgi grafı oluşturur.

Mevcut bir bilgi grafiğinden GraphRAG

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.

Diğer yönetilen alma hizmetleri için bkz. Azure Yapay Zeka Arama ve Microsoft Foundry.

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.

Prerequisites

  • 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 Yapay Zeka Atölyesi 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

Kurulum

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

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)

Resources

Prerequisites

  • 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 Yapay Zeka Atölyesi 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

Kurulum

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)

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)

Resources

Uyarı

Bu özellik için Go desteği yakında sunulacaktır. En son durum için bkz. Agent Framework Go deposu .

Kalıcı aracı belleği

Neo4j bellek tümleştirmeleri aracı etkileşimlerini depolar ve geri çağırarak varlıkları otomatik olarak ayıklar ve zaman içinde bir bilgi grafiği oluşturur.

Sağlayıcılar aşağıdakileri yönetir:

  • Kısa süreli bellek: Konuşma geçmişi ve son bağlam.
  • Uzun süreli bellek: Etkileşimlerden ayıklanan varlıklar, tercihler ve olgular.
  • Akıl yürütme belleği: Geçmiş muhakeme izlemeleri ve araç kullanım desenleri.

Neden Neo4j'i ajan hafızası için kullanmalısınız?

  • Bilgi grafiği kalıcılığı: Bellekler düz kayıtlar olarak değil bağlantılı varlıklar olarak depolanır, böylece aracı hatırlanan bilgiler arasındaki ilişkiler hakkında neden olabilir.
  • Otomatik varlık ayıklama: Konuşmalar, el ile tanımlanmış bir şema olmadan yapılandırılmış varlıklara ve ilişkilere ayrıştırılır.
  • Oturumlar arası geri çağırma: Tercihler, olgular ve muhakeme izlemeleri oturumlarda kalıcıdır ve bağlam sağlayıcıları aracılığıyla ortaya çıkar.

Uyarı

.NET paketi (AgentMemory), Neo4j Labs bellek sağlayıcısının bağımsız, topluluk bakımlı .NET bir bağlantı noktasıdır. Bu resmi bir Neo4j Labs paketi değil. Kaynak ve ayrıntılar için bkz. AgentMemory (.NET) deposu.

Prerequisites

  • Bir Neo4j örneği (şirket içinde barındırılan veya Neo4j AuraDB).
  • Sohbet modeli ve ekleme modeliyle Azure OpenAI veya Microsoft Foundry dağıtımı.
  • Ortam değişkenleri kümesi: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, AZURE_OPENAI_ENDPOINT.
  • Azure CLI kimlik bilgileri yapılandırıldı (az login) veya bir API anahtarı.
  • .NET 8.0 veya üzeri.

Kurulum

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

Temel özellikler

  • Çift yönlü: Neo4jMemoryContextProvider Her çalıştırmadan önce ilgili belleği geri çağırıp ondan sonra yeni belleği kalıcı hale döndürür.
  • Varlık ayıklama: Yapılandırılabilir ayıklama işlem hattı, konuşmalardan bir bilgi grafı oluşturur.
  • Tercih öğrenmesi: Tercihler, olgular ve varlıklar, aynı kullanıcı için yeni AgentSession bir kullanıcı tarafından geri çağrılabilir.
  • Bellek araçları: MemoryToolFactory Açık arama, anımsama ve geri çağırma işlemleri için örnekleri kullanıma sunar AIFunction .
  • İlk olarak bağımlılık ekleme: AddNeo4jAgentMemory ve AddAgentMemoryFramework Genel Konak ve ASP.NET Core uygulamalarıyla tümleştirin.
  • Agent Framework'ün ötesinde: Aynı kitaplık Semantik Çekirdek ve MCP istemcileri ile de tümleştirilir ve OpenTelemetry gözlemlenebilirliğini içerir.

Resources

Prerequisites

  • Bir Neo4j örneği (şirket içinde barındırılan veya Neo4j AuraDB).
  • Dağıtılmış sohbet modeline sahip bir Microsoft Dökümhane projesi.
  • Eklemeler ve varlık ayıklama için openAI API anahtarı veya Azure OpenAI dağıtımı.
  • Ortam değişkenleri kümesi: NEO4J_URI, NEO4J_PASSWORD, FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODEL, OPENAI_API_KEY.
  • Azure CLI kimlik bilgileri yapılandırıldı (az login).
  • Python 3.10 veya üzeri.

Kurulum

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)

Temel özellikler

  • çift yönlü: Çağrıdan önce ilgili bağlamı alır ve yanıtlardan sonra yeni bellekleri kaydeder.
  • Varlık ayıklama: Çok aşamalı ayıklama işlem hattıyla konuşmalardan bir bilgi grafı oluşturur.
  • Tercih öğrenmesi: Oturumlar arasında kullanıcı tercihlerini çıkarsar ve depolar.
  • Bellek araçları: Aracıların bellekte açıkça arama yapmasını, tercihleri hatırlamasını ve varlık bağlantılarını bulmasını sağlar.

Resources

Uyarı

Neo4j GraphRAG ve bellek tümleştirmeleri şu anda Agent Framework Go için belgelenmemiştir. En son durum için bkz. Agent Framework Go deposu .

Sonraki Adımlar