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.
Penyimpanan menentukan di mana riwayat percakapan disimpan, berapa banyak data riwayat yang dimuat, dan seberapa andal sesi dapat dimulai kembali.
Mode penyimpanan bawaan
Agent Framework mendukung dua mode penyimpanan reguler:
| Pengaturan | Apa yang disimpan | Penggunaan umum |
|---|---|---|
| Status sesi lokal | Riwayat obrolan lengkap di AgentSession.state (misalnya melalui InMemoryHistoryProvider) |
Layanan yang tidak memerlukan persistensi percakapan sisi server |
| Penyimpanan yang dikelola layanan | Status percakapan dalam layanan; AgentSession.service_session_id menunjuk ke dalamnya |
Layanan dengan dukungan percakapan persisten bawaan |
Penyimpanan riwayat obrolan dalam memori
Saat penyedia tidak memerlukan riwayat obrolan sisi server, Agent Framework menyimpan riwayat secara lokal dalam sesi dan mengirim pesan yang relevan pada setiap proses.
AIAgent agent = new OpenAIClient("<your_api_key>")
.GetChatClient(modelName)
.AsAIAgent(instructions: "You are a helpful assistant.", name: "Assistant");
AgentSession session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate.", session));
// Works when in-memory storage is active.
IList<ChatMessage>? messages = session.GetService<IList<ChatMessage>>();
from agent_framework import InMemoryHistoryProvider
from agent_framework.openai import OpenAIChatClient
agent = OpenAIChatClient().as_agent(
name="StorageAgent",
instructions="You are a helpful assistant.",
context_providers=[InMemoryHistoryProvider("memory", load_messages=True)],
)
session = agent.create_session()
await agent.run("Remember that I like Italian food.", session=session)
Mengurangi ukuran riwayat dalam memori
Jika riwayat tumbuh terlalu besar untuk batas model, terapkan pengurang.
AIAgent agent = new OpenAIClient("<your_api_key>")
.GetChatClient(modelName)
.AsAIAgent(new ChatClientAgentOptions
{
Name = "Assistant",
ChatOptions = new() { Instructions = "You are a helpful assistant." },
ChatHistoryProviderFactory = (ctx, ct) => new ValueTask<ChatHistoryProvider>(
new InMemoryChatHistoryProvider(
new MessageCountingChatReducer(20),
ctx.SerializedState,
ctx.JsonSerializerOptions,
InMemoryChatHistoryProvider.ChatReducerTriggerEvent.AfterMessageAdded))
});
Nota
Konfigurasi reducer berlaku untuk penyedia riwayat dalam memori. Untuk riwayat yang dikelola oleh layanan, perilaku pengurangan tergantung pada penyedia atau layanan.
Penyimpanan yang dikelola layanan
Saat layanan mengelola riwayat percakapan, sesi menyimpan pengidentifikasi percakapan jarak jauh.
AIAgent agent = new OpenAIClient("<your_api_key>")
.GetOpenAIResponseClient(modelName)
.AsAIAgent(instructions: "You are a helpful assistant.", name: "Assistant");
AgentSession session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate.", session));
# Rehydrate when the service already has the conversation state.
session = agent.get_session(service_session_id="<service-conversation-id>")
response = await agent.run("Continue this conversation.", session=session)
Pola penyimpanan pihak ketiga
Untuk riwayat database/Redis/blob-backed, terapkan penyedia riwayat kustom.
Panduan utama:
- Simpan pesan di bawah kunci yang terlingkup sesi.
- Pertahankan riwayat yang dikembalikan dalam batas konteks model.
- Pertahankan pengidentifikasi khusus penyedia di
session.state. - Di Python, hanya satu penyedia riwayat yang harus menggunakan
load_messages=True.
from agent_framework.openai import OpenAIChatClient
history = DatabaseHistoryProvider(db_client)
agent = OpenAIChatClient().as_agent(
name="StorageAgent",
instructions="You are a helpful assistant.",
context_providers=[history],
)
session = agent.create_session()
await agent.run("Store this conversation.", session=session)
Mempertahankan sesi selama memulai ulang
Pertahankan teks lengkap AgentSession, tidak hanya pesan.
JsonElement serialized = agent.SerializeSession(session);
// Store serialized payload in durable storage.
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
serialized = session.to_dict()
# Store serialized payload in durable storage.
resumed = AgentSession.from_dict(serialized)
Penting
Perlakukan AgentSession sebagai objek status buram dan pulihkan dengan konfigurasi agen/penyedia yang sama yang membuatnya.
Petunjuk / Saran
Gunakan penyedia riwayat audit/eval tambahan (load_messages=False, store_context_messages=True) untuk menangkap konteks yang diperkaya ditambah input/output tanpa memengaruhi pemuatan riwayat utama.