Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Úložiště určuje, kde se nachází historie konverzací, kolik historie se načte a jak spolehlivě se dají relace obnovit.
Integrované režimy úložiště
Agent Framework podporuje dva běžné režimy úložiště:
| Režim | Co je uloženo | Typické použití |
|---|---|---|
| Místní stav relace | Úplná historie chatu v AgentSession.state (například prostřednictvím InMemoryHistoryProvider) |
Služby, které nevyžadují trvalost konverzací na straně serveru |
| Úložiště spravované službou | Stav konverzace ve službě; AgentSession.service_session_id odkazuje na ni |
Služby s nativní podporou trvalých konverzací |
Úložiště historie chatu v paměti
Pokud poskytovatel nevyžaduje historii chatu na straně serveru, agent Framework uchovává historii místně v relaci a odesílá relevantní zprávy při každém spuštění.
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)
Zmenšení velikosti historie v paměti
Pokud se historie pro limity modelů příliš rozrůstá, použijte redukční faktor.
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))
});
Poznámka:
Konfigurace redukčního nástroje se vztahuje na zprostředkovatele historie v paměti. V případě historie spravované služby je chování redukce specifické pro poskytovatele nebo službu.
Úložiště spravované službou
Když služba spravuje historii konverzací, relace uloží identifikátor vzdálené konverzace.
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)
Model úložiště třetích stran
Pro databázi, Redis nebo historii založené na objektech blob implementujte vlastního poskytovatele historie.
Klíčové pokyny:
- Ukládat zprávy pod klíčem s rozsahovou platností relace.
- Uchovávejte vrácenou historii v rámci omezení kontextu modelu.
- Zachovat identifikátory specifické pro providera v
session.statesouboru. - V Pythonu by měl používat
load_messages=Truepouze jeden poskytovatel historie .
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)
Zachování relací během restartů
Zachovejte celý AgentSession, nejen text zprávy.
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)
Důležité
Zacházejte s AgentSession jako s neprůhledným stavovým objektem a obnovte ho se stejnou konfigurací agenta a poskytovatele, která ho vytvořila.
Návod
Použijte dalšího zprostředkovatele historie auditu/evaluace (load_messages=False, store_context_messages=True) k zachycení rozšířeného kontextu a vstupu/výstupu, aniž by to ovlivnilo načítání primární historie.