2편 출력된 코드 parsing하기
2편은 chatgpt에서 응답해준 response를 가지고 parse를 해볼까 한다.
나는 응답값을 받고 -> parse해서 원하는 값만 뽑은다음 -> DB에 저장하는 과정을 거칠것이다.
1. 응답값 확인
우선 위처럼 객체 안에 role, content라는 키로 받았다.
그럼 나는 이제 저기서 탄수화물 30g, 단백질 15g 이런 값들을 가져다가 써야한다.
2. parse 하기
export interface NutritionInfo {
carbohydrate: string;
protein: string;
lipid: string;
calorie: string;
}
export const parseGPTSentence = async (openAIResponse: GptResponse): Promise<NutritionInfo> => {
const message = openAIResponse;
console.log('message:', message);
if (message.role === 'assistant') {
const content = message.content;
const patternCarbohydrate = /\s*탄수화물:\s*(?:약|대략)?\s*(\d+)(?:-*(\d*))?g/;
const proteinPattern = /\s*단백질:\s*(?:약|대략)?\s*(\d+)(?:-*(\d*))?g/;
const lipidPattern = /\s*지방:\s*(?:약|대략)?\s*(\d+)(?:-*(\d*))?g/;
const caloriePattern = /\s*칼로리:\s*(?:약|대략)?\s*(\d+)(?:-*(\d*))?kcal/;
// 캡처 그룹을 사용하여 2개 중 작은 숫자만 추출하던가 1개만 있으면 그걸 추출
const extractNumber = (match: RegExpMatchArray) => (match ? match[1] : 0);
const carbohydrate = extractNumber(content.match(patternCarbohydrate));
const protein = extractNumber(content.match(proteinPattern));
const lipid = extractNumber(content.match(lipidPattern));
const calorie = extractNumber(content.match(caloriePattern));
return {
carbohydrate: String(carbohydrate),
protein: String(protein),
lipid: String(lipid),
calorie: String(calorie),
};
} else {
throw new ErrorResponse(ERROR_CODE.INVAILD_GPT_PARSE);
}
};
위 처럼 코드를 작성했다.
const patternCarbohydrate = /\s*탄수화물:\s*(?:약|대략)?\s*(\d+)(?:-*(\d*))?g/;
위처럼 작성한 이유는 문장이 다양하게 리턴되기 때문이었다.
- 약
- 대략
- 약 or 대략이라는 말이 없음
- 30g
- 30-40g
위처럼 다양하게 문장이 받아졌고, 그때마다 특징이 있어서 위처럼 정규표현식을 작성했다.
3. 데이터베이스 저장 확인
위처럼 정상적으로 parse되어서 db에 저장이 되었다.
후기
chatgpt 응답값이 다양한 문장으로 구성되서 오기 때문에 다양한 테스트를 거치는 과정이 필요할 것 같다.
또한 chatgpt로부터 api 요청 후 응답받는데 까지 5초 이상 걸리는 점이 보였다.
이를 개선시킬 수 있는 방법이 무엇이 있을 지 생각해봐야할 것 같다.
'JaveScript > ExpressJS' 카테고리의 다른 글
if-else => switch-case 리팩토링 (0) | 2024.03.25 |
---|---|
Redis로 Refresh Token 관리 (1) | 2024.01.15 |
ExpressJS와 ChatGPT 연동 (1) (2) | 2023.12.18 |
닉네임 랜덤 제너레이터 (0) | 2023.12.17 |
dayjs 사용해서 나이 계산하기 (0) | 2023.12.14 |