← 一覧へ
連載 Agentic OS:技術スタックを下から読む の一部です ―― 目次を見る →

Agentic OS 技術スタックを下から読む 第12回:エージェントの記憶 ―― 保存ではなく「なぜそうしたか」を残す

この記事の読み方
前回は、エージェントに手を動かさせるための実行環境を見た。

手を動かす環境の次にあるもの

前回は、エージェントに手を動かさせるための実行環境を見た。

外の世界に触れる以上、何でも自由に実行させるわけにはいかない。だから、実行できる場所を区切り、権限を絞り、壊れても戻せるようにする。運行時の一つ目の柱は、この隔離だった。

しかし、運行時にはもう一つの柱がある。

状態を持つことである。言い換えれば、記憶である。

エージェントは、一回の応答で終わるとは限らない。長く走る。途中で道具を使う。失敗する。やり直す。昨日の判断を、今日の判断に活かす。

記憶がなければ、毎回ゼロから始めることになる。前に試して失敗した方法を、また試す。前に効いた工夫を、思い出せない。見た目は落ち着いていても、内側では毎日記憶を失っている。

今回見るのは、この記憶である。

ただし、記憶を単なる保存場所として扱うと、すぐに行き詰まる。重要なのは、情報を多く残すことではない。あとから「なぜそうしたか」をたどれる形で残すことだ。

短期の記憶と長期の記憶

まず、記憶には大きく二種類ある。

一つは短期の記憶である。これは、いまの文脈の中にある記憶だ。直近のやり取り、途中で得た結果、いま解こうとしている問題の条件。こうしたものを、手元に置いたまま次の判断に使う。

これは、人間で言えば作業机の上に近い。いま必要な紙を広げておく。見ながら考える。すぐ使える。

だが、机の上は無限ではない。

会話が長くなる。道具の実行結果が増える。調査対象が広がる。すると、古い情報から押し出されていく。最初の前提や、途中で失敗した理由が、いまの文脈から消える。

そこで、長期の記憶が必要になる。

長期の記憶は、いまの文脈の外に置いておく記憶である。必要なときに取り出して、現在の判断に戻す。過去の作業、ユーザーの好み、うまくいった手順、避けるべき失敗。そうしたものを、あとから使えるようにしておく。

短期の記憶は、いま考えるためにある。

長期の記憶は、次に同じような場面へ来たとき、ゼロから考え直さないためにある。

ここまでは分かりやすい。問題は、その長期記憶をどう作るかである。

保存箱としての記憶

長期記憶のよくある作り方は、保存箱に近い。

出来事を記録する。文章を小さな単位に分ける。それぞれを、意味の近さを比べられる数値の形に変える。そして、あとで必要になったときに「いまの状況に似たもの」を探す。

一見、合理的に見える。

過去の情報を全部捨てるよりはよい。検索できる形で残しておけば、必要なものを取り出せそうに思える。実際、この方法で助かる場面も多い。

だが、これだけでは記憶として弱い。

理由は単純で、これは物置だからだ。

とりあえず放り込む。あとで探す。似たラベルの箱を開ける。運がよければ、必要なものが出てくる。運が悪ければ、少し似ているが本質的には違うものが出てくる。

しかも厄介なのは、失敗が静かに起きることだ。

検索が何も返さなければ、まだ分かりやすい。足りないと気づける。しかし、少しだけ関係のある情報が返ってきたとき、エージェントはそれを信じて先へ進むことがある。

古い判断。別の条件でだけ成り立つ手順。似ているが原因の違う失敗例。

そうしたものが混ざっても、エージェント自身はそれを「劣化した記憶」だと気づけないことがある。すると、記憶は助けになるどころか、判断を少しずつ曲げる。

ここで、記憶の難しさが見えてくる。

本当に難しいのは、検索の細部ではない。どう探すかより前に、何を、どんな形で書き込むかが難しい。

難しいのは検索ではなく記録である

記憶を考えるとき、つい取り出し方に目が向く。

どう探せばよいか。どの情報を上に出せばよいか。似ているものをどう測ればよいか。もちろん、それらも大事である。

しかし、エージェントの記憶でより根が深いのは、記録のほうだ。

なぜなら、因果は後からしか見えないことが多いからである。

ある作業が失敗したとする。記録には「時間切れで失敗した」と残る。数日後、別の場面で、手順を変えたら同じ種類の作業が成功したとする。そこには「やり方を変えて成功した」と残る。

この二つは、本来つながっている。

前の失敗があり、そこで限界が見えた。後の成功では、その限界を避ける方法が見つかった。つまり、失敗と成功は同じ因果の鎖の前半と後半である。

だが、失敗した瞬間には、まだ後半が存在しない。

その時点では、どの未来の出来事と結びつくのか分からない。あとから効く学びなのか、ただの一回限りの失敗なのかも分からない。

さらに、この二つは言葉として似ていない。

「時間切れで失敗した」と「手順を変えて成功した」は、表面だけ見れば別物である。似たもの検索では、互いを引き当てにくい。

しかし、人間が振り返れば分かる。これは関係がある。失敗の原因と、後の解決策が対応している。

つまり、つながりは見た目の類似ではなく、時間と構造の中にある。

ここが、記録の難しさの核心である。

