Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A tárterület szabályozza, hogy hol vannak tárolva a beszélgetési előzmények, milyen mennyiségű előzmény töltődik be, és hogyan biztosítható a munkamenetek megbízható folytatása.
Beépített tárolási módok
Az Agent Framework két normál tárolási módot támogat:
| Mód | A tárolt adatok | Tipikus használat |
|---|---|---|
| Helyi munkamenet állapota | Teljes csevegési előzmények AgentSession.state segítségével (például InMemoryHistoryProvider) |
A kiszolgálóoldali beszélgetések megőrzését nem igénylő szolgáltatások |
| Szolgáltatás által felügyelt tároló | Beszélgetés állapota a szolgáltatásban; AgentSession.service_session_id rámutat rá |
Natív állandó beszélgetési támogatással rendelkező szolgáltatások |
Memóriabeli csevegési előzmények tárolója
Ha egy szolgáltatónak nincs szüksége kiszolgálóoldali csevegési előzményekre, az Agent Framework helyben tárolja az előzményeket a munkamenetben, és minden futtatáskor releváns üzeneteket küld.
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)
Memóriabeli előzmények méretének csökkentése
Ha az előzmények túl nagyok a modell korlátaihoz, alkalmazzon egy szűkítőt.
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))
});
Megjegyzés:
A redukciós konfiguráció a memóriaelőzmény-szolgáltatókra vonatkozik. A szolgáltatás által felügyelt előzmények esetében a csökkentési viselkedés szolgáltatói/szolgáltatásspecifikus.
Szolgáltatás által felügyelt tároló
Amikor a szolgáltatás kezeli a beszélgetési előzményeket, a munkamenet egy távoli beszélgetés-azonosítót tárol.
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)
Külső tárolási minta
Adatbázis-/Redis-/blobalapú előzmények esetén implementáljon egy egyéni előzményszolgáltatót.
Fő útmutató:
- Üzenetek tárolása egy munkamenet-hatókörű kulcs segítségével.
- A visszaadott előzményeket tartsa a modell környezeti korlátai között.
- Szolgáltatóspecifikus azonosítókat tároljon a
session.state-ben. - Pythonban csak egy előzményszolgáltatónak kellene használnia
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)
Munkamenetek folytatása újraindítások között
Ne csak az üzenet szövegét, hanem a teljes AgentSession-t őrizze meg.
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)
Fontos
Kezelje AgentSession átlátszatlan állapotobjektumként, és állítsa vissza ugyanazzal az ügynök-/szolgáltatói konfigurációval, amely létrehozta.
Jótanács
Használjon egy további auditelőzmény-értékelési szolgáltatót (load_messages=False, store_context_messages=True) a gazdagabb kontextus és a bemenet/kimenet rögzítéséhez, anélkül hogy ez befolyásolná az elsődleges előzménytöltést.