第1章: そもそも「エージェント」とは ─ LLM にループを巻きつける
2022年末、ChatGPT が世界に出てきたとき、誰もが驚いたのは「文章の上手さ」だった。 質問すれば答えが返る。コードを頼めばコードが返る。
しかし数年たって、いま驚いているのは違うことだ。 「リファクタしておいて」と一言入れて席を立ち、戻ってきたら 23 ファイル書き換わっていて、テストが緑で、PR まで作られている。
ChatGPT は 答える。Claude Code は 動く。 この差はどこから生まれるのか。
1.1 そもそも、LLM は何をしているか
ChatGPT も Claude Code も、中身は「大規模言語モデル」(LLM) だ。 モデル自体は驚くほど単純なことしかしていない:
LLM は、与えられたテキストの続きを 1 トークンずつ予測する。それ以上のことはしていない。
「明日の天気は」と入力すれば、過去に学習した文章の統計から「晴れ」「雨」のような自然な続きを返す。
「def fibonacci(n): の続きを書け」と入力すれば、コードの続きを返す。
つまり LLM の本質は 続きを書く機械 だ。それ以上でも以下でもない。
トークンLLM が出力する細切れの単位 (詳しくは第4章で扱う)。
ここで素直な疑問が湧く。
続きを書くだけの機械が、なぜ ファイルを書き換えたり、テストを実行したり、PR を作ったり できるのか?
これが本書全体を貫く、最初の問いだ。
1.2 単発の補完では、絶対にできないこと
ChatGPT 初期の使い方を思い出してほしい。
- 人間が質問を入力する
- モデルが答えを生成する
- 終わり
このサイクルでは、LLM はずっと “話している” だけ で、外の世界には一切触れない。
たとえば「fibonacci.py のバグを直して」と頼んでも、LLM は:
- ファイルが手元にないので 読めない
- コードを書いても 保存できない
- テストを 走らせて確認できない
- 結果を見て 直し直すことができない
できるのは「こう直すといいですよ」というテキストを返すことだけ。 世界に手を出せないモデル だ。
LLM が偉いから Claude Code が動くのではない。 LLM は何も変わっていない。変わったのは LLM の外側、ループと道具を巻きつけた構造 のほうだ。
1.3 ループを巻きつける、というアイデア
ここで誰かが、こんなことを思いつく。
「LLM に 道具を渡して、その出力を また LLM に食べさせ続ければ、自分で動くんじゃないか?」
具体的にはこういうことだ:
- LLM に道具のカタログを見せる(「
ファイルを読むファイルを書くシェルを実行するという道具が使えます」) - LLM に頼みごとをする(「fibonacci.py のバグを直して」)
- LLM は 道具を呼ぶ命令 をテキストで返す(「
ファイルを読む(fibonacci.py)を実行してください」) - 外側のプログラム がそれを受け取って、本当にファイルを読む
- 読んだ内容を、また LLM に 続き として渡す
- LLM はその内容を見て、次の命令を返す(「
ファイルを書く(fibonacci.py, ...)を実行してください」) - これを 目的が達成されるまでループ する
LLM 自身は相変わらず「続きを書く機械」のままだ。 しかし 外側に道具とループを巻きつけた瞬間、LLM はファイルを読み書きし、テストを走らせ、結果を見て直す ── つまり 動ける 存在になる。
これが、本書のすべての出発点だ。
1.4 三つの登場人物 ── LLM・道具・ハーネス
ここまでに、3 つの登場人物が出てきた。整理しよう。
| 役者 | 役割 | 例 |
|---|---|---|
| LLM | 続きを書く。何をするか を決める | Claude / GPT / Gemini |
| 道具 (Tool) | 外の世界に触る具体的な手段 | ファイル読み書き、シェル実行、Web 取得 |
| ハーネス (harness) | LLM と道具の 間を取り持つ外側のプログラム。ループ本体 | Claude Code 本体、Cursor、Codex CLI (OpenAI 系コーディングエージェント) |
エージェント = LLM + 道具 + ハーネス
この三つのうちどれが欠けても “動く” ようにはならない。 道具がなければ世界に触れない。ハーネスがなければループが回らない。LLM がなければ何も考えない。
ニュースや SNS では「Claude (LLM) がすごい」「Cursor (UI) が便利」のように、特定の役者だけが脚光を浴びる。 だが本書を通じて何度も戻ってくる視点はこうだ:
コーディングエージェントの賢さの大半は、LLM ではなく “ハーネスの設計” が担っている。
どんな道具をどう用意するか。ループの停止条件をどう決めるか。文脈をどう保つか。権限をどう絞るか。これらの設計判断が、同じ LLM を使っても天と地ほどの差を生む。
本書はその「設計判断」を一つずつ解きほぐしていく。
1.5 「エージェント」という名前の正体
ここまで読むと、業界で言う エージェント という言葉の正体が見えてくる。
エージェント (Agent)LLM・道具・ハーネスを組み合わせ、目的を与えるとループを回して自律的に行動する プログラム。 単発で答えるだけの チャットボット とは違い、自分で道具を選び、結果を見て次の手を考え、目的に達するまで繰り返す。
似た言葉と混同しやすいので、軽く整理しておく。
| 用語 | 意味 |
|---|---|
| 補完 (Completion) | LLM の生の機能。テキストを与えると続きを返す。1往復で終わる |
| チャット (Chat) | 補完を会話風に並べたもの。ユーザーが質問、モデルが応答。手は出さない |
| エージェント (Agent) | チャットに 道具とループ を足したもの。手を出して、自分で繰り返す |
ChatGPT は チャット。Claude Code や Cursor の Agent モードは エージェント。 両者の差は LLM の賢さではなく、外側の構造設計だ。
1.6 では「ループ」はいつ止まるのか
最後に一つ、素朴な疑問を残しておく。
LLM はその気になれば永遠に「続き」を書き続けられる。 ファイルを読み、書き、テストを走らせ、また直し、また走らせ ── このループはどこで止まるのか?
答えは 「LLM 自身が “もう道具を呼ばない” 出力を返したとき」 だ。 つまり、LLM が「終わりました、こういう変更をしました」のような 道具呼び出しを含まないテキスト を返した瞬間、ハーネスはループから抜ける。
裏返せば、LLM が “終わり” を判断できないと、ループは延々と回り続ける。 これが現代のエージェントの最大の難しさのひとつで、第3章 (think → act → observe) と第15章 (限界) で何度も戻ってくる。
「エージェント = LLM + 道具 + ループ」 ── この一行が頭に入っていれば、本書の残りはほとんど “この三者をどう設計するか” の話に過ぎない。
第2章ではまず “道具を呼ぶ” という行為そのものを解剖する。
LLM はテキスト機械なのに、どうやって「Read(fibonacci.py)」のような構造化された命令を出せるのか?
答えは思ったよりエレガントだ。
この章の振り返り
- LLM の本質は「続きを書く機械」。それ以上でも以下でもない
- ChatGPT は チャット、Claude Code は エージェント。差は LLM ではなくハーネス側
- エージェントは LLM + 道具 + ハーネス (ループ) の三つで成立する
- ハーネスは LLM の出力を見て、道具を本当に動かし、結果を LLM に戻すループを回す
- ループは LLM が「道具を呼ばない出力」を返した瞬間に止まる
- 賢さの大半は ハーネスの設計 が担っている ── 本書全体のテーマ
この章で読めるようになるツイート / ブログ
- 「Claude 4.7 が出たのに、Claude Code のほうが体感速くなった気がする」 → モデルではなくハーネス側のループ・道具設計の改善が効いている、と読める
- 「Devin と Claude Code、LLM はどっちも Claude 系なのに動きが全然違う」 → 差は LLM ではなく、ハーネス側の設計判断 (道具セット・ループ戦略・停止条件) の差
- 「
while True: do_one_step()でエージェント書けるって本当?」 → 本当。最小エージェントはこのループ + 道具呼び出しの実装だけで成立する
次章は、本章でぼかしてきた「LLM はどうやって道具を呼ぶ命令を出すのか」に踏み込む。 テキスト機械が構造化された関数呼び出しを返す ── そのからくりが function calling だ。