feat: 重构项目结构并添加平台同步基础架构
- 重构项目目录结构,将功能模块移至 modules/ 目录 - 创建平台同步基础架构,包括发布器基类和 GitHub 发布器 - 新增 UI 状态管理模块 (modules/ui/state.py) 统一管理会话状态 - 更新依赖配置,添加平台同步所需依赖 (httpx, pyperclip) - 整理文档结构,将所有文档分类移至 docs/ 目录 - 添加 .cursorrules 文件定义项目开发规范 - 清理根目录重复文件,保持项目结构整洁
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
# 图片生成问题修复报告
|
||||
|
||||
> 修复日期: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:点击【生成配图描述】按钮没有反应
|
||||
|
||||
### 问题描述
|
||||
点击【生成配图描述】按钮后,没有任何反应,没有错误提示,也没有生成结果。
|
||||
|
||||
### 可能原因
|
||||
1. 内容中没有配图占位符(【配图:xxx】格式)
|
||||
2. `generate_batch_image_descriptions` 返回空结果
|
||||
3. 异常被静默捕获
|
||||
|
||||
### 修复方案
|
||||
1. **添加配图占位符检查**:在生成前检查内容中是否有配图占位符
|
||||
2. **添加结果验证**:验证生成结果不为空
|
||||
3. **添加详细错误信息**:显示完整的异常堆栈跟踪
|
||||
4. **添加用户提示**:如果没有配图占位符,提示用户
|
||||
|
||||
### 修复位置
|
||||
- `geo_tool.py` 第3995-4007行:生成配图描述(第一个位置)
|
||||
- `geo_tool.py` 第4018-4030行:生成配图描述(第二个位置)
|
||||
|
||||
### 修复代码
|
||||
```python
|
||||
# 检查内容中是否有配图占位符
|
||||
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行:基于描述生成模式
|
||||
|
||||
### 修复代码
|
||||
```python
|
||||
# 修复前(错误):
|
||||
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状态丢失
|
||||
- 添加配图占位符检查提示
|
||||
- 添加生成结果验证提示
|
||||
|
||||
---
|
||||
|
||||
## 📋 修复验证清单
|
||||
|
||||
- [x] 修复Tab刷新问题(移除st.rerun)
|
||||
- [x] 修复生成配图描述按钮无反应(添加检查和提示)
|
||||
- [x] 修复页面空白问题(替换st.status为st.progress)
|
||||
- [x] 初始化multimodal_descriptions
|
||||
- [x] 增强错误处理和调试信息
|
||||
- [x] 修复缩进错误
|
||||
|
||||
---
|
||||
|
||||
## 🧪 测试建议
|
||||
|
||||
### 测试1:生成配图描述
|
||||
1. 生成一篇包含【配图:xxx】占位符的内容
|
||||
2. 点击【生成配图描述】按钮
|
||||
3. 应该显示生成结果或明确的提示信息
|
||||
|
||||
### 测试2:基于配图描述生成图片
|
||||
1. 先生成配图描述
|
||||
2. 点击【基于配图描述生成】按钮
|
||||
3. 应该正常生成图片,不会刷新Tab
|
||||
4. 不会出现页面空白
|
||||
|
||||
### 测试3:智能生成图片
|
||||
1. 点击【智能生成(推荐)】
|
||||
2. 选择生成数量
|
||||
3. 点击【生成图片】按钮
|
||||
4. 应该正常生成图片,不会出现页面空白
|
||||
|
||||
---
|
||||
|
||||
## 📝 注意事项
|
||||
|
||||
1. **配图占位符**:如果内容中没有【配图:xxx】格式的占位符,系统可能无法生成配图描述。建议在生成内容时添加配图占位符。
|
||||
|
||||
2. **Tab状态**:现在不会自动刷新,如果需要查看最新结果,可以手动刷新页面或重新生成。
|
||||
|
||||
3. **进度显示**:现在使用进度条和状态文字,而不是st.status,避免在循环中使用st.status导致的问题。
|
||||
|
||||
---
|
||||
|
||||
*修复完成时间:2026-01-28*
|
||||
Reference in New Issue
Block a user