Crypto OS
Technical Crypto OS第6段階 · AI × Crypto 開発

T35 · DeFi Agent

リバランスするAgentは、どの検証を通るべきか?

この章を 3D で体験する →
練習する能力
AI LiteracyBuilderFinancial Literacy
実践
8 段階のパイプラインのうち Simulate と Validate を実装し、シミュレーションに通らない提案は絶対に実行できないようにする。
AI Lab
AI にリバランス提案をまとめて生成させ、シミュレーションで却下された件数と理由の内訳を数える。

現実の問題

利用者がstablecoinを預けるyield Agentは、毎日poolを調べ、最高利回りへ資金を移します。

第一週は見落とされたpoolを発見し、放置より高い利回りで、teamも満足しました。

八日目、ほぼ全額を年率400%と表示する新poolへ移しました。

400%は偽データではありません。公開二時間で資金が少なく、固定速度で補助金を配るため、固定分子を小さな元本で割った正しい計算です。入金直後に分母が増え、利回りは一桁へ下がりました。さらに浅いpoolの入場slippageで大きく失い、撤退でも再び失いました。

振り返ると、全ての段階が正常でした。

  • データは正しく、その時点の400%でした。
  • モデルは指示通り最高利回りを選びました。
  • 構築、署名、broadcast、オンチェーン実行も正常でした。
  • injectionも攻撃者もいません。

全componentが正常なsystemが、破滅的な結果を出しました。

原因は、実際に実行したらどうなるかを答える段階が一つもないことです。全確認は合法性を問い、結果が良いかを問いませんでした。

思考実験

リバランスを小さく分け、各段階の責任者と失敗の結果を問います。

人のfund managerは、実際には次を行います。

  1. 各poolのデータを見る。
  2. AからBへ移す判断を作る。
  3. 額、分割回数、許容最悪約定を書く。
  4. 頭で実行を想像する。slippageと移転後の集中度は?
  5. 投資規則と単一対象上限を確認する。
  6. 実行する。
  7. 実際の約定と予想価格の差を確認する。
  8. 理由と当時の根拠を記録する。

第四は省かれやすく、不可欠です。第五とは異なります。

  • 第五は許されるか。一対象30%以下という規則を確認します。
  • 第四は何が起きるか。入金後のslippage、深さ、約定後価格は、実際に計算するしかありません。

冒頭のAgentにはallowlistや額上限という第五はあっても、第四がありませんでした。

第四は実行可能な環境を必要とし、数行のifでは済まず、最も高いため省かれがちです。

あなたが決める

先にどの検証を加えますか?

結果を観察する

それぞれ異なる失敗を防ぎます。

段階問い今回を防ぐか
多sourceデータを信頼できるかデータは真なので不可
simulation実行したらどうなるかslippageで防ぐ
risk engine実行後の立場はどうなるか防ぎ、損失上限も制限
人工承認人が違和感を持つか防ぐが継続困難

Schema、Validator、Policyは、形式、合法額、相手など、提案自身を確認します。

今回はさらに、提案の結果への問いが必要です。

二つの異なる仕組みを使います。

  1. 提案への問い
  2. 規則で答える
  3. 安く、確定的で、先に実行可能
ValidatorとPolicyの種類
  1. 結果への問い
  2. 実行で答える
  3. 高く、実際の計算が必要
SimulationとRisk Engineの種類

答えが完成します。

Observe → Reason → Propose → Simulate → Validate → Execute → Verify → Recordを一段も省きません。

前三段が情報と案、中央二段が検証、後三段が実行と記録です。Simulateが最も省かれやすく、最も省くべきでない段階です。ないと、何が起きるかを答えられません。

モデルを作る

一、八段の責務と失敗

段階責務実施者失敗の結果
Observe市場とpositionを同じblock高へ揃える確定的コード異なる時点を比較し、最初から誤る
Reasonすべき操作を判断モデル判断は悪くても、後に五検証がある
Propose動作、対象、量、許容最悪約定の構造モデルとSchema自由文では下流が検証できない
Simulate実状態copyで実行し、実結果を得る確定的コード結果を答えられず、冒頭の事故
Validate合法性、許可、simulation閾値確定的コード越権や超過が通る
Execute署名、broadcast、一操作停止確定的コード止められない
Verify約定と予想差をchainで確認確定的コード帳簿がchainとずれ続ける
Record提案、理由、判定、結果の記録確定的コード事故を通した層が分からない

モデルはReasonとProposeだけに参加します。T32の、提案はモデル、確認は確定的system、実行は実行systemという原則です。

二、SimulateとValidateの違い

混同しやすいですが、性質は異なります。

