gemma4:26b 가 본문 없이 이미지만 받으면 null 반환하는 한계 우회. prompt 강화 + null 금지 명시 만으로 부족. one-shot 예시 (강아지/화이트보드) 2개로 모델이 입출력 구조 따라가도록 유도. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
38 lines
2.0 KiB
TypeScript
38 lines
2.0 KiB
TypeScript
export function buildVisionPrompt(
|
|
text: string,
|
|
todayKst: string,
|
|
dueCandidates: string[],
|
|
vocab: string[]
|
|
): string {
|
|
// v0.3.14 — 본문 빈 케이스에 one-shot 예시 추가. gemma4:26b 등이 본문 없이
|
|
// 이미지만 받으면 null 반환하는 한계 우회. 예시 입력/출력 구조 따라가도록 유도.
|
|
const bodySection = text
|
|
? `메모 본문:\n${text}\n\n첨부 이미지도 함께 분석해 요약에 반영하세요.`
|
|
: `본문이 없습니다. 첨부 이미지의 내용 (텍스트/사람/장면/문서 등) 만으로 한국어 title 과 summary 를 작성하세요. null 반환 절대 금지.
|
|
|
|
예시 (이미지: 갈색 강아지가 잔디 위에 앉은 사진):
|
|
{"title":"잔디 위 강아지","summary":"갈색 강아지가 잔디 위에 앉아 있다.\\n배경에 나무가 보인다.\\n날씨가 맑다.","tags":["pet"],"due_date":null}
|
|
|
|
예시 (이미지: 회의실 화이트보드 사진):
|
|
{"title":"회의실 화이트보드","summary":"화이트보드에 일정과 안건이 적혀 있다.\\n프로젝트 이름이 보인다.\\n다이어그램이 그려져 있다.","tags":["meeting"],"due_date":null}
|
|
|
|
이제 첨부된 실제 이미지를 보고 같은 형식으로 작성하세요.`;
|
|
|
|
return `다음 메모를 한국어로 분석해 JSON 으로 정리하세요.
|
|
|
|
${bodySection}
|
|
|
|
규칙 (위반 시 재시도):
|
|
- "title": 한국어 문자열 필수, null 금지. 60자 이내. 영어 단독 금지.
|
|
- "summary": 한국어 문자열 필수, null 금지. 3줄. 이미지 시각 정보 (텍스트/사람/장면) 포함.
|
|
- "tags": 영문 kebab-case 배열 (예: ["meeting-notes"]), 최대 3개. 한국어 태그 금지. 없으면 [].
|
|
- "due_date": ISO YYYY-MM-DD 또는 null. 빈 문자열 금지.
|
|
|
|
오직 JSON 객체 하나만 출력. markdown 코드 펜스 (\`\`\`) / 설명 prose 금지.
|
|
출력 형식: {"title":"...","summary":"...","tags":[],"due_date":null}
|
|
|
|
오늘: ${todayKst}
|
|
가능한 due 후보: ${dueCandidates.join(', ')}
|
|
빈출 태그: ${vocab.slice(0, 20).join(', ')}`;
|
|
}
|