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.
Azure Cosmos DB dá suporte a dois padrões distintos de provedor de contexto no Agent Framework. Escolha o provedor com base em se você precisa de uma transcrição exata ou de conhecimento de longo prazo extraído.
| Pattern | Provider | Behavior |
|---|---|---|
| Histórico da conversa |
CosmosChatHistoryProvider(.NET) ou CosmosHistoryProvider (Python) |
Persiste mensagens completas para que uma sessão possa ser retomada após uma reinicialização ou em outra instância do aplicativo. |
| Memória de longo prazo |
CosmosMemoryContextProvider(Python) |
Extrai fatos, conhecimento processual, memórias episódicas e resumos e recupera memórias relevantes para execuções posteriores. |
Manter o histórico de conversas
Instalar os pacotes
dotnet add package Microsoft.Agents.AI.CosmosNoSql --prerelease
dotnet add package Azure.Identity
Configurar o histórico de chat do Cosmos DB
Use a extensão de identidade gerenciada para anexar CosmosChatHistoryProvider a ChatClientAgentOptions.
using Azure.Identity;
using Microsoft.Agents.AI;
var options = new ChatClientAgentOptions
{
ChatOptions = new() { Instructions = "You are a helpful assistant." }
}.WithCosmosDBChatHistoryProviderUsingManagedIdentity(
accountEndpoint: Environment.GetEnvironmentVariable("AZURE_COSMOS_ENDPOINT")!,
databaseId: Environment.GetEnvironmentVariable("AZURE_COSMOS_DATABASE_NAME")!,
containerId: Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTAINER_NAME")!,
tokenCredential: new DefaultAzureCredential());
AIAgent agent = chatClient.AsAIAgent(options);
O inicializador de estado padrão cria uma ID de conversa. Forneça um inicializador CosmosChatHistoryProvider.State quando seu aplicativo precisar de roteamento explícito de conversação, locatário e usuário. Quando as IDs de locatário e de usuário estão presentes, o provedor usa uma chave de partição hierárquica.
Aviso
DefaultAzureCredential é conveniente para o desenvolvimento. Em produção, prefira uma credencial específica, como ManagedIdentityCredential.
Instalar o pacote
pip install agent-framework-azure-cosmos --pre
Configurar CosmosHistoryProvider
O provedor Python aceita uma credencial do Azure ou a chave da conta e usa session_id como chave de partição.
# 1. Create an Azure credential and a CosmosHistoryProvider for agent context
async with (
AzureCliCredential() as credential,
CosmosHistoryProvider(
endpoint=cosmos_endpoint,
database_name=cosmos_database_name,
container_name=cosmos_container_name,
credential=cosmos_key or credential,
) as history_provider,
# 2. Create an agent that uses Cosmos for persisted conversation history.
Agent(
client=FoundryChatClient(
project_endpoint=project_endpoint,
model=model,
credential=credential,
),
name="CosmosHistoryAgent",
instructions="You are a helpful assistant that remembers prior turns.",
context_providers=[history_provider],
default_options={"store": False},
) as agent,
):
# 3. Create a session (session_id is used as the partition key).
session = agent.create_session()
# 4. Run a multi-turn conversation; history is persisted by CosmosHistoryProvider.
response1 = await agent.run("My name is Ada and I enjoy distributed systems.", session=session)
print(f"Assistant: {response1.text}")
response2 = await agent.run("What do you remember about me?", session=session)
print(f"Assistant: {response2.text}")
print(f"Container: {history_provider.container_name}")
Armazene a versão serializada de AgentSession no armazenamento confiável do aplicativo quando os clientes precisarem recuperar o mesmo identificador de sessão posteriormente.
Note
O armazenamento de histórico do Azure Cosmos DB não está disponível atualmente para o Agent Framework Go. Implemente um provedor de histórico personalizado ou consulte o repositório Do Agent Framework Go para obter o status mais recente.
Adicionar memória semântica de longo prazo
Note
O provedor de memória de longo prazo Azure Cosmos DB está disponível para Python. Use o provedor de histórico de conversas acima quando um aplicativo .NET precisar da persistência exata da transcrição.
Prerequisites
- Uma conta Azure Cosmos DB e um banco de dados.
- Um projeto do Microsoft Foundry com implantações de modelos de chat e de embeddings.
- Acesso da identidade do Azure a ambos os recursos.
Instalar os pacotes
pip install agent-framework-azure-cosmos-memory agent-framework-foundry --pre
Configurar o provedor de memória
O mesmo projeto Foundry pode fornecer o modelo de chat, as incorporações e o modelo de extração de memória. Anexe o provedor usando context_providers.
def _build_agent(provider: CosmosMemoryContextProvider, credential: DefaultAzureCredential) -> Agent:
"""Build an agent that uses the memory provider and the same Foundry endpoint for chat."""
return Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_ENDPOINT"],
model=os.getenv("CHAT_MODEL", "gpt-4o-mini"),
credential=credential,
),
name="Memory Assistant",
instructions="You are a helpful assistant with long-term memory about the user.",
context_providers=[provider],
)
async def user_scoped_memory() -> None:
"""Memory scoped to a stable user id, so it persists across sessions and threads."""
credential = DefaultAzureCredential()
provider = CosmosMemoryContextProvider(
cosmos_endpoint=os.environ["COSMOS_ENDPOINT"],
foundry_endpoint=os.environ["FOUNDRY_ENDPOINT"],
embedding_model=os.getenv("EMBEDDING_MODEL", "text-embedding-3-large"),
chat_model=os.getenv("CHAT_MODEL", "gpt-4o-mini"),
credential=credential,
)
agent = _build_agent(provider, credential)
async with provider:
session = agent.create_session()
# Provider state is scoped by source id; set a stable user id there so memory
# persists across sessions rather than being limited to this one.
session.state.setdefault(provider.source_id, {})["user_id"] = "alice"
first = await agent.run("I love hiking and I'm allergic to peanuts.", session=session)
print("Assistant:", first.text)
# A brand-new session for the same user still recalls the earlier facts.
new_session = agent.create_session()
new_session.state.setdefault(provider.source_id, {})["user_id"] = "alice"
recall = await agent.run("What do you remember about me?", session=new_session)
print("Assistant:", recall.text)
# Let background extraction finish and persist before the client closes.
await provider.flush()
Um user_id estável mantém a memória disponível entre sessões e threads. Sem isso, o provedor restringe a memória ao ID da sessão atual.
Processamento de memória
A extração de memória é executada em segundo plano após cada turno. Use o provedor como um gerenciador de contexto assíncrono ou chame flush() antes do desligamento para que a extração pendente seja concluída antes do fechamento dos clientes.
O provedor também dá suporte a prompts de extração personalizados, cadência do processador, limites de confiança, tipos de memória e limites de recuperação.
Note
A memória de longo prazo do Azure Cosmos DB não está disponível atualmente no Agent Framework para Go. Consulte o repositório Agent Framework Go para obter o status mais recente.
Considerações sobre produção
- Derivar identificadores de usuário, locatário e sessão da identidade autenticada do aplicativo.
- Escolha chaves de partição que distribuam o tráfego ao mesmo tempo que garantam o isolamento entre locatários.
- Mantenha o Cosmos DB e os recursos do modelo em regiões aprovadas e aplique RBAC com privilégio mínimo.
- Configure políticas de vida útil, backup, retenção e exclusão para transcrições e memórias extraídas.
- Filtrar ou redigir conteúdo confidencial antes da persistência e não usar memórias extraídas diretamente para decisões de autorização.
Próximas Etapas
Vá mais fundo: