AI Coding 长任务为什么难以真正续接?我在思考一种原生任务状态模型

0 阅读7分钟

最近长期使用 Codex 一类 AI 编程工具时,我碰到一个挺具体的问题。

前一天,我用 AI 完成了一个比较完整的功能排查和修改。

第二天,我想继续修改这个功能。

我知道昨天做的是什么,也记得大概讨论过什么,甚至还记得其中某个关键词,但真正重新定位到昨天那个任务并继续下去,并没有我想象中那么自然。

这件事情后来让我意识到:

找回历史聊天,可能并不等于继续原来的任务。

对于一个复杂 AI 编程任务来说,真正有价值的往往不只是聊天文本,还包括:

  • 需求是怎么一步步变化的
  • 用户纠正过 AI 哪些理解偏差
  • 哪些方案已经试过并失败
  • 修改过哪些文件
  • 执行过哪些命令
  • 得到过哪些运行结果
  • 当前任务停在什么位置
  • 下一步原本准备做什么

如果重新打开一个新会话,然后通过搜索、RAG、摘要,把历史信息重新灌进去,它当然可以恢复一部分上下文。

但我越来越觉得:

Context reconstruction 和 Task continuation 可能不是同一件事情。

前者更像是在重建:

关于过去发生了什么的知识。

后者更像是在恢复:

一个仍然存在、并且可以继续执行的任务状态。


1. Conversation 可能不是长期 AI 任务最合适的抽象

现在很多 AI 产品的基础抽象仍然是:

Conversation
  └── Message
      └── Message
          └── Message

这个模型用于聊天完全合理。

但当 AI 开始承担越来越复杂的任务,例如:

  • 多轮代码修改
  • 调试
  • 文件操作
  • 命令执行
  • 多步骤排查
  • 工具调用
  • 多 Agent 协作

问题就开始出现。

因为任务状态实际上被隐含在一长串 Conversation 中。

用户第二天回来之后,需要从过去的对话里重新推导:

昨天做到哪里了?
为什么这么改?
哪个方案已经失败?
哪些文件已经被修改?
运行结果是什么?
下一步应该做什么?

也就是说,Conversation 在同时承担“交流记录”和“任务状态容器”两个角色。

我开始怀疑:

对于长期 AI 任务来说,这两个概念是不是应该被拆开?


2. Session persistence ≠ Task continuation

一个直接的反问可能是:

这不就是 Session 保存吗?

我觉得未必。

Session persistence 解决的通常是:

这个会话还在。

但 Task continuation 真正需要回答的是:

这个任务现在是什么状态?

两者之间可能存在明显差异。

比如一个任务过程中可能经历:

需求 A
↓
方案 1
↓
运行失败
↓
用户纠正
↓
方案 2
↓
修改 file1 / file2
↓
执行命令
↓
得到结果
↓
发现新问题
↓
任务暂停

如果只保留 Conversation,我们仍然需要从文本中重新推导:

Current State = ?

而如果 Task 本身是一个独立资源,它就可以显式拥有状态。


3. RAG ≠ Execution continuity

另一个很自然的方案是:

把历史记录向量化,需要的时候 RAG 回来不就行了?

RAG 非常适合解决:

过去有没有出现过与当前问题相关的信息?

但我觉得它和 Task continuation 的目标仍然不完全一样。

RAG 更像:

Retrieve relevant knowledge

Task continuation 更像:

Restore execution state

一个系统即使能准确搜索到:

昨天我们讨论过方案 B

也未必意味着它知道:

方案 B 已经执行到了第 4 步,
fileA 已修改,
fileB 还没修改,
测试 2 已失败,
下一步原本应该重新跑测试 3

所以我现在倾向于认为:

RAG ≠ Task State
Chat History ≠ Execution State
Session Persistence ≠ Task Continuation

4. 如果 Task 成为一等资源呢?

于是我开始想:

AI 平台是不是可以把 Task 本身作为一种一等资源,而不是仅仅把任务隐含在 Conversation 里?

例如:

Task
├── task_id
├── state
├── artifacts
├── decisions
├── execution_results
├── checkpoints
├── continuation_context
└── relationships

这里的重点不是字段本身。

而是抽象层级发生变化。

今天可能是:

User
  ↓
Conversation
  ↓
Messages

未来对于复杂 Agent 系统,也许会变成:

User
  ↓
Task
  ├── Conversation
  ├── State
  ├── Artifacts
  ├── Execution
  └── Checkpoints

Conversation 只是 Task 的一个组成部分。

而不是 Task 本身。


5. resume task X

如果这个抽象成立,那么用户第二天回来的动作也会发生变化。

现在更像:

打开历史会话
↓
重新阅读
↓
重新告诉 AI 昨天发生了什么
↓
AI 重建上下文
↓
继续工作

理想情况下,也许可以变成:

resume task X

系统恢复:

Task identity
Current state
Relevant artifacts
Past decisions
Execution results
Checkpoint
Continuation context

然后继续执行。

这里我说的“恢复状态”,并不是要求保存模型私有的内部推理过程。

我更关心的是用户和系统共同形成的、可观察和可管理的任务状态,例如:

  • 用户需求
  • 文件变化
  • 工具调用
  • 执行结果
  • 检查点
  • 已尝试方案
  • 当前阶段
  • 可续接上下文

6. 为什么我觉得这个问题可能会越来越明显

早期 ChatGPT 主要还是聊天工具。

一个会话几十轮,重新开一个窗口问题不大。

但 AI Coding Agent 正在快速把单个任务拉长。

一个任务可能持续:

几个小时
↓
一天
↓
几天
↓
甚至更长

同时它操作的对象也越来越多:

代码
文件
终端
浏览器
数据库
API
外部工具
多个 Agent

这时候“历史聊天”与“任务本身”的差异就会越来越明显。

尤其未来多 Agent 系统里,一个 Task 甚至可能同时包含:

Agent A 的执行状态
Agent B 的验证状态
Agent C 的研究结果
共享 Artifact
Task-level checkpoint
Human approval

如果所有东西最后仍然只能还原成一串 messages,我感觉系统复杂度会越来越高。


7. 当然,这里面还有很多问题

这个想法目前只是一个 Draft,我并不认为它已经成立。

实际上还有很多明显问题需要回答。

比如:

Task 到底应该保存多少状态?

全部保存肯定不现实。

哪些状态值得长期保存,哪些只是临时上下文?

Task state 会不会越来越大?

如果一个任务持续几个月,状态膨胀怎么办?

需要:

Checkpoint
Compaction
Summary
Artifact GC

吗?

Task 和 Conversation 怎么划分?

一个 Conversation 可以对应多个 Task 吗?

一个 Task 可以跨多个 Conversation 吗?

Task continuation 和 Workflow checkpoint 有什么区别?

现有的:

  • LangGraph checkpoint
  • Agent memory
  • workflow persistence
  • session persistence

是否已经能够覆盖这个问题?

如果可以,那么是否根本不需要平台级 Task 抽象?

隐私和权限怎么办?

长期任务可能包含:

代码
文件
终端输出
数据库结构
业务数据
用户决策

如果 Task 长期存在,就必须有清晰的数据生命周期和权限模型。


8. 我现在真正想验证的问题

我现在更想验证的并不是:

我设计的这个方案是不是正确。

而是:

“长期 AI 任务的原生续接”到底是不是一个值得独立讨论的问题?

也就是说:

Context Reconstruction

和:

Task Continuation

到底是不是两个不同层级的问题?

如果现有的:

Session + RAG + Memory + Checkpoint

已经能够完整解决,那么这个构想可能就是多余的。

但如果未来 AI Agent 真正开始承担长期、复杂、跨工具的任务,我感觉 Task 可能会逐渐从一个隐含概念,变成一个需要显式建模的系统资源。


我把目前的思考整理成了一份非常早期的 Draft:

Native Stateful AI Task Continuation

GitHub:

github.com/qinghua6449…

目前只是个人构想,不是成熟方案。

非常欢迎直接挑战。

尤其想听听大家对下面几个问题的看法:

  • 这是不是已经被现有 checkpoint / memory / session 机制解决了?
  • Task 有没有必要成为平台级抽象?
  • Conversation + RAG 是否已经足够?
  • Task state 最小应该保存什么?
  • AI Coding Agent 的任务到底应该如何定义生命周期?

如果这个问题本身就是伪需求,也欢迎直接拍砖。


一句话总结:

我开始怀疑,未来 AI Agent 真正需要保存的,可能不只是“我们聊过什么”,而是“这个任务现在进行到了哪里”。