Agent 循环
Agent 循环
Agent 循环属于 Bolt。每次循环调用都会进入一个一次性工作线程。await infer 会让出,由宿主运行模型,随后同一次调用在同一工作线程中恢复。交互式入口会先持久化用户轮次,然后准入循环(agents.start 加 agents.turn)。循环仍属于 Bolt,并受工作区声明的权限约束。
循环
每次运行都从工作区提示词开始——src/+agents.md,外加 envoy 的任务——然后交替模型轮与工具调用。模型与工具设施等待发生在已准入的调用内:工作线程与槽位仍被分配,实际 CPU 计量暂停,宿主回复后同一次调用继续。后续循环迭代是一次新的调用与工作线程。
persist user turn ─► HOST ADMIT ─► BOLT FUNCTION (agents.ts — the loop)
│
┌────────────────────┼────────────────────┐
▼ ▼ ▼
return await infer not done
│ │ │
▼ ▼ ▼
reply host I/O; same later loop
invocation resumes invocation
│
┌─────────────┼──────────────┐
▼ ▼ ▼
platform tools workspace tools host tools
(describe/read/ (defineAgentTool) (policy-named,
write/skills) sandbox) 进入循环的两道门
同一循环服务两个入口。网页聊天与 envoy 入站都会先持久化用户轮次,然后由宿主准入循环函数:
- 网页聊天——已登录用户,以自己的账户行动
- envoy——声明的策略下的 envoy 主体
权限边界
规则是 权限约束 Agent,而非其工具列表 :无论循环能命名哪些工具,数据操作都在操作主体的策略下非特权运行。
预算
Colony 的宿主策略是每次调用最多连续占用 CPU 2,000 毫秒,而不是 2 秒墙钟超时。等待模型与数据库时仍保留槽位与工作线程,但不消耗 CPU 时段,也不计入计算用量。源码中不存在可声明的令牌预算: invocation budget 会终止一步,提供商拒绝、错误与计量也会。
子 Agent
对于狭窄的子任务,循环可以通过沙箱工具(spawn_subagent 与其同类)派生一个会话内、带聚焦提示词的子 Agent。子 Agent 在同一权限边界内运行。
记录
整个过程——轮次、工具调用、结果——都写入聊天会话集合,因此 Agent 活动像任何其他数据一样可检查、可审计。