Aracılığıyla paylaş


4. Adım: Bellek ve Kalıcılık

Kullanıcı tercihlerini, geçmiş etkileşimleri veya dış bilgileri anımsayabilmesi için aracınıza bağlam ekleyin.

Özel ChatHistoryProvider ile belleği ayarlayın:

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

Çalıştırmalar arasında bağlamı kalıcı hale getirmek için bir oturum kullanın:

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

Tip

Çalıştırılabilir dosyanın tamamı için tam örneğe bakın.

Her aracı çağrısına ek bağlam ekleyen bir bağlam sağlayıcısı tanımlayın:

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

Bağlam sağlayıcısı ile bir aracı oluşturun:

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

Uyarı

Python'da kalıcılık/bellek geçmiş sağlayıcıları tarafından işlenir. A BaseHistoryProvider aynı zamanda bir BaseContextProviderve InMemoryHistoryProvider yerleşik yerel uygulamasıdır. RawAgent belirli durumlarda (örneğin, yapılandırılmış bağlam sağlayıcıları ve hizmet tarafı depolama göstergeleri olmayan bir oturum kullanırken) otomatik olarak eklenebilir InMemoryHistoryProvider("memory") , ancak bu tüm senaryolarda garanti edilmez. Her zaman yerel kalıcılık istiyorsanız, açıkça bir InMemoryHistoryProvider ekleyin. Ayrıca, yalnızca bir tane geçmiş sağlayıcısının load_messages=True içerdiğinden emin olun, böylece birden fazla depoyu aynı çağrıya aktarmazsınız.

Başka bir geçmiş sağlayıcısını context_providersstore_context_messages=True ile sona ekleyerek bir denetim deposu da ekleyebilirsiniz.

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
)

Bunu çalıştırın — ajan artık bağlama erişimi var.

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

Tip

Çalıştırılabilir dosyanın tamamı için tam örneğe bakın.

Sonraki Adımlar

Daha derine gidin: