跳到主要内容

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 活动像任何其他数据一样可检查、可审计。

平台面是 Agent 平台 ;编写面是 Agents