修复因新建分支导致上下文中的current img混乱,采用tool直接返回图片公开url地址(原因 1.保证图片时效性,2.保证图片能够进入上下文-deep agents的main-agent与sub-agent有上下文隔离机制,且task消息类型只支持str)

This commit is contained in:
zcr
2026-03-26 17:16:58 +08:00
parent bac64f0ef1
commit 48ef18295f
7 changed files with 542 additions and 98 deletions

View File

@@ -113,6 +113,74 @@ def load_minio_file_to_state(oss_client, bucket: str, object_name: str, display_
raise ValueError(f"MinIO 下載失敗: {err}")
from urllib.parse import urlparse
def check_and_extract_minio_image(url: str) -> dict[str, str]:
"""
校验URL + 提取MinIO图片路径支持预签名地址
返回格式: {"state": bool, "message": str, "data": str}
"""
# 1. 空值判断
if not url or not isinstance(url, str):
return {
"state": False,
"message": "URL cannot be empty or invalid format",
"data": ""
}
# 2. 解析URL
try:
parsed = urlparse(url)
if not (parsed.scheme and parsed.netloc):
return {
"state": False,
"message": "Invalid URL format",
"data": ""
}
except Exception:
return {
"state": False,
"message": "Failed to parse URL",
"data": ""
}
# 3. 域名判断
allowed_domains = {"www.minio-api.aida.com.hk", "minio-api.aida.com.hk"}
if parsed.netloc not in allowed_domains:
return {
"state": False,
"message": f"Invalid domain: {parsed.netloc}",
"data": ""
}
# 4. Get file path (ignore query parameters for presigned URL)
file_path = parsed.path.strip()
if not file_path:
return {
"state": False,
"message": "No file path found in URL",
"data": ""
}
# 5. Check if it's an image
image_exts = (".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".tiff")
if not file_path.lower().endswith(image_exts):
return {
"state": False,
"message": "Not a valid image file",
"data": ""
}
# 6. Extract final path
result_path = file_path.lstrip("/")
return {
"state": True,
"message": "Success, path extracted",
"data": result_path
}
if __name__ == '__main__':
url = 'fida-test/furniture/sketches/1b82b2db-8019-4796-b2cc-11fb24c7799d.png'
read_type = "2"