エージェントループ
エージェントループは、すべての PRX エージェントセッションを駆動する中心的な実行サイクルです。各イテレーションで LLM レスポンスを処理し、ツールコールをディスパッチし、メモリを管理し、継続するか最終回答を返すかを決定します。
ループライフサイクル
User Message
│
▼
┌─────────────┐
│ Build Context│──── Memory Recall
└──────┬──────┘
▼
┌─────────────┐
│ LLM Inference│──── Streaming Response
└──────┬──────┘
▼
┌─────────────┐
│ Parse Output │──── Tool Calls / Text
└──────┬──────┘
▼
Tool Calls?
├── Yes ──→ Execute Tools ──→ Loop Again
└── No ──→ Return Responseツールディスパッチ
LLM レスポンスにツールコールが含まれる場合、ループは以下を実行します:
- 各ツールコールをセキュリティポリシーに対して検証
- 承認されたコールを実行(並列実行も可能)
- 結果を収集して LLM にフィードバック
- 次の推論ステップのためにループを継続
ストリーミング
PRX は LLM レスポンスをトークンごとにクライアントにストリーミングしながら、同時にツールコール検出のためにバッファリングします。ストリーミングパイプラインは以下をサポート:
- CLI または WebSocket クライアントへのリアルタイムトークン転送
- クライアントが遅い場合のバックプレッシャー処理
- Ctrl+C または API シグナルによるグレースフルキャンセル
メモリリコール
各 LLM コールの前に、ループはメモリシステムから関連するコンテキストを取得します:
- 最近の会話ターン(スライディングウィンドウ)
- エンベディングストアからのセマンティック検索結果
- ピン留めされた事実とユーザープリファレンス
コンテキスト圧縮
会話がモデルのコンテキストウィンドウを超えた場合、ループは圧縮をトリガーします:
- 古いターンを凝縮された表現に要約
- まだ参照されているツールコール結果を保持
- システムプロンプトとピン留めされたメモリをそのまま維持
設定
toml
[agent.loop]
max_iterations = 50
parallel_tool_calls = true
compaction_threshold_tokens = 80000
compaction_strategy = "summarize" # or "truncate"関連ページ
- エージェントランタイム -- アーキテクチャ概要
- サブエージェント -- 子エージェントのスポーン
- メモリシステム -- メモリバックエンドとリコール