Agent 循环
Agent 循环是驱动每个 PRX Agent 会话的核心执行周期。每次迭代处理 LLM 响应、调度工具调用、管理记忆,并决定是继续循环还是返回最终答案。
循环生命周期
用户消息
│
▼
┌─────────────┐
│ 构建上下文 │──── 记忆回忆
└──────┬──────┘
▼
┌─────────────┐
│ LLM 推理 │──── 流式响应
└──────┬──────┘
▼
┌─────────────┐
│ 解析输出 │──── 工具调用 / 文本
└──────┬──────┘
▼
有工具调用?
├── 是 ──→ 执行工具 ──→ 继续循环
└── 否 ──→ 返回响应工具调度
当 LLM 响应包含工具调用时,循环会:
- 根据安全策略验证每个工具调用
- 执行批准的调用(可能并行执行)
- 收集结果并反馈给 LLM
- 继续循环进行下一步推理
流式传输
PRX 逐 token 流式传输 LLM 响应给客户端,同时缓冲用于工具调用检测。流式管道支持:
- 实时 token 转发到 CLI 或 WebSocket 客户端
- 客户端慢速时的背压处理
- 通过 Ctrl+C 或 API 信号优雅取消
记忆回忆
每次 LLM 调用前,循环从记忆系统检索相关上下文:
- 最近的对话轮次(滑动窗口)
- 嵌入存储的语义搜索结果
- 固定的事实和用户偏好
上下文压缩
当对话超过模型的上下文窗口时,循环触发压缩:
- 将较早的轮次总结为压缩表示
- 保留仍被引用的工具调用结果
- 保持系统提示词和固定记忆不变
配置
toml
[agent.loop]
max_iterations = 50
parallel_tool_calls = true
compaction_threshold_tokens = 80000
compaction_strategy = "summarize" # 或 "truncate"