LLMエージェントを使った開発における「判断の継続性」を重視したLoop設計
はじめに
最近、OpenAIが「A Practical Guide to Building Agents」という実践的なガイドを公開しました。このガイドでは、エージェントを「ユーザーに代わって独立してタスクを完遂するシステム」と定義し、モデル・ツール・インストラクションという3つのコアコンポーネントや、段階的な自律性向上のアプローチが解説されています。
本記事では、このガイドラインを踏まえつつ、実際にLLMエージェントを活用して開発を行う中で私が重視している「判断の継続性」という観点から、Loop設計とログ活用の実践的な考え方をまとめます。
エージェントを使った開発で本当に大事なこと
最近、Agent的なコードを書くことが増えてきたのですが、思うところが出てきたので思考整理がてら書いてみます。
LLMを使ってエージェントを動かすとき、「処理が続くこと」よりも「判断が続くこと」の方が圧倒的に大事なんじゃないか、と思うようになりました。
この記事では、自分が最近大事にしているLoop の設計とログ活用の考え方についてまとめています。
自分がいなくても続くコードを書く
Agent開発をしていると、だんだん「自分が判断しなくていい構造を作りたい」って気持ちが強くなってきました。
理由は単純で、判断が繰り返される場面が圧倒的に多いからです。
- 「このケース前にも見たな…」
- 「この判断、毎回手動でやってるな…」
- 「またこのパターンか…」
みたいな感覚が強くなったら、Loop設計に入るタイミングです。
Loopをつくる=介在点を設計する
Loopっていうと「for文」とか「定期実行」とかを思い浮かべがちですが、ここで言いたいLoopは「人間の判断と再帰的構造を含んだループ」のことです。
AgentのLoop設計とは:
- どういうタイミングで人が介入するか
- 何を繰り返して何を学習するか
- 何をログに残して何を判断材料にするか
を設計することだと考えています。
Contextは一瞬ではなく、積層されるもの
多くのLLM系ツールは「状態」を扱うのが得意ですが、本当に重要なのは「文脈(Context)」です。
Contextは「今の状態」ではなく、過去の状態や判断、やりとりが積み重なって形成されるストーリーです。
Agent開発でもっとも怖いのは、前に何があったかを踏まえずにまた1から判断を始めることです。
それを防ぐには、Loopの中でContextが生まれ直す仕組みが必要になります。
ログで動かす
じゃあContextをどうやって維持するか?それが「ログ(Log)」です。
ログはただの記録ではなく、次の判断の材料になります。むしろ、ログがContextを生むといっても過言ではありません。
ログに記録しているもの(例):
- どんな入力がきたか
- どんな判断をしたか
- どんな出力をしたか
- どんな反応が返ってきたか
- 人間が介入したタイミングと理由
Loop + Log = Context(図解)
┌────────┐ ┌────────┐ ┌──────────┐
│ Input │ ─→ │ Loop │ ─→ │ Action │
└────────┘ └────────┘ └──────────┘
↑ │
│ ▼
┌─────────────────────────────┐
│ Log │
│ (判断・行動・観測の履歴) │
└─────────────────────────────┘
▲ │
│ ▼
┌────────────┐ ←――――――――――――――――
│ Context │ ←―― Loop + Log = 現在の判断根拠
└────────────┘
例:Loopっぽく書いてるAgentの設計方針(抜粋)
最近よくやってる構造です。
• 000_rule.md:Agent がどう振る舞うかのルール
• 001_log.md:判断と結果を全て時系列で記録(Markdown)
• 002_context.md:今の状態の要約(Agent が読む)
• loop.ts:毎朝ログを読み、次の行動を提案する処理
ルールは育てるし、ログは流れをつくるし、Context は毎日変化する。
でも Loop は変わらない。そこに構造があるからです。
AdHocなパイプラインを用意する。
LLMを使ったコーディングでコードを書くコストは下がりました。
今までなら作るの少し躊躇うようなちょっとしたAPI連携して結果を取得するようなコードを書くコストを気にならなくなりました。loopを継続させるためのAdHocなスクリプト(パイプライン)を用意することでloopがスムーズならそのコードを書くようにしています。
じゃあ Loop って何をするの?
ぼくの中での Loop の最低限は以下の3ステップです。
1. 状態を観察する(Log or Context)
2. 次にやるべきことを仮説として出す(LLM or 手動)
3. 実行して、結果をまたログに残す
ここに「人間の確認を挟む」ポイントを設けて、柔らかい構造をつくっています。
自分がいなくても続く、がゴール
自律とは「完全放置」ではなく、人の意思を構造化して手放すことだと思っています。
• 書いたログが次の判断材料になって
• それを読んで Agent が行動して
• その結果をまたログに残して
• 判断が文脈として繋がっていく
この一連が「Loopしてる状態」なんですよね。
最後に:この設計はまだ途中です
この Loop × Log × Context の設計は、まだまだ試行錯誤中です。
でもやればやるほど「自分が減って、構造が増える」感覚が面白いです。
Discussion