fix: add image placeholder for non-vision models to fix no response in private chat (#4411)

* fix: 修复私聊中单独发送图片无响应的问题,为非视觉模型添加图片占位符

* ruffcheck

* 修复占位符被重复添加的问题

* 简化逻辑
This commit is contained in:
Gao Jinzhe
2026-01-11 15:11:35 +08:00
committed by GitHub
parent 86e9b41dde
commit 2f3a3f354f
@@ -191,7 +191,16 @@ class InternalAgentSubStage(Stage):
if req.image_urls:
provider_cfg = provider.provider_config.get("modalities", ["image"])
if "image" not in provider_cfg:
logger.debug(f"用户设置提供商 {provider} 不支持图像,清空图像列表。")
logger.debug(
f"用户设置提供商 {provider} 不支持图像,将图像替换为占位符。"
)
# 为每个图片添加占位符到 prompt
image_count = len(req.image_urls)
placeholder = " ".join(["[图片]"] * image_count)
if req.prompt:
req.prompt = f"{placeholder} {req.prompt}"
else:
req.prompt = placeholder
req.image_urls = []
if req.func_tool:
provider_cfg = provider.provider_config.get("modalities", ["tool_use"])
@@ -364,8 +373,16 @@ class InternalAgentSubStage(Stage):
# 检查消息内容是否有效,避免空消息触发钩子
has_provider_request = event.get_extra("provider_request") is not None
has_valid_message = bool(event.message_str and event.message_str.strip())
# 检查是否有图片或其他媒体内容
has_media_content = any(
isinstance(comp, (Image, File)) for comp in event.message_obj.message
)
if not has_provider_request and not has_valid_message:
if (
not has_provider_request
and not has_valid_message
and not has_media_content
):
logger.debug("skip llm request: empty message and no provider_request")
return