大多数编程智能体都遵循同一种节奏:你提问,它回答。你再提示一次,它才执行下一步。从你的意图到最终完成的工作之间,这条循环完全靠你自己的注意力来维系。SolonCode采用了不同的思路。它的循环引擎引入了两种长时间运行的任务模式——心跳模式(按计划、周期性执行)和目标模式(自主运行,直到完成)。
目标模式是其中最值得关注的部分:你只需陈述一次目标,智能体就会持续进行多轮工作——检查证据、运行验证器,只有在目标真正达成(或预算耗尽)时才会停止。这篇文章将深入解析目标循环在底层是如何运作的:状态机、面向模型提供的工具(goal_get / goal_update)、运行时安全网,以及让智能体保持诚实的预算感知提示。
![]()
两种循环模式
SolonCode的循环面板(或命令行中的 /loop 命令)提供了两种周期性任务类型:心跳模式——按固定间隔或cron表达式运行提示,例如“每30分钟检查一次CI状态”或“每天22:00扫描TODO注释”。目标驱动模式——完全没有时间表,AI自动循环运行,直到目标描述被实现。
在底层,这两种模式分别对应 LoopTask.TaskType.HEARTBEAT 和 LoopTask.TaskType.GOAL。心跳任务通过固定的 intervalMinutes 或7字段cron表达式来注册。而 /goal 和 /loop goal 这两个命令行路径会创建一个目标任务,其 intervalMinutes 为0,没有cron表达式,runNow 为true,提示词就是你的目标描述本身;调度器会将这个零间隔映射为5秒的固定延迟回退。
在命令行中,你可以完全跳过表单:
- /goal fix the auth module flaky tests
- /loop goal fix the auth module flaky tests
- /goal migrate the config service --max-tokens :200000 --max-duration :60
其中 --max-duration 以分钟为单位指定,内部会转换为毫秒。如果你不传入预算参数,调度器会回退到循环目标设置中配置的默认值。命令行还有一个实用的保护机制:当 /goal 和 /loop goal 在同一会话中发现已存在一个处于“追求中”状态的目标时,会拒绝创建新目标。这个检查属于命令行创建路径,而不是调度器级别的全局约束;已暂停和已阻塞的目标不会被计入。
目标状态机
一个目标并不是简单的布尔值。SolonCode将其建模为一个包含六种状态的状态机:
- 追求中(PURSUING)——活跃状态,调度器持续提交轮次
- 已暂停(PAUSED)——用户通过 /loop pause 暂停
- 已阻塞(BLOCKED)——模型通过 goal_update(blocked) 声明了阻塞项
- 已达成(ACHIEVED)——目标验证完成
- 预算受限(BUDGET_LIMITED)——令牌或时间预算耗尽
- 迭代受限(ITERATION_LIMITED)——达到最大轮次上限
从调度器的视角来看,只有“追求中”状态是活跃的。“已暂停”和“已阻塞”状态可以恢复——通过 /loop resume 命令可以将任一状态翻转回“追求中”并重新注册调度。当前的恢复路径不会重置任务的停滞计数器或连续错误计数器。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.