一键导入
meal-recommendation-prompt
보유 식재료 기반 식단·레시피 추천 Claude 프롬프트 패턴. 소비기한 우선순위 반영, 구조화된 JSON 출력 포함.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
보유 식재료 기반 식단·레시피 추천 Claude 프롬프트 패턴. 소비기한 우선순위 반영, 구조화된 JSON 출력 포함.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Spring Security 5.5.x + jjwt 0.10.7 레거시 JWT 인증 - WebSecurityConfigurerAdapter, OncePerRequestFilter, javax.servlet 환경
Spring Boot 3.x + Spring Security 6.x + jjwt 0.12.x 기반 모던 JWT 인증 패턴. SecurityFilterChain Bean, 람다 DSL, jakarta.servlet, Virtual Threads 적용
Unity 6 LTS 2D 모바일 게임용 uGUI 시스템 전문 스킬. Canvas/RectTransform/TextMeshPro, 모바일 UI 패턴(팝업·무한 스크롤·광고·IAP), 성능 최적화, UI Toolkit과의 선택 기준 포함.
아크라시아(akrasia, 자제력 없음) 학술 논쟁의 핵심 구도와 주요 연구자·문헌을 빠르게 파악할 수 있는 도메인 지식 스킬. 도덕윤리교육 전공 대학원생(석/박사)이 학위논문·KCI 투고·세미나 준비 시 고대–현대–한국 학계–도덕심리학 흐름을 한 번에 짚도록 구성. <example>사용자: "아리스토텔레스의 propeteia와 astheneia 구분을 인용하려는데 출처를 알려줘"</example> <example>사용자: "데이비슨이 의지박약을 어떻게 가능하다고 봤는지 핵심 논증을 정리해줘"</example> <example>사용자: "한국 도덕교육 학계에서 아크라시아 다룬 논문 있어?"</example>
아리스토텔레스 『니코마코스 윤리학』에서 akrasia(자제력없음)와 akolasia(무절제)의 5축 차이를 정밀하게 정리한 학위논문 자료 스킬. NE VII.4 1147b20-1148b14, VII.8 1150b29-1151a28, III.10-12 1117b23-1119b18 절별 분해와 표준 학자 해석(Bostock, Broadie-Rowe, Pakaluk, Hursthouse, Charles 등)을 포함. 도덕교육 적용을 위한 두 상태 차이의 함의 및 한국어 번역어 처리 권장안 제공. <example>사용자: "akrates와 akolastos를 prohairesis 측면에서 어떻게 구분해야 하나요?"</example> <example>사용자: "NE VII.4의 ἁπλῶς akrasia가 akolasia와 어떻게 갈라지는지 절별 분해해주세요"</example> <example>사용자: "Hursthouse의 연속체 모델을 도덕교육 적용 절에서 어떻게 활용할 수 있나요?"</example>
한국 위기 대응 자원(자살·자해·정신건강·여성·청소년·노인·다문화) 핫라인과 앱·챗봇 안전 가드 응답 패턴 종합. 꿈 해몽·정신건강 앱 등 자가 진단/감정 콘텐츠 도메인에서 위험 신호 포착 시 안전한 자원 안내 문구를 작성할 때 참조. <example>사용자: "꿈 해몽 앱에 위기 안내 문구를 어떻게 넣을까?"</example> <example>사용자: "한국에서 자살예방 핫라인 번호가 어떻게 바뀌었지?"</example> <example>사용자: "정신건강 챗봇 안전 가드 응답 템플릿을 짜줘"</example>
| name | meal-recommendation-prompt |
| description | 보유 식재료 기반 식단·레시피 추천 Claude 프롬프트 패턴. 소비기한 우선순위 반영, 구조화된 JSON 출력 포함. |
소스: https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices 검증일: 2026-06-26
당신은 한국 가정의 영양사 겸 요리 전문가입니다.
역할:
- 사용자가 보유한 식재료를 기반으로 현실적이고 맛있는 식단을 추천합니다
- 소비기한이 임박한 식재료를 우선적으로 활용합니다
- 한식 위주로 추천하되, 간편하게 만들 수 있는 요리를 선호합니다
규칙:
- 사용자가 갖고 있지 않은 재료는 최소 1~2가지만 추가 권장합니다
- 조리 시간을 항상 명시합니다 (10분 이내 / 30분 이내 / 30분 이상)
- 각 메뉴의 대략적인 칼로리를 함께 제공합니다
- 응답은 반드시 지정된 JSON 형식으로만 반환합니다
다음 식재료로 만들 수 있는 식단을 추천해주세요.
{ingredientContext}
요청 사항:
- 추천 식단 수: {count}가지 (기본 3가지)
- 끼니 유형: {mealType} (아침/점심/저녁/간식 중 하나)
- 소비기한 임박 식재료를 최대한 활용해주세요
- 추가 재료가 필요하면 최소한으로 제안해주세요
아래 JSON 형식으로만 응답해주세요:
{
"recommendations": [
{
"name": "음식명",
"description": "한 줄 설명",
"cookTime": "10분 이내 | 30분 이내 | 30분 이상",
"calories": 숫자 (kcal, 1인분 기준),
"usedIngredients": ["사용하는 보유 식재료"],
"additionalIngredients": ["추가 필요한 재료 (없으면 빈 배열)"],
"steps": ["조리 순서 1", "조리 순서 2", "조리 순서 3"],
"tip": "요리 팁 또는 변형 방법 (선택)"
}
],
"urgentUsageNote": "소비기한 임박 식재료 활용 메모 (있을 경우)"
}
const buildPromptContext = (ingredients: Ingredient[]): string => {
const urgent = ingredients.filter(i => getIngredientStatus(i) === 'urgent');
const warning = ingredients.filter(i => getIngredientStatus(i) === 'warning');
const fresh = ingredients.filter(i =>
['fresh', 'no_expiry'].includes(getIngredientStatus(i))
);
const fmt = (items: Ingredient[]) =>
items.map(i => `- ${i.name} (${i.quantity}${i.unit})`).join('\n');
const sections = [];
if (urgent.length > 0) sections.push(`🚨 빨리 써야 하는 식재료 (3일 이내):\n${fmt(urgent)}`);
if (warning.length > 0) sections.push(`⚠️ 곧 사용해야 하는 식재료 (7일 이내):\n${fmt(warning)}`);
if (fresh.length > 0) sections.push(`✅ 보유 중인 식재료:\n${fmt(fresh)}`);
return sections.join('\n\n');
};
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic();
const getMealRecommendations = async (
ingredients: Ingredient[],
mealType: '아침' | '점심' | '저녁' | '간식' = '저녁',
count: number = 3
) => {
const ingredientContext = buildPromptContext(ingredients);
const prompt = `
다음 식재료로 만들 수 있는 식단을 추천해주세요.
${ingredientContext}
요청 사항:
- 추천 식단 수: ${count}가지
- 끼니 유형: ${mealType}
- 소비기한 임박 식재료를 최대한 활용해주세요
- 추가 재료가 필요하면 최소한으로 제안해주세요
아래 JSON 형식으로만 응답해주세요:
{"recommendations": [...], "urgentUsageNote": "..."}
`;
const message = await client.messages.create({
model: 'claude-sonnet-4-6',
max_tokens: 2048,
system: `당신은 한국 가정의 영양사 겸 요리 전문가입니다. 보유 식재료로 현실적인 한식 위주 식단을 추천하며, 소비기한 임박 재료를 우선 활용합니다. 응답은 반드시 JSON 형식으로만 반환합니다.`,
messages: [{ role: 'user', content: prompt }],
});
const text = message.content[0].type === 'text' ? message.content[0].text : '';
// JSON 파싱 (마크다운 코드블록 제거)
const jsonStr = text.replace(/```json\n?|\n?```/g, '').trim();
return JSON.parse(jsonStr);
};
const getMealRecommendationsStream = async (
ingredients: Ingredient[],
onChunk: (text: string) => void
) => {
const stream = client.messages.stream({
model: 'claude-sonnet-4-6',
max_tokens: 2048,
system: '...위와 동일...',
messages: [{ role: 'user', content: buildMealPrompt(ingredients) }],
});
let fullText = '';
for await (const chunk of stream) {
if (chunk.type === 'content_block_delta' && chunk.delta.type === 'text_delta') {
fullText += chunk.delta.text;
onChunk(chunk.delta.text);
}
}
return JSON.parse(fullText.replace(/```json\n?|\n?```/g, '').trim());
};
interface MealRecommendation {
name: string;
description: string;
cookTime: '10분 이내' | '30분 이내' | '30분 이상';
calories: number;
usedIngredients: string[];
additionalIngredients: string[];
steps: string[];
tip?: string;
}
interface MealRecommendationResponse {
recommendations: MealRecommendation[];
urgentUsageNote?: string;
}
위 식재료 중 반드시 "{ingredientName}"을(를) 포함한 레시피를 추천해주세요.
1인분 기준 {maxCalories}kcal 이하 메뉴만 추천해주세요.
조리 시간 20분 이내의 간단한 메뉴만 추천해주세요.
다음 조건을 반드시 지켜주세요: {dietaryRestriction}
예: "돼지고기 제외", "채식 위주", "저탄수화물"