エージェント主ループ
源码版本v2026.7.20
職務
run_conversation は Hermes の中心:ユーザーメッセージを受け取り、イテレーション予算が尽きるかタスクが完了するまで、モデル + ツールを繰り返し呼ぶ。同時にコンテキスト構築、ツールディスパッチ、停止条件判定、失敗時のフォールバックを協調させる。
ファイル全長は約 5800 行、ロジック密度が高い——このページでは主線だけを見る。詳細はサブページに分割する。
主要ファイル
run_conversation 入口:588-720— 関数シグネチャ、初期化とループ前準備while 主ループ:721-760— 条件api_call_count < agent.max_iterations and agent.iteration_budget.remaining > 0、grace call 含むAPI 呼び出しリトライ副ループ:1227-1280—while retry_count < max_retriesbuild_turn_context— 毎ラウンドのコンテキスト組み立てprompt_builder— システムプロンプト組み立てmoa_loop— Mixture-of-Agents 集約パスcontext_compressor— 閾値到達時に履歴を圧縮IterationBudget— 予算計数コア
データフロー
run_agent.py AIAgentは薄い転送器、実依存注入はinit_agentで済む。- 呼び出し側が
user_messageを渡すと、run_conversationはまずbuild_turn_contextでこのラウンドのコンテキスト(api_messages)を組み立てる。 while主ループに入る:中断チェック → 予算減算(iteration_budget.consume())→api_messages構築/消毒 → 事前圧縮 →/steerテキスト排出 → MoA 集約 → API 呼び出しリトライ副ループへ。- モデル応答後、レスポンス検証と
finish_reason処理を行う。失敗時はagent._try_activate_fallback()に回る。 - 圧縮閾値に到達したら
context_compressorでスペースを回収。 - ループ退出後(予算尽き/タスク完了/中断)に最終メッセージを返し、ゲートウェイ層が配信する(ゲートウェイ層参照)。
まとめ
主ループは編成だけを担う:ラウンド駆動、予算管理、リトライとフォールバック。真の能力は機能層のツールとスキルから来て、マルチプラットフォーム配信はゲートウェイ層に、自己進化は学習ループが担う。
公式の中文紹介を対照したい場合は、README.zh-CN と website/i18n/zh-Hans/ を参照。