Sdílet prostřednictvím


Krok 4: Paměť a trvalost

Přidejte do agenta kontext, abyste si mohli pamatovat uživatelské předvolby, minulé interakce nebo externí znalosti.

Nastavení paměti pomocí vlastního ChatHistoryProvider:

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");

K zachování kontextu napříč spuštěními použijte relaci:

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));

Návod

Podívejte se na úplnou ukázku kompletního spustitelného souboru.

Definujte zprostředkovatele kontextu, který do každého volání agenta vloží další kontext:

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()

Vytvořte agenta s poskytovatelem kontextu:

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],
)

Poznámka:

V Pythonu se trvalost/paměť zpracovává poskytovateli historie. A BaseHistoryProvider je také BaseContextProvider a InMemoryHistoryProvider je integrovaná místní implementace. RawAgent může automaticky přidávat InMemoryHistoryProvider("memory") v konkrétních případech (například při použití relace bez nakonfigurovaných zprostředkovatelů kontextu a bez indikátorů úložiště na straně služby), ale to není zaručeno ve všech scénářích. Pokud vždy chcete mít místní trvalost, přidejte InMemoryHistoryProvider explicitně. Také se ujistěte, že má jenom jeden poskytovatel load_messages=Truehistorie , takže nepřehráváte více úložišť do stejného vyvolání.

Úložiště auditu můžete přidat také přidáním dalšího poskytovatele historie na konec context_providersstore_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
)

Spusťte ho – agent teď má přístup k kontextu:

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}")

Návod

Podívejte se na úplnou ukázku kompletního spustitelného souboru.

Další kroky

Jděte hlouběji: