Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- Kalıcı depolama — konuşmaları veritabanlarında depolama
- Sohbet geçmişi — sohbet geçmişini ve belleği yönetme