import json import re from langchain_core.messages import HumanMessage from config.llm import * from llm.ticketLLM import decode_barcode def get_ticket_response_v2(image_url: str, needBarcode: bool = False): # 构建 prompt prompt_text = f""" 你是一位专业的图像分析AI。你的任务是仔细分析提供的图片内容,并按JSON格式输出结果。 ## JSON输出结构及字段说明: # 蚕茧检测信息数据模型 该模型用于描述蚕茧检测信息,每条记录包含以下字段: ## 1. 下足茧重量 (`cocoon_weight`) - **类型**:浮点数 - **描述**:下足茧的重量,单位为克(可带小数) ## 2. 非蛹粒数 (`defective_pupa_count`) - **类型**:整数 - **描述**:不合格蛹的数量,即非好蛹的个数 ## 3. 僵蛹粒数 (`dead_pupa_count`) - **类型**:整数 - **描述**:僵蚕蛹的数量 ## 4. 鲜壳量 (`fresh_shell_weight`) - **类型**:浮点数 - **描述**:鲜壳重量,单位为克(可带小数) ## 5. 小样粒数 (`sample_count`) - **类型**:整数 - **描述**:检测使用的小样数量,即用于检测的茧粒数 --- ### 注意事项 - 所有字段都是必填的(required),在 JSON 实例中必须提供值 - 浮点数字段可以包含小数,整数字段只能是整数 - `evaluator` 和 `reviewer` 可以为空字符串,但字段必须存在 - 如果图片与上述内容无关,则字段值为默认值,例如0、0.0、"" 最后,只输出严格的 JSON 格式,不要包含其他文字、markdown等内容。 """ messages = [ HumanMessage( content=[ {"type": "text", "text": prompt_text}, {"type": "image_url", "image_url": {"url": image_url}}, ] ) ] # 直接调用模型 llmRes = llmVision.invoke(messages).content # 去掉 ```json 和 ``` 包裹 cleaned = re.sub(r"^```json\s*|\s*```$", "", llmRes.strip()) # 解析 JSON jsonRes = json.loads(cleaned) print("needBarcode:", needBarcode) if needBarcode: jsonRes["barcode"] = decode_barcode(image_url) return jsonRes