Skip to content

[Feature]: 重试中断回复时复用已成功生成的内容和工具结果 #53

Description

@chenyme

Affected area

Conversations / streaming

Problem or use case

当前对话生成如果中途失败或连接中断,错误前已经成功输出的内容和工具调用结果没有被完整保留下来。用户看到的是生成中断提示,后续重试也像是从头开始,无法自然接着已经生成的内容继续。

更合理的行为应该是:如果模型在报错前已经输出了部分内容,或者已经完成了部分工具调用,这些内容应该作为本次 assistant 消息的一部分展示出来,并明确标记该回复未完成。

这样用户可以直接接着这段内容继续对话,也可以选择继续生成,而不是丢掉前面已经成功产生的结果。

Proposed behavior

优化中断回复的展示和重试逻辑:

  • 生成中断时,保留并展示错误发生前已经成功输出的 assistant 内容。
  • 已完成的工具调用和工具结果也应继续展示在 trace 中。
  • 消息状态标记为“中断”或“未完成”,而不是像完整成功回复一样展示。
  • 错误提示应展示在已生成内容之后,说明本次回复在此处中断。
  • 用户可以基于这条未完成回复继续发送下一条消息。
  • 提供“继续生成”或类似操作,从当前未完成内容之后继续补完。
  • “重新生成”仍然可以保留为从头重试的操作。
  • 失败的工具调用应保留错误信息,但不应被当作成功工具结果复用。
  • 成功的工具结果在继续生成时应尽量复用,避免重复调用和重复计费。

Alternatives considered

当前从头重试可以绕过部分失败问题,但会丢失已经生成的内容和已完成工具结果,也可能导致工具重复调用、重复计费和上下文不一致。

只在后台重试时复用部分上下文也不够直观。用户应该能在界面上看到错误前已经生成的内容,并知道这条回复是在何处中断的。

Compatibility, deployment, or migration impact

配置变更:预计不需要。

API 变更:可能需要扩展消息状态、重试参数或继续生成接口,用于区分“继续生成”和“重新生成”。

数据库迁移:不确定。如果当前已经保存中断前的 assistant partial content 和工具 trace,可能不需要;如果没有持久化,需要补充存储或复用现有消息状态字段。

部署变更:预计不需要。

向后兼容:现有重新生成行为应保留。新增继续生成能力不应影响已有会话。

Documentation or API contract impact

需要补充说明:

  • 中断消息的展示规则。
  • 部分内容和工具 trace 的保存规则。
  • “继续生成”和“重新生成”的区别。
  • 工具结果复用和计费规则。

Pre-submit checklist

  • I searched existing issues and pull requests.
  • This request is focused on one feature or improvement.
  • I described user-facing, API, configuration, or deployment impact where relevant.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions