プラットフォームの内側

AI エージェントが新しいスキルを覚えるまで、そして後片づけまで

事実しか覚えないエージェントは、やり方を毎回ゼロから組み直す。Olano のエージェントはやり方を書き留める。この記事はその裏側の設計の話だ。繰り返す仕事がどうやって再利用できる手順書になるのか、自分が書いていないスキルを一度も上書きせずにどう改善するのか、学習した写しが元ファイルを上流から更新された日をどう生き延びるのか、そしてなぜそのどれもが、改善するはずのシステムを静かに劣化させられないのか。

記憶は何が本当かを語る。スキルは仕事のやり方を語る。

AI の記憶をめぐる話は、たいてい事実で止まる。事実は残す価値がある。価格、エスカレーションの規則、扱いの難しい取引先。その積み上げ全体を扱っているのが AI エージェントはどう記憶するのか。確かに役に立つ。それでも、できることと同じではない。

できるというのは手順の話だ。月曜のレポートは、決まった順序で、決まった出どころから、決まった注意書き付きで組み立てる。返金の問い合わせは、誰かが答える前に三点を突き合わせる。四半期の仕入先レビューは毎回同じ六つの数字を引く。完璧な事実を持ち、手順を持たないエージェントは、そのどれもを毎回わずかに違うやり方でこなす。そのぶれこそ、現場が気づくものだ。

だから Olano のエージェントは、記憶の隣にもう一種類の成果物を持つ。スキルだ。スキルは小さなフォルダで、中に SKILL.md がある。名前、一行の説明、いつ手を伸ばすかを示すトリガー、そして番号付きの手順。プラットフォームに同梱されるスキルもある。スキルパックやマーケットプレイスから来るものもある。自分で書くものもある。そして、自分が実際にやった仕事から、エージェントが自分のために書くものもある。

この記事が扱うのは、その最後の種類だ。

学習したスキルはどこから来るのか

エージェントのやり取りは一手ごとに記録へ追記される。裏で動く処理が一定の間隔でその記録を読む。もっとも活発な設定で一時間ごと、もっとも緩い設定で四時間ごと。そして読むのは、まだ読んでいない分だけだ。記録ごとのバイトオフセットで追跡している。同じ内容が二度解析されることはなく、実行の合間にファイルが伸びたせいで取りこぼすこともない。

そこから先、この処理はわざと起こりにくく作られている。

  • 新しいやり取りが四手に満たなければ、何もしない。 それでもオフセットは確定させる。後の実行がまとめて読み込んで深読みしないようにするためだ。
  • 深い推論の段で走るか、走らないかのどちらかだ。 安価な代替モデルは用意していない。エージェントごとに深い実行の一日あたり上限がある。間隔のプリセットに応じて、おおむね六回、十二回、二十四回。上限か支出の予算が尽きたら、その周回は飛ばして次回に回し、オフセットは未確定のまま残す。質の落ちた解析は、解析しないことより悪い。自信満々で間違った手順を生むからだ。
  • 記憶が書き換えられている間は、身を引く。 記憶を整理する処理はロックを取る。蒸留する側はそれを見て、全体が書き換えられているファイルに追記せず、引き下がる。

実際に走るときは、まず事実が記憶に入る。そのあと、スキル学習が有効なら、同じやり取りが二つめの処理に渡る。

偵察役は記録より先にライブラリを読む

学習ライブラリがごみ置き場にならないのは、この一手のおかげだ。スキルの偵察役に渡されるのは、会話ひとつと「何を学んだ?」という問いではない。渡されるのは会話と、そのエージェントがすでに持っているスキルの一覧だ。managed のものや第三者のもの、つまりエージェント自身の作業領域の外にあってファイル操作では見えないものまで含む。そのうえで問われるのは、もし足りないものがあるなら何か、である。

返ってくる候補にはそれぞれ動作が付いている。三つのうち二つは、新しいスキルをまったく生まない。

  • skip — その能力はすでにある。もっとも多い結果であり、これは成功だ。
  • update — 既存のスキルでほぼ足りており、磨けばよい。候補は対象を名指しする。
  • create — 本当に新しい。このときだけスキルが書かれる。

新しいスキルはそのあと二つめの検証に回る。ほぼ同名のものがないか走査し、見つかれば手を止め、なければ frontmatter の正しい、構造の整った SKILL.md を書く。この検証が完走できない場合は、候補を失うより直接書き出す方を選ぶ。

自分が書いていないスキルを改善する

面白いのは改善のほうだ。いちばん素直な実装が、まさに間違っているからだ。

入れたスキルは一枚の文書ではない。複数ファイルの手順書であることもある。SKILL.md に加えて、スクリプト、参照表、フォーム、テンプレート。しかも所有は上流にある。元のパックが更新されれば、そのフォルダはまるごと置き換わる。だから、その場で書き換えてスキルを「改善」したエージェントは、一度に二つの誤りを犯している。手順書を要約に押し込めたことと、自分の改善を次の更新の通り道にそのまま置いたことだ。その更新は改善を黙って消す。

Olano は代わりに分岐させる。エージェントが自分のものではないスキルを初めて改善するとき、こうなる。

  • フォルダまるごとが、バイト単位でエージェントの学習ライブラリへ複製される。内部のパス参照は、写しが新しい場所でも動くように書き換えられる。
  • 写しは元と完全に同じ名前を使う。だからエージェントがスキルを読み込むとき、写しは元を置き換えるのではなく覆い隠す。元ファイルはディスク上で一度も触られない。
  • その隣に出自の記録が書かれる。分岐時点の元のファイルごとの指紋、同時点の写しのファイルごとの指紋、そして元の SKILL.md の見出し構成だ。
  • 開始時点の手つかずのスナップショットは別に保管され、あとでマージの基準として使われる。

以降の改善はすべて、写しに追記のかたちで当たる。その場で書き換える設計では持てない性質が二つ出てくる。「この改善で何か失われたか」が、記録された基準に照らして検証できる問いになる。無関係な二つの文書のあいまいな差分ではない。そして「元は上流で変わったか」に、いつまでも答えられる。

保全ゲート

自分を書き換えるシステムで誰もが恐れる壊れ方は、じわじわとした静かな劣化だ。通すたびに少し短く、少し味気なくなり、やがて機能していたものが決まり文句の段落になる。そうはならないと約束するのは、工学の答えではない。

そこで、スキルを読み込むたびに、学習した写しを自分自身の記録された開始状態と突き合わせる。次のいずれかに当たれば不合格だ。

  • 分岐時点に存在したファイルが、いまは無い。
  • 文章ファイルが元の大きさの半分を下回るまで縮んだ(0.5 KB 程度未満のファイルは対象外。小さいファイルは正当に大きく変わるため)。
  • SKILL.md が元の見出しの三分の一より多くを失った。

不合格になった写しは隔離される。覆い隠すのをやめ、元が再び使われる。エージェントが失うのは一つの改善であって、動くスキルではない。しかもこのゲートは、機械が書いた写しだけを意図的に対象にする。人が手で書いた学習スキルは決して隔離されない。意図した上書きは、短くなっていても優先されるべきものだからだ。

足元で元が変わったとき

上流のスキルはいずれ更新される。パックの更新、マーケットプレイスの更新、あるいは現場の手直し。こうして二つの系統がどちらも動いた状態になるが、出自の記録があるおかげで、当て推量ではなく本物の三方向マージができる。解決はファイル単位で、まず決定的に行う。決定的な答えが存在しないところでだけ、モデルに相談する。

学習した写しどうなるか
変化なしどれでも学習した写しを残す。することはない。
変更あり手つかず上流の新しい版を取り、内部のパス参照を書き換え、出自を新しい元の指紋で押し直す。
削除手つかず学習した写しからも消す。上流が理由あって外したもので、こちら側に異論もない。
削除変更あり学習した写しを残し、衝突の注記を添える。誰かが見るべき案件で、それまで何も捨てられない。
変更あり変更あり — 文章記録された基準に対して三方向マージ。きれいに通れば採用。本物の衝突は学習した写しを残し、意味の調整はライブラリ側の処理に渡す。
変更あり変更あり — スクリプトまたはバイナリ学習した写しを残して印を付ける。コードは自動マージしない。黙って壊れたスクリプトは、古いスクリプトより悪い。

そのあと、指紋と基準スナップショットはマージ後の状態に更新される。これがループを収束させる。同じずれが繰り返し報告されることはなく、保全ゲートは古い基準ではなく新しい基準に対して働き続ける。いまゲートを通らない写しは、マージから丸ごと外される。劣化した写しを再マージするのは、それを洗い直して通すことになるからだ。

