Skip to content

Commit

Permalink
Merge pull request #161 from SSU-Plector/issue/158-fix-designer-AI
Browse files Browse the repository at this point in the history
[Chore] 브랜딩 AI 팀원 정확도 향상
  • Loading branch information
Ares-10 authored Aug 7, 2024
2 parents e5512e6 + 569de0d commit b23df2e
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 37 deletions.
10 changes: 8 additions & 2 deletions src/main/java/ssuPlector/ai/openAI/dto/ChatGptRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,14 @@ public ChatGptCommentRequest(String model, String prompt) {
@AllArgsConstructor
@NoArgsConstructor
public static class ChatGptImageRequest {
private String model = "dall-e-3";
private String prompt;
private int n;
private String size;
private String size = "1024x1024";
private String quality = "standard";
private int n = 1;

public ChatGptImageRequest(String prompt) {
this.prompt = prompt;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ public interface ChatGptService {
String standardChat(String query, String model);

String makeImage(String query);

String branding(String projectInfo);
}
99 changes: 92 additions & 7 deletions src/main/java/ssuPlector/ai/openAI/service/ChatGptServiceImpl.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package ssuPlector.ai.openAI.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
Expand All @@ -9,6 +12,7 @@
import ssuPlector.ai.openAI.dto.ChatGptRequest.ChatGptImageRequest;
import ssuPlector.ai.openAI.dto.ChatGptResponse.ChatGptCommentResponse;
import ssuPlector.ai.openAI.dto.ChatGptResponse.ChatGptImageResponse;
import ssuPlector.ai.openAI.dto.Message;
import ssuPlector.global.exception.GlobalException;
import ssuPlector.global.response.code.GlobalErrorCode;

Expand All @@ -33,7 +37,7 @@ public String standardChat(String query) {
@Override
public String standardChat(String query, String model) {
ChatGptCommentRequest request = new ChatGptCommentRequest(model, query);
ChatGptCommentResponse response = null;
ChatGptCommentResponse response;
try {
response = restTemplate.postForObject(apiUrl, request, ChatGptCommentResponse.class);
} catch (Exception e) {
Expand All @@ -43,15 +47,96 @@ public String standardChat(String query, String model) {
}

@Override
public String makeImage(String query) {
ChatGptImageRequest request = new ChatGptImageRequest(query, 1, "256x256");
ChatGptImageResponse response = null;
public String makeImage(String imageInfo) {
List<Message> messages = new ArrayList<>();
messages.add(
new Message(
"system",
"너는 이미지 생성을 위한 프롬프트 생성 어시스턴트야. 응답으로 오로지 프롬프트만 생성해줘"
+ "너가 생성해야 할 프롬프트의 종류는 2가지야. <로고(아이콘), 마스코드(케릭터)>. "
+ "다음과 같은 형식으로 프롬프트를 만들어줘. 주어진 형식의 대괄호는 너가 선택 또는 수정 가능한 부분이야. "
+ "\n'로고(아이콘)' 프롬프트 형식.\n"
+ "1. 참조 아이콘 스타일: 해당 분야와 관련된 앱스토어 인기순위 상위 100개 기업의 로고를 참조\n"
+ "2. 아이콘 설명:\n"
+ " - 설명: [설명]\n"
+ " - 모양: 테두리가 둥근 정사각형\n"
+ " - 색깔: [설명]\n"
+ "3. 배경\n"
+ " - 설명: 아무것도 없는 흰색 바탕\n"
+ "4. 이미지 차원\n"
+ " - 차원: [2D/3D]\n"
+ "\n'마스코드(케릭터)' 프롬프트 형식\n"
+ "1. 참조 애니메이션 스타일: 동종 업계의 상위 100개 기업의 마스코트를 참조\n"
+ "2. 참조 형태:\n"
+ " - 종류: [인간/동물/식물/로봇/사물]\n"
+ "3. 등장인물 숫자, 성별, 외형 설명:\n"
+ " - 숫자: 1\n"
+ " - 성별: [없음/남자/여자]\n"
+ " - 나이대: 20대\n"
+ " - 성격: [설명]\n"
+ " - 외형\n"
+ " - 헤어스타일: [설명]\n"
+ " - 눈 색깔: [설명]\n"
+ " - 체형: [설명]\n"
+ " - 피부 톤: [설명]\n"
+ "4. 옷차림 설명:\n"
+ " - 상의: [설명]\n"
+ " - 하의: [설명]\n"
+ " - 신발: [설명]\n"
+ "5. 배경\n"
+ " - 설명: 아무것도 없이 깨끗함\n"
+ " - 색깔: 하얀색"
+ "6. 이미지 차원\n"
+ " - 차원: [2D/3D]\n"));
messages.add(new Message("user", imageInfo));

String imageGenerateQuery;
try {
ChatGptCommentRequest request = new ChatGptCommentRequest("gpt-4o", messages);
ChatGptCommentResponse response =
restTemplate.postForObject(apiUrl, request, ChatGptCommentResponse.class);
imageGenerateQuery = response.getChoices().get(0).getMessage().getContent();
} catch (Exception e) {
throw new GlobalException(GlobalErrorCode._INTERNAL_SERVER_ERROR);
}

try {
ChatGptImageRequest request = new ChatGptImageRequest(imageGenerateQuery);
ChatGptImageResponse response =
restTemplate.postForObject(imageUrl, request, ChatGptImageResponse.class);
return response.getData().get(0).getUrl();
} catch (Exception e) {
throw new GlobalException(GlobalErrorCode._INTERNAL_SERVER_ERROR);
}
}

@Override
public String branding(String projectInfo) {
List<Message> messages = new ArrayList<>();
messages.add(
new Message(
"system",
"You are an assistant who creates (recommends) branding in a specific format. "
+ "You take input from ideas, topics, descriptions, etc. "
+ "The format of the branding you write looks like this: \n"
+ "<기본 요소>\n"
+ "1. 색상: [색상]\n"
+ "2. 폰트: [폰트]\n"
+ "3. 텍스처: [텍스처]\n"
+ "4. 슬로건: [슬로건]\n"
+ "<핵심 전략>\n"
+ "1. 대상 고객 이해하기: [맞춤 설명]\n"
+ "2. 앱 브랜딩을 위한 브랜드 아이덴티티 정의하기: [맞춤 설명]\n"
+ "3. 포괄적인 마케팅 계획 세우기: [맞춤 설명]\n"
+ "4. 사용자 경험에 집중하기: [맞춤 설명]"));
messages.add(new Message("user", projectInfo));
ChatGptCommentRequest request = new ChatGptCommentRequest("gpt-4o", messages);
ChatGptCommentResponse response;
try {
response = restTemplate.postForObject(imageUrl, request, ChatGptImageResponse.class);
response = restTemplate.postForObject(apiUrl, request, ChatGptCommentResponse.class);
} catch (Exception e) {
e.printStackTrace();
throw new GlobalException(GlobalErrorCode._INTERNAL_SERVER_ERROR);
}
return response.getData().get(0).getUrl();
return response.getChoices().get(0).getMessage().getContent();
}
}
30 changes: 2 additions & 28 deletions src/main/java/ssuPlector/service/designer/DesignerServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,11 @@ public class DesignerServiceImpl implements DesignerService {

@Override
public String branding(String projectInfo) {
projectInfo =
"브랜드나 아이디어, 프로젝트의 주제 설명 등을 입력할게. 브랜딩을 형식에 맞춰서 구체적으로 작성(추천)해줘.\n"
+ "다음은 형식이야\n"
+ "<기본 요소>\n"
+ "1. 색상: [색상]\n"
+ "2. 폰트: [폰트]\n"
+ "3. 사운드: [사운드]\n"
+ "4. 텍스처: [텍스처]\n"
+ "5. 슬로건: [슬로건]\n"
+ "<핵심 전략>\n"
+ "1. 대상 고객 이해하기: [맞춤 설명]\n"
+ "2. 앱 브랜딩을 위한 브랜드 아이덴티티 정의하기: [맞춤 설명]\n"
+ "3. 브랜드 보이스 구축하기: [맞춤 설명]\n"
+ "4. 포괄적인 마케팅 계획 세우기: [맞춤 설명]\n"
+ "5. 사용자 경험에 집중하기: [맞춤 설명]\n"
+ "지금부터 브랜드나 아이디어, 프로젝트의 주제 설명 등을 입력할게.\n"
+ projectInfo;
return chatGptService.standardChat(projectInfo);
return chatGptService.branding(projectInfo);
}

@Override
public String makeImage(String imageInfo) {
imageInfo =
"We're going to use open ai's image generation API, "
+ "so we need to create a prompt in English to generate an image based on the text we enter. "
+ "The input might look like this: "
+ "<"
+ imageInfo
+ ">. "
+ "Only give me the prompt.";
String imageGenerateQuery = chatGptService.standardChat(imageInfo, "gpt-4o");
return chatGptService.makeImage(imageGenerateQuery);
return chatGptService.makeImage(imageInfo);
}
}

0 comments on commit b23df2e

Please sign in to comment.