Megosztás:


Storage

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.

Következő lépések