fix(media): AGNES 图像/视频生成加韧性层——指数退避重试+友好错误翻译+Bot解析加固
根因(实测复现): AGNES 外部服务不稳定, 非平台代码问题: - 视频创建常返 500 publish_video_queue_failed / context deadline exceeded - 连接偶发重置 Server disconnected - 视频硬限频 每分钟 1 次 (429 rate limit) 改动: 1. chat.py 新增 _agnes_post_json(): 对 5xx/连接中断做 3 次指数退避重试(2/4s); 4xx(参数错误)不重试直接返回 2. 新增 _friendly_media_err(): 把 AGNES 原始 HTTP/JSON 错误 转译为对用户友好的中文(限频/连接失败/队列繁忙), 不再透传原始报错 3. _generate_media 图像/视频分支改用上述重试+友好错误 4. im_llm.py Bot 媒体结果解析加固: strip 后判 <img>/<video>, 成功返回干净链接; 失败透传友好中文, 绝不把原始提示词/标签甩给用户 验证(容器内实测): - WEB_IMG OK / WEB_VID OK / BOT_IMG OK (均返回真实 png/mp4) - 429/断开/队列三类错误均正确转译为友好中文
This commit is contained in:
1 parent
b88f883d44
commit
ccc5f799e1
2 files changed
+109
-51
No files matched your search
@@ -78,11 +78,17 @@ def _call_real_llm(db: Session, user=None, prompt: str = "", platform: str = "im
|
||||
result = f"(媒体生成失败:{e})"
|
||||
if result:
|
||||
# IM 不渲染 HTML,把 <img>/<video> 还原为纯文本链接返回
|
||||
if result.startswith("<img") or result.startswith("<video"):
|
||||
m = _re.search(r'src="([^"]+)"', result)
|
||||
s = result.strip()
|
||||
if s.startswith("<img") or s.startswith("<video"):
|
||||
m = _re.search(r'src="([^"]+)"', s)
|
||||
url = m.group(1) if m else ""
|
||||
label = "图片" if result.startswith("<img") else "视频"
|
||||
return f"已为你生成{label}:{url}" if url else result
|
||||
label = "图片" if s.startswith("<img") else "视频"
|
||||
return f"已为你生成{label}:{url}" if url else "(生成完成,但未能提取媒体地址)"
|
||||
# 媒体生成失败:_generate_media 已返回友好中文(如限频/队列繁忙),
|
||||
# 直接透传,绝不把原始提示词/标签/JSON 透传给用户
|
||||
if s.startswith("⚠️") or s.startswith("(媒体"):
|
||||
return s
|
||||
return "(媒体生成未能返回有效内容,请重试)"
|
||||
return result
|
||||
|
||||
# ===== 2) 文本回复 + 技能自动发现(Issue 8)=====
|
||||
|
||||
Reference in new issue
Block a user