创作 Agent 的任务状态该如何保存

只保存 Agent 的最终回答,无法解释它中间为什么选了某张图,也无法在工具超时后从原步骤恢复。对内容生产来说,这会把一个可重试的问题变成整条任务重跑。

  1. 最小对象不是一条 ChatMessage
    建议拆成五类对象:
    Task 用户目标和业务归属
    Step Agent 拆出的具体步骤
    ToolCall 模型、连接器或本地能力调用
    Artifact 图片、视频、文档和结构化结果
    Approval 需要人工确认的决定
    一个任务示例:
    {
    "task_id": "task_1001",
    "project_id": "drama_01",
    "goal": "生成第3集分镜候选",
    "status": "waiting_approval",
    "context_version": 4,
    "steps": "step_script", "step_subject", "step_shot",
    "pending_approval_id": "approval_72"
    }
    project_id 和 context_version 不能省略。没有业务归属,产物容易落到个人空间;没有上下文版本,任务恢复时可能读到已经变更的角色或商品资料。
  2. 状态要表达"等待什么"
    建议使用:
    queued -> running -> waiting_input -> running
    -> waiting_approval -> running
    -> succeeded
    -> failed_retryable
    -> failed_terminal
    -> cancelled
    waiting_input 表示缺少用户资料,waiting_approval 表示结果需要人工决定,两者都不能显示为失败。用户补充资料后,应从原步骤恢复,而不是复制出一条新任务。
  3. ToolCall 必须支持幂等和重试
    工具调用至少保存:工具名称、输入摘要、权限主体、幂等键、开始结束时间、结果引用、错误类型和重试次数。
    call_key = hash(task_id + step_id + input_version + tool_name)
    if ToolCall.exists(call_key):
    return existing_result

call = create_call(call_key, status="running")

try:

result = invoke(tool, input)

mark_success(call, result)

except Timeout as e:

mark_failed(call, retryable=true, reason=e.code)

没有幂等键的反例是:视频接口已经生成成功,但回调超时,Agent 重试后又生成一条并重复扣费。重试策略必须与工具特性和费用相关。

  1. 嘟哩 AI 的承接方式

嘟哩 AI 的专家团、技能、连接器和自动化任务可以作为 Step 和 ToolCall 的执行来源;图片、视频、项目文件和短剧节点作为 Artifact 回到企业项目中。用户在任务过程中可以暂停、补充资料或确认候选,而不是被迫把所有判断一次性写进提示词。

这类工作流的目标不是开放一个无限自主循环,而是让 AI 在授权范围内继续推进明确任务,并在高风险节点停下来。权限、连接器能力和本地 Harness 是否可用,仍要按实际部署环境配置。

  1. 第一版的边界

MVP 先做状态可见、输出可追溯、人工暂停、失败重试和任务取消。不要第一版就允许 Agent 自己修改权限、无限创建子任务或自动发布所有内容。

验收时可以模拟三种故障:用户中途补资料、工具调用超时、审批拒绝。只要系统能从正确状态恢复,且不重复生成或丢失产物,状态设计才算真正可用。

相关推荐
我怀里的猫19 分钟前
android-activity-launch-sequence
android
yuniko-n1 小时前
【JUC】volatile 非原子性深入解析
java
sun_weitao1 小时前
极简版 MCP 工具实现方案
java·linux·服务器
金銀銅鐵2 小时前
[Java] 展示增删元素时 LinkedList 的内部变化
java·后端·ai编程
YB13752 小时前
Jetpack Compose 动画rememberInfiniteTransition
android
布吉岛的石头3 小时前
Java 程序员第 50 阶段3:数据工程:预训练语料清洗与去重
java·开发语言·人工智能·深度学习·transformer
大文说跨境3 小时前
防关联浏览器的指纹覆盖到什么程度:六类参数的实测与自检方法
java·指纹浏览器·tiktok运营
Carol06303 小时前
上肢及肩肘关节
java·服务器·数据库
yliucherish3 小时前
Log4Shell 复现实录:我读 OpenJDK 源码,发现两道防线的默认值竟然相反
java
维拉德4 小时前
Java新人第一次接打标需求:从抓包找接口到客户端展示
java