Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Pamięć kontroluje, gdzie przechowywana jest historia konwersacji, ile historii jest ładowane oraz jak niezawodnie można wznawiać sesje.
Wbudowane tryby przechowywania
Struktura agenta obsługuje dwa zwykłe tryby przechowywania:
| Tryb | Co jest przechowywane | Typowe użycie |
|---|---|---|
| Stan sesji lokalnej | Pełna historia czatu w AgentSession.state (na przykład za pośrednictwem InMemoryHistoryProvider) |
Usługi, które nie wymagają trwałości konwersacji po stronie serwera |
| Magazyn zarządzany przez usługę | Stan konwersacji w usłudze; AgentSession.service_session_id wskazuje na to |
Usługi z natywną trwałą obsługą konwersacji |
Magazyn historii czatów w pamięci
Jeśli dostawca nie wymaga historii czatów po stronie serwera, program Agent Framework przechowuje historię lokalnie w sesji i wysyła odpowiednie komunikaty w każdym uruchomieniu.
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)
Zmniejszenie rozmiaru historii w pamięci
Jeśli historia będzie zbyt duża dla limitów modelu, zastosuj narzędzie redukujące.
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))
});
Uwaga / Notatka
Konfiguracja reduktora ma zastosowanie do dostawców historii w pamięci. W przypadku historii zarządzanej przez usługę zachowanie redukcji jest specyficzne dla dostawcy/usługi.
Magazyn zarządzany przez usługę
Gdy usługa zarządza historią konwersacji, sesja przechowuje identyfikator konwersacji zdalnej.
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)
Wzorzec magazynu innej firmy
W przypadku historii opartej na bazie danych, Redisie lub blobie, zaimplementuj niestandardowego dostawcę historii.
Najważniejsze wskazówki:
- Przechowuj komunikaty pod kluczem zasięgu sesji.
- Zachowaj zwracaną historię w granicach kontekstu modelu.
- Utrwalanie identyfikatorów specyficznych dla dostawcy w programie
session.state. - W języku Python tylko jeden dostawca historii powinien używać
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)
Utrwalanie sesji przy ponownych uruchomieniach
Zachowaj pełną strukturę AgentSession, a nie tylko tekst wiadomości.
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)
Ważne
Traktuj AgentSession jako nieprzezroczystym obiekt stanu i przywróć go przy użyciu tej samej konfiguracji agenta/dostawcy, która go utworzyła.
Tip
Użyj dodatkowego dostawcy historii audytu/ewaluacji (load_messages=False, store_context_messages=True), aby przechwycić wzbogacony kontekst oraz dane wejściowe/wyjściowe, nie wpływając na ładowanie historii głównej.