Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Adicione contexto ao seu agente para que ele se lembre das preferências do utilizador, interações passadas ou conhecimento externo.
Configura a memória com um ChatHistoryProvider personalizado:
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");
Utilize uma sessão para manter o contexto entre diferentes 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 o exemplo completo para o ficheiro executável completo.
Defina um fornecedor de contexto que injeta contexto adicional em cada chamada de agente:
class UserNameProvider(BaseContextProvider):
"""A simple context provider that remembers the user's name."""
def __init__(self) -> None:
super().__init__(source_id="user-name-provider")
self.user_name: str | None = None
async def before_run(
self,
*,
agent: Any,
session: AgentSession,
context: SessionContext,
state: dict[str, Any],
) -> None:
"""Called before each agent invocation — add extra instructions."""
if self.user_name:
context.instructions.append(f"The user's name is {self.user_name}. Always address them by name.")
else:
context.instructions.append("You don't know the user's name yet. Ask for it politely.")
async def after_run(
self,
*,
agent: Any,
session: AgentSession,
context: SessionContext,
state: dict[str, Any],
) -> None:
"""Called after each agent invocation — extract information."""
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():
# Simple extraction — production code should use structured extraction
self.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,
)
memory = UserNameProvider()
agent = client.as_agent(
name="MemoryAgent",
instructions="You are a friendly assistant.",
context_providers=[memory],
)
Observação
Em Python, a persistência/memória é tratada por fornecedores de histórico. A BaseHistoryProvider é também um BaseContextProvider, e InMemoryHistoryProvider é a implementação local incorporada.
RawAgent pode adicionar InMemoryHistoryProvider("memory") 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 repositório de auditoria anexando outro provedor de histórico ao final de context_providers com store_context_messages=True:
from agent_framework import InMemoryHistoryProvider
memory_store = InMemoryHistoryProvider("memory", load_messages=True)
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, memory_store, audit_store], # audit store last
)
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 extracts and stores it
result = await agent.run("My name is Alice", session=session)
print(f"Agent: {result}\n")
# Subsequent calls are personalized
result = await agent.run("What is 2 + 2?", session=session)
print(f"Agent: {result}\n")
print(f"[Memory] Stored user name: {memory.user_name}")
Sugestão
Veja o exemplo completo para o ficheiro executável completo.
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