Conversation title is overwritten with an empty string when title generation returns no content

该问题出现在使用 Dify API 或 WebUI 时,由以下两个路径触发:

Conversation title is overwritten with an empty string when title generation returns no content

Conversation title is overwritten with an empty string when title generation returns no content

快速结论:当自动生成对话标题的 LLM 返回空字符串或仅含空白字符时,Dify 会直接将空值写入对话标题,导致对话标题变为空白。优先排查 LLMGenerator.generate_conversation_name() 的结果处理逻辑。

问题场景

该问题出现在使用 Dify API 或 WebUI 时,由以下两个路径触发:

  • API 路径:调用 POST /api/conversations/{conversation_id}/name 且 body 包含 {"auto_generate": true}
  • 后台任务路径:新对话首条消息后自动触发的后台标题生成任务。

当用于标题生成的 LLM 返回空响应(空字符串或仅空白字符)时,对话标题会被直接覆盖为空字符串。

报错原文

Conversation title is overwritten with an empty string.
- API returns a successful response with "name": "".
- The conversation title becomes blank in the UI.

原因分析

根因位于 LLMGenerator.generate_conversation_name() 方法中:当 LLM 响应为空时,该方法明确返回空字符串(代码链接)。而两个调用方均未对结果进行空值/空白校验,直接将返回值写入 conversation.name

  • API 路径:ConversationService.auto_generate_name() 直接赋值,未校验(代码链接)。
  • 后台任务路径:MessageCycleManager._generate_conversation_name_worker() 同样直接赋值,其回退逻辑仅在异常时触发,而非空字符串响应时(代码链接)。

有趣的是,手动重命名路径(auto_generate=False)在请求 schema 层面具有空名称校验,但 auto_generate=True 时绕过了此校验。

环境排查

  • Dify 版本:1.15.0 及可能受影响的其他版本(基于 Issue 中的版本信息)。
  • 部署方式:Self Hosted(Source 或 Docker)。
  • LLM 配置:用于标题生成的模型是否可能返回空响应(如模型响应格式问题、内容过滤等)。

解决步骤

  1. 可优先尝试:LLMGenerator.generate_conversation_name() 调用后,添加空值/空白校验。如果返回空字符串,则回退为首条用户消息的截断版本(遵循现有截断规则)。
  2. 修复位置 1:修改 api/services/conversation_service.py 中的 auto_generate_name() 方法,在赋值前校验 generate_conversation_name() 的返回值。
  3. 修复位置 2:修改 api/core/app/task_pipeline/message_cycle_manager.py 中的 _generate_conversation_name_worker() 方法,在赋值前校验返回值,或添加空响应时的回退逻辑。
  4. 如有需要:api/core/llm_generator/llm_generator.py 中的 generate_conversation_name() 方法(约第167-168行)修改其空返回值行为,改为触发回退机制。
  5. 测试:编写可复现的测试用例,模拟 LLM 返回空字符串的场景,验证修复后标题不会被覆盖为空。

验证方法

部署修复后,通过以下方式验证:

  • API 测试:使用模拟 LLM 返回空字符串的配置,调用 POST /api/conversations/{conversation_id}/nameauto_generate=true,检查响应中的 name 字段不应为空。
  • UI 测试:发送首条消息触发自动标题生成,确保 LLM 返回空时对话标题不会变为空白,而是保留原有标题或显示首条消息截断。
  • 回归测试:确认手动重命名路径(auto_generate=false)功能不受影响。

参考来源

langgenius/dify #39002

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 13575

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注