Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tambahkan konteks ke agen Anda sehingga dapat mengingat preferensi pengguna, interaksi sebelumnya, atau pengetahuan eksternal.
Siapkan memori dengan ChatHistoryProvider khusus.
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");
Gunakan sesi untuk menyimpan konteks di antara eksekusi:
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));
Petunjuk / Saran
Lihat sampel lengkap untuk file lengkap yang dapat dijalankan.
Tentukan penyedia konteks yang menyuntikkan konteks tambahan ke dalam setiap panggilan agen:
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()
Buat agen dengan penyedia konteks:
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],
)
Nota
Di Python, persistensi/memori ditangani oleh penyedia riwayat. A BaseHistoryProvider juga merupakan BaseContextProvider, dan InMemoryHistoryProvider merupakan implementasi lokal bawaan.
RawAgent dapat menambahkan InMemoryHistoryProvider("memory") secara otomatis dalam kasus tertentu (misalnya, saat menggunakan sesi tanpa penyedia konteks yang dikonfigurasi dan tidak ada indikator penyimpanan sisi layanan), tetapi ini tidak dijamin dalam semua skenario.
Jika Anda selalu menginginkan persistensi lokal, tambahkan InMemoryHistoryProvider secara eksplisit. Pastikan juga hanya satu penyedia riwayat yang memiliki load_messages=True, sehingga Anda tidak memutar ulang beberapa toko ke dalam pemanggilan yang sama.
Anda juga dapat menambahkan penyimpanan audit dengan menambahkan penyedia riwayat lain di akhir context_providers dengan store_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
)
Jalankan — agen sekarang memiliki akses ke konteks:
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}")
Petunjuk / Saran
Lihat sampel lengkap untuk file lengkap yang dapat dijalankan.
Langkah selanjutnya
Masuk lebih dalam:
- Penyimpanan persisten — menyimpan percakapan dalam database
- Riwayat obrolan — mengelola riwayat obrolan dan memori