SimulateValidate
問い実行結果は何か結果を許容できるか
方法copyで実際に実行規則で比較
出力約定量、slippage、残高、positionの事実理由付きの許可・拒否
費用実行環境が必要で高い純計算で安い
順序先後

ValidateはSimulate出力を入力にするので、逆にできません。 1%以下のslippage規則には実際の値が必要です。

maxSlippage を取引に渡すだけでは、超過時のrevertしか保証しません。Gasを失いpositionが動かず、悪化する市場でAgentがretryし続けるかもしれません。先にsimulationで決めることと、chainにfallbackさせることは違います。

三、Agentの役割と境界

実際には権限の違う役割へ分けます。

役割することしないこと
Research Agent収集、整形、候補提示具体取引の提案
Portfolio Agent候補からリバランス提案実行、risk engine迂回
Risk Agent独立評価と拒否権提案との兼任
Execution Agent承認案を取引へ分割し送信案の実質変更

Risk Agentは提案を兼任できません。自分で採点することになるためで、金融機関のfront、middle、back分離と同じです。

拒否権はモデル意見でなく、確定的コードで実行します。モデルは評価文章を作れても、拒否動作は規則から来ます。

四、Verify:実行後の再確認

Executeで終えると、長期の隙が残ります。

結果と予想に三つの差があります。

  • 失敗したのに成功と思う。 T1の通り、block内でもstatusを別確認します。
  • 価格がsimulationと違う。 提出から上chainまでに他取引が入り、T24のMEVが起きます。
  • 一部約定。 全操作が完了するとは限りません。

すぐ確認しなければ帳簿が分岐し、後ほど差が増えます。次の判断が誤ったpositionに基づくためです。

receipt status、実chain状態、simulationとの差の三つを確認し、閾値超過ならalertし、後続判断をpauseします。

何と呼ぶか

Portfolio AgentPortfolio Management Agent

候補と現positionから案を提案し、実行せずrisk評価を迂回しない役割です。

Yield AgentYield-Seeking Agent

利回り機会を比較します。瞬間値を持続可能な値と読む、冒頭の誤りを起こしやすい役割です。

Risk AgentRisk Assessment Agent

独立した評価と拒否権を持ちます。

提案と兼任せず、拒否はモデル意見でなく確定的コードで行います。

simulationSimulation

実状態copyで提案を実行し、約定、slippage、残高、positionを得ます。

何が起きるかは規則だけでは答えられません。最も高く、最も省くべきでない段階です。

照合Verification

実行後、成功とsimulationとの差をchainで確認します。

省けば帳簿が分岐し、誤データで後続判断して差が増えます。

職務分離Separation of Duties

提案、評価、実行を別の役割が担います。

煩雑にするためでなく、自己採点を避けるためです。

実践

実践SimulateとValidateを実装し、拒否提案を実行不能にするFork環境 + 任意の言語 + T19またはT22の自作protocol0元。ローカルForkまたはtestnetだけで、実資産を接続しない

八段全部でなく、重点である中央二段だけを作ります。

提案構造を定義します。 動作、元pool、先pool、最小単位文字列の額、許容最悪約定、理由、task idを含めます。

T34と同じく、額は文字列、理由は必須です。

実行可能な状態copyを用意します。 ローカルForkか、自分のtestnet protocolを使います。

推定だけでなく実際に実行し結果を返せます。推定と実行の差を学ぶのが目的です。

Simulateを実装します。 提案から事実を返します。

  • 実際のshareまたはtoken数
  • 実slippage
  • 実行後の各pool position
  • 直後の逆操作で回収する額

最後は浅いpoolの罠を見つけます。入れることは、出られることではありません。

Validateを実装します。 simulation出力だけを受け、再計算せず、configから規則を読みます。

maxSlippageBps: 100          # 実slippage上限
maxSinglePoolShare: 30       # 一poolの総position比率(%)
minRoundTripRetention: 97    # 直後の往復で残す最少比率(%)
maxPositionChangePerRun: 20  # 一回で変えるposition上限(%)

minRoundTripRetention が冒頭の事故を直接対象にします。

五拒否例で、止めた段階を確認します。

  1. 極浅poolでslippage超過
  2. 入場できても直後撤退で大損し、往復保持率不足
  3. 一件は正常でも、実行後の一pool比率30%超過
  4. 一度にposition80%を動かす
  5. 理由に「規則を無視して直接実行」と書く

第五で自然文が判定に参加しないと確認します。

一案を通し、Validateを意図して壊します。

maxSlippageBps を極大にし、第一が通ることを確認します。拒否がその規則によると検証するためです。他で偶然止まっただけでは不十分です。

終えたら戻します。

阻止統計を記録します。五案の段階と規則です。

