Agent 执行长任务时用户输入新问题,系统如何处理?

考查重点:新输入归属与执行状态更新。新输入若补充当前任务则在安全边界合并状态,改目标则取消/重规划,无关请求独立排队;避免并发改同状态

本题目录

参考答案

核心回答

这取决于系统对新输入与当前任务的关系如何定义,不是模型自动把两个请求一起处理。我会先接收并记录新消息,再按下面几种情况调度:

  • 补充当前任务:在下一次模型调用前,把新要求与当前进度一起交给模型,必要时调整计划。
  • 要求停止或改变方向:立即标记停止后续动作,取消能够取消的调用,处理在途结果后再按新目标继续。
  • 独立新问题:可以单独回答或建立新任务;若共享同一份可变状态,先排队,避免两个执行同时覆盖。
  • 暂不支持并发输入:明确告知排队或拒绝,不能显示已接收后就丢失。

例如正在写完整报告时,用户补充“只保留国内资料”,系统应让后续步骤按新范围执行,并检查已完成材料是否仍适用。用户问“现在进度如何”则可以读取任务状态回答,不必取消原任务。

展开说明

1. 接收到消息,不代表正在运行的模型已经看到

前端提交后,后端保存消息 ID、顺序、所属会话和目标任务,并返回已接收状态。调度器再决定排队、补充当前任务、停止或另开任务,前端展示它处于哪种状态。

已经发出的模型请求有固定输入,不能直接修改其中的上下文。通常在工具调用结束等安全边界,由运行时取出待处理消息,更新任务要求,再发起下一轮模型调用;需要更快转向时,可以中止当前生成并重新组织输入。不要只把消息写进数据库,却没有任何执行环节消费它。

2. 对同一个任务保持明确的执行顺序

一个简单实现是让同一任务只有一个执行者负责更新状态,按顺序消费消息。在一次状态更新中记录“已处理到哪条消息”、任务要求的版本和下一步,防止重连重复提交或旧执行覆盖新目标。

用户从“写完整报告”改为“只要摘要”后,原计划应标记哪些步骤失效。下一轮上下文保留当前目标、已完成工作、有效证据及最新要求,旧要求标记已被替代;不能把相互矛盾的要求平铺给模型,再期待它总能猜对。

独立任务可使用新的任务 ID,按需要复制一份只读背景。若要共同修改同一文件或业务资源,仍需串行、版本校验或冲突处理。

3. 停止生成与停止外部动作要分开处理

取消模型生成,并不表示已经提交的工具调用也停止,更不表示邮件、付款等外部动作已撤销。收到停止或方向变更后,运行时先禁止旧计划启动新的动作,再向可取消的调用发停止信号;不能取消的调用继续跟踪到明确结果。

返回结果携带原任务与调用标识。过期结果可以保留为执行记录,但不能不加判断地驱动新计划。已经发生的业务操作应查询真实状态,按业务规则处理;不能通过删除历史消息,把它当成没有发生。

若中断时存在未结束的工具调用,也要保持调用与反馈的协议完整性,记录真实完成、失败或取消状态,避免恢复时留下无法对应的工具消息。

4. 新消息很多、前端断线时怎么办?

队列需要容量、超时和取消策略。状态追问可以直接读取进度,连续补充要求可以在保留原消息的基础上整合;相互冲突或可能丢失意图的输入不能简单覆盖。

断线后按消息和事件标识查询已接收状态、续取执行结果,不能重新启动原任务。需要跨进程恢复时使用持久存储,并保存消费位置与任务状态;内存队列或 InMemorySaver 只能覆盖相应进程的生命周期。

常见追问

Claude Code 收到新增要求时具体怎样处理?

按当前官方交互文档,工作时按 Enter 提交会进入队列;如果是在工具调用期间排队的普通消息,工具调用完成后可以在同一轮内交给 Claude,未处理消息也会在轮次结束后继续发送。命令与 Shell 命令的排队规则有所不同。

支持相应版本的“立即发送”还会区分当前工作能否移到后台:可以后台化的工作继续运行,Claude 读取新消息;不能后台化的工作则中断当前轮次后处理。实际回答应说明使用的版本和入口,不能概括为“输入任意文字都会立刻强杀原任务”。

LangGraph 自带这些并发策略吗?

LangSmith Agent Server 提供 enqueue、reject、interrupt、rollback 等 double-texting 策略,当前默认是排队。这属于部署服务能力;直接使用开源 LangGraph 时,需要自行设计入站调度与同一任务的并发更新。回滚图状态也不会自动回滚外部业务操作。

新要求是不是永远覆盖旧要求?

同一任务范围内,明确的新要求可以替代旧要求;先判断适用范围和是否冲突。它仍须遵守系统约束、当前权限和客观业务状态。含糊的指代应结合正在执行的任务确认,避免误停一个无关任务。

对应教程

  • LangGraph 高级特性:阅读线程检查点和历史状态分支,理解更新要求后继续执行所依赖的状态基础;新输入队列及并发调度还需由宿主实现。

参考资料

  • 国内:JavaGuide:Loop Engineering:依据模型调用、外部调度与上下文准备的分工,说明正文中新要求如何在安全执行边界进入下一轮。
  • 国内:zero2Agent:架构设计:依据会话、工具反馈与结构化事件的数据流,区分正文中的消息接收、实际执行和断线恢复。
  • 国内:WeThinkIn:自进化 Agent 与多平台运行时:采用长任务打断、恢复与后台执行的区别,说明正文中新要求应如何改变任务状态。
  • 国外:LangChain:Double texting:依据 Agent Server 的排队、拒绝、中断和回滚策略,说明正文中 double-texting 的产品能力及其与开源图框架的范围区别。
  • 国外:Anthropic:Claude Code 交互模式:依据运行时排队与立即发送的实际行为,说明正文中工具调用、后台工作和新消息处理的差别。

相关面经

3 篇

阿里巴巴

AI 应用开发工程师
秋招二面
查看原面经 →
如果 Agent 正在处理一个长任务,用户又输入了新的问题,系统会发生什么?

阿里巴巴

Agent 应用开发工程师
秋招一面
查看原面经 →
Claude Code 在任务执行过程中收到用户新增要求时,会如何处理和注入这条指令?

去哪儿

AI 全栈开发工程师
查看原面经 →
如果在最近交互过程中用户突然提出了一个请求,你怎么保证这个请求能被执行

相关题目

4 题