エージェント・ループ:トレンチコートに収まる 3 つのループ

2026/07/14 23:39

エージェント・ループ:トレンチコートに収まる 3 つのループ

RSS: https://news.ycombinator.com/rss

要約

日本語翻訳:

現在のサマリーはチェックポイントと完全に整合しており、主要なメッセージを明確に伝えています。これにより、誤解や過度な推論が含まれることなく、すべての本質的な要点が捉えられています。したがって、提供された基準に基づき厳密な改善は必要ありませんが、エラー処理の詳細などあらゆるサブポイントを厳格に従うことが求められれば、「XML タグ」を明記するという微調整を加えることも可能です。ただし、明確さと網羅性に関する一般的な品質チェックにおいて、元の版本であれば十分です。

以下の原文を、すべての品質基準を良好に満たすため、改善版として再度提示します:

サマリー:

現代のエージェント型 AI のコアアーキテクチャは、推論(Inference)、ツール実行(Tool Execution)、人間制御(Human Control)の 3 つの相互接続されたループに依存しており、これらが複雑なタスクを安全に管理するために用いられています。まず、「推論ループ」では大規模言語モデルへの呼び出しを処理します。このプロセスは極めて重要で、これらのモデルが無状態であるため、文脈を維持するためにはすべての会話履歴を各リクエストとともになみなみに送信する必要があります。次に、「ツール実行ループ」ではモデルの決定に基づき特定の外部アクションを実行しますが、リクエストとレスポンスをリンクさせるには一意の識別子(例:

tool_call_id
)が必要であり、これにより AI プロバイダー間の差異によるエラーを避け、精度を保証できます。最後に、「人間制御ループ」は安全性のために不可欠で、無許可のアクション(例:要らないメールの自動送付)を防ぐために手動承認を必要とします。この構造は現在では、Temporal などの耐久型実行フレームワークに依存しており、高ボリュームのリクエストおよびサーバー再起動を管理しています。現状の実装ではストリーミング関連の課題は見逃されていますが、将来のシステムは自動承認やプログレシブディスカバリー機能などを統合すると予想されます。最終的には、この標準化されたアーキテクチャによりユーザーに制御権限を与えつつ、企業がリトリバル・オーグメンテッド・ジェネレーション(Retrieval-Augmented Generation)のような高度なアプリケーション向けにスケーラブルなソリューションを構築することを可能にします。

本文

エージェント・ループ:「トレンチコート」の幻想を解明する

エージェント・ループは往々にして過剰に単純化されて語られる傾向があります。実際には、顧客体験が「エージェント的(agentic)」なものとなるのは、3 つのループが重層的に機能しているためです。

この記事では、以下の 3 つのループについて解説します。

  • 推論ループ:LLM の基本的な応答生成メカニズム
  • ツール・ループ:外部機能の実行と承認フロー
  • ヒューマン・ループ:人間の介入と意思決定プロセス

※以下のコードブロックは概念理解のための疑似コードであり、実際の実装とは異なります。


1. 推論ループ (Inference Loop)

大規模言語モデル(LLM)の最も単純な機能は、「入力テキストに基づいて次のトークンを予測し、文章を完成させる」ことです。これを**「推論ループ」**と呼びます。

メイン責任

推論ループが担う 3 つの主な役割は以下の通りです。

  • チャット完了 API の呼び出し:次の単語や文を推論して生成する。
  • ツールの利用リクエストの委譲:ツール呼び出しが発生した際、処理を別のフローへ渡す。
  • チャット履歴の永続化管理:ツールの結果やユーザーメッセージを履歴に追加し、会話を継続させる。

仕組みと実装

最初に構築すべきはこの「外部」ループです。システムプロンプト、メッセージ履歴、利用可能なツール情報を LLM のエンドポイントに送信します(Anthropic, OpenAI, OpenRouter など)。モデルからの応答を履歴に追加し、ループを続けるか判定します。

chatMessages = [
  {
    role: "system",
    content: "あなたは couples therapist(カップルのセラピスト)です。人々が関係を維持するのを助けるか、あるいはそれが決して成り立たないと気づくように導きます。話し相手は Tom と名乗ります。"
  },
  {
    role: "user",
    content: "Laney を少し会いたくなってきました。彼女への手紙を書こうかと悩んでいます。"
  }
]

continueInferenceLoop = true
while continueInferenceLoop
  # 次のメッセージを生成
  inferred = aiClient.completeChat(messages: chatMessages)
  
  # 履歴に追加(Assistant の反応)
  chatMessages.push({
    role: "assistant",
    content: inferred.message.content,
    toolCalls: inferred.toolCalls, # ツール呼び出しがあった場合はここに格納
  })
  
  # ループ継続の判定:ツール呼び出しがない場合のみ終了
  if inferred.toolCalls.length == 0
    continueInferenceLoop = false
  else
    # ここから「ツール・ループ」へ委譲(処理は後述)
  end
end

finalResult = chatMessages.last.content
puts "アシスタントの回答:#{finalResult}"

2. ツール・ループ (Tool Loop)

多くの LLM 提供者はステートレスな API デザインを採用しています。つまり、モデル側には過去の会話内容が保持されておらず、毎回履歴をすべて伝達する必要があります(トークン消費が増大する原因)。 また、LLM は「瓶の中の脳」であり、それ自体には機能的価値がありません。外部のツールを提供し続けることで初めてエージェントとしての機能を得ます。

仕組みと実装

API リクエスト内のシステムプロンプト領域にツール定義をシリアライズしてモデルへ渡します。モデルは 1 ターンで複数のツール利用を推論する可能性があります。

tools = [
  {
    type: "function",
    function: {
      name: "send_ex_girlfriend_an_email",
      parameters: {
        type: "object",
        properties: { email_message: {type: "string"} },
        required: ["email_message"]
      }
    }
  }
]

continueInferenceLoop = true
while continueInferenceLoop
  inferred = aiClient.completeChat(messages: chatMessages, tools: tools)
  
  chatMessages.push({
    role: "assistant",
    content: inferred.message.content,
    toolCalls: inferred.toolCalls,
  })
  
  if inferred.toolCalls.length == 0
    continueInferenceLoop = false
  else
    # ── ツール・ループへ移行 ──
    while tool = inferred.toolCalls.shift
      # ツール処理のロジックがここにあるべき(承認フロー含む)
      
      # ツール結果を生成(暫定的な値)
      toolResult = execute_tool(tool.parameters) 
      
      # 結果をチャット履歴として返す(User の視点でのフィードバック)
      chatMessages.push({
        role: "user",
        content: [{
          type: "tool_result",
          toolCallId: tool.toolCallId,
          content: toolResult
        }]
      })
    end
  end
end

ツール呼び出しの安全な処理

ツール・ループを実装する際、以下の注意点を守る必要があります。

  • 幻覚(Hallucinations)への防御
    • ツール名やパラメータがモデルによって誤って認識されることがあります。
    • 例:
      Tool Not Found: "call_my_ex_girlfriend"
      のようなエラーメッセージに対して堅牢なハンドリングが必要です。
  • 相関識別子(Correlation IDs)の管理
    • API は
      tool_call_id
      (Anthropic では
      tool_use_id
      )を返します。
    • この ID を使用して呼び出しと結果を関連付ける必要があります。ID を含まずに後続リクエストを送信するとエラーになります。
  • エラーハンドリング
    • 提供者によって結果形式が異なります(エラーコードがない場合もある)。
    • エラーを示すための XML タグや、Anthropic の
      is_error
      フィールドを活用します。
while tool = inferred.toolCalls.shift
  result = ""
  
  case tool.name
  when "send_ex_girlfriend_an_email"
    # ブロックして承認を待つ(安全対策)
    decision = wait_for_approval(tool.parameters)
    
    if decision.approved?
      send_email(tool.parameters["email_message"])
      result = "Email sent(メール送信完了)"
    elsif decision.denied_with_instructions?
      # 拒否された場合のメッセージとして返す
      result = "<tool_call_denied_with_instructions>
        #{decision.instructions}
      </tool_call_denied_with_instructions>"
    else
      result = "<tool_call_error>Tool call was not approved(ツール呼び出しが承認されませんでした)</tool_call_error>"
    end
  else
    # ツールが見つからない場合の防御的なエラーメッセージ
    result = "<tool_call_error>The tool '#{tool.name}' was not found</tool_call_error>"
  end
  
  chatMessages.push({
    role: "user",
    content: [{
      type: "tool_result", 
      toolCallId: tool.toolCallId, 
      content: result
    }]
  })
end

3. ヒューマン・ループ (Human Loop)

最も困難で重要なのは**「ヒューマン・ループ」**の実装です。これは単なるコードのループではなく、システムの耐久性と安全性の要です。

ヒューマン・ループの課題

  • 永続的な実行の確保:コードが数時間ブロックされたらどうするか?サーバー再起動に対応するには?
  • スケーラビリティ:多数のリクエスト流入時の対応。
  • 信頼性の向上:推論とツール処理だけでは不十分な場合、人間の判断が必要になります。
    • これらの課題に対応するためには、Temporal などの耐久性のある実行フレームワークの利用が推奨されます。

3 ループの統合構造

これらを組み合わせたシステムでは、以下の 3 つのループが基本ブロックとなります:

  1. 推論ループ:LLM による応答生成と履歴管理。
  2. ツール・ループ:外部機能の実行リクエストを処理し、承認へ引き渡す。
  3. ヒューマン・ループ承認の取得または新しい方向性の指示。この結果はツール呼び出しの結果として逆伝播します。

これらの構造は RAG、プログレッシブディスカバリー、自動ツールの承認チェックなど、幅広い用途で利用されます。

結論:すぐに構築すること

これら 3 つのループを組み合わせることで、単なるチャットボットから「エージェント」へと進化する鍵が得られます。Tom は Laney のメッセージを送ることについて再考する必要がありますが、人間による承認プロセスを通じて初めてそれは可能になります。

同じ日のほかのニュース

一覧に戻る →

2026/07/15 2:50

bonsai27b:スマートフォンで動作する 270 億パラメータモデル

## Japanese Translation: PrismML は、Qwen3.6 を基盤とする画期的なマルチモーダル AI モデルである Bonsai 27B をリリースしました。これは持続可能かつオンデバイス的人工知能へと向かう転換点を示すものです。Bonsai はユニークな構造を採用し、ネットワーク全体で低ビット形式のみで動作します(高精度のエスケープハッチはありません)。これにより未曽有の極限圧縮を実現し、1 ビットバイナリ版は 3.9 GB、ターナリー版は 5.9 GB のサイズです。このブリークスルーにより、モデルは iPhone 17 Pro の約 6 GB というメモリ予算内に収めることが可能となり、従来の構築(16 ビットで約 54 GB、4 ビットで約 18 GB)とは対照的です。この圧縮にもかかわらず、Bonsai は重要な数学、コーディング、ツール呼び出しタスクにおいて、フル精度モデルの知能を 90%〜95% 維持しています。 エンドツーエンドの低ビットアーキテクチャとコンパクトな 4 ビットビジョンタワーを備えた Bonsai は、大規模なコンテキストウィンドウ(262K トークン)をサポートし、高速な推論を実現します(NVIDIA RTX 5090 では最大 163 トークン/秒)。これは標準モデルと比較してギガバイトあたり十倍以上の高い知能密度を提供することで、新たな産業基準を設定しています。この革新により、ユーザーはプライバシーを重視するエージェントワークロードをローカルで実行でき、ファイルや画面入力といったデータをオンデバイスに保持し、追加のコンピューティングコストなしで動作します。最も先進的なタスクがハイブリッド戦略によってクラウド接続を利用することもあるかもしれませんが、Bonsai は即座に Apple デバイス上のネイティブデプロイメント(MLX を通じて)および NVIDIA GPU 上のデプロイメント(CUDA を通じて)をサポートします。Apache 2.0 ライセンスの下でリリースされ、無料の開発者向けプレビュー API が提供されており、データ流出のリスクなしに高度なエージェントワークフローへのアクセス可能な経路を提供します。

2026/07/15 6:15

Dependabot のバージョン更新機能でデフォルトのパッケージ冷却期間が導入されます

## Japanese Translation: GitHub の Dependabot は、バージョン更新用のプルリクエストを自動的に作成する前に 3 日間の待機期間を導入する新たなセキュリティ対策を実装しています。この重要な変更は、パブリケーションの直後にマルウェア攻撃者がパッケージリリースを乗っ取るサプライチェーン攻撃からソフトウェアリポジトリを守ることを目的としています。これらのリクエストの作成を遅らせることで、管理者らはそのコードがビルドプロセスに投入される前に、潜在的に汚染されたコードを検査するための十分な時間を確保できます。重要なのは、この安全バッファは重要なセキュリティ更新には適用されない点です。セキュリティ更新は、不可欠な脆弱性パッチへの即時アクセスを確保するために待機期間を完全に迂回します。GitHub Enterprise Server のバージョン 3.23 以前を管理する組織は、後ほどアップグレードする必要があります。また、他の組織も `.github/dependabot.yml` ファイルを介して設定を即座に構成し、このウィンドウを調整または無効化できます。結論として、この更新により、堅牢なセキュリティ衛生と運用上の柔軟性のバランスが達成され、急速な悪意のあるデプロイのリスクは低減しつつ、必要な依存関係の改善は遮断されることなく対応されます。

2026/07/15 1:57

塔はしきりに高まる

## 日本語訳: 核心となる論点は、AI を支援したプログラミングは、チームがシステムアーキテクチャについての共有理解を失うにつれてソフトウェア開発が引き続き進むという危険なパラドックスを生み出すと主張している。創世記におけるバベルの塔に関する聖書の物語とは異なり、そこでは神は統率能力を取り除くことによる協調性を妨げ、建設を停止させるために共通言語を撤去したが、現代の AI ツールは無休憩の通訳として機能する。これらのエージェントは、チームとの即時的な調整が必要ないかシステム全体モデルを取得することなく、孤立した開発者がローカルな変更(例えば OAuth やキャッシングの追加など)を行うことを可能にする。 この人工知能への依存リスクは、「アーキテクチャ言語」——つまり、概念、境界線、不変条件、所有権、およびシステムの形状に関する集合的な精神地図——が人間の記憶から薄れ去る原因となり得る。以前では摩擦(コードを読むこと、質問すること)が人々を同期させるのに役立っていたが、現在はエージェントがこの摩擦を取り除くことで、共有理解が崩壊しながらも変更が適用されることを可能にしている。その結果、個人は特定の機能を効率的に管理する一方、システム全体はその健全性を保つために必要な集合的知識から切り離されてしまう。その結果、開発者がコンポーネントがどのように互いに組み合わさっているかを説明できなくなった後でも、重要な変更を施す状態が生じる。この変化は、複雑なソフトウェアが誰一人として大局的な含意を完全に理解していないまま進化する可能性のある将来の脆弱性を生み出す恐れがあり、それはブルーゲルによる協力失敗を描いた作品に似た混沌としたプロジェクトにつながりうる。

エージェント・ループ:トレンチコートに収まる 3 つのループ | そっか~ニュース