Skip to content

fix: 修复自定义agent从历史对话恢复时URL丢失agent上下文#1458

Open
yanglinzhi wants to merge 2 commits intobytedance:mainfrom
yanglinzhi:fix/custom-agent-url
Open

fix: 修复自定义agent从历史对话恢复时URL丢失agent上下文#1458
yanglinzhi wants to merge 2 commits intobytedance:mainfrom
yanglinzhi:fix/custom-agent-url

Conversation

@yanglinzhi
Copy link
Copy Markdown

问题说明

使用自定义agent创建新对话后,从最近对话列表点击恢复对话时,URL会从:
http://.../workspace/agents/{agent_name}/chats/{thread_id}
自动变成:
http://.../workspace/chats/{thread_id}

导致系统错误地使用默认agent而不是原来绑定的自定义agent。手动修改URL地址后能正确恢复。

根因分析

  1. agent_name 没有持久化保存在 thread state 中,只存在于单次请求运行时上下文
  2. 最近对话列表生成URL时总是生成不带agent前缀的通用URL
  3. 通用聊天页面不知道这个对话原来绑定了哪个agent

修复方案

后端改动

  • ThreadState schema 添加 agent_name 字段
  • ThreadDataMiddlewarebefore_agent 阶段就从运行时上下文保存 agent_name 到 thread state(它是第一个执行的中间件,保证一开始就持久化
  • TitleMiddleware 同步更新 state schema

前端改动

  • AgentThreadState TypeScript 类型添加 agent_name? 可选字段
  • pathOfThread() 函数更新,接受可选 agentName 参数,有agent时生成带前缀的正确URL /workspace/agents/{agent_name}/chats/{id}
  • RecentChatListthread.values?.agent_name 读取agent名称,生成正确链接
  • 通用聊天页面 /workspace/chats/{id} 添加自动重定向:检测到 agent_name 存在时自动跳转到正确的agent页面

测试验证

  • ✅ 新建自定义agent对话 → agent_name 正确保存到 thread state
  • ✅ 刷新页面,从最近对话列表点击 → 正确跳转到带agent前缀的URL
  • ✅ 使用正确的自定义agent,不会回到默认agent
  • ✅ 即使直接访问通用URL,也会自动重定向到正确地址
  • ✅ 不影响原有默认agent对话的行为

yanglinzhi and others added 2 commits March 27, 2026 12:37
问题根因:手动停止流时,sendInFlightRef 标志位没有被重置,导致允许重复发送同一条消息

修复方案:包装 thread.stop() 方法,停止后重置标志位

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@yanglinzhi yanglinzhi force-pushed the fix/custom-agent-url branch from 4d6c7ac to 4635208 Compare March 27, 2026 11:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant