创作 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 自己修改权限、无限创建子任务或自动发布所有内容。

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

相关推荐
AI_Gump31 分钟前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
yuyuxun11 小时前
协同过滤的校园二手物品智能推荐系统的设计与实现 毕业设计-附源码40082
javascript·vue.js·spring boot·python·数据分析·django·课程设计
文丑颜不良啊3 小时前
LeetCode2821~2840题目解析
java·leetcode
apcipot_rain4 小时前
C++转Java日记(10)
java·开发语言
总要学点什么4 小时前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
简 洁 冬冬4 小时前
泛型方法写法全面辨析:从「能编译」到「能跑」到「能用」
java·泛型
LGL6030A4 小时前
Java学习历程31——初识Spring Boot
java·spring boot·学习
Agent世界6 小时前
用 CDP 做发布自动化:四道机器闸门与产物验收
前端·javascript
疯华整猫6 小时前
否决 Flutter 提案那天,我发现自己也说不清 Framework 管什么
android
总要学点什么6 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium