修改更强的多模态模型提示词约束。

This commit is contained in:
2025-11-10 09:57:23 +08:00
parent d1a32dc8a9
commit 34135bbb75
3 changed files with 16 additions and 8 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ from tkinterdnd2 import DND_FILES, TkinterDnD
from exp_multimodal.labels import build_labels, _normalize, _base_ingredient
from exp_multimodal.vlm_classifier import classify_image
from exp_multimodal.ollama_client import OLLAMA_URL as DEFAULT_OLLAMA_URL, DEFAULT_MODEL as DEFAULT_VLM_MODEL
import ollama_client as _ollama_mod
from exp_multimodal import ollama_client as _ollama_mod
ctk.set_appearance_mode("System")
+11 -5
View File
@@ -22,13 +22,19 @@ def build_closedset_prompt(
)
return (
"你是食品图像分类专家。请严格在给定的标签集合中选择最符合图片内容的一个标签。\n"
"只允许返回一个标签,禁止输出集合外的词。请同时给出0-1置信度\n"
"【重要】你必须且只能输出JSON格式,严禁输出任何其他内容(包括英文描述、解释、分析等)。\n\n"
"你是食品图像分类专家。任务:从给定标签集合中选择最符合图片的一个标签\n"
f"标签集合(封闭集,中文):{label_str}\n\n"
f"{constraint}"
f"标签集合(封闭集,中文):{label_str}\n"
f"{hints}\n"
'请仅输出合法 JSON{"label":"<标签>","confidence":0-1}\n'
"不要输出任何额外解释或文本。"
"要求:\n"
"1. 必须从标签集合中选择,禁止输出集合外的词\n"
"2. 给出0-1的置信度分数\n"
"3. 严格按以下JSON格式输出,不允许有任何偏差\n\n"
'输出格式(必须严格遵守):\n{"label":"<标签>","confidence":0.95}\n\n'
"4. 如果明显不在这些分类中,输出格式如下:"
' \n{"label":"<未知>","confidence":0.95}\n\n'
"【再次强调】只输出上述JSON,不要有任何额外文字、描述、解释或其他内容。"
)
+4 -2
View File
@@ -49,8 +49,10 @@ def classify_image(
f"ingredient_only={ingredient_only} fewshot={bool(fewshot_hints)}"
)
prompt = build_closedset_prompt(labels, fewshot_hints, ingredient_only)
_preview_prompt = (prompt[:120]).replace("\n", " ")
print(f"[VLM] Prompt length={len(prompt)} preview={_preview_prompt}...")
# _preview_prompt = (prompt[:120]).replace("\n", " ")
final_prompt = prompt.replace("\n", " ")
# print(f"[VLM] Prompt length={len(prompt)} preview={_preview_prompt}...")
print(f"[VLM] Prompt length={len(prompt)} preview={final_prompt}")
print("[VLM] Calling chat_vision...")
text = chat_vision(prompt, [image_path], temperature=0.1)