ASTER CODE / 02
任务执行流程
以一次编码任务为例,看模型如何调用工具、处理结果并完成验证。
01 建立工作区会话
开始任务前,Agent 加载 ACL 配置,AgentSession 确定本次会话使用的工作区、模型、工具和权限。终端和桌面通过 ACP 调用 Core;Rust 应用可以直接使用 send 或 stream。
宿主提供的可信配置与项目目录中自动发现的配置,拥有不同的权限。例如,仓库里的配置文件不能自行授权执行命令,也不能指定什么检查足以证明任务完成。
02 准备模型上下文
每次调用模型前,运行时收集系统指令、项目规则、对话历史和工具目录。这些内容经排序、去重后,再按上下文预算选择发送部分。预算限制发送给模型的内容量。历史过长时,可以用摘要替换较早的消息。
工作区检索用于查找相关代码,Skills 提供任务所需的操作说明,持久记忆保存可跨会话使用的信息。是否使用这些来源,取决于宿主接入了哪些能力。
03 检查工具调用权限
模型返回工具名称和参数后,运行时先检查权限,再决定执行、拒绝或请求用户确认。获准的调用由工具执行器运行,并遵守当前沙箱配置。执行结果、拒绝原因和错误都会返回模型。
04 执行并记录结果
工具结果写入事实日志,文件修改和检查结果也会被记录。模型看到这些结果后,再决定继续查找、修改还是运行测试。
任务也可以交给子代理。子代理使用独立会话,仍要经过权限和完成检查。子代理修改共享工作区时,父任务必须取得并处理执行结果。尚未确认结果的后台任务会阻止父任务成功结束。
05 检查完成条件
模型准备给出最终答复时,CompletionGate 检查修改文件、对应检查、子任务和未决操作。常见的结束状态如下:
| 状态 | 何时出现 | 含义 |
|---|---|---|
| Narrative | 没有工作区修改,且无其他未解决事项 | 本轮可以用最终答复结束 |
| Verified | 检查通过,报告对应当前修改 | 声明的检查已通过 |
| Waived | 宿主或用户明确接受尚未验证的本次修改 | 允许结束,但不代表验证通过 |
| Incomplete | 缺少检查结果、操作结果不明或子任务尚未处理完 | 任务还不能算完成 |
effect_digest 是本次修改的摘要,用来确认验证报告对应哪一版修改。先测试版本 A,再改出版本 B,原报告就不能证明 B 也通过了测试。
缺少检查结果时,运行会根据当前状态决定继续执行还是返回未完成。命令退出码为 0 只是报告的一部分,还需要知道它检查了哪些修改。
06 收尾与恢复
完成检查通过后,运行还要等待资源清理结束,例如关闭监听器、释放租约。清理失败、超时,或用户在此期间取消任务,都不能返回成功。
会话中断后,可以从事实日志重建执行状态。已经发出但结果不明的操作需要先核实,再决定是否重试。长期目标启动下一轮执行前,还要检查宿主设定的期限、权限和进展要求。