記憶は、出来事の倉庫では足りない。出来事同士の関係を、あとからたどれるようにしなければならない。特に残すべきなのは、結果そのものではなく、なぜその行動を選んだのかという因果の手がかりである。

結果ではなく意図を残す

では、どうすればよいのか。

一つ目の手当ては、行動の瞬間に意図を残すことである。

道具を呼ぶ。検索する。ファイルを読む。コードを直す。外部の処理を実行する。その瞬間には、必ず何かを期待している。

何を確かめようとしたのか。どの仮説を検証しようとしたのか。どの状態から、どの状態へ進めようとしたのか。

これを残す。

単に「失敗した」と書いても、あとから使いにくい。失敗という結果だけでは、どの判断が外れたのか分からない。

一方で、「この手順なら制約を避けられると考えて試した」と残っていれば、後で意味が出る。成功しても失敗しても、その判断の根をたどれる。

結果は後から分かる。

しかし、意図はその場にしかない。

時間がたつと、なぜその操作をしたのかは薄れる。ログには実行結果が残っていても、そのときの狙いは残らない。だから、意図は行動の近くで捕まえる必要がある。

二つ目の手当ては、あとから振り返る工程を別に持つことである。

すべてをその場で正しく結びつけようとしても無理がある。先ほど見たように、因果の後半は未来にあるからだ。

だから、少し時間を置いてから見る。

失敗があった。状態が変わった。解決策が見つかった。こうした節目で、過去の記録を見直す。そして、表面上は似ていないが、構造として補い合っている出来事を結ぶ。

「前に失敗した理由」と「今回うまくいった理由」をつなぐ。

「避けた判断」と「避けるべきだと分かった根拠」をつなぐ。

「ユーザーが嫌がった出力」と「その後に通った書き方」をつなぐ。

このつながりは、毎回検索に賭けるべきではない。一度見つけたなら、明示的な印として固定しておくほうがよい。

そうすれば、次からは似ているかどうかに頼らなくてよい。因果の線を、そのままたどれる。

記録が重すぎると、振る舞いが変わる

ただし、ここには別の制約がある。

記録を厚くしすぎると、エージェントの振る舞いそのものが変わってしまう。

一手ごとに重い記録を挟む。毎回、細かな理由を書かせる。すべての判断を長く説明させる。すると、エージェントは遅くなる。判断の間が変わる。探索の仕方も変わる。

その状態で得た記録は、本当に普段のエージェントの記録なのか。

そうとは限らない。

観察の仕組みに引きずられて、別の動きをしている可能性がある。記録するために動きが鈍り、鈍った動きをまた記録する。これでは、本来知りたかった運行時の姿からずれてしまう。

だから、目指すべきは最大限の記録ではない。

因果をたどるのに足りるだけの、ぎりぎり軽い記録である。

普段は軽く残す。行動の意図、重要な状態、結果の要点だけを押さえる。そして、失敗、状態の大きな変化、解決といった節目で、重い振り返りを動かす。

常時ではなく、必要なときに深く見る。

もう一つ、忘れる設計も必要になる。

すべてを等しく覚えるのは賢くない。重要でないものまで強く残ると、後の判断を濁らせる。古い例外、もう使わない制約、一度だけ起きた偶然が、いつまでも顔を出す。

人間の記憶も、すべてを同じ強さでは残さない。重要なものは残り、そうでないものは薄れる。だから、何を強く残し、何を弱め、何を忘れるかも、記憶の設計に含まれる。

記憶とは、保存量の勝負ではない。

次の判断に効く形で、過去を整えることである。

Agentic OS における記憶の意味

Agentic OS の中で見ると、記憶は単独の部品ではない。

記憶が貧しいエージェントは、毎日記憶を失う実習生に近い。態度は安定している。返事もそれらしい。しかし、昨日と同じ失敗を今日も繰り返す。前に避けると決めた道を、また選ぶ。前に効いた工夫を、また最初から探す。

逆に、因果を残せるエージェントは、長く一緒に働ける同僚に近づく。

前回なぜその方法を避けたのか。何が効いたのか。どの制約で失敗したのか。どの判断が、後の成功につながったのか。

それを次に活かせる。

ここで言う記憶は、単に「過去の文章を探せること」ではない。過去の行動と現在の判断を、因果でつなぐ土台である。

この話は、連載の前半で見た検索ともつながる。必要な情報を取り出すには、外部の知識だけでなく、自分自身の過去も対象になる。

これから見る計画の層ともつながる。計画は、過去の失敗や成功を踏まえなければ、同じ道を何度も選ぶ。

さらに、後に扱う評価の層ともつながる。失敗から学ぶには、失敗がただの結果としてではなく、次に使える因果として残っていなければならない。

これで、運行時の層を一通り見た。

一つ目の柱は、隔離だった。エージェントに手を動かさせるために、実行環境を区切る。

二つ目の柱は、記憶だった。エージェントが長く走るために、状態を持たせる。

ただし、その記憶は保存箱では足りない。大事なのは、「何があったか」だけではなく、「なぜそうしたか」を残すことである。

次回からは、運行時を出る。

一体のエージェントをどう安全に走らせるかではなく、複数のエージェントをどう束ね、どう協調させるか。Agentic OS の次の層、編成の話へ進む。

← 一覧へ