Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Neo4j dá suporte a dois padrões distintos de provedor de contexto do Agent Framework. Eles compartilham um banco de dados de grafo, mas usam pacotes e fluxos de dados separados.
| Pattern | Behavior |
|---|---|
| GraphRAG | Pesquisa em um grafo de conhecimento indexado existente usando recuperação vetorial, de texto completo ou híbrida e pode percorrer entidades relacionadas usando Cypher. |
| Memória persistente | Extrai entidades, fatos, preferências e raciocínio de conversas e cria um grafo de conhecimento que pode ser recuperado entre sessões. |
GraphRAG a partir de um grafo de conhecimento existente
O Provedor de Contexto do GraphRAG neo4j adiciona funcionalidades de RAG (Geração Aumentada de Recuperação) a agentes do Agent Framework usando um grafo de conhecimento Neo4j. Ele dá suporte a modos de pesquisa vetor, texto completo e híbrido, com passagem de grafo opcional para enriquecer resultados com entidades relacionadas por meio de consultas cypher personalizadas.
Para outros serviços de recuperação gerenciada, consulte Pesquisa de IA do Azure e Microsoft Foundry.
Para cenários de grafo de conhecimento em que as relações entre entidades importam, esse provedor recupera subgrafos relevantes em vez de partes de texto isoladas, dando aos agentes um contexto mais avançado para gerar respostas.
Por que usar o Neo4j para GraphRAG?
- Recuperação aprimorada do grafo: a pesquisa de vetor padrão retorna partes isoladas; a passagem de grafo segue conexões com entidades relacionadas à superfície, proporcionando aos agentes um contexto mais avançado.
- Modos de pesquisa flexíveis: combinar similaridade de vetor, palavra-chave/BM25 e passagem de grafo em uma única consulta.
- Consultas de recuperação personalizadas: as consultas cypher permitem controlar exatamente quais relações percorrer e qual contexto retornar.
Prerequisites
- Uma instância neo4j (auto-hospedada ou Neo4j AuraDB) com um vetor ou índice de texto completo configurado
- Um projeto do Fábrica de IA do Azure com um modelo de chat implantado e um modelo de inserção (por exemplo
text-embedding-3-small) - Conjunto de variáveis de ambiente:
NEO4J_URI, ,NEO4J_USERNAME,NEO4J_PASSWORD,AZURE_AI_SERVICES_ENDPOINT,AZURE_AI_EMBEDDING_NAME - Credenciais da CLI do Azure configuradas (
az login) - .NET 8.0 ou posterior
Installation
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));
Características principais
- Controlado por índice: funciona com qualquer vetor Neo4j ou índice de texto completo
- Travesia de grafo: Consultas Cypher personalizadas enriquecem resultados de pesquisa com entidades relacionadas
- Modos de pesquisa: Vetor (similaridade semântica), texto completo (palavra-chave/BM25) ou híbrido (ambos combinados)
Resources
Prerequisites
- Uma instância neo4j (auto-hospedada ou Neo4j AuraDB) com um vetor ou índice de texto completo configurado
- Um projeto do Fábrica de IA do Azure com um modelo de chat implantado e um modelo de inserção (por exemplo
text-embedding-ada-002) - Conjunto de variáveis de ambiente:
NEO4J_URI, ,NEO4J_USERNAME,NEO4J_PASSWORD,FOUNDRY_PROJECT_ENDPOINT, ,FOUNDRY_MODEL,AZURE_AI_EMBEDDING_NAME - Credenciais da CLI do Azure configuradas (
az login) - Python 3.10 ou posterior
Installation
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)
Características principais
- Controlado por índice: funciona com qualquer vetor Neo4j ou índice de texto completo
- Travesia de grafo: Consultas Cypher personalizadas enriquecem resultados de pesquisa com entidades relacionadas
- Modos de pesquisa: Vetor (similaridade semântica), texto completo (palavra-chave/BM25) ou híbrido (ambos combinados)
Resources
Note
O suporte para Go a este recurso estará disponível em breve. Consulte o repositório Agent Framework Go para obter o status mais recente.
Memória persistente do agente
As integrações de memória neo4j armazenam e recuperam interações do agente, extraindo automaticamente entidades e criando um grafo de conhecimento ao longo do tempo.
Os provedores gerenciam:
- Memória de curto prazo: histórico de conversas e contexto recente.
- Memória de longo prazo: entidades, preferências e fatos extraídos das interações.
- Memória de raciocínio: rastreamentos de raciocínio anteriores e padrões de uso de ferramentas.
Por que usar o Neo4j para memória do agente?
- Persistência do grafo de conhecimento: as memórias são armazenadas como entidades conectadas, não registros simples, de modo que o agente pode raciocinar sobre relações entre informações lembradas.
- Extração automática de entidade: as conversas são analisadas em entidades e relações estruturadas sem um esquema definido manualmente.
- Recuperação entre sessões: preferências, fatos e rastros de raciocínio persistem entre sessões e aparecem por meio de provedores de contexto.
Note
O pacote .NET (AgentMemory) é uma porta de .NET independente mantida pela comunidade do provedor de memória neo4j Labs. Não é um pacote oficial do Neo4j Labs. Consulte o repositório AgentMemory (.NET) para obter a origem e os detalhes.
Prerequisites
- Uma instância neo4j (auto-hospedada ou Neo4j AuraDB).
- Uma implantação do Azure OpenAI ou do Microsoft Foundry com um modelo de chat e um modelo de embeddings.
- Conjunto de variáveis de ambiente:
NEO4J_URI, ,NEO4J_USERNAME,NEO4J_PASSWORD,AZURE_OPENAI_ENDPOINT. - credenciais da CLI do Azure configuradas (
az login) ou chave de API. - .NET 8.0 ou posterior.
Installation
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);
Características principais
-
Bidirecional:
Neo4jMemoryContextProviderrecupera a memória relevante antes de cada execução e salva a nova memória após cada execução. - Extração de entidades: o pipeline de extração configurável cria um grafo de conhecimento a partir de conversas.
-
Aprendizado de preferência: preferências, fatos e entidades podem ser lembrados por um novo
AgentSessionpara o mesmo usuário. -
Ferramentas de memória:
MemoryToolFactoryexpõe instânciasAIFunctionpara operações explícitas de pesquisa, memória e recall. -
Prioridade para injeção de dependência:
AddNeo4jAgentMemoryeAddAgentMemoryFrameworkse integram a aplicativos do Generic Host e do ASP.NET Core. - Além do Agent Framework: a mesma biblioteca também se integra aos clientes Kernel semântico e MCP e inclui a observabilidade do OpenTelemetry.
Resources
Prerequisites
- Uma instância neo4j (auto-hospedada ou Neo4j AuraDB).
- Um projeto Microsoft Foundry com um modelo de chat implantado.
- Uma chave de API da OpenAI ou uma implantação do Azure OpenAI para embeddings e extração de entidades.
- Conjunto de variáveis de ambiente:
NEO4J_URI, ,NEO4J_PASSWORD,FOUNDRY_PROJECT_ENDPOINT,FOUNDRY_MODEL,OPENAI_API_KEY. - Credenciais da CLI do Azure configuradas (
az login). - Python 3.10 ou posterior.
Installation
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)
Características principais
- Bidirecional: recupera o contexto relevante antes da invocação e salva novas memórias após as respostas.
- Extração de entidades: constrói um grafo de conhecimento a partir de conversas com um pipeline de extração em vários estágios.
- Aprendizado de preferência: infere e armazena as preferências do usuário entre sessões.
- Ferramentas de memória: permite que os agentes pesquisem explicitamente a memória, lembrem-se das preferências e encontrem conexões de entidade.
Resources
Note
No momento, o GraphRAG neo4j e as integrações de memória não estão documentados para o Agent Framework Go. Consulte o repositório Agent Framework Go para obter o status mais recente.