Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Поставщик контекста Neo4j GraphRAG добавляет возможности дополненной генерации (RAG) в агенты фреймворка Agent Framework, используя граф знаний Neo4j. Он поддерживает векторные, полнотекстовые и гибридные режимы поиска с необязательным обходом графа для обогащения результатов связанными сущностями с помощью пользовательских запросов Cypher.
Для сценариев графа знаний, в которых отношения между сущностями имеют значение, этот поставщик извлекает соответствующие подграфы, а не изолированные фрагменты текста, предоставляя агентам более широкий контекст для создания ответов.
Зачем использовать Neo4j для GraphRAG?
- Расширенный поиск графа: стандартный векторный поиск возвращает изолированные блоки; Обход графа следует подключениям к связанным сущностям поверхности, предоставляя агентам более широкий контекст.
- Гибкие режимы поиска: объединение векторного сходства, ключевых слов/BM25 и обхода графа в одном запросе.
- Пользовательские запросы извлечения: запросы Cypher позволяют точно контролировать, какие отношения обходить и какой контекст возвращать.
Замечание
Neo4j предлагает две отдельные интеграции для Agent Framework. Этот поставщик предоставлен для GraphRAG — поиска существующего графа знаний для обоснования ответов агента. Сведения о постоянной памяти , которая учится в беседах и создает граф знаний с течением времени, см. в разделе "Поставщик памяти Neo4j".
Необходимые условия
- Экземпляр Neo4j (локальный или Neo4j AuraDB) с настроенным векторным или полнотекстовым индексом
- Проект Azure AI Foundry с развернутой моделью чата и моделью внедрения (например)
text-embedding-3-small - Набор переменных среды:
NEO4J_URI,NEO4J_USERNAME,NEO4J_PASSWORDAZURE_AI_SERVICES_ENDPOINTAZURE_AI_EMBEDDING_NAME - Настроенные учетные данные Azure CLI (
az login) - .NET 8.0 или более поздней версии
Installation
dotnet add package Neo4j.AgentFramework.GraphRAG
Использование
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));
Ключевые особенности
- На основе индекса: работает с любым векторным или полнотекстовым индексом Neo4j
- Обход графа: настраиваемые запросы Cypher обогатят результаты поиска связанными сущностями
- Режимы поиска: "Vector" (семантическое сходство), "fulltext" (ключевое слово/BM25) или "гибрид" (оба объединенные)
Ресурсы
Необходимые условия
- Экземпляр Neo4j (локальный или Neo4j AuraDB) с настроенным векторным или полнотекстовым индексом
- Проект Azure AI Foundry с развернутой моделью чата и моделью внедрения (например)
text-embedding-ada-002 - Набор переменных среды:
NEO4J_URI,NEO4J_USERNAME, ,NEO4J_PASSWORDFOUNDRY_PROJECT_ENDPOINTFOUNDRY_MODELAZURE_AI_EMBEDDING_NAME - Настроенные учетные данные Azure CLI (
az login) - Python 3.10 или более поздней версии
Installation
pip install agent-framework-neo4j
Использование
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)
Ключевые особенности
- На основе индекса: работает с любым векторным или полнотекстовым индексом Neo4j
- Обход графа: настраиваемые запросы Cypher обогатят результаты поиска связанными сущностями
- Режимы поиска: "Vector" (семантическое сходство), "fulltext" (ключевое слово/BM25) или "гибрид" (оба объединенные)