Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penyedia Konteks Neo4j GraphRAG menambahkan kemampuan Retrieval Augmented Generation (RAG) untuk agen Agent Framework dengan menggunakan grafik pengetahuan Neo4j. Ini mendukung mode pencarian vektor, pencarian teks lengkap, dan hibrid, menggunakan traversal grafik opsional untuk memperkaya hasil dengan entitas terkait melalui kueri Cypher kustom.
Untuk skenario grafik pengetahuan di mana hubungan antara entitas penting, penyedia ini mengambil subgraf yang relevan daripada potongan teks yang terisolasi, memberikan agen konteks yang lebih kaya untuk menghasilkan respons.
Mengapa menggunakan Neo4j untuk GraphRAG?
- Pengambilan grafik yang ditingkatkan: Pencarian vektor standar mengembalikan potongan yang terisolasi; traversal grafik mengikuti koneksi ke entitas terkait permukaan, memberi agen konteks yang lebih kaya.
- Mode pencarian fleksibel: Menggabungkan kesamaan vektor, kata kunci/BM25, dan traversal grafik dalam satu kueri.
- Kueri pengambilan kustom: Kueri Cypher memungkinkan Anda untuk sepenuhnya mengontrol hubungan mana yang akan dilalui dan konteks apa yang akan dikembalikan.
Nota
Neo4j menawarkan dua integrasi terpisah untuk Agent Framework. Penyedia ini untuk GraphRAG — mencari graf pengetahuan yang ada untuk mendasari respons agen. Untuk memori persisten yang belajar dari percakapan dan membangun grafik pengetahuan dari waktu ke waktu, lihat Penyedia Memori Neo4j.
Prasyarat
- Instans Neo4j (dihost sendiri atau Neo4j AuraDB) dengan indeks vektor atau teks lengkap yang dikonfigurasi
- Proyek Azure AI Foundry dengan model obrolan yang diterapkan dan model penyematan (misalnya
text-embedding-3-small) - Variabel lingkungan diatur:
NEO4J_URI, ,NEO4J_USERNAMENEO4J_PASSWORD, ,AZURE_AI_SERVICES_ENDPOINTAZURE_AI_EMBEDDING_NAME - Kredensial Azure CLI dikonfigurasi (
az login) - .NET 8.0 atau yang lebih baru
Penginstalan
dotnet add package Neo4j.AgentFramework.GraphRAG
Penggunaan
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));
Fitur utama
- Berbasis indeks: Bekerja dengan vektor Neo4j atau indeks teks penuh apa pun
- Traversal grafik: Kueri Cypher kustom memperkaya hasil pencarian dengan entitas terkait
- Mode pencarian: Vektor (kesamaan semantik), teks penuh (kata kunci/BM25), atau hibrid (keduanya digabungkan)
Sumber Daya
Prasyarat
- Instans Neo4j (dihost sendiri atau Neo4j AuraDB) dengan indeks vektor atau teks lengkap yang dikonfigurasi
- Proyek Azure AI Foundry dengan model obrolan yang diterapkan dan model penyematan (misalnya
text-embedding-ada-002) - Variabel lingkungan yang disetel:
NEO4J_URI,NEO4J_USERNAME,NEO4J_PASSWORD,FOUNDRY_PROJECT_ENDPOINT,FOUNDRY_MODEL,AZURE_AI_EMBEDDING_NAME - Kredensial Azure CLI dikonfigurasi (
az login) - Python 3.10 atau yang lebih baru
Penginstalan
pip install agent-framework-neo4j
Penggunaan
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)
Fitur utama
- Berbasis indeks: Bekerja dengan vektor Neo4j atau indeks teks penuh apa pun
- Traversal grafik: Kueri Cypher kustom memperkaya hasil pencarian dengan entitas terkait
- Mode pencarian: Vektor (kesamaan semantik), teks penuh (kata kunci/BM25), atau hibrid (keduanya digabungkan)