8f7f082c3d
- 重构项目目录结构,将功能模块移至 modules/ 目录 - 创建平台同步基础架构,包括发布器基类和 GitHub 发布器 - 新增 UI 状态管理模块 (modules/ui/state.py) 统一管理会话状态 - 更新依赖配置,添加平台同步所需依赖 (httpx, pyperclip) - 整理文档结构,将所有文档分类移至 docs/ 目录 - 添加 .cursorrules 文件定义项目开发规范 - 清理根目录重复文件,保持项目结构整洁
5.9 KiB
5.9 KiB
图片生成问题修复报告
修复日期:2026-01-28 修复了三个严重问题
🔴 问题1:点击【基于配图描述生成】会刷新Tab
问题描述
点击【基于配图描述生成】按钮后,页面会刷新,导致Tab状态丢失,用户需要重新点击【增强工具】Tab。
根本原因
代码中使用了 st.rerun(),导致整个页面刷新,Streamlit的Tab状态在rerun后会重置。
修复方案
移除了所有不必要的 st.rerun() 调用:
- 配图描述生成后不再自动刷新(第4002行、第4025行)
- 图文版本替换后不再自动刷新(第3784行、第3948行、第3968行)
修复位置
geo_tool.py第3784行:智能生成模式 - 图文版本替换geo_tool.py第3948行:基于描述生成模式 - 图文版本替换geo_tool.py第4002行:生成配图描述(第一个位置)geo_tool.py第4025行:生成配图描述(第二个位置)
修复效果
✅ 现在点击按钮后不会刷新页面,Tab状态保持不变
🔴 问题2:点击【生成配图描述】按钮没有反应
问题描述
点击【生成配图描述】按钮后,没有任何反应,没有错误提示,也没有生成结果。
可能原因
- 内容中没有配图占位符(【配图:xxx】格式)
generate_batch_image_descriptions返回空结果- 异常被静默捕获
修复方案
- 添加配图占位符检查:在生成前检查内容中是否有配图占位符
- 添加结果验证:验证生成结果不为空
- 添加详细错误信息:显示完整的异常堆栈跟踪
- 添加用户提示:如果没有配图占位符,提示用户
修复位置
geo_tool.py第3995-4007行:生成配图描述(第一个位置)geo_tool.py第4018-4030行:生成配图描述(第二个位置)
修复代码
# 检查内容中是否有配图占位符
placeholders = multimodal_gen.extract_image_placeholders(content)
if not placeholders:
st.warning("⚠️ 内容中没有找到配图占位符(【配图:xxx】格式)。系统将基于内容自动生成配图描述。")
# 验证生成结果
if not image_descriptions or image_descriptions.get("total_images", 0) == 0:
st.warning("⚠️ 未生成任何配图描述。可能原因:内容中没有配图占位符,或生成失败。")
st.info("💡 提示:如果内容中没有【配图:xxx】格式的占位符,系统可能无法生成配图描述。")
修复效果
✅ 现在会显示明确的提示信息,告知用户为什么没有生成配图描述
🔴 问题3:点击【基于配图描述生成】导致页面空白
问题描述
配图描述生成之后,点击【基于配图描述生成】按钮,整个工具项目就会变成一片空白,错误:Cannot set a node at a delta path
根本原因
在循环中使用了 st.status(),这是Streamlit的一个已知问题。st.status() 在循环中使用会导致状态管理冲突,引发 "Cannot set a node at a delta path" 错误。
修复方案
将 st.status() 替换为 st.progress() + st.empty():
- 使用
st.progress()显示进度条 - 使用
st.empty()显示状态文字 - 在循环外创建进度条和状态文字
- 在循环内更新进度和状态
修复位置
geo_tool.py第3636-3755行:智能生成模式geo_tool.py第3840-3938行:基于描述生成模式
修复代码
# 修复前(错误):
for idx in range(num_images):
with st.status(f"正在生成第 {idx + 1}/{num_images} 张图片..."):
# ... 生成逻辑
# 修复后(正确):
progress_bar_img = st.progress(0)
status_text_img = st.empty()
for idx in range(num_images):
progress = (idx + 1) / num_images
progress_bar_img.progress(progress)
status_text_img.text(f"正在生成第 {idx + 1}/{num_images} 张图片...")
# ... 生成逻辑
# 清理进度显示
progress_bar_img.empty()
status_text_img.empty()
修复效果
✅ 现在不会再出现页面空白的问题,进度显示正常
✅ 额外修复
1. 初始化 multimodal_descriptions
问题:st.session_state has no attribute "multimodal_descriptions"
修复:
- 在初始化部分添加
ss_init("multimodal_descriptions", {}) - 在所有使用前添加安全检查
2. 增强错误处理
- 添加详细的错误信息显示
- 添加异常堆栈跟踪
- 添加输入验证
3. 改进用户体验
- 移除自动刷新,避免Tab状态丢失
- 添加配图占位符检查提示
- 添加生成结果验证提示
📋 修复验证清单
- 修复Tab刷新问题(移除st.rerun)
- 修复生成配图描述按钮无反应(添加检查和提示)
- 修复页面空白问题(替换st.status为st.progress)
- 初始化multimodal_descriptions
- 增强错误处理和调试信息
- 修复缩进错误
🧪 测试建议
测试1:生成配图描述
- 生成一篇包含【配图:xxx】占位符的内容
- 点击【生成配图描述】按钮
- 应该显示生成结果或明确的提示信息
测试2:基于配图描述生成图片
- 先生成配图描述
- 点击【基于配图描述生成】按钮
- 应该正常生成图片,不会刷新Tab
- 不会出现页面空白
测试3:智能生成图片
- 点击【智能生成(推荐)】
- 选择生成数量
- 点击【生成图片】按钮
- 应该正常生成图片,不会出现页面空白
📝 注意事项
-
配图占位符:如果内容中没有【配图:xxx】格式的占位符,系统可能无法生成配图描述。建议在生成内容时添加配图占位符。
-
Tab状态:现在不会自动刷新,如果需要查看最新结果,可以手动刷新页面或重新生成。
-
进度显示:现在使用进度条和状态文字,而不是st.status,避免在循环中使用st.status导致的问题。
修复完成时间:2026-01-28