fix: 显式选中技能/MCP 时优先按工具资料回答 + 媒体任务超时/日志

- _build_system_prompt 末尾增加【最高优先级覆盖规则】:用户明确选择技能/MCP 并询问其介绍/功能/用法时,
  必须只基于该工具资料作答,禁止引用平台知识库中技能市场/MCP/平台能力的通用描述。
- _generate_media_task 增加启动/结束日志,对图像生成加 90s 超时、视频 300s 超时,避免异步任务挂死导致前端一直显示“生成中”。
This commit is contained in:
QihuAI Design committed 2026-07-18 13:52:26 +08:00
1 parent 1578d68f95
commit d593d8dc42
2 files changed
+920 -7

No files matched your search

+34 -7
View File
@@ -1940,22 +1940,36 @@ async def _generate_media_task(ai_msg_id: str, ai_model_id: str, prompt: str, us
logger.info(f"[_generate_media_task] 启动 media 生成 msg={ai_msg_id} model={ai_model_id} prompt={prompt[:60]!r}")
caps = [c.lower() for c in (ai_model.capabilities or [])]
is_video = "video" in caps
timeout_seconds = 300 if is_video else 90
try:
result = await asyncio.wait_for(
_generate_media(db, ai_model, prompt, user_id),
timeout=timeout_seconds
)
result = await _generate_media(db, ai_model, prompt, user_id)
except asyncio.TimeoutError:
logger.warning(f"[_generate_media_task] media 生成超时 msg={ai_msg_id} is_video={is_video} timeout={timeout_seconds}s")
_media_name = "视频" if is_video else "图像"
result = f"⚠️ 媒体生成超时:{_media_name}生成耗时超过 {timeout_seconds} 秒,请稍后重试。"
except Exception as e:
logger.warning(f"[_generate_media_task] media 生成异常 msg={ai_msg_id}: {e}", exc_info=True)
result = f"⚠️ 媒体生成失败:{str(e)[:200]}"
# 回写消息内容(占位 → 最终富文本/错误)
@@ -5854,6 +5868,19 @@ def _build_system_prompt(
)
# 高优先级覆盖规则:显式选中工具时,回答必须基于该工具资料
if (skills and not auto_discovered) or (mcp):
system_parts.append(
"【最高优先级覆盖规则】\n"
"用户在本轮已明确选择了工具(见上文【已选技能资料】或【用户已选择 MCP 应用】)。\n"
"如果用户的问题是在询问这些已选工具/技能/应用本身的介绍、功能、能做什么、怎么用、特点或用法,"
"你必须只基于上文提供的该工具具体资料作答;\n"
"不要引用《平台知识库》中关于技能市场、MCP 协议或平台整体能力的通用描述;"
"不要列举其它未选中的技能或 MCP 作为示例;也不要说“不知道”或“无法回答”。\n"
"若用户问题与已选工具本身无关,则按常规方式回答。"
)