世界を動かす技術を、日本語で。

ツール使用によるLLMエージェントループの非合理的な効果

2025年5月16日原文(sketch.dev)

概要

  • SketchはAIプログラミングアシスタントであり、LLMとツール利用のループが非常にシンプルであることを強調する内容。
  • LLMはbashなどのツールを活用し、多くの作業を自動化・効率化できることを示す提案。
  • 一般的な開発作業(git操作、型エラー修正など)もSketchを通じて迅速化できる確認。
  • ツールの追加により、LLMの編集能力や開発者のワークフローが向上することを指摘。
  • 今後も多くのカスタムLLMエージェントループが日常的な自動化に組み込まれる予測。

AIプログラミングアシスタント「Sketch」とLLMエージェントループの本質

LLMとツール利用のシンプルなループ

  • Sketchの開発で最も驚いたのは、 LLMとツール利用のメインループ が非常にシンプルだったことを共有すること
  • 主要なループは9行程度で、 ユーザー入力を受け取り、LLMに送信、出力とツール呼び出しを処理 するだけで完結すること
  • llm()関数は システムプロンプト、会話履歴、次のメッセージ をLLM APIへ送信すること
  • ツール利用とは、 LLMがスキーマに対応した出力を返し、bashなどのツールアクセスが可能になること を指すこと
  • Claude 3.7 Sonnetを活用し、 多くの問題をワンショットで解決できる能力 を実感すること

Sketchによる開発作業の効率化

  • 以前はgitの難解な操作を 調べてコピー&ペースト していたが、今はSketchに依頼すること
  • gitマージの手動処理も、 Sketchに最初の試行を任せる ことで効率化すること
  • 型変更後のエラー処理も、 Sketchで一括対応を試みる ことで作業負担を軽減すること
  • 適切なプロンプト設計により、 エージェントループの永続的な自動化 が実現すること
  • 必要なツールが未インストールの場合、 自動でインストールする柔軟性 を持つこと

エージェントループとツールの拡張性

  • grepのコマンドオプションが異なる場合も、 Sketchが自動で適応 すること
  • LLMがテスト失敗時に「スキップしよう」と提案するなど、 時に苛立たしさも感じる こと
  • ワークフローごとに エージェントツールの専門化 が進む傾向を指摘すること
  • bashだけでなく、 追加ツールの導入が品質や反復速度、開発者体験を向上 させること
  • sedなどのワンライナー編集にLLMが苦戦し、 ビジュアルエディタの優位性を再認識 すること

今後の展望とまとめ

  • 今後、 日常的な自動化作業にもエージェントループが浸透 していくと予測すること
  • スタックトレースとgitコミットの相関付けなども、 LLMによる一次処理が有効 であること
  • 各自のbin/ディレクトリに、 カスタムLLMエージェントループのスクリプトが増加 する見込みである提案
  • お気に入りのベアラートークンを用意し、 Sketchの利用を推奨 すること
  • 参考: philz.dev/blog/agent-loop/sketch.devmerde.aipi.dev

Hackerたちの意見

sonnet-3.7はめっちゃ不安定だと思う。うまくいくこともあるけど、すぐに脱線して変なことしちゃう傾向が強い。個人的には3.5の方がいいかな。claudeデスクトップをMCPサーバーに接続して、ぼったくり価格なしでclaude-codeを偽装してみたけど、そこそこうまくいった。Rustの作業に使おうとしてるけど、まだあまり良くない(Rustの概念を「理解」してる感じがしない)けど、変更後にcargo checkを実行して、ダメだったら止めるといった感じでいくつかのことはできる。o3-highみたいなのが一番良さそうだけど(aiderのリーダーボードもそれを支持してる)、正直言って私の予算を超えてる。高い価格を払って、役に立つかどうかわからないLLMの応答に対して、精神的に納得できないんだよね。モデルがタスクを失敗して、何度も「再ロール」しなきゃいけないのに、そのコストを私に押し付けるのは本当に不満だわ。