ライブラリ全体を一度に通す

スキルを一つずつ検証することは、ライブラリ全体の筋を通すこととは違う。そこで別の処理が、独自の予定で、そのエージェントのスキルを全部読み、集まり全体を一つの作業単位として扱う。重複とほぼ重複を一つの正式版にまとめ、名前はいちばん良いもの、トリガーはいちばん明確なもの、手順は和集合にする。まとめて空にしたフォルダは削除し、元がずれた写しは再マージし、残ったものを改善する。

この境界は助言ではなく強制だ。この処理にとって、元と managed のスキルは読み取り専用である。編集、マージ、削除ができるのは学習ライブラリの中だけだ。始める前に、触る可能性のあるファイルはすべてスナップショットが取られ、終わったときには、変更点が一つの取り消しボタン付きで報告される。

作業領域そのものにも同じ扱いを

エージェント自身の設定もまた文章であり、何か月もかけて少しずつ書かれた文章は同じように積もる。同じ指示が三か所で三通りに書かれ、好みが違うファイルに記録され、同じ覚え書きが十一日ぶんの日誌に続けて現れ、ときには静かに矛盾する指示が二つ並ぶ。

それを受け持つのが作業領域の整理処理だ。エージェントの人格、振る舞い、指示、長期記憶のファイルと、直近二週間の日誌を読み、その場で書き直す。言い換えの重複をまとめ、矛盾を取り除き、関係する内容を明快な見出しの下にそろえ、本来あるべきファイルへ内容を移す。日誌のまとめ方がいちばん厳しいのは、繰り返しがそこにいちばん速く溜まるからだ。

そのとき従う指示は一文しかないが、その一文がすべてを背負っている。 エージェントの語り口と、固有の指示のひとつひとつを守れ。まとめてよいが、決して消すな。 ライブラリ側の処理と同じく、対象ファイルはまずスナップショットが取られ、結果はワンクリックの取り消し付きで報告される。

二つの方針、その違いが効く

このループのすべてが同じ扱いを受けるわけではなく、その線引きは都合ではなく意図によるものだ。

  • エージェントに何をさせるかを変えることは、提案にとどまる。 The pass that reviews recent work and concludes an agent's instructions should be sharper does not edit those instructions. It writes grounded proposals into a review queue, and they wait - even with Fully Autonomous on, which otherwise lets new skills, memory and tidy-ups apply on their own. Nothing rewrites an agent's instructions because a background job thought it should, unless a deployment owner has explicitly lifted that hold for the agent.
  • 情報を失わない片づけは、スナップショットと取り消し付きで直接適用される。 記憶の重複を取る、同一の学習スキルを二つ一つにまとめる、繰り返された覚え書きをまとめる。これらはエージェントの動きを変えず、書き方の整い方だけを変える。ひとつひとつに人の承認を求めれば、読まずに承認する習慣を植えつけることになり、本当に効く列にとって最悪の結果になる。だからスナップショットのあと直接適用し、実行ごとに変更点を取り消し付きで報告する。

すべて切り替えられる。蒸留、スキル学習、ライブラリの手入れ、作業領域の整理、記憶の整理。それぞれが独立したスイッチで、デプロイ全体に設定でき、エージェント単位でどちらの向きにも上書きできる。だから「このエージェント以外はすべて無効」が実在する設定になる。その上にマスタースイッチがあり、予定どおり走るか、頼まれたときだけ走るかという別の選択がある。間隔のプリセット(ゆるやか、標準、積極的)は、予定と深い推論の一日あたり上限を一緒に動かし、いずれも同じ デプロイの他のすべてを律する厳格な支出管理.

ループ一周はこう見える

エージェントがその日の実務をこなす未読のやり取りだけを、深い段で解析する。さもなくば解析しない事実が記憶に入る。偵察役はまずライブラリ全体を確かめる新しいスキルは検証して書く。改善は分岐させ、決して上書きしない保全ゲートが、劣化したものを隔離する上流の更新は三方向マージで戻ってくるライブラリと作業領域は整理済み、スナップショット済み、取り消し可能

