AI Agent动态工作流设计:从状态管理到任务规划的工程实践

📅 2026/8/26 5:23:02
AI Agent动态工作流设计:从状态管理到任务规划的工程实践
1. 从一次“失控”的代码生成说起为什么我们需要动态工作流最近在尝试用 Claude Code 生成一个稍微复杂点的数据处理脚本时遇到了一个挺有意思的“翻车”现场。我的需求是给定一个包含用户行为日志的 CSV 文件需要先清洗数据处理缺失值、异常时间戳然后按用户分组计算几个关键指标如会话时长、点击率最后生成一份汇总报告并绘制趋势图。我像往常一样把需求描述、数据样例和期望的输出格式一股脑儿丢给了 Claude Code。它一开始表现得非常“积极”迅速生成了代码骨架导入了 pandas、matplotlib定义了数据清洗函数。但很快问题就出现了。在编写分组计算逻辑时它似乎“忘记”了之前清洗步骤中对日期列的处理试图直接对原始字符串进行时间运算导致代码报错。我指出错误后它进行了修复但在进入绘图阶段时又出现了新的问题它生成的图表代码试图在一个不存在的“df_processed” DataFrame 上操作而这个变量名在之前的步骤中从未被定义或赋值。这个经历让我停下来思考。Claude Code 单次的代码生成能力很强但它更像一个“瞬时记忆”的专家对于需要多步骤、状态前后依赖的复杂任务其表现就不那么稳定了。它缺乏一种内在的“工作流”意识无法自主地将一个大任务分解为有序、可回溯、状态连贯的子任务并执行。这恰恰引出了当前 AI 编程助手乃至更广泛的 AI Agent 领域的一个核心挑战如何设计一个框架Harness让 AI 能够可靠地驾驭Harness动态、多步骤的工作流“动态工作流”不是指工作流的步骤是随机变化的而是指工作流的路径和具体执行内容需要根据中间结果和上下文状态来实时决定。就像我那个数据处理任务是否需要执行某种特定的异常值处理可能取决于数据清洗后缺失值的比例绘制哪种图表可能取决于计算出的指标是否具有时间序列特性。一个静态的、预先写死的脚本无法应对这种不确定性而一个具备“动态工作流”能力的 Agent应该能像经验丰富的工程师一样边做边看灵活调整。Claude Code 目前的交互模式暴露了它在“状态管理”和“任务规划”上的短板。而这正是“Agent Harness”设计要解决的核心问题。Harness原意是马具引申为“控制并利用”。一个好的 Agent Harness就是要为 AI 这匹“骏马”套上合适的“缰绳”和“鞍具”让它不仅能奔跑还能按照既定的路线、根据路况灵活调整步伐最终抵达目的地。接下来我们就从 Claude Code 的现状出发深入拆解一个优秀的、支持动态工作流的 Agent Harness 应该具备哪些设计要素。2. 动态工作流的本质超越线性脚本的“感知-决策-执行”循环要设计 Harness必须先理解我们要驾驭的对象——动态工作流。它与我们熟悉的线性脚本或静态 DAG有向无环图工作流有本质区别。2.1 静态工作流 vs. 动态工作流一个传统的 CI/CD 流水线或简单的数据处理脚本是典型的静态工作流。它的特点是路径确定参数已知。例如“拉取代码 - 运行单元测试 - 构建镜像 - 部署到测试环境”。每一步的执行条件、输入输出在编写时就已经确定即使有判断如测试失败则停止分支也是预先定义好的有限集合。而动态工作流更接近人类解决复杂问题的过程。以调试一个未知 bug 为例执行运行程序观察崩溃日志。感知从日志中感知到“空指针异常发生在模块 A 的某行”。决策决策下一步不是继续运行而是“检查模块 A 在该行附近的输入数据来源”。再执行添加日志或调试断点检查数据。再感知发现数据来自模块 B 的某个 API 调用且该调用有时返回 null。再决策决策下一步是“分析模块 B 的该 API 在什么条件下返回 null”…… 这个过程是一个“感知-决策-执行”的循环下一步行动完全由上一步的结果动态触发无法在开始时穷举所有可能路径。在 Claude Code 的场景中一个理想的动态工作流能力意味着当我提出“开发一个数据分析脚本”时Agent 应该能自主规划出“数据加载 - 初步探查 - 制定清洗策略 - 执行清洗 - 验证清洗效果 - 设计分析方案 - 执行计算 - 验证结果合理性 - 选择可视化方案 - 生成报告”这样一个大致流程并在每个环节根据“感知”到的数据状态如缺失值占比、列类型、数值分布来“决策”具体采用哪种技术手段是用中位数填充还是删除是分组求和还是求平均用折线图还是柱状图。2.2 动态工作流对 Agent 的核心能力要求基于上述循环我们可以提炼出动态工作流对 Agent 的三大核心能力要求这也是 Harness 设计必须支撑的状态感知与记忆State Perception MemoryAgent 必须能准确“看到”当前工作环境的状态。这包括代码状态当前文件内容、已定义的变量、函数、导入的模块。执行结果上一条命令或代码块的输出包括正常输出和错误信息。用户反馈用户对之前步骤的肯定、否定或修正指令。外部环境状态如文件系统是否存在某个文件、API 调用返回的数据。 Claude Code 目前的问题在于它的“记忆”是短暂且容易被覆盖的。长对话中早期的上下文可能会被遗忘或稀释导致状态感知失效。Harness 需要提供一种结构化的方式来持久化、索引和检索关键状态信息。任务规划与推理Task Planning ReasoningAgent 必须能根据当前状态和最终目标规划出下一步或下一系列步骤。这需要目标分解将模糊的用户指令“做个数据分析”分解为具体的、可操作的任务清单。条件推理基于感知到的状态进行判断。“如果缺失值超过 50%则删除该列否则用中位数填充。”路径生成在多个可行的下一步操作中做出选择并预估其效果。 这要求 Harness 能集成或调用强大的规划模型如基于 LLM 的规划器并提供清晰的规划指令模板和上下文。工具执行与验证Tool Execution Validation规划好后Agent 需要能安全、有效地执行动作并验证执行结果。工具调用执行代码、读写文件、调用 API、查询数据库等。安全沙箱防止执行破坏性操作如rm -rf /。结果验证检查执行结果是否符合预期如代码是否报错、输出格式是否正确。如果失败需要将错误信息作为新的“感知”输入重新触发“决策”循环。 Harness 需要提供一个丰富、安全、可靠的工具集并建立规范的结果返回和错误处理机制。3. 构建 Agent Harness 的四大核心支柱理解了动态工作流的需求我们就可以着手设计 Harness 了。一个能够有效驾驭动态工作流的 Agent Harness我认为必须构建在以下四大核心支柱之上。我们可以把 Harness 想象成一个智能机器人的控制系统。3.1 支柱一结构化、可持久化的状态管理State Management这是解决 Claude Code “遗忘”问题的关键。状态不能只存在于模型的临时对话上下文中必须被外化、结构化地管理。状态数据结构设计需要定义一个核心的“工作空间状态”对象。这个对象应该包含多个命名空间例如{ “code_workspace”: { # 代码相关状态 “current_file”: “analysis.py”, “defined_variables”: {“df_raw”: “DataFrame”, “clean_data”: “function”}, “execution_history”: [ # 执行历史 {“cmd”: “df_raw.head()”, “output”: “table”, “success”: true}, {“cmd”: “df_raw[‘date’] pd.to_datetime(...)”, “output”: null, “success”: true, “error”: null} ] }, “project_context”: { # 项目上下文 “goal”: “分析用户行为日志产出报告和图表”, “constraints”: “使用 pandas 和 matplotlib”, “user_feedback”: [“时间列需要先转换格式”, “图表颜色对比度不够”] }, “external_state”: { # 外部环境状态 “files_in_dir”: [“data.csv”, “analysis.py”], “last_api_response”: {...} } }状态的更新与持久化任何工具的执行、用户的反馈都必须同步更新这个状态对象。并且这个状态应该被持久化到内存或数据库中确保在长周期、多轮次的任务中不会丢失。Harness 需要提供一套 API让 Agent 可以方便地get_state(key)和update_state(key, value)。状态的摘要与检索当上下文窗口有限时不可能把全部状态历史都塞给 LLM。Harness 需要具备状态摘要能力能够将冗长的执行历史、复杂的变量关系提炼成一段简洁的文本描述作为 Agent 决策的输入。同时对于需要细节的决策应支持基于向量的语义检索从历史状态中快速找到相关片段。3.2 支柱二基于反馈循环的任务规划器Task Planner with Feedback Loop这是 Harness 的“大脑”。它负责接收当前状态和最终目标输出下一步的行动计划。这个规划器本身可以是一个经过提示工程调优的 LLM也可以是一个更复杂的符号推理系统。规划指令模板Prompt Template这是规划器的“编程接口”。一个有效的模板应该清晰定义输入和输出格式。例如你是一个任务规划专家。当前项目目标是{goal}。当前工作空间状态是{state_summary}。上一步执行结果/用户反馈是{last_feedback}。 请规划下一步行动。输出必须严格遵循以下 JSON 格式 { “confidence”: 0.9, // 对此步骤规划的置信度 “next_step”: “清洗数据中的缺失值”, “reasoning”: “因为状态显示数据加载成功但初步探查发现‘age’列缺失率达30%需处理后方可进行后续分析。”, “action_type”: “code_generation”, // 或 “tool_call”, “ask_user” “action_detail”: { // 根据 action_type 变化 “task”: “编写函数处理‘age’列缺失值建议采用中位数填充并记录处理逻辑。”, “validation”: “检查处理后的 DataFrame 是否还有 NaN并打印缺失值统计。” } }集成反馈循环规划不是一次性的。规划器输出的action_detail会被执行执行后的结果成功或失败会作为last_feedback的一部分在下一轮规划中再次输入给规划器。这就形成了“规划 - 执行 - 感知 - 再规划”的闭环。Harness 需要自动化这个循环直到任务完成或遇到无法解决的障碍。多粒度规划规划器应支持从高层的里程碑规划“阶段一数据准备阶段二探索分析阶段三报告生成”到低层的具体操作规划“现在调用pandas.read_csv函数”。Harness 可以根据任务复杂度在不同粒度间切换。3.3 支柱三安全、丰富且可组合的工具集Toolkit这是 Harness 的“双手”。工具集定义了 Agent 能做什么。设计时需考虑工具抽象与标准化每个工具应有统一的接口例如Tool(name, description, function_schema, execute_func)。调用时Harness 将规划器输出的action_detail转化为对特定工具函数的调用。安全性第一尤其是代码执行类工具必须在严格的沙箱环境中运行如 Docker 容器、安全的子进程。文件操作工具应有作用域限制不能超出项目根目录。网络请求工具应有频率和目的地限制。工具的可发现性与组合性Agent 需要知道它有哪些工具可用。Harness 应能向规划器提供完整的工具列表和描述。更高级的设计是允许工具的组合例如“文件读取工具”“数据清洗工具”可以组合成一个“数据准备”的复合工具。结果标准化每个工具执行后应返回一个结构化的结果对象至少包含success布尔值、data执行结果、error如果失败、log执行日志。这便于状态管理模块统一处理。3.4 支柱四统一的执行与协调引擎Orchestration Engine这是 Harness 的“中枢神经”负责将前三个支柱串联起来驱动整个工作流运转。它的核心是一个事件驱动或循环驱动的协调器。主循环逻辑初始化加载初始目标、状态。调用规划器将当前状态和目标传给规划器获取下一步计划。验证与分派检查计划是否合理、可执行。然后根据action_type将action_detail分派给对应的工具执行器。执行与收集在安全环境下执行工具收集标准化的结果。更新状态将执行结果、新产生的数据更新到状态管理器中。判断终止条件检查是否达成最终目标或是否遇到不可解的错误或用户要求停止。若未终止回到步骤2。异常处理与回退机制引擎必须健壮。当工具执行失败时不能直接崩溃而应将错误信息作为新的状态反馈给规划器由规划器决定是重试、换一种方法还是向用户求助。可以设置最大重试次数和异常白名单。并发与异步支持对于可以并行执行的任务如下载多个文件、同时训练多个模型参数引擎应能管理并发执行并妥善处理任务间的依赖关系和状态合并。4. 从设计到实践一个简化 Harness 的代码蓝图理论说了很多我们来点实际的。下面我将勾勒一个极度简化但体现了上述核心思想的 Agent Harness 代码蓝图使用 Python 伪代码展示。这个蓝图旨在阐明各模块如何协作而非一个生产级实现。4.1 定义核心状态与工具# 核心状态类 class AgentState: def __init__(self, goal): self.goal goal self.memory [] # 存储历史交互 (observation, action, result) self.variables {} # 存储工作空间变量如生成的代码片段、数据 self.feedback # 最新一次的用户或系统反馈 def update(self, observation, action, result): self.memory.append((observation, action, result)) # 可以根据action和result更新variables if action[type] code_execution and result[success]: # 假设执行结果是一个DataFrame我们可以存个引用或摘要 self.variables[last_df] result[data_summary] def get_summary(self): # 生成一个供LLM阅读的文本摘要避免传送全部记忆 summary f目标{self.goal}\n if self.memory: last_obs, last_act, last_res self.memory[-1] summary f上一步尝试了 {last_act[description]}。结果{last_res[message][:200]}...\n summary f用户反馈{self.feedback}\n return summary # 工具基类与示例工具 class Tool: def __init__(self, name, description, func): self.name name self.description description self.func func def execute(self, **kwargs): try: result self.func(**kwargs) return {success: True, data: result, message: f工具 {self.name} 执行成功} except Exception as e: return {success: False, data: None, message: f工具 {self.name} 执行失败{str(e)}} # 示例工具代码执行工具必须在安全沙箱中此处仅为演示 def safe_execute_code(code: str): # 警告此处极度简化生产环境必须使用Docker等隔离环境 restricted_globals {__builtins__: {}} # 限制内置函数 local_vars {} try: exec(code, restricted_globals, local_vars) return local_vars # 返回执行后定义的变量 except Exception as e: raise e code_tool Tool( nameexecute_python, description在一个安全的沙箱中执行一段Python代码并返回最后表达式的值或定义的变量。, funcsafe_execute_code ) # 工具库 toolkit { execute_python: code_tool, # 未来可以添加read_file, write_file, call_api, search_web 等 }4.2 构建规划器基于LLM提示import openai # 或其他LLM提供商 class Planner: def __init__(self, llm_client, tools): self.llm llm_client self.tools tools def plan_next_step(self, state_summary: str) - dict: # 构建规划提示词 tools_desc \n.join([f- {name}: {tool.description} for name, tool in self.tools.items()]) prompt f 你是一个AI助手负责规划如何完成一个任务。当前状态如下 {state_summary} 你可以使用的工具有 {tools_desc} 请分析当前状态决定下一步应该做什么。你的回答必须是严格的JSON格式 {{ thought: 你的推理过程分析当前状况和下一步为什么这样做, action: {{ type: tool_call, // 也可以是 ask_user tool_name: execute_python, // 如果type是tool_call input: {{}} // 传递给工具的输入参数 }}, speak: 对用户说的一句话解释你即将做什么 // 可选 }} response self.llm.chat.completions.create( modelgpt-4, messages[{role: user, content: prompt}], temperature0.1 ) import json try: plan json.loads(response.choices[0].message.content) return plan except json.JSONDecodeError: # 如果LLM没有返回合法JSON降级处理 return { thought: LLM返回格式错误转为向用户求助。, action: {type: ask_user, question: 我无法解析下一步计划请明确告诉我接下来该做什么}, speak: 我遇到了点困惑需要您的指导。 }4.3 实现协调引擎class SimpleOrchestrator: def __init__(self, goal, planner, tools, state): self.goal goal self.planner planner self.tools tools self.state state self.max_steps 20 def run(self): step 0 while step self.max_steps: step 1 print(f\n 步骤 {step} ) # 1. 获取状态摘要 state_summary self.state.get_summary() print(f当前状态摘要:\n{state_summary}) # 2. 规划下一步 plan self.planner.plan_next_step(state_summary) print(f规划结果: {plan[thought]}) print(f即将执行: {plan.get(speak, )}) action plan[action] result None # 3. 执行 if action[type] tool_call: tool_name action[tool_name] if tool_name in self.tools: tool self.tools[tool_name] result tool.execute(**action.get(input, {})) print(f工具执行结果: {result[message]}) else: result {success: False, message: f未知工具: {tool_name}} elif action[type] ask_user: # 在实际应用中这里会暂停并等待用户输入 user_input input(fAgent询问: {action.get(question, 请提供指导)}\n您的回复: ) result {success: True, message: f用户回复: {user_input}} self.state.feedback user_input # 将用户反馈存入状态 else: result {success: False, message: f未知动作类型: {action[type]}} # 4. 更新状态 (这里简化将整个plan作为action记录) self.state.update(state_summary, action, result) # 5. 简单终止条件判断 (生产环境需更复杂) if 完成 in result.get(message, ) or 完成 in self.state.feedback: print(任务完成或用户指示完成。) break if not result.get(success, False) and ask_user not in str(action): print(动作执行失败可能需要调整策略或寻求帮助。) # 可以将失败信息作为反馈循环的一部分 self.state.feedback f上一步动作失败了{result[message]} print(f\n循环结束。共执行了 {step} 步。)4.4 启动工作流# 初始化 initial_goal 编写一个Python脚本计算列表[1,2,3,4,5]的平均值。 state AgentState(initial_goal) planner Planner(llm_clientopenai.Client(api_keyyour_key), toolstoolkit) orchestrator SimpleOrchestrator(initial_goal, planner, toolkit, state) # 运行 orchestrator.run()这个蓝图非常简陋省略了真实环境所需的大量细节如健壮的沙箱、复杂的工具输入解析、状态变量的精细管理、更智能的终止判断等但它清晰地展示了 Harness 各组件状态、规划器、工具、协调器是如何协同工作来实现一个基本的“感知-规划-执行”循环的。在实际的 Claude Code 或类似产品中这个架构会复杂得多但核心思想是相通的。5. 面向动态工作流的 Harness 设计挑战与应对策略构建一个能稳定运行动态工作流的 Harness 绝非易事。在实际工程化过程中我们会遇到诸多挑战。结合我对类似系统开发和 Claude Code 使用经验的观察以下几个挑战尤为突出。5.1 挑战一LLM 规划的不稳定性与“幻觉”规划器依赖的 LLM 可能产生不合理、不可执行甚至矛盾的规划。例如它可能规划出一个需要尚未定义变量的代码执行步骤。应对策略规划验证与回退机制静态验证在规划器输出后、执行前加入一个“验证层”。这个层可以基于规则或一个轻量级的验证模型检查规划的合理性。例如检查tool_name是否在注册的工具列表中检查input参数是否符合工具的模式Schema。对于代码生成任务可以先用简单的语法解析器检查代码语法。动态验证与重规划当工具执行失败时不能简单地将错误抛给用户或进入死循环。Harness 应该有一套标准的错误处理流程1) 将详细的错误信息堆栈跟踪纳入状态2) 自动触发一次“重规划”并将“上一步动作失败”作为关键反馈提供给规划器3) 如果连续重规划失败如超过3次则主动降级为“向用户求助”模式。这模仿了人类调试时“试错-反馈-调整”的过程。5.2 挑战二长上下文与状态管理的效率瓶颈随着任务进行状态记忆会越来越庞大。将全部状态塞入 LLM 上下文会耗尽 Token 并增加成本。如何高效地摘要和检索相关状态成为关键。应对策略分层记忆与向量检索分层记忆系统将记忆分为不同层级工作记忆最近几步的详细交互直接放入上下文。短期记忆本次会话中的所有关键决策、变量定义摘要以结构化形式存储需要时通过查询注入上下文。长期记忆跨会话的知识如项目规范、常用代码模式、历史解决方案存入向量数据库。基于向量的相关性检索当规划器需要做出决策时Harness 可以将当前状态和目标转换为查询向量从短期和长期记忆中检索出最相关的几条信息作为“相关上下文”插入提示词。这确保了决策依据的丰富性又避免了上下文爆炸。5.3 挑战三工具执行的副作用与状态一致性工具执行可能会改变外部环境如写入文件、修改数据库。如果多个步骤并发执行或者某个步骤失败后需要回滚如何保证状态的一致性是一大难题。应对策略事务性操作与检查点工具设计的幂等性与事务性尽可能将工具设计为幂等操作多次执行效果相同或支持事务。例如文件写入工具可以先写入临时文件确认无误后再移动重命名到目标位置。建立检查点在关键里程碑步骤完成后如“数据清洗完成并验证通过”Harness 可以主动保存一次完整的“工作空间快照”包括代码文件、内存中的重要数据序列化结果。如果后续步骤发生灾难性失败可以回滚到上一个检查点而不是从头开始。这类似于游戏存档极大地提升了容错性和用户体验。5.4 挑战四用户意图的模糊性与实时对齐用户的初始指令往往是模糊的“帮我分析数据”。在动态工作流中Agent 的每一步都可能产生偏离用户真实意图的结果。如何确保 Agent 始终与用户意图对齐应对策略主动确认与可解释性关键决策点确认在规划器做出高风险或高不确定性的决策前例如选择删除一列数据而非填充Harness 可以设置“护栏”强制其生成一个清晰的解释并暂停等待用户确认action_type: ask_user。增强可解释性要求规划器在每一步都输出reasoning字段并将其展示给用户。这不仅是日志更是用户理解 Agent “思考过程”、建立信任的窗口。当用户发现推理链条有误时可以及时干预和纠正。持续的目标细化将用户的一次性指令视为一个“初始锚点”。Harness 可以维护一个“目标树”随着交互的深入不断细化、修正子目标。例如初始目标是“分析数据”细化后可能是“分析销售数据的月度趋势并识别异常波动”这能引导规划器做出更精准的决策。6. 未来展望Harness 如何重塑开发与创作体验当我们拥有了一个设计精良、能够驾驭动态工作流的 Agent Harness它对 Claude Code 这类编程助手乃至更广泛的创造性工作意味着什么我认为这将带来三个层次的范式转变。6.1 从“对话式代码补全”到“目标驱动的项目协作者”今天的 Claude Code 更像一个超级智能的“结对编程”伙伴你告诉它“下一行写什么”它给出建议。而配备了强大 Harness 的 Agent将升级为“项目协作者”。你可以给它一个项目级的模糊目标“基于这个开源库搭建一个具备用户认证和数据分析面板的 Web 应用。” Agent 会自主完成技术选型调研、项目脚手架搭建、模块代码编写、依赖安装、环境配置、单元测试编写、甚至部署脚本生成等一系列工作。它会在遇到抉择时比如用 JWT 还是 Session 做认证向你询问会在完成一个模块后自动运行测试并汇报结果。你的角色从“打字员审查员”转变为“产品经理架构评审”专注于更高层次的目标设定和关键决策。6.2 从“静态输出”到“动态、可交互的工作流制品”目前 AI 生成的代码、文档、设计稿都是静态的文本或文件。未来的 Harness 可能会让 Agent 产出的是一份“可执行的工作流说明书”。例如你要求 Agent “监控服务器日志发现错误率飙升时自动扩容并通知我”。它最终交付给你的可能不是一个脚本而是一个在 Harness 中注册的、包含一系列决策逻辑和工具调用的“工作流定义”。这个工作流本身就是一个活的 Agent它会持续运行感知日志状态在满足条件时自动执行扩容和通知操作。工作流本身可以被版本化、调试和分享。创作的核心从编写具体的代码行转变为设计和配置这些智能工作流。6.3 从“单模态编码”到“多模态任务自动化”Harness 的核心是“感知-决策-执行”循环这并不局限于代码。工具集可以无限扩展。未来的 Agent Harness 可能整合GUI 操作工具通过图像识别和自动化脚本控制桌面应用或浏览器。多媒体处理工具自动编辑视频、优化图片、生成语音。专业领域工具调用 CAD 软件 API 进行设计修改连接财务系统生成报表。 这样一来一个统一的 Harness 框架就能驱动一个“全能型”数字员工。你可以用自然语言指挥它“把上周会议录音转换成文字摘要提取待办事项插入到我们团队的 Notion 项目看板里并为每项任务生成一个简单的示意图。” Harness 会规划并调用语音转文字工具、NLP 摘要工具、Notion API 和文生图工具串联起这个跨越多模态、多应用的复杂工作流。回到 Claude Code 和我们开头的数据分析脚本问题一个理想的未来场景可能是我只需要说“分析一下data.csv给我些洞察”。背后的 Harness 驱动 Agent 自动完成数据加载、质量评估、尝试多种分析和可视化方案最后不仅生成代码和图表还会生成一份分析报告并在过程中向我确认“我发现‘购买金额’字段有 5% 的负值这可能是退货记录我是应该过滤掉它们还是将其视为零处理” 这种交互才是真正意义上的“动态工作流”协作。要实现它Harness 的设计是地基而我们今天的探索正是朝着这个方向迈出的第一步。这条路还很长但每解决一个像“状态管理”或“规划稳定性”这样的具体问题我们就离那个更智能、更自主的创作未来更近一步。