Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ajoutez un contexte à votre agent pour qu’il puisse mémoriser les préférences utilisateur, les interactions passées ou les connaissances externes.
Par défaut, les agents stockent l’historique des conversations dans un InMemoryChatHistoryProvider ou dans le service IA sous-jacent, en fonction de ce que le service sous-jacent requiert.
L’agent suivant utilise OpenAI Chat Completion, qui ne prend ni en charge ni ne nécessite le stockage de l’historique des conversations in-service afin de créer et d’utiliser automatiquement un InMemoryChatHistoryProvider.
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");
Pour utiliser un ChatHistoryProvider personnalisé, vous pouvez en passer un aux options de l’agent :
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()
});
Utilisez une session pour partager le contexte entre les exécutions :
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));
Conseil / Astuce
Consultez cet article pour obtenir un exemple d’application exécutable complet.
Définissez un fournisseur de contexte qui stocke les informations utilisateur dans l’état de session et injecte des instructions de personnalisation :
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()
Créez un agent avec le fournisseur de contexte :
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()],
)
Exécutez-le : l’agent a désormais accès au contexte :
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')}")
Conseil / Astuce
Consultez l’exemple complet du fichier exécutable complet.
Note
Dans Python, la persistance/mémoire est gérée par les fournisseurs de contexte et d’historique. A BaseHistoryProvider est également un BaseContextProvider, et InMemoryHistoryProvider est l’implémentation locale intégrée en mémoire.
RawAgent peut ajouter InMemoryHistoryProvider() automatiquement des cas spécifiques (par exemple, lors de l’utilisation d’une session sans fournisseur de contexte configuré et aucun indicateur de stockage côté service), mais cela n’est pas garanti dans tous les scénarios.
Si vous souhaitez toujours une persistance locale, ajoutez une InMemoryHistoryProvider valeur explicite. Assurez-vous également qu’un seul fournisseur d’historique ait load_messages=True, afin que vous ne rejouiez pas plusieurs bases de données dans une même invocation.
Vous pouvez également ajouter un magasin d’audit en ajoutant un autre fournisseur d’historique à la fin de la liste context_providersstore_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
)
Prochaines étapes
Aller plus loin :
- Stockage persistant : stocker des conversations dans des bases de données
- Historique des conversations : gérer l’historique des conversations et la mémoire