この複利は、ゆっくりで具体的だ。運用担当のエージェントが三週続けて手で組んだレポートは、四週目には書かれた手順として存在する。業種にあと一歩で合っていたパックのスキルは、こちらの修正を保ったまま、ベンダーの次の更新も取り込む。押しつぶされたりしない。重なり合う助言で四ページまで膨らんでいた指示ファイルは、重なりのない二ページになり、消した版にしかなかった一文は、残した版にちゃんと残っている。

これは何ではないか

モデルの重みを学習させたり、微調整したり、調整したりはしない。このループ全体はモデルの一段上で動き、自社だけの隔離されたデプロイの中にある、平易な言葉で書かれた成果物に働く。スキル、記憶の項目、指示の提案だ。どれもファイルである。現場はそれを読み、手で直し、承認し、巻き戻し、誰がいつ何を変えたかを追える。

これは回避している制約ではない。むしろこれこそが、このループを、信じるしかないものではなく統治できるものにしている理由だ。そして同じ理由で、 下のモデルは、エージェントが学んだものを失わずに差し替えられる.

関連記事

「プラットフォームの内側」シリーズの残りと、さらに踏み込むマニュアルの章。

よくある質問

スキルとは何で、記憶とどう違うのですか?

記憶は、御社について何が本当かを保ちます。価格、人、決定、好み。スキルは、ある仕事をどうやるかを保ちます。名前、説明、いつ手を伸ばすかを示すトリガー、番号付きの手順からなる短い手順書です。記憶は、同じ質問を二度されるのを防ぎます。スキルは、同じ手順を二度作り直し、そのたびに少し違うやり方になるのを防ぎます。

エージェントは、こちらが渡したスキルを書き換えますか?

いいえ。御社から渡されたもの、スキルパックから来たもの、マーケットプレイスから来たものは読み取り専用の原本で、編集も削除もされません。改善するときは、スキルのフォルダをまるごと学習ライブラリへ複製し、その写しを編集します。写しは原本の名前を引き継ぐため、スキル読み込み時に優先されます。原本ファイルはディスク上で手つかずのままで、だからこそ後日の上流更新が、失われるのではなくマージできるのです。

学習したスキルが、より劣った要約に成り下がるのを防ぐものは何ですか?

スキル読み込み時に走る保全ゲートです。学習した写しは、自分自身の記録された開始状態と突き合わされます。文章ファイルが元の大きさの半分を下回った場合、元の見出しの三分の一より多くが失われた場合、あるいは当初あったファイルが無い場合、その写しは隔離され、原本が代わりに使われます。これは約束ではなく構造的な検査です。そして人が手で書いた写しは対象外です。意図した上書きは引き続き優先されるからです。

元のスキルが後から更新されたら、どうなりますか?

ファイル単位の三方向マージを、分岐時点の状態のスナップショットに対して行います。上流が変更し、学習した写しが一度も触っていないファイルは上流から取ります。学習した写しが変更し、上流が触っていないファイルは残します。両方が変わった箇所では、文章は共通の基準に対してマージし、本物の衝突はライブラリ側の処理に渡して調整します。スクリプトとバイナリは自動マージしません。学習した写しを残して印を付けます。黙って壊れたスクリプトは、古いものより悪いからです。

こちらに断りなく変わるものはありますか?

何が変わるかによります。そしてその線引きは意図的です。エージェントに何をさせるかを変えるもの、つまり指示や振る舞いは、提案としてレビュー待ちの列に書かれ、独りでに適用されることはありません。情報を失わない片づけ、たとえば記憶の重複除去、重複した学習スキルのマージ、繰り返された覚え書きのまとめは直接適用できますが、スナップショットを取った後だけで、そうした実行はいずれも変更点をワンクリックの取り消し付きで報告します。これらの振る舞いは個別に無効化することもでき、デプロイ全体でも、特定の一体だけでも設定できます。

これは自社のデータで AI モデルを再学習させているのですか?

いいえ。モデルの重みを学習させたり微調整したりはしません。このループが生むものはすべて、自社のデプロイ内にある素の markdown ファイルです。スキル、記憶の一項目、指示の変更提案。現場はそれを読み、差分を取り、手で直し、承認し、巻き戻せます。その読めることこそが要点で、改善のループを、信じるしかないものではなく統治できるものにしています。

学んだことを書き留めるシステムを導入する

下にある仕事が本物でなければ、複利は意味を持ちません。まずはご相談ください。業務の流れを描き、見積もりを出し、ご承認をいただいてから作り始めます。

プロジェクトを相談する