diff --git a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisRequestConverter.java b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisRequestConverter.java index ce768d3..3813fe1 100644 --- a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisRequestConverter.java +++ b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisRequestConverter.java @@ -39,7 +39,7 @@ public OpenAiResponseRequest toOpenAiRequest(IdeaAnalysisRequestDto dto) { .input(prompt) .text(text) .temperature(0.7) - .maxOutputTokens(4000) + .maxOutputTokens(20000) .metadata(Map.of( "promptVersion", "v1.0", "feature", "idea-analysis" diff --git a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisSchemaBuilder.java b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisSchemaBuilder.java index b0ae493..dd69d42 100644 --- a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisSchemaBuilder.java +++ b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisSchemaBuilder.java @@ -1,5 +1,6 @@ package com.nect.api.domain.analysis.converter; +import com.nect.core.entity.user.enums.Role; import com.nect.core.entity.user.enums.RoleField; import org.springframework.stereotype.Component; @@ -15,6 +16,7 @@ public Map buildIdeaAnalysisSchema() { List allRoleFields = Arrays.stream(RoleField.values()) .filter(rf -> rf != RoleField.CUSTOM) + .filter(rf -> rf.getRole() != Role.OTHER) .map(Enum::name) .collect(Collectors.toList()); diff --git a/nect-api/src/main/resources/prompts/idea-analysis.txt b/nect-api/src/main/resources/prompts/idea-analysis.txt index eecf8ea..dc82981 100644 --- a/nect-api/src/main/resources/prompts/idea-analysis.txt +++ b/nect-api/src/main/resources/prompts/idea-analysis.txt @@ -11,11 +11,11 @@ **⚠️ 매우 중요: weekly_roadmap 배열의 길이는 반드시 project_duration.total_weeks와 정확히 일치해야 합니다!** { - "description": "<아이디어 분석을 바탕으로 이 프로젝트의 핵심 가치, 목표 및 기대효과를 전문적인 어조로 기술 (1문장)>", + "description": "<아이디어 분석을 바탕으로 이 프로젝트의 핵심 가치, 목표 및 기대효과를 전문적인 어조로 기술 (2문장)>", "recommended_project_names": [ - "실제 프로젝트에 어울리는 이름1", - "실제 프로젝트에 어울리는 이름2", - "실제 프로젝트에 어울리는 이름3" + "프로젝트의 핵심 가치와 목적을 반영한 브랜드명, + "타겟 사용자와 서비스 특성을 담은 브랜드명", + "직관적이고 기억하기 쉬운 브랜드명" ], "project_duration": { "total_weeks": <실제 필요한 주차 수> @@ -31,19 +31,18 @@ { "order": 1, "title": "<구체적인 개선점 제목>", - "description": "<간결한 설명 (1-2문장, 50자 이내)>" - + "description": "개선이 필요한 구체적인 이유, 현재 문제점, 개선 후 기대 효과를 포함하여 최소 100자 이상 200자 이내로 서술" }, { "order": 2, "title": "<구체적인 개선점 제목>", - "description": "<간결한 설명 (1-2문장, 50자 이내)>" + "description": "개선이 필요한 구체적인 이유, 현재 문제점, 개선 후 기대 효과를 포함하여 최소 100자 이상 200자 이내로 서술" }, { "order": 3, "title": "<구체적인 개선점 제목>", - "description": "<간결한 설명 (1-2문장, 50자 이내)>" + "description": "개선이 필요한 구체적인 이유, 현재 문제점, 개선 후 기대 효과를 포함하여 최소 100자 이상 200자 이내로 서술" } ], "weekly_roadmap": [ @@ -54,8 +53,8 @@ { "role_field": "", "role_field_display_name": "<역할의 한글명>", - "tasks": "<해당 역할의 구체적인 작업 목록>" - } + "tasks": "<이번 주차 목표에 맞는 해당 역할의 작업을 단계별로 나누어 각 작업의 목적과 방법을 포함하여 최소 100자 이상 구체적으로 작성. 단순한 나열이 아닌 왜 하는지, 어떻게 하는지까지 서술>" + } ] }, { @@ -79,11 +78,11 @@ - role_field는 위에 제시된 7개 역할 코드만 사용 - "이름1", "제목1", "..." 같은 플레이스홀더를 절대 사용하지 마세요 - 모든 내용은 프로젝트 정보를 기반으로 구체적으로 작성 -- tasks는 반드시 구체적인 작업 내용을 포함 (최소 3-5개) +- tasks는 반드시 최소 100자 이상 작성하며 각 작업의 목적과 수행 방법을 포함 - 각 주차의 role_tasks는 team_composition의 모든 역할을 포함 + **모든 텍스트 필드(description, week_title, tasks, title 등)는 반드시 한글로 작성** + **role_field, role_field_display_name을 제외한 모든 값은 한글로 출력** -+ **텍스트 길이 제한: week_title 20자 이내, tasks 항목당 15자 이내, improvement_points description 50자 이내** ++ **텍스트 길이 제한: week_title 20자 이내, tasks 항목당 100자 이상 200자 이내, improvement_points description 100자 이상 200자 이내** **⚠️ weekly_roadmap 생성 필수 규칙 (매우 중요!):** 1. **weekly_roadmap 배열의 길이 = project_duration.total_weeks** (정확히 일치해야 함!) @@ -93,10 +92,9 @@ 5. **total_weeks가 8이라면 반드시 8개의 로드맵 객체를 생성하세요** **주차별 내용 구성 가이드**: -- **1-2주차**: 프로젝트 계획, 환경 설정, 초기 설계 -- **3-4주차**: 기본 기능 개발 시작 -- **중반부 (5주차~total_weeks-3주차)**: 핵심 기능 구현 및 고도화 -- **후반부 (마지막 3주차)**: 테스트, 버그 수정, 최적화, 배포 준비 -- **마지막 주차**: 최종 점검, 문서화, 출시 +- 프로젝트의 플랫폼, 핵심 기능, 팀 구성을 기반으로 각 주차 내용을 독자적으로 구성하세요. +- 단순히 개발 단계를 나누는 것이 아니라, 해당 프로젝트에서 실제로 필요한 작업 흐름을 반영하세요. +- 각 주차의 week_title은 그 주차에서 가장 중요한 산출물이나 목표를 기준으로 작성하세요. +- 역할별 tasks는 해당 주차의 목표에 맞는 구체적인 작업을 작성하세요. **검증 방법**: 응답 생성 후 `weekly_roadmap.length === project_duration.total_weeks` 인지 반드시 확인하세요! \ No newline at end of file diff --git a/nect-core/src/main/java/com/nect/core/entity/user/enums/RoleField.java b/nect-core/src/main/java/com/nect/core/entity/user/enums/RoleField.java index c6d480c..5a303f4 100644 --- a/nect-core/src/main/java/com/nect/core/entity/user/enums/RoleField.java +++ b/nect-core/src/main/java/com/nect/core/entity/user/enums/RoleField.java @@ -39,8 +39,8 @@ public enum RoleField { AD_VIRAL("광고/바이럴", "Ads/Viral", Role.MARKETER), LIVE_COMMERCE("라이브커머스", "Live Commerce", Role.MARKETER), DATA_ANALYSIS("데이터 분석", "Data Analysis", Role.MARKETER), -// MARKETING_OTHER("기타", "Other", Role.MARKETER), +// MARKETING_OTHER("기타", "Other", Role.MARKETER), OPERATIONS_CS("운영/CS", "Operations/CS", Role.OTHER), SALES_PARTNERSHIP("영업/제휴", "Sales/Partnership", Role.OTHER), VIDEO_MUSIC_DIRECTING("영상/음악 감독", "Video/Music Directing", Role.OTHER),