feat: derive tuhui title from image analysis
This commit is contained in:
@@ -79,6 +79,9 @@ def _build_processing_prompt(intent: str, requirement_text: str, analysis: Dict)
|
|||||||
|
|
||||||
def _build_upload_title(intent: str, analysis: Dict, requirement_text: str, idx: int) -> str:
|
def _build_upload_title(intent: str, analysis: Dict, requirement_text: str, idx: int) -> str:
|
||||||
analysis = analysis or {}
|
analysis = analysis or {}
|
||||||
|
suggested = _safe_name(str(analysis.get("title_suggest") or ""), "")
|
||||||
|
if suggested:
|
||||||
|
return f"{suggested}_{idx}"
|
||||||
subject = _safe_name(str(analysis.get("subject") or ""), "")
|
subject = _safe_name(str(analysis.get("subject") or ""), "")
|
||||||
proc_type = _safe_name(str(analysis.get("proc_type") or ""), "")
|
proc_type = _safe_name(str(analysis.get("proc_type") or ""), "")
|
||||||
requirement = _safe_name(str(requirement_text or ""), "")
|
requirement = _safe_name(str(requirement_text or ""), "")
|
||||||
|
|||||||
@@ -68,6 +68,26 @@ ANALYSIS_PROMPT = """你是一个电商图片处理评估专家。
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def _sanitize_title_part(text: str) -> str:
|
||||||
|
value = str(text or "").strip()
|
||||||
|
value = value.replace("/", "_").replace("\\", "_")
|
||||||
|
value = " ".join(value.split())
|
||||||
|
return value[:20]
|
||||||
|
|
||||||
|
|
||||||
|
def _build_title_suggest(subject: str, proc_type: str, customer_requirement: str) -> str:
|
||||||
|
subject_part = _sanitize_title_part(subject)
|
||||||
|
proc_part = _sanitize_title_part(proc_type)
|
||||||
|
req_part = _sanitize_title_part(customer_requirement)
|
||||||
|
|
||||||
|
parts = [part for part in (subject_part, proc_part) if part]
|
||||||
|
if parts:
|
||||||
|
return "_".join(parts[:2])
|
||||||
|
if req_part:
|
||||||
|
return req_part
|
||||||
|
return "图片识别结果"
|
||||||
|
|
||||||
|
|
||||||
class ImageAnalyzerService:
|
class ImageAnalyzerService:
|
||||||
"""图片分析服务 - 后台静默运行,不影响主流程"""
|
"""图片分析服务 - 后台静默运行,不影响主流程"""
|
||||||
|
|
||||||
@@ -128,6 +148,7 @@ class ImageAnalyzerService:
|
|||||||
"perspective": no|mild|strong,
|
"perspective": no|mild|strong,
|
||||||
"aspect_ratio": 比例,
|
"aspect_ratio": 比例,
|
||||||
"gemini_prompt": 处理提示词,
|
"gemini_prompt": 处理提示词,
|
||||||
|
"title_suggest": 推荐标题,
|
||||||
"note": 备注,
|
"note": 备注,
|
||||||
"price_suggest": 建议价格,
|
"price_suggest": 建议价格,
|
||||||
"width": 宽度,
|
"width": 宽度,
|
||||||
@@ -182,6 +203,11 @@ class ImageAnalyzerService:
|
|||||||
|
|
||||||
result = self._parse_result(image_url, content)
|
result = self._parse_result(image_url, content)
|
||||||
result["customer_requirement"] = customer_requirement
|
result["customer_requirement"] = customer_requirement
|
||||||
|
result["title_suggest"] = _build_title_suggest(
|
||||||
|
result.get("subject", ""),
|
||||||
|
result.get("proc_type", ""),
|
||||||
|
customer_requirement,
|
||||||
|
)
|
||||||
result["elapsed"] = round(elapsed, 2)
|
result["elapsed"] = round(elapsed, 2)
|
||||||
|
|
||||||
# 获取尺寸
|
# 获取尺寸
|
||||||
@@ -280,6 +306,11 @@ class ImageAnalyzerService:
|
|||||||
"difficulty": extract("难点", ""),
|
"difficulty": extract("难点", ""),
|
||||||
"suggest_method": extract("建议方案", "AI处理"),
|
"suggest_method": extract("建议方案", "AI处理"),
|
||||||
"gemini_prompt": extract("提示词"),
|
"gemini_prompt": extract("提示词"),
|
||||||
|
"title_suggest": _build_title_suggest(
|
||||||
|
extract("主体"),
|
||||||
|
extract("类型"),
|
||||||
|
"",
|
||||||
|
),
|
||||||
"note": extract("备注"),
|
"note": extract("备注"),
|
||||||
"price_min": price_min,
|
"price_min": price_min,
|
||||||
"price_max": price_max,
|
"price_max": price_max,
|
||||||
@@ -320,6 +351,7 @@ class ImageAnalyzerService:
|
|||||||
"difficulty": "",
|
"difficulty": "",
|
||||||
"suggest_method": "",
|
"suggest_method": "",
|
||||||
"gemini_prompt": "",
|
"gemini_prompt": "",
|
||||||
|
"title_suggest": "图片识别结果",
|
||||||
"note": "",
|
"note": "",
|
||||||
"price_min": 15,
|
"price_min": 15,
|
||||||
"price_max": 20,
|
"price_max": 20,
|
||||||
|
|||||||
Reference in New Issue
Block a user