68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
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
|