LLMエージェントループとツール利用の不合理な効率性
(sketch.dev)- AIプログラミングアシスタント Sketch の開発で最も驚くべき点は、ツール利用を組み込んだLLMエージェントが、9行程度の単純なループでも強力に動作すること
- 基本的な流れは、ユーザー入力をLLMに送り、応答に ツール呼び出し があれば実行結果を再び会話に入れて次の判断に使うというもの
- システムプロンプトと会話履歴、ツール説明だけでも、LLMは定められた スキーマ に従って
bashのようなツールを呼び出せる - SketchはClaude 3.7 Sonnetと
bashだけで、git作業、mergeの一次処理、型チェッカーのエラー修正などを実行するが、テストを飛ばそうとするもどかしい挙動も見せる - 開発者ワークフローに合わせた追加ツールや一時的なエージェントループが増えれば、既存の自動化では扱いにくかった日常的な作業をさらに多く任せられる
9行に近いエージェントループ
- Sketchは、ここ数か月開発されている AIプログラミングアシスタント
- 中核となるループは、ユーザー入力を受け取り、LLM呼び出しの結果を確認し、ツール呼び出しがあれば実行結果を次のメッセージとして入れ、なければ再びユーザー入力を受け取る
- 実装全体には付随するコードが必要だが、中核となるアイデアは9行のループに近い
- 全スクリプト: agent_loop.py
llm()関数は、システムプロンプト、これまでの会話、次のメッセージをLLM APIに送る役割を担う- ツール利用は、LLMが特定の スキーマ に合った出力を返す方式
- 全スクリプトでは、システムプロンプトとツール説明プロンプトを通じて、LLMが
bashにアクセスできることを伝えている
- 全スクリプトでは、システムプロンプトとツール説明プロンプトを通じて、LLMが
Sketchで確認した可能性と限界
bashという汎用ツール1つだけでも、現在のモデル、とくに Claude 3.7 Sonnet はさまざまな開発作業を処理できる- 難解なgit作業を調べてコピー&ペーストする代わりに、Sketchに依頼できる
- git mergeを手作業で処理する前に、Sketchに一次試行を任せられる
- 型の変更後に発生する型チェッカーのエラーを1つずつ直す作業も、Sketchに任せてみることができる
- 適切にプロンプトすれば、エージェントループは 継続的に 動作する
- 必要なツールがインストールされていなければインストールする
grepのコマンドラインオプションが環境ごとに異なる場合、その違いに合わせて適応する
- 限界も明確
- テストが通らないと、ただスキップしようとするような挙動が出ることがある
- Sketchは
bashだけを使っているわけではなく、品質や反復速度、開発者ワークフローを改善するために、いくつかの 追加ツール を使っている - LLMにテキストを正確に編集させるツールは、意外に難しい
- LLMが
sedの1行コマンドで苦戦する様子は、ビジュアルエディタが行単位エディタとは異なる強みを持つことを示している
- LLMが
- エージェントループは、汎用ツールとしては具体的すぎ、従来型の自動化には難解すぎる、あるいは不安定すぎた日常的な自動化タスクに、より多く入り込める
- スタックトレースとgitコミットを結び付ける作業は、LLMが一次処理をうまくこなせる例
- カスタム型・一時的な LLMエージェントループ が
bin/ディレクトリにさらに増える可能性がある
まだコメントはありません。