fix: 显式选中技能/MCP 时优先按工具资料回答 + 媒体任务超时/日志
- _build_system_prompt 末尾增加【最高优先级覆盖规则】:用户明确选择技能/MCP 并询问其介绍/功能/用法时, 必须只基于该工具资料作答,禁止引用平台知识库中技能市场/MCP/平台能力的通用描述。 - _generate_media_task 增加启动/结束日志,对图像生成加 90s 超时、视频 300s 超时,避免异步任务挂死导致前端一直显示“生成中”。
This commit is contained in:
1 parent
1578d68f95
commit
d593d8dc42
2 files changed
+920
-7
No files matched your search
@@ -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"
|
||||
"若用户问题与已选工具本身无关,则按常规方式回答。"
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user