Sdílet prostřednictvím


Storage

Ú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.

Další kroky