fix: replace sommelier role with OCR system role to prevent brand name hallucination
- Rewrote prompt: 'ソムリエ' role -> pure OCR system role - Explicit prohibition on brand name completion/correction (e.g. label shows 東魁 -> output 東魁, never 東魁盛) - prefecture: output null if not written on label; inference from brand knowledge forbidden - tasteStats: default to mid-value 3 instead of 'reasonable estimate' (was encouraging hallucination) - Added concrete examples for white-deer, kubota, tokai cases - Bumped version 1.0.35+42 -> 1.0.36+43 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
cb152ef78a
commit
3643ab7690
|
|
@ -23,25 +23,36 @@ class GeminiService {
|
|||
Future<SakeAnalysisResult> analyzeSakeLabel(List<String> imagePaths, {bool forceRefresh = false}) async {
|
||||
// クライアント側プロンプトでスキーマの一貫性を保証
|
||||
const prompt = '''
|
||||
【絶対ルール】ラベルに印刷されている文字を一字一句そのまま読み取ること。
|
||||
あなたの学習データ・知識でラベルの銘柄名や蔵元名を補完・変更・推測することは厳禁。
|
||||
例: ラベルに「東魁」とだけ書かれていれば "name" は「東魁」(「東魁盛」ではない)
|
||||
例: ラベルに「白鹿」とあれば「白鹿」(「灘菊」など類似銘柄に変えない)
|
||||
あなたは「ラベルの文字を読むだけ」の光学文字認識(OCR)システムです。
|
||||
日本酒の知識・データベース・推測は一切使わないでください。
|
||||
|
||||
---
|
||||
## nameとbrandの絶対ルール
|
||||
- ラベルに印刷されている文字を「写真に写っている通り」に出力する
|
||||
- 文字の補完・完成・訂正は禁止(例: ラベルに「東魁」→ name は「東魁」、「東魁盛」に変えてはいけない)
|
||||
- ラベルに「白鹿」→「白鹿」(「白鹿本醸造」などに変えない)
|
||||
- ラベルに「久保田」→「久保田」(「久保田 千寿」などに変えない)
|
||||
- 「もしかして○○のことかな」という判断は禁止。見えた文字だけ。
|
||||
|
||||
あなたは日本酒の専門家(ソムリエ)です。
|
||||
添付の画像(日本酒のラベル)を解析し、以下のJSON形式で情報を返してください。
|
||||
## prefectureのルール
|
||||
- ラベルに都道府県名が書かれていれば、その文字をそのまま出力する
|
||||
- 書かれていない場合は null(銘柄名から推測して埋めることは禁止)
|
||||
|
||||
## description・tasteStats・flavorTagsのルール
|
||||
- これらはラベルに書かれている情報と、type(特定名称)から推定してよい
|
||||
- ただし nameで読み取った銘柄名の「知名度・評判・産地イメージ」は参照しないこと
|
||||
- tasteStatsは1〜5の整数(ラベルに根拠がなければ中間値の3を使う)
|
||||
|
||||
## 出力形式
|
||||
以下のJSONのみ返す(説明文不要):
|
||||
{
|
||||
"name": "ラベルに書かれた銘柄名をそのまま(変更・補完禁止)",
|
||||
"brand": "ラベルに書かれた蔵元名をそのまま(変更・補完禁止)",
|
||||
"prefecture": "都道府県名",
|
||||
"type": "特定名称(純米大吟醸など)",
|
||||
"description": "味や特徴の魅力的な説明文(100文字程度)",
|
||||
"catchCopy": "短いキャッチコピー(20文字以内)",
|
||||
"name": "ラベルに写っている銘柄名の文字(一字一句そのまま)",
|
||||
"brand": "ラベルに写っている蔵元名の文字(一字一句そのまま)",
|
||||
"prefecture": "ラベルに書かれた都道府県名(なければnull)",
|
||||
"type": "特定名称(ラベルから読む。なければnull)",
|
||||
"description": "ラベルの情報とtypeから推定した説明文(100文字程度)",
|
||||
"catchCopy": "20文字以内のキャッチコピー",
|
||||
"confidenceScore": 80,
|
||||
"flavorTags": ["フルーティー", "辛口", "華やか"],
|
||||
"flavorTags": ["フルーティー", "辛口"],
|
||||
"tasteStats": {"aroma":3,"sweetness":3,"acidity":3,"bitterness":3,"body":3},
|
||||
"alcoholContent": 15.0,
|
||||
"polishingRatio": 50,
|
||||
|
|
@ -50,11 +61,6 @@ class GeminiService {
|
|||
"yeast": "きょうかい9号",
|
||||
"manufacturingYearMonth": "2023.10"
|
||||
}
|
||||
|
||||
★必須ルール(再掲):
|
||||
- "name"と"brand"はラベルから目視で読んだ文字のみ。知識での変更は絶対禁止。
|
||||
- tasteStatsは必ず1〜5の整数で埋めること。
|
||||
- 不明な値は null または合理的な推測値。
|
||||
''';
|
||||
|
||||
return _callProxyApi(
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
# In Windows, build-name is used as the major, minor, and patch parts
|
||||
# of the product and file versions while build-number is used as the build suffix.
|
||||
version: 1.0.35+42
|
||||
version: 1.0.36+43
|
||||
|
||||
environment:
|
||||
sdk: ^3.10.1
|
||||
|
|
|
|||
Loading…
Reference in New Issue