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.

Varsayılan olarak aracılar, temel alınan hizmetin gereğine bağlı olarak sohbet geçmişini ya InMemoryChatHistoryProvider içinde ya da temel yapay zeka hizmetinde depolar.

Aşağıdaki temsilci, hizmet içi sohbet geçmişi depolama işlevini desteklemeyen veya gerektirmeyen OpenAI Sohbet Tamamlama Özelliği'ni kullanır, bu nedenle otomatik olarak bir InMemoryChatHistoryProvider oluşturur ve kullanır.

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

Özel ChatHistoryProvider kullanmak için aracı seçeneklerine bir tane geçirebilirsiniz:

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

Çalıştırmalar arasında bağlamı paylaşmak için 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

Tam çalıştırılabilir örnek uygulama için buraya bakın.

Kullanıcı bilgilerini oturum durumunda depolayan ve kişiselleştirme yönergelerini ekleyen bir bağlam sağlayıcısı tanımlayın:

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

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

agent = client.as_agent(
    name="MemoryAgent",
    instructions="You are a friendly assistant.",
    context_providers=[UserMemoryProvider()],
)

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

Tip

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

Uyarı

Python'da kalıcılık/bellek Bağlam ve Geçmiş sağlayıcıları tarafından işlenir. A BaseHistoryProvider aynı zamanda bir BaseContextProviderve InMemoryHistoryProvider yerleşik yerel, bellek içi uygulamadı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() , 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ıyı context_providers listesinin sonuna store_context_messages=True ekleyerek bir denetim deposu da ekleyebilirsiniz.

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
)

Sonraki Adımlar

Daha derine gidin: