Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How do I give my LLM workflow persistent context across independent client connections?

2026年10月05日に「Dev.to」が公開したITニュース「How do I give my LLM workflow persistent context across independent client connections?」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

LLMワークフローで以前の情報を継続して使うには、接続ごとに文脈を保存せず、ユーザーやプロジェクトなど「安定したID」に紐付けサーバー外に保存する。MCP新仕様では、接続開始時に認証情報からIDを特定し、コンテキストを読み込むことで、異なる接続でも前の情報が活用可能となる。

ITニュース解説

システムエンジニアを目指す初心者が、最新のAI技術である大規模言語モデル(LLM)を使ったシステムを構築する際によく直面する問題と、その解決策について解説する。

私たちはLLMを使って、例えばカスタマーサポートのエージェントのようなシステムを構築しようと考える。午前6時に、ある自動処理が実行され、夜間に届いたお客様の問い合わせチケットを分析し、チケット番号4127と4133が同じバグに関するものであると結論付けたとする。この結論は、その自動処理がサーバーに接続していた間に得られた情報だ。しかし、その接続は処理が終わればすぐに閉じられるのが普通である。

その後、午前10時になって、今度は私たちがチャットクライアントを開き、そのLLMエージェントに「どのチケットを閉じることができますか?」と質問する。このチャットクライアントは、午前6時の自動処理とは全く別の新しい接続であり、場合によっては別のサーバーインスタンスに接続している可能性もある。すると、エージェントは午前6時に導き出された「4127と4133が同じバグである」という結論を全く覚えていない。エージェントは最初から何も知らない状態に戻ってしまい、また一から分析をやり直さなければならない。これは、せっかく一度得た貴重な情報が失われてしまう、非効率な状況と言える。

なぜこのようなことが起こるのか。それは、以前のシステム設計では、LLMエージェントが学習した情報や処理したコンテキスト(文脈)を「サーバーへの接続」や「セッション」という一時的なものに紐付けて保存していたからである。接続が閉じられたり、セッションが終了したりすれば、そこに紐付けられた情報も同時に失われてしまう仕組みだったのだ。

しかし、最近のシステム設計、特に「MCP(Master Control Program)」と呼ばれるプロトコルの2026年7月28日の改訂では、この考え方が大きく変わった。この改訂により、「プロトコルレベルのセッション」という概念が廃止され、各リクエストが完全に独立して処理される「ステートレス」な設計が推奨されるようになった。これは、サーバーが以前のリクエストから何の情報を推測することも期待しない、という意味だ。

なぜこのような変更があったかというと、現代のシステムでは、大量のリクエストを効率よく処理するために「ロードバランサー」と呼ばれる仕組みが使われることが多いからだ。ロードバランサーは、多数のサーバーインスタンスにリクエストを分散させる役割を果たす。つまり、一つのクライアントから送られた連続するリクエストであっても、それぞれが異なるサーバーインスタンスに処理される可能性がある。もしコンテキストが接続や特定のサーバーインスタンスに紐付けられていたら、次のリクエストではその情報にアクセスできなくなってしまうのだ。

したがって、重要なのは「コンテキストを接続に紐付けない」という考え方だ。代わりに、その情報が本来属する「安定したアイデンティティ」に紐付けて、サーバープロセスとは独立した場所に保存する必要がある。この「安定したアイデンティティ」とは、例えば「ユーザー」、「プロジェクト」、「エージェント」といった、接続が切れても変わらない永続的な識別子のことだ。

コンテキストの保存方法には主に3つのパターンがある。

  1. 接続やセッションに紐づける方法: これは先ほど説明したように、接続が閉じたりセッションが終了したりすると情報が失われるため、新しい接続からはアクセスできない。今日のシステムでは推奨されない。
  2. ワークフローハンドルに紐づける方法: これは、ある一連の処理(ワークフロー)を開始したときに発行される一時的な識別子(ハンドル)にコンテキストを紐づける方法だ。例えば、長時間かかる処理の途中で次のステップに進むためにハンドルを使い回す。しかし、このハンドルは処理が完了したり、一定時間経過したりすると無効になるため、午前6時の処理で得た情報を午前10時に利用するような、時間差のあるケースには向かない。
  3. 安定したアイデンティティに紐づける方法: これこそが、冒頭の課題に対する解決策だ。コンテキストを「ユーザーID」や「プロジェクトID」といった永続的なアイデンティティに紐付けて保存する。この方法であれば、接続が切れても情報は失われず、同じアイデンティティとして認証された(例えば、正しいIDとパスワード、またはAPIキーを使ってログインした)新しい接続であれば、いつでもその情報を読み取って利用できる。

この「アイデンティティに紐づけられたコンテキスト」を効果的に使うためには、いくつかの重要なルールがある。

まず、アイデンティティはクレデンシャル(資格情報)から取得するということ。LLMエージェントが自分で「これはこのプロジェクトのコンテキストだ」と判断するのではなく、クライアントがサーバーに接続する際に提示するAPIキーやOAuthトークンといった認証情報に基づいて、サーバー側で「この接続はどのユーザー、どのプロジェクトのものか」を特定する必要がある。もしLLMが勝手にキーを選んでしまうと、セキュリティ上の問題が生じかねない。

次に、すべての接続の開始時に、行動する前にコンテキストを読み込むこと。新しいクライアント接続は、それ自体では何のコンテキストも持っていない。そのため、ワークフローの最初のステップや、エージェントへの指示の中に「まず、自分のアイデンティティに関連する過去のコンテキストを読み込む」という処理を明示的に組み込む必要がある。

さらに、コンテキストは確立されたときに書き込み、接続が終了するときではないということ。接続は突然切断される可能性がある。特に、2026年7月28日のMCP改訂では、応答ストリームが途切れると処理中のリクエストも失われるとされている。セッションの最後にまとめて情報を保存しようとすると、その情報が失われるリスクがあるため、情報が得られた時点で速やかに保存するのが安全だ。

最後に、アイデンティティの内部でスコープを設定すること。例えば、一人のユーザーが複数のプロジェクトを抱えている場合、それぞれのプロジェクトのコンテキストが混ざり合わないように、プロジェクトごとに異なるネームスペース(領域)に分けて保存する必要がある。これにより、あるプロジェクトに関する作業中に、別のプロジェクトの結論を誤って読み込んでしまうといった事態を防ぐことができる。

これらの原則を具体的に実現するツールの一つに、「Mnemoverse(ムネモバース)」がある。Mnemoverseでは、LLMエージェントが記憶すべき情報は「Mnemoverseアカウント」に紐付けられており、個々の接続には紐付けられない。クライアントがMnemoverseに接続する際は、APIキーやOAuthサインインを通じてどのアカウントであるかをサーバーに伝える。これにより、午前6時の自動処理が書き込んだ情報を、同じアカウントで午前10時に接続したチャットクライアントが読み取ることが可能になるのだ。

MnemoverseのPython SDKを使った具体的なコード例を見ると、午前6時の処理では memory.write(...) を使って「チケット4127と4133は同じバグである」という情報を書き込んでいる。この際、domain="project:support" のように、どのプロジェクトのコンテキストかを明示的に指定している。そして、午前10時の処理では、memory.read("どのチケットが重複していますか", domain="project:support") のように、同じアカウントとドメインを指定して情報を読み出している。これにより、午前6時に書き込んだ情報に午前10時に正しくアクセスできるわけだ。

この仕組みが正しく機能するかを確認するための簡単なテスト方法もある。まず、あるクライアントでLLMエージェントに、エージェントが自力では決して推測できないような結論(例えば、適当なチケット番号の組み合わせなど)を記憶させ、そのクライアントを閉じる。次に、同じアカウントで別のクライアントを開き、新しい接続を確立した上で、先ほど記憶させた内容について尋ねてみる。もしエージェントが正しく記憶を呼び戻せれば、システムは意図通りに機能している。さらに、別のコントロールとして、全く異なるアカウントで認証したクライアントから同じ質問をしてみる。この場合、何も見つからないのが正しい動作だ。もし何かを回答してしまったら、その情報はMnemoverse以外の場所から来ている可能性があり、その信頼性を確認する必要がある。

このように、LLMワークフローにおいてコンテキストを永続的に保つためには、一時的な接続に依存せず、安定したアイデンティティに紐付けて外部に情報を保存し、必要に応じて明示的に読み書きする設計が不可欠となる。これは、AIを活用したシステムを構築する上で非常に重要な考え方となるだろう。

関連コンテンツ

関連IT用語

関連ITニュース