Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Adicione contexto ao seu agente para que ele se lembre das preferências do utilizador, interações passadas ou conhecimento externo.
Por defeito, os agentes armazenam o histórico de chat num InMemoryChatHistoryProvider ou no serviço de IA subjacente, dependendo do que o serviço subjacente exige.
O agente seguinte utiliza o OpenAI Chat Completion, que não suporta nem requer armazenamento do histórico de chat em serviço, por isso cria e utiliza automaticamente um InMemoryChatHistoryProvider padrão.
using System;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("Set AZURE_OPENAI_ENDPOINT");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential())
.GetChatClient(deploymentName)
.AsAIAgent(instructions: "You are a friendly assistant. Keep your answers brief.", name: "MemoryAgent");
Para utilizar um ChatHistoryProvider personalizado, pode incluir um nas opções do agente.
using System;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("Set AZURE_OPENAI_ENDPOINT");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential())
.GetChatClient(deploymentName)
.AsAIAgent(new ChatClientAgentOptions()
{
ChatOptions = new() { Instructions = "You are a helpful assistant." },
ChatHistoryProvider = new CustomChatHistoryProvider()
});
Use uma sessão para partilhar contexto entre as execuções:
AgentSession session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("Hello! What's the square root of 9?", session));
Console.WriteLine(await agent.RunAsync("My name is Alice", session));
Console.WriteLine(await agent.RunAsync("What is my name?", session));
Sugestão
Veja aqui uma aplicação de exemplo completa e executável.
Defina um fornecedor de contexto que armazena a informação do utilizador no estado da sessão e injeta instruções de personalização:
class UserMemoryProvider(BaseContextProvider):
"""A context provider that remembers user info in session state."""
DEFAULT_SOURCE_ID = "user_memory"
def __init__(self):
super().__init__(self.DEFAULT_SOURCE_ID)
async def before_run(
self,
*,
agent: Any,
session: AgentSession | None,
context: SessionContext,
state: dict[str, Any],
) -> None:
"""Inject personalization instructions based on stored user info."""
user_name = state.get("user_name")
if user_name:
context.extend_instructions(
self.source_id,
f"The user's name is {user_name}. Always address them by name.",
)
else:
context.extend_instructions(
self.source_id,
"You don't know the user's name yet. Ask for it politely.",
)
async def after_run(
self,
*,
agent: Any,
session: AgentSession | None,
context: SessionContext,
state: dict[str, Any],
) -> None:
"""Extract and store user info in session state after each call."""
for msg in context.input_messages:
text = msg.text if hasattr(msg, "text") else ""
if isinstance(text, str) and "my name is" in text.lower():
state["user_name"] = text.lower().split("my name is")[-1].strip().split()[0].capitalize()
Crie um agente com o fornecedor de contexto:
credential = AzureCliCredential()
client = AzureOpenAIResponsesClient(
project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
deployment_name=os.environ["AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME"],
credential=credential,
)
agent = client.as_agent(
name="MemoryAgent",
instructions="You are a friendly assistant.",
context_providers=[UserMemoryProvider()],
)
Executa-o — o agente agora tem acesso ao contexto:
session = agent.create_session()
# The provider doesn't know the user yet — it will ask for a name
result = await agent.run("Hello! What's the square root of 9?", session=session)
print(f"Agent: {result}\n")
# Now provide the name — the provider stores it in session state
result = await agent.run("My name is Alice", session=session)
print(f"Agent: {result}\n")
# Subsequent calls are personalized — name persists via session state
result = await agent.run("What is 2 + 2?", session=session)
print(f"Agent: {result}\n")
# Inspect session state to see what the provider stored
provider_state = session.state.get("user_memory", {})
print(f"[Session State] Stored user name: {provider_state.get('user_name')}")
Sugestão
Veja o exemplo completo para o ficheiro executável completo.
Observação
Em Python, a persistência/memória é tratada pelos fornecedores de Contexto e Histórico. A BaseHistoryProvider é também um BaseContextProvider, e InMemoryHistoryProvider é a implementação local incorporada, em memória.
RawAgent pode adicionar InMemoryHistoryProvider() automaticamente em casos específicos (por exemplo, ao usar uma sessão sem fornecedores de contexto configurados e sem indicadores de armazenamento do lado do serviço), mas isso não é garantido em todos os cenários.
Se quiseres sempre persistência local, adiciona um InMemoryHistoryProvider explicitamente. Também certifique-se de que só um fornecedor de histórico tem load_messages=True, para não reproduzir várias lojas na mesma invocação.
Também pode adicionar um armazenamento de auditoria ao juntar outro fornecedor de histórico ao final da lista de context_providers com store_context_messages=True:
from agent_framework import InMemoryHistoryProvider
from agent_framework.mem0 import Mem0ContextProvider
memory_store = InMemoryHistoryProvider(load_messages=True) # add a history provider for persistence across sessions
agent_memory = Mem0ContextProvider("user-memory", api_key=..., agent_id="my-agent") # add Mem0 provider for agent memory
audit_store = InMemoryHistoryProvider(
"audit",
load_messages=False,
store_context_messages=True, # include context added by other providers
)
agent = client.as_agent(
name="MemoryAgent",
instructions="You are a friendly assistant.",
context_providers=[memory_store, agent_memory, audit_store], # audit store last
)
Próximos passos
Vai mais fundo:
- Armazenamento persistente — armazenar conversas em bases de dados
- Histórico de conversas — gerir o histórico e a memória das conversas