🦄

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