HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

持ち運べないセッション

The Session You Cannot take with you (earendil.com)

683 pointsby apitman196 コメント

要約

AIの推論APIは、当初はシンプルな入出力のやり取りから会話履歴をユーザーが管理できるという約束でしたが、現在ではプロバイダー固有の暗号化された状態が増え、セッションのポータビリティが失われつつあります。これにより、ユーザーはセッションの真の所有権を失い、AIとのやり取りの記録がプロバイダーに依存するようになっています。

全文翻訳

セッションを持ち運べないDate:Thu, 30 Jul 2026 From:Earendil Engineering <rfc@earendil.com> To:You Subject:The Session You Cannot Take With You 推論APIの当初の約束は、驚くほどシンプルでした。入力を送信し、出力を受け取る。両方を保持すれば、会話が成立します。それを検査したり、アーカイブしたり、再生したり、別のモデルに渡したりできました。その抽象化は、完全には真実ではありませんでした。プロンプトキャッシュは他人のGPU上に存在し、トークン化はモデル間で異なり、サンプリングは再現不可能(そして意図的にそうされています)です。しかし、トランスクリプトという形式でのセッションの意味的な記録は、依然としてユーザーのものでした。トランスクリプトには、指示、メッセージ、ツール呼び出し、ツールの結果が含まれるべきです。十分に能力のある別のモデルは、同一に続行できないかもしれませんが、何が起こったかを理解し、引き継ぐことはできたでしょう。推論APIは、少なくともある程度、そのプロパティから離れていっています。ますます、テキストとプロバイダー固有の状態の混合物を返すようになり、それは非常に意図的にポータブルではありません。ユーザーに請求されるが、せいぜい無用な要約付きの不透明な、暗号化されたブロブとしてのみ返される推論トークン。モデルがクライアントが見たことのないソース資料を見るWeb検索。元のプロバイダーだけが復号できる圧縮されたコンテキスト。エージェントを実行しているアプリケーションから暗号化されたペイロードの形で隠されたサブエージェントの指示とメッセージ。どこでも解決できないファイル、ベクトルストア、コンテナ、キャッシュへの参照。プロバイダーのサーバーに完全に保存されているIDによってのみキー付けされる応答と会話の状態。各機能には、プロバイダーが簡単に思いつく基本的な正当化があり、それがユーザーにとってなぜ良いのかについての良い議論があります。これらすべてが、AIセッションの所有権の現実を変えます。あなたのマシン上のトランスクリプトは、もはやあなたのセッションではなく、推論プロバイダーに属するセッションの運用状態の断片的なビューであり、あなたのものではありません。私たちはこの方向性を好んでおらず、それがユーザーであるあなたにとって何を意味し、この分野でツールを開発している私たちにとって何を意味するのかについて少し話したいと思います。セッション所有権のための実践的なテストポータブルなセッションとは、あるモデルから別のモデルに切り替えても同じ次のトークンが生成されることを意味するのではありません。モデルには異なる能力、訓練された個性、コンテキストウィンドウ、ツールの使用方法があるため、それは当然のことです。そして、そもそもすべてがかなり非決定論的です。ポータビリティとは、より控えめな意味です。const transcript = session.export(); revokeCredentials(oldProvider); session = newProvider.continueFrom(transcript); アーカイブには、別のモデルが作業を続行するのに十分な理解可能な情報が含まれているべきです。IDを解決したり、ブロブを復号したり、検索結果を記憶したり、要約を再構築したりするために、古いプロバイダーを必要としないはずです。これにより、5つの有用なテストが得られます。検査:ユーザーは、モデルが見たもの、ツールが何をしたか、エージェントが互いに何を伝えたかを見ることができますか?エクスポート:セッションは、ダウンロード可能な通常のアーティファクトを除いて、自己完結していますか?再生:別の実装が意味的に同等のコンテキストを再構築できますか?監査:後で人間がシステムがアクションを実行した理由を説明できますか?削除:ユーザーは、セッションが依存するすべてのサーバーサイドコピーを特定して削除できますか?応答IDはトランスクリプトではなく、ユーザーが復号できない暗号文はユーザー制御の状態ではなく、引用のリストは検索結果によってモデルのコンテキストに配置された証拠ではありません。誰のための暗号化?これらの機能の名前とマーケティングは誤解を招く可能性があります。encrypted_contentは、ユーザー制御下のプライバシー機能のように聞こえます。通常、それはクライアントが読み取れず、プロバイダーだけが開くことができるカプセルです。プロバイダーはキーを選択し、独自のモデルのためにコンテンツを復号し、データがどこで再生できるかを定義します。より良い用語はプロバイダーシール状態です。プロバイダーシーリングは、実際のプライバシー上の利益をもたらす可能性があります。例えば、OpenAIは、store: falseを使用してクライアントに暗号化された推論を返すことができ、次のリクエストで中間状態を永続化せずにメモリ内で復号できます。これは、特にゼロデータ保持顧客にとって、サーバーサイドの会話ストレージを必要とするよりも優れています。しかし、覚えておいてください、そもそも暗号化する必要のあるものは本当に何もありません!最も重要なことは、この暗号化は推論プロバイダーからデータを隠すのではなく、あなたからデータを隠すことです。保存された会話はトランスクリプトをポインタに変えますOpenAIのResponses APIはデフォルトで応答を保存します。そのドキュメントによると、応答オブジェクトはデフォルトで少なくとも30日間保持されます。Conversationに添付されたアイテムは、その30日間のTTLの対象ではありません。store: falseが利用可能であり、使用されるべきです。それは、それが完了のように機能するためです。データはOpenAIのサーバーに保存されません。新しいGemini Interactions APIも同様の選択をしました。デフォルトでstore: trueになり、有料ティアではインタラクションは55日間、無料ティアでは1日間保持されます。そして明らかに、サーバーに状態を保存するという考えは非常に魅力的です。const first = responses.create({ model: "frontier-model", input: "Investigate this production failure", store: true, }); const second = responses.create({ model: "frontier-model", previousResponseId: first.id, input: "Now implement the fix", store: true, }); アプリケーションはより少ないデータを送信し、プロバイダーは隠された推論とツール状態を保持でき、キャッシュルーティングが容易になります。しかし、ローカルアプリケーションがユーザーメッセージと最終テキストのみを記録する場合、first.idは、制御していないデータベースへの外部キーになります。推論なしすべての主要なラボは、生の思考連鎖を公開しない正当な理由があると主張しています。その結果、非オープンウェイトモデルでは、通常これらのトークンは見られません。生の推論はAPI経由では表示されません。保存された応答では、previous_response_idを介して以前の推論を回復できます。store: falseでは、APIはencrypted_contentを返します。これはクライアントが保持して再生する必要があります。永続化された推論は、reasoning.context: "all_turns"が後続のサンプルで使用できるようにしても、不透明なままです。Anthropicは、署名フィールドに暗号化された完全な思考を返します。有効な場合、読み取り可能な思考テキストは、別のモデルによって生成された要約であり、生の思考連鎖ではありません。思考ブロックは、ツール使用ターンの間に変更せずに返される必要があります。Anthropicのドキュメントでは、思考ブロックはそれを生成したモデルに紐付けられており、モデルを切り替えるときに削除されるべきであるとも述べています。したがって、これらの推論トレースは、Anthropic内でのポータビリティを試みません。同じ話がすべてのクローズドウェイトモデルで繰り返されます。これらの暗号化メカニズムは、エコシステム内での継続性を可能にしますが、別のプロバイダーのモデルに持ち込めるポータブルなトランスクリプトを作成するものではありません。セッションアーカイブにはブロブが含まれる可能性がありますが、別のモデルはその意味を使用できません。{"type": "reasoning", "encrypted_content": "gAAAAAB..."} {"type": "thinking", "thinking": "", "signature": "EqQBCg..."} {"type": "thought", "summary": [], "signature": "EpoGCp..."} 隠された検索サーバーサイドのWeb検索は、ユーザーから隠されたトランスクリプトの穴の最も明白な例の1つです。クライアントサイドの検索ツールは、他のツールと同じように動作します。const result = search(query); record({ query, retrievedAt: now(), results: result.map((item) => ({ url: item.url, title: item.title, passages: item.passages, })), }); model.send({ toolResult: result }); ユーザーはランキングとパッセージを検査したり、ページを再フェッチしたり、コピーをキャッシュしたり、同じ証拠を別のモデルに提供したりできます。ホストされた検索では、プロバイダーはプライベートツールループを実行します。OpenAI、Google、Anthropicは、検索アクション、引用、およびオプションでソースURLのリストを公開しますが、回答を生成するために使用された完全なテキストコンテキストは公開しません。URLは安定した再生ではありません。その内容は変更されたり、消滅したり、パーソナライズされたり、プロバイダーによって削減されたりする可能性があります。