会話とメモリの概要

呼び出し間で会話コンテキストを保持するには、 AgentSession を使用します。

セッションでサービス管理ストレージを使用する場合、非透過的なサービス側セッション ID を含めることができます。 OpenAI 応答と会話 ID のスコープは、既定でバッキング API キーまたはプロジェクトに設定されます。ホストされるエージェントが複数のエンド ユーザーに対して同じキーまたはプロジェクトを使用する場合は、再開する前にそれらの ID をサーバー側に格納し、認証されたユーザーまたはテナントを確認します。 詳細については、「 セッション」を参照してください。

コア使用パターン

ほとんどのアプリケーションは、同じフローに従います。

  1. セッションの作成 (CreateSessionAsync())
  2. そのセッションをそれぞれに渡す RunAsync(...)
  3. シリアル化された状態からのリハイドレート (DeserializeSessionAsync(...))
  4. サービス会話 ID を続行する (エージェントによって異なります (例: myChatClientAgent.CreateSessionAsync("existing-id"))
  1. セッションの作成 (create_session())
  2. そのセッションをそれぞれに渡す run(...)
  3. サービス会話 ID (get_session(...)) またはシリアル化された状態からのリハイドレート
  1. セッションの作成 (CreateSession(...))
  2. RunText(...)にそのセッションをagent.WithSession(session)とともに渡します
  3. 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 構造体とシリアル化
コンテキスト プロバイダー 組み込みおよびカスタムコンテキスト/履歴プロバイダー パターン
コンテキスト圧縮 会話の増加を効率的に管理する
ストレージ 組み込みのストレージ モードと外部永続化戦略

次のステップ