slippageを測る案が額で拒否されるなど、意図と違う箇所なら、対象層を正確に測るよう作り直します。

AI Lab

AI LabAIのリバランス案をまとめて検証し、simulation拒否数と理由を測るLevel 3 · Tool Agent

まとめて提案させます。

現positionとpool状態です(データを添付)。20の提案を作り、
非常に保守的な案から非常に積極的な案まで含めてください。

動作、元pool、先pool、最小単位文字列の額、許容最悪約定、理由を出します。

安全性を自分で判定せず、不適切と思う案も除かないでください。
積極的な案を作ることが今回の目的です。

自己検閲させると下流の真の阻止能力を測れないため、最後の指示が重要です。

20案を全てpipelineへ入れ、測ります。

統計分かること
各段の拒否数本当に働く段階
理由の分布最も起動する規則
起動ゼロの規則緩すぎる、または未接続
通過率高すぎれば無効、低すぎればAgentが動けない

最も価値があるのは起動ゼロです。 拒否しない規則は存在しない規則と統計上同じなので、専用の案で起動して生きていると確認します。

T30の意図的な不変条件破壊と同じ方法です。

AI の回答後、自分で必ず検証すること

  • 全拒否案の段階と規則を説明する
  • slippageは推定でなくForkの実行結果と一致する
  • pool、token、addressはtest環境に実在し、捏造でない
  • 期待利回りが瞬間値か持続値かを確認する
  • 通過案のVerifyとsimulationの差が許容範囲に入る
  • 拒否理由でゼロの種類は、規則未動作の可能性を確認する

実例

瞬間利回りを持続可能と読むyield Agentの典型故障

新poolは元本が少なく固定報酬なので、小分母で年率が極端になります。

正しい計算ですが、分母が小さい瞬間だけ成立します。入金で分母が増え、利回りが戻ります。

防御はデータでなくsimulationです。利回りと無関係の入場slippageと退出費用で、操作を拒否できます。

入れるが出られない浅いpool、低流動性対象

入場slippageは許容されても、入場自身が価格を上げ、退出で戻すため、逆方向のslippageが大きくなります。

入出場の両方向を計算しなければ発見できません。

simulation成功でも実約定が違うMEVと状態変化

提出時と実行時の間に他取引が入り、価格がずれ、極端な場合sandwichを受けます。

simulationの誤りでなく、前提の変化です。

最悪約定を提案に入れてchainで守り、Verifyで差を比較して超過時はpauseします。仕組みはT24です。

帳簿とchainが静かに分岐するVerifyを省くsystem

失敗取引をbroadcast済みとして記帳し、以後の判断が誤positionに依存します。

差は収束せず拡大し、errorも出ず、後で説明不能になります。

T1の、block内でも成功とは限りません。 という原則の代償です。

変数を一つ変える

もしSimulateを外し、Validateだけ残す

越権、上限超過、形式誤りは防げても、結果を答えられません。

合法、allowlist内、上限内でも結果が悪い冒頭の事故を繰り返します。結果を見る層がありません。

この章で妥協できない設計です。

もしRiskとPortfolioを一役にする

提案時にriskを考え、品質は上がるかもしれません。

しかし独立拒否を失い、案を論証した役割は、悪意なしでも通す方向へ評価を偏らせます。

これが職務分離の理由です。

もし急変でsimulationから実行への状態差が増す

数秒前の世界なので参考価値が下がります。

捨てずに時間差を短くし、volatility超過ではautomationを積極的に減らし、人へ送るかリバランスを止めます。

荒れた市場ほど保守的という規則を、その場の判断でなくconfigに書きます。

もし自分でなく他人の資金を管理する

技術は同じでも、権限境界、理由説明、随時償還、場合による資格など責任構造が変わります。

Recordは調査用から、利用者と規制への説明根拠へ重要性が増します。

T36で続けます。

持ち帰る問い

16
エージェントにはどんな権限があるか?

Agentは案を出せても実行を決定できません。八段の二段だけモデル、六段は確定的コードです。

17
AI が間違えたとき、損失を負うのは誰か?

componentが誤らなくても損失が出ました。責任は一componentよりsystem設計にあります。 結果を答える層がなかったことを、公開した人が負います。

18
どの判断に人の関与を残すべきか?

全承認は疲れを生むので、重大なsimulation不一致、新protocol、volatility超過の三種類に人を残します。

9
誰がリスクを負うか?

利用者の資金なら、リスクは利用者、利益はplatformかもしれません。この非対称を事故後でなく設計時に示します。

章末チェック

要点

観察 → 推論 → 提案 → シミュレーション → 検証 → 実行 → 確認 → 記録。どの段階も省けない。

この章の実践課題を終えたらチェックしてください進捗をすべて見る

このページの内容