Chapter 1

第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 初期の使い方を思い出してほしい。

  1. 人間が質問を入力する
  2. モデルが答えを生成する
  3. 終わり

このサイクルでは、LLM はずっと “話している” だけ で、外の世界には一切触れない。 たとえば「fibonacci.py のバグを直して」と頼んでも、LLM は:

できるのは「こう直すといいですよ」というテキストを返すことだけ。 世界に手を出せないモデル だ。

LLM が偉いから Claude Code が動くのではない。 LLM は何も変わっていない。変わったのは LLM の外側、ループと道具を巻きつけた構造 のほうだ。

1.3 ループを巻きつける、というアイデア

ここで誰かが、こんなことを思いつく。

「LLM に 道具を渡して、その出力を また LLM に食べさせ続ければ、自分で動くんじゃないか?」

具体的にはこういうことだ:

  1. LLM に道具のカタログを見せる(「ファイルを読む ファイルを書く シェルを実行する という道具が使えます」)
  2. LLM に頼みごとをする(「fibonacci.py のバグを直して」)
  3. LLM は 道具を呼ぶ命令 をテキストで返す(「ファイルを読む(fibonacci.py) を実行してください」)
  4. 外側のプログラム がそれを受け取って、本当にファイルを読む
  5. 読んだ内容を、また LLM に 続き として渡す
  6. LLM はその内容を見て、次の命令を返す(「ファイルを書く(fibonacci.py, ...) を実行してください」)
  7. これを 目的が達成されるまでループ する

LLM 自身は相変わらず「続きを書く機械」のままだ。 しかし 外側に道具とループを巻きつけた瞬間、LLM はファイルを読み書きし、テストを走らせ、結果を見て直す ── つまり 動ける 存在になる。

これが、本書のすべての出発点だ。

LLM「続きを書く」だけのモデル道具 (Tools)Read / Write / BashGrep / Edit / …ハーネス (harness)外側のプログラムループを回す本体① 道具を呼ぶ命令② 実際に道具を動かす③ 結果を続きとして渡す↻ 目的が達成されるまで、これを繰り返す
図 1.1 — エージェントの最小構造。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 はどうやって道具を呼ぶ命令を出すのか」に踏み込む。 テキスト機械が構造化された関数呼び出しを返す ── そのからくりが function calling だ。