呼び出し間で会話コンテキストを保持するには、 AgentSession を使用します。
セッションでサービス管理ストレージを使用する場合、非透過的なサービス側セッション ID を含めることができます。 OpenAI 応答と会話 ID のスコープは、既定でバッキング API キーまたはプロジェクトに設定されます。ホストされるエージェントが複数のエンド ユーザーに対して同じキーまたはプロジェクトを使用する場合は、再開する前にそれらの ID をサーバー側に格納し、認証されたユーザーまたはテナントを確認します。 詳細については、「 セッション」を参照してください。
コア使用パターン
ほとんどのアプリケーションは、同じフローに従います。
- セッションの作成 (
CreateSessionAsync()) - そのセッションをそれぞれに渡す
RunAsync(...) - シリアル化された状態からのリハイドレート (
DeserializeSessionAsync(...)) - サービス会話 ID を続行する (エージェントによって異なります (例:
myChatClientAgent.CreateSessionAsync("existing-id"))
- セッションの作成 (
create_session()) - そのセッションをそれぞれに渡す
run(...) - サービス会話 ID (
get_session(...)) またはシリアル化された状態からのリハイドレート
- セッションの作成 (
CreateSession(...)) - 各
RunText(...)にそのセッションをagent.WithSession(session)とともに渡します -
json.Unmarshal(...)を使用して、シリアル化された状態からagent.Sessionにリハイドレートする
Go agent パッケージは、会話状態のコア型を提供します。会話に関連付けられたキーと値の状態の agent.Session 、コンテキストの挿入と永続化のための agent.ContextProvider 。
// Create and reuse a session
AgentSession session = await agent.CreateSessionAsync();
var first = await agent.RunAsync("My name is Alice.", session);
var second = await agent.RunAsync("What is my name?", session);
// Persist and restore later
var serialized = agent.SerializeSession(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
# Create and reuse a session
session = agent.create_session()
first = await agent.run("My name is Alice.", session=session)
second = await agent.run("What is my name?", session=session)
# Rehydrate by service conversation ID when needed
service_session = agent.get_session(service_session_id="<service-conversation-id>")
# Persist and restore later
serialized = session.to_dict()
resumed = AgentSession.from_dict(serialized)
session, err := a.CreateSession(ctx)
if err != nil {
panic(err)
}
複数ターンの会話にはセッションを使用する
resp, _ := a.RunText(ctx, "My name is Alice.", agent.WithSession(session)).Collect()
resp, _ = a.RunText(ctx, "What is my name?", agent.WithSession(session)).Collect()
セッションを保持する
セッションは、ストレージ用に JSON にシリアル化して、後で再開できます。
data, err := json.Marshal(session)
if err != nil {
panic(err)
}
// store data...
// later:
var resumed agent.Session
if err := json.Unmarshal(data, &resumed); err != nil {
panic(err)
}
resp, err := a.RunText(ctx, "Continue from where we left off.", agent.WithSession(&resumed)).Collect()
ガイド マップ
| ページ | フォーカス |
|---|---|
| セッション |
AgentSession 構造体とシリアル化 |
| コンテキスト プロバイダー | 組み込みおよびカスタムコンテキスト/履歴プロバイダー パターン |
| コンテキスト圧縮 | 会話の増加を効率的に管理する |
| ストレージ | 組み込みのストレージ モードと外部永続化戦略 |