feat:初版
This commit is contained in:
337
plugins/Flow2API/修复说明.md
Normal file
337
plugins/Flow2API/修复说明.md
Normal file
@@ -0,0 +1,337 @@
|
||||
# Flow2API 插件修复说明
|
||||
|
||||
## 问题诊断
|
||||
|
||||
根据日志:
|
||||
```
|
||||
2025-11-26 11:44:16 | INFO | 使用 AIChat 代理: socks5://38.55.107.103:53054
|
||||
2025-11-26 11:44:35 | ERROR | 图像生成失败
|
||||
```
|
||||
|
||||
**问题:** 只显示"图像生成失败",没有具体的错误信息,无法诊断问题原因。
|
||||
|
||||
## 修复方案
|
||||
|
||||
### 1. 改进错误日志 (main.py:204-209)
|
||||
|
||||
**修改前:**
|
||||
```python
|
||||
except Exception as e:
|
||||
logger.error(f"请求异常: {e}")
|
||||
continue
|
||||
```
|
||||
|
||||
**修改后:**
|
||||
```python
|
||||
except Exception as e:
|
||||
import traceback
|
||||
logger.error(f"请求异常: {type(e).__name__}: {str(e)}")
|
||||
logger.error(f"异常详情:\n{traceback.format_exc()}")
|
||||
logger.error(f"提示词长度: {len(prompt)} 字符")
|
||||
continue
|
||||
```
|
||||
|
||||
**改进点:**
|
||||
- 显示完整的异常类型和堆栈跟踪
|
||||
- 记录提示词长度,便于诊断
|
||||
- 不再截断错误信息
|
||||
|
||||
### 2. 增强调试信息 (main.py:108-126)
|
||||
|
||||
**修改前:**
|
||||
```python
|
||||
logger.info(f"Flow2API请求: {model}, 提示词: {prompt[:50]}...")
|
||||
timeout = httpx.Timeout(connect=10.0, read=api_config["timeout"], write=10.0, pool=10.0)
|
||||
```
|
||||
|
||||
**修改后:**
|
||||
```python
|
||||
logger.info(f"Flow2API请求: {model}, 提示词长度: {len(prompt)} 字符")
|
||||
logger.debug(f"完整提示词: {prompt}")
|
||||
logger.debug(f"请求URL: {url}")
|
||||
logger.debug(f"Payload大小: {len(str(payload))} 字节")
|
||||
|
||||
# 设置合理的超时时间
|
||||
max_timeout = min(api_config["timeout"], 600) # 增加到 10 分钟
|
||||
timeout = httpx.Timeout(
|
||||
connect=10.0, # 连接超时:10秒
|
||||
read=max_timeout, # 读取超时:10分钟
|
||||
write=10.0, # 写入超时:10秒
|
||||
pool=10.0 # 连接池超时:10秒
|
||||
)
|
||||
logger.debug(f"超时配置: connect=10s, read={max_timeout}s")
|
||||
|
||||
# 添加提示词长度检查和警告
|
||||
if len(prompt) > 1000:
|
||||
logger.warning(f"提示词较长 ({len(prompt)} 字符),可能影响处理速度")
|
||||
```
|
||||
|
||||
**改进点:**
|
||||
- 记录提示词长度而不是截断内容
|
||||
- 增加超时时间到 10 分钟
|
||||
- 添加 DEBUG 级别的详细信息
|
||||
- 长提示词警告
|
||||
|
||||
### 3. 改进响应处理 (main.py:133-187)
|
||||
|
||||
**新增功能:**
|
||||
```python
|
||||
logger.debug(f"收到响应状态码: {response.status_code}")
|
||||
|
||||
# 处理流式响应
|
||||
image_url = None
|
||||
full_content = ""
|
||||
async for line in response.aiter_lines():
|
||||
logger.debug(f"收到响应行: {line[:100]}...")
|
||||
# ... 解析逻辑 ...
|
||||
if content:
|
||||
full_content += content
|
||||
logger.debug(f"累积内容: {full_content[:100]}...")
|
||||
|
||||
# 如果没有从流中提取到URL,尝试从完整内容中提取
|
||||
if not image_url and full_content:
|
||||
import re
|
||||
urls = re.findall(r'https?://[^\s\)\]"\']+', full_content)
|
||||
if urls:
|
||||
image_url = urls[0].rstrip("'\"")
|
||||
logger.info(f"从完整内容提取到图片URL: {image_url}")
|
||||
else:
|
||||
logger.warning(f"完整响应内容中未找到URL: {full_content}")
|
||||
|
||||
if not image_url:
|
||||
logger.error(f"未能提取到图片URL,完整响应: {full_content}")
|
||||
```
|
||||
|
||||
**改进点:**
|
||||
- 记录每一步的处理过程
|
||||
- 累积完整响应内容
|
||||
- 双重 URL 提取机制
|
||||
- 显示完整响应内容以便调试
|
||||
|
||||
### 4. 添加 ReadTimeout 处理 (main.py:200-203)
|
||||
|
||||
```python
|
||||
except httpx.ReadTimeout:
|
||||
logger.warning(f"读取超时(ReadTimeout),可能是图像生成时间过长,重试中... ({attempt + 1}/{max_retry})")
|
||||
logger.info(f"提示词长度: {len(prompt)} 字符,建议缩短提示词或增加超时时间")
|
||||
continue
|
||||
```
|
||||
|
||||
**改进点:**
|
||||
- 单独捕获 `ReadTimeout` 异常
|
||||
- 提供友好的错误提示
|
||||
- 自动重试(最多 3 次)
|
||||
|
||||
### 5. 添加下载失败重试 (main.py:184-187)
|
||||
|
||||
```python
|
||||
if image_path:
|
||||
logger.success("成功生成图像")
|
||||
return [image_path]
|
||||
else:
|
||||
# 下载失败,继续重试
|
||||
logger.warning(f"图片下载失败,将重试 ({attempt + 1}/{max_retry})")
|
||||
continue
|
||||
```
|
||||
|
||||
**改进点:**
|
||||
- 图片下载失败时自动重试
|
||||
- 重新请求 API 获取新的图片 URL
|
||||
|
||||
## 常见错误及解决方案
|
||||
|
||||
### 错误 1: 未能提取到图片URL
|
||||
|
||||
**日志示例:**
|
||||
```
|
||||
ERROR | 未能提取到图片URL,完整响应: {"error": "..."}
|
||||
```
|
||||
|
||||
**可能原因:**
|
||||
- API 返回了错误而不是图片 URL
|
||||
- 响应格式不符合预期
|
||||
- Token 无效或过期
|
||||
|
||||
**解决方案:**
|
||||
- 检查 API Token 是否正确
|
||||
- 查看完整响应内容,了解 API 返回的错误信息
|
||||
- 检查 API 配置(base_url)
|
||||
|
||||
### 错误 2: ReadTimeout 超时
|
||||
|
||||
**日志示例:**
|
||||
```
|
||||
WARNING | 读取超时(ReadTimeout),可能是图像生成时间过长,重试中... (1/3)
|
||||
```
|
||||
|
||||
**可能原因:**
|
||||
- 图像生成时间过长(复杂提示词)
|
||||
- 网络不稳定
|
||||
- API 服务器响应慢
|
||||
|
||||
**解决方案:**
|
||||
- 缩短提示词长度
|
||||
- 增加配置文件中的 `timeout` 值
|
||||
- 检查网络连接和代理设置
|
||||
|
||||
### 错误 3: 图片下载失败
|
||||
|
||||
**日志示例:**
|
||||
```
|
||||
ERROR | 下载图片失败: Client error '404 Not Found'
|
||||
WARNING | 图片下载失败,将重试 (1/3)
|
||||
```
|
||||
|
||||
**可能原因:**
|
||||
- 图片 URL 已过期
|
||||
- CDN 链接失效
|
||||
- 网络问题
|
||||
|
||||
**解决方案:**
|
||||
- 自动重试会重新请求 API 获取新 URL
|
||||
- 检查代理设置
|
||||
- 如果持续失败,联系 API 提供商
|
||||
|
||||
### 错误 4: Token 认证失败
|
||||
|
||||
**日志示例:**
|
||||
```
|
||||
ERROR | Token认证失败
|
||||
```
|
||||
|
||||
**解决方案:**
|
||||
- 检查 `config.toml` 中的 `token` 配置
|
||||
- 确认 Token 是否有效
|
||||
- 联系 API 提供商获取新 Token
|
||||
|
||||
## 调试步骤
|
||||
|
||||
### 1. 启用 DEBUG 日志
|
||||
|
||||
修改 `main_config.toml`:
|
||||
```toml
|
||||
[Performance]
|
||||
log_level_console = "DEBUG" # 改为 DEBUG
|
||||
log_level_file = "DEBUG"
|
||||
```
|
||||
|
||||
### 2. 查看详细日志
|
||||
|
||||
```bash
|
||||
# 实时查看日志
|
||||
tail -f WechatHookBot/logs/hookbot.log | grep -E "Flow2API|图像生成"
|
||||
|
||||
# 搜索错误
|
||||
grep "Flow2API" WechatHookBot/logs/hookbot.log | grep -E "ERROR|WARNING"
|
||||
```
|
||||
|
||||
### 3. 测试命令
|
||||
|
||||
```bash
|
||||
# 在微信中发送
|
||||
/绘画f 一只可爱的猫咪
|
||||
|
||||
# 或横屏
|
||||
/绘画f横屏 美丽的风景
|
||||
```
|
||||
|
||||
### 4. 检查配置
|
||||
|
||||
查看 `plugins/Flow2API/config.toml`:
|
||||
```toml
|
||||
[api]
|
||||
base_url = "https://your-api-url.com" # 确认 URL 正确
|
||||
token = "your-token" # 确认 Token 有效
|
||||
timeout = 600 # 超时时间(秒)
|
||||
```
|
||||
|
||||
## 预期日志输出
|
||||
|
||||
### 成功案例:
|
||||
|
||||
```
|
||||
INFO | Flow2API请求: gemini-3.0-pro-image-portrait, 提示词长度: 15 字符
|
||||
DEBUG | 完整提示词: 一只可爱的猫咪
|
||||
DEBUG | 请求URL: https://api.example.com/v1/chat/completions
|
||||
DEBUG | Payload大小: 234 字节
|
||||
DEBUG | 超时配置: connect=10s, read=600s
|
||||
INFO | 使用 AIChat 代理: socks5://127.0.0.1:7890
|
||||
DEBUG | 收到响应状态码: 200
|
||||
DEBUG | 收到响应行: data: {"choices":[{"delta":{"content":"https://..."}}]}
|
||||
INFO | 提取到图片URL: https://cdn.example.com/image.jpg
|
||||
INFO | 图片下载成功: /path/to/flow2_20251126_114435_abc123.jpg
|
||||
SUCCESS | 成功生成图像
|
||||
```
|
||||
|
||||
### 失败但重试成功:
|
||||
|
||||
```
|
||||
INFO | Flow2API请求: gemini-3.0-pro-image-portrait, 提示词长度: 15 字符
|
||||
DEBUG | 收到响应状态码: 200
|
||||
INFO | 提取到图片URL: https://cdn.example.com/expired.jpg
|
||||
ERROR | 下载图片失败: Client error '404 Not Found'
|
||||
WARNING | 图片下载失败,将重试 (1/3)
|
||||
INFO | Flow2API请求: gemini-3.0-pro-image-portrait, 提示词长度: 15 字符
|
||||
INFO | 提取到图片URL: https://cdn.example.com/new-image.jpg
|
||||
INFO | 图片下载成功: /path/to/flow2_20251126_114436_def456.jpg
|
||||
SUCCESS | 成功生成图像
|
||||
```
|
||||
|
||||
### 完全失败(显示详细错误):
|
||||
|
||||
```
|
||||
INFO | Flow2API请求: gemini-3.0-pro-image-portrait, 提示词长度: 15 字符
|
||||
ERROR | 请求异常: HTTPStatusError: Client error '401 Unauthorized'
|
||||
ERROR | 异常详情:
|
||||
Traceback (most recent call last):
|
||||
File "main.py", line 131, in generate_image
|
||||
async with client.stream("POST", url, json=payload, headers=headers) as response:
|
||||
...
|
||||
httpx.HTTPStatusError: Client error '401 Unauthorized' for url '...'
|
||||
ERROR | 提示词长度: 15 字符
|
||||
ERROR | 图像生成失败
|
||||
```
|
||||
|
||||
## 配置建议
|
||||
|
||||
### config.toml 推荐配置
|
||||
|
||||
```toml
|
||||
[api]
|
||||
base_url = "https://your-api-url.com"
|
||||
token = "your-api-token"
|
||||
timeout = 600 # 10分钟,适合复杂图像生成
|
||||
|
||||
[generation]
|
||||
default_orientation = "portrait" # 默认竖屏
|
||||
max_retry_attempts = 3 # 最多重试3次
|
||||
|
||||
[behavior]
|
||||
enable_command = true
|
||||
command_keywords = ["/绘画f", "/画图f"]
|
||||
enable_group = true
|
||||
enable_private = true
|
||||
|
||||
[llm_tool]
|
||||
enabled = true
|
||||
tool_name = "flow2_image_generation"
|
||||
tool_description = "使用Flow2 AI生成图像..."
|
||||
```
|
||||
|
||||
## 相关文件
|
||||
|
||||
- `main.py` - 主要修改文件
|
||||
- `config.toml` - 配置文件
|
||||
- `修复说明.md` - 本文档
|
||||
|
||||
## 总结
|
||||
|
||||
修复后,Flow2API 插件现在会:
|
||||
|
||||
1. ✅ 显示完整的错误堆栈跟踪
|
||||
2. ✅ 记录详细的请求和响应信息
|
||||
3. ✅ 自动处理 ReadTimeout 超时
|
||||
4. ✅ 图片下载失败时自动重试
|
||||
5. ✅ 提供友好的错误提示和调试信息
|
||||
|
||||
现在当遇到"图像生成失败"时,你可以在日志中看到具体的错误原因,便于快速定位和解决问题!
|
||||
Reference in New Issue
Block a user