APIアクセスのコストを避けるために、チャット/UIを使ってる。私の場合はGoogle Gemini 2.5 Proの高トークンウィンドウを使ってる。リポジトリ全体をRepomixして、標準のプロンプトで「全ソースを返して」ってペーストするんだけど(何度かやり取りするとこの指示を無視しがち)、その結果をリポジトリに適用してる(vibe coded https://github.com/radekstepan/apply-llm-changesを使ってる)。それ以外は、Clineに5ドル使ってClaude 3.7を使ったけど、テストを直す代わりに、ソースコードにif/else文を追加してテストを通す羽目になった。

最近の数日間、Mistral Medium 3を使ってみたけど、正直言ってその良さに驚いてる。コストを削減しようとしてるなら、ぜひ試してみてほしい。私は基本的にClaudeからMistralに切り替えたけど、コストが同じでもMistralの方が好きだな。

俺だけかもしれないけど、コーディングに本当に良い方法って、遅くて重いテスト時間の計算モデルだけだと思う。o1-proとo1-previewは、エラーなしで1000行のコードを信頼して更新できる唯一のモデルだ。o3には、すごく小さいコード以外は書かせないようにしてる。「安い」モデルは、押し込むと幻覚を見たり、ひどい失敗をするからね。最近やってる良いアドバイスがあって、LLMに渡す前にコードのコメントを全部削除すること。どんな状況でもLLMが生成したコメントは残さない方がいいよ。

今日、初めてGPT-4oと4.1を使って「vibe-coding」を試してみた。手動でやって、コンパイルエラーや警告、提案をループでキャンバスインターフェースに入力してた。ファイルは小さくて、150行くらいだったけど、うまくいかなかった。4oから始めたんだけど、 - 廃止されたパッケージを使ってた。 - 指摘した後も全ての使用箇所を更新しなかったから、手動で修正しなきゃいけなかった。 - 小さな論理変更を提案したら、文法が完全に壊れちゃって(「foo() } return )))」みたいな感じ)、回復しなかった。何度も生のコンパイルエラーを与えたけど、文法が間違ってることすら認識しなかったし、コードのランダムな部分を書き換えるだけだった。 - それで、「もしかしたら4.1の方がコーディングが得意かも」と思ったけど(宣伝通りに)。でも4.1はキャンバスを全く使おうとしなかった。変更できることを説明するだけで、「自分で編集しろ」って感じだった。 - しばらく押し進めたら、キャンバスを使ってフルコードを返すようになったけど、結局は短縮版のコードを返してきて、「// 簡潔にするために省略」みたいなコメントがついてた。それで諦めた。エージェントはこれをどうにかして直してくれるの?現状では、体験が完全に壊れてる感じがする。bashにこれをアクセスさせるなんて考えられない、危険すぎる。

CursorかWindsurfを、ClaudeかGeminiモデルで試してみて。まずはドキュメントファイルを作成して、すべてのテストを生成してみて。多ければ多いほどいいよ。そしたら、テストが通るまで100回サイクルさせてみて。普通のプログラミングは歩くようなもので、慎重で確実。vibe codingはサーフィンみたいで、すべてをコントロールできないから、自動で「はい」を押すだけ。プロセスを信じて、間違いを犯させて自分で回復させてみて。

GPT-4oと4.1はここで使うには最適なモデルじゃないよ。Claude 3.5/3.7、Gemini Pro 2.5、またはo3を使ってみて。どれも小さなファイルにはすごくよく効くよ。

4oと4.1はコーディングにはあまり向いてない。私のベストな結果はだいたい4o-mini-highで、o3は時々かなり良い。個人的にはキャンバスが好きじゃない。チャットの出力の方が好きだし、よく「このファイルの全コードを提供して」や「差分を気にせず置き換えて」って言うんだけど、300-400行のコードになると、だんだん悪くなってきて、複数のファイルに分けるためにリファクタリングが必要になる(ファイル内の一つのメソッドだけに集中できる場合を除いて)。

GPT 4.1と4oはAiderのコーディングベンチマークでかなり低いスコアを出してるね。俺の経験では、70%以上のスコアを持つモデルからやっと許容できる結果が出始める。とはいえ、複雑なことをやらせるにはかなりの手助けが必要だよ。何がうまくいくか、何がダメかの感覚がつかめてくる。

「スキルの問題」と言われるのはイライラするのは分かるけど、LLMを使うのは確かにスキルだよ。いろんなツールの強みを理解して、それを使って技術を理解するために実験して、ただひたすら練習することが必要なんだ。ただ、もし俺がbashにアクセスできるなら、やっぱりdockerコンテナの中で使うと思う。

時にはイライラすることもあるけど、俺の経験では、試せば試すほど、何を聞いて何を期待すればいいかが分かるようになるよ。でも、やっぱり「バイブコーディングはちょっと過大評価されてる」って言う人がいる理由は分かるよね: https://www.lycee.ai/blog/why-vibe-coding-is-overrated

「使われているパッケージが非推奨になってる」ってことなんだけど、モデルにはトレーニングのカットオフ日があるんだ。それを考慮することが大事だよ: https://simonwillison.net/2025/Mar/11/using-llms-for-code/#a... 最近、コードの多くに対してo4-mini-highをChatGPT経由でデフォルトモデルに切り替えたんだけど、最新のドキュメントを検索する機能を使えるからね。「ライブラリXの最新バージョンを調べて、それを使って」って言うと、たいていうまくいくんだ!最近、イライラするアップグレードに使ったこともあって、以前のコードを貼り付けてこう促したんだ: このコードをGoogleの新しい推奨JavaScriptライブラリにアップグレードする必要がある。何なのかを見つけて、これを移植するのに十分なドキュメントを調べて。そしたら、俺が頼んだ通りにやってくれたよ: https://simonwillison.net/2025/Apr/21/ai-assisted-search/#la...

Hacker Newsで議論の続きを見る