Aster文档
搜索 Aster 文档
ESC
产品
版本

输入关键词开始搜索。

    文档目录

    ASTER CODE / 02

    任务执行流程

    以一次编码任务为例,看模型如何调用工具、处理结果并完成验证。

    架构图FIG. 02 · 执行循环模型根据工具结果决定下一步。工具调用先经过权限检查;返回结果前,还需要检查完成条件并等待资源清理。
    一次任务的受控执行工具结果进入下一轮输入。模型提出结束时,Core 检查完成条件。下一轮接收任务user.message模型提案下一步动作权限判定Allow / Ask / Deny执行工具受控效果保存事实原始回执检查完成证据与收尾
    1. 01模型只提出下一步

      模型读取当前上下文,再提出工具调用或最终答复。

      fact_control.rs L126 ↗
    2. 02执行前先检查权限

      Ask 等待准确的确认回答。Deny 返回拒绝结果。

    3. 03用事实检查能否结束

      工具回执进入日志。完成门禁核对修改、验证和未决事项。

      harness_loop.rs L1591 ↗

    下载 SVG ↗

    01 建立工作区会话

    开始任务前,Agent 加载 ACL 配置,AgentSession 确定本次会话使用的工作区、模型、工具和权限。终端和桌面通过 ACP 调用 Core;Rust 应用可以直接使用 send 或 stream。

    从 Agent::session_async L176 ↗ 进入会话创建,再沿 FactRun L126 ↗ 查看执行状态与事实日志。

    宿主提供的可信配置与项目目录中自动发现的配置,拥有不同的权限。例如,仓库里的配置文件不能自行授权执行命令,也不能指定什么检查足以证明任务完成。

    02 准备模型上下文

    每次调用模型前,运行时收集系统指令、项目规则、对话历史和工具目录。这些内容经排序、去重后,再按上下文预算选择发送部分。预算限制发送给模型的内容量。历史过长时,可以用摘要替换较早的消息。

    工作区检索用于查找相关代码,Skills 提供任务所需的操作说明,持久记忆保存可跨会话使用的信息。是否使用这些来源,取决于宿主接入了哪些能力。

    架构图上下文装配必需项保留,其他来源按去重、排序与预算规则进入模型上下文。图中来源需要宿主实际接入。
    模型看到的上下文怎样选出上下文是模型输入的投影。裁剪上下文不会删除事实日志。收集来源ContextResult保留最新贡献按来源替换合并重复条目内容身份排序候选优先级与评分应用预算条目与令牌形成模型输入本轮上下文
    1. 01来源先提交候选

      文件、技能目录和检索提供条目。

    2. 02同一来源只保留最新贡献

      后一次贡献替换前一次贡献,再处理条目去重。

      assembler.rs L153 ↗
    3. 03预算约束最终输入

      装配器依据排序、必需项和来源配额选择内容。

      assembler.rs L153 ↗

    下载 SVG ↗

    具体去重与预算选择见 ContextAssembler::assemble L153 ↗;各来源的每轮最新贡献不会无限叠加。

    03 检查工具调用权限

    模型返回工具名称和参数后,运行时先检查权限,再决定执行、拒绝或请求用户确认。获准的调用由工具执行器运行,并遵守当前沙箱配置。执行结果、拒绝原因和错误都会返回模型。

    04 执行并记录结果

    工具结果写入事实日志,文件修改和检查结果也会被记录。模型看到这些结果后,再决定继续查找、修改还是运行测试。

    任务也可以交给子代理。子代理使用独立会话,仍要经过权限和完成检查。子代理修改共享工作区时,父任务必须取得并处理执行结果。尚未确认结果的后台任务会阻止父任务成功结束。

    05 检查完成条件

    模型准备给出最终答复时,CompletionGate 检查修改文件、对应检查、子任务和未决操作。常见的结束状态如下:

    入口是 decide_completion L1565 ↗;它把修改账本、验证报告与宿主豁免交给完成规则判断。完整分支见权限与验证。

    完成状态的含义
    状态何时出现含义
    Narrative没有工作区修改,且无其他未解决事项本轮可以用最终答复结束
    Verified检查通过,报告对应当前修改声明的检查已通过
    Waived宿主或用户明确接受尚未验证的本次修改允许结束,但不代表验证通过
    Incomplete缺少检查结果、操作结果不明或子任务尚未处理完任务还不能算完成

    effect_digest 是本次修改的摘要,用来确认验证报告对应哪一版修改。先测试版本 A,再改出版本 B,原报告就不能证明 B 也通过了测试。

    架构图修改与验证的版本关联A 与 B 表示两份不同的修改摘要。图示不代表一次实际运行。
    旧报告为什么不能证明新修改A 与 B 表示两份不同的修改摘要。图示不代表一次实际运行。检查通过继续修改旧报告不匹配修改 Aeffect_digest AA 已验证报告绑定 A再次修改 Beffect_digest BB 待验证需要对应新依据
    1. 01先证明当前修改

      通过报告绑定修改摘要 A。报告只证明对应状态。

      harness_loop.rs L1637 ↗
    2. 02再次修改后摘要改变

      产生摘要 B 后,原报告仍保留为 A 的历史依据。

    3. 03为新状态取得依据

      新修改需要匹配 B 的报告或明确豁免。

      harness_loop.rs L1654 ↗

    下载 SVG ↗

    缺少检查结果时,运行会根据当前状态决定继续执行还是返回未完成。命令退出码为 0 只是报告的一部分,还需要知道它检查了哪些修改。

    06 收尾与恢复

    完成检查通过后,运行还要等待资源清理结束,例如关闭监听器、释放租约。清理失败、超时,或用户在此期间取消任务,都不能返回成功。

    资源实现遵循 CapabilityEffect L39 ↗,释放原资源的异步结果也属于收尾依据。

    会话中断后,可以从事实日志重建执行状态。已经发出但结果不明的操作需要先核实,再决定是否重试。长期目标启动下一轮执行前,还要检查宿主设定的期限、权限和进展要求。

    实现依据