합쳐진 문자열 맨 앞에 [c] 또는 [w]가 포함되어 있는지 판단하고, 태그 값에 따라 정답 여부 상태를 업데이트해주는 콜백을 실행합니다. 여기서 실행되는 콜백은 UseCase Parameter로 전달받으며, 위 코드에서 param.checkAnswer로 표기되어 있습니다.
또한 실시간 응답 단계에서 문자열을 포맷팅하는 로직이 필요합니다.
[c], [w] 태그를 제거하며 불필요한 줄바꿈이 있는 경우 또한 제거합니다.
포맷팅된 문자열 값을 streamedFeedbackResponse라는 Stream 변수에 더하여, 실시간으로 반환되는 Response를 StreamBuilder 위젯 내부에 전달할 수 있도록 합니다.
3. Stream Response가 종료된 이후
요청이 완료되면, 요청이 완료되었다는 상태를 업데이트해주어야 합니다.
onDone: () {
/// 응답이 종료된 이후
/// 1) Stream 닫기
/// 2) 응답 진행 상태 초기화
/// 3) 완료 콜백 메소드 실행
state = FeedbackProgress.init;
streamedFeedbackResponse.close().then(
(_) => param.onFeedBackCompleted(
formatResponse(streamedFeedbackResponse.value),
),
);
},
UseCase 내부에 응답 진행 상태를 나타내는 state 변수에 FeedbackProgress.init 값으로 초기화시켜주며, streamedFeedbackResponse Stream 변수를 close해줍니다. 이후 useCase Param으로 전달받은 param.onFeedBackCompleted 콜백을 실행시킵니다.
param.onFeedBackCompleted 콜백이 실행된 이후 다음 면접 질문을 제시하는 로직이 순차적으로 실행됩니다.
📄 기능 명세
[ ] 프롬프트 로직 설정
[ ] 역할 제시 (면접관과 지원자)
[ ] 유저를 지칭할 때 유저의 닉네임을 사용해야 함
[ ] 모범 답변을 참고하여 유저의 정답 여부를 판단
[ ] 응답 형태 설정: 정답일 경우 "[c]", 오답일 경우 "[w]" 태그를 응답 문장 맨 앞에 붙이도록 설정
[ ] 100글자 이내로 간략한 답변을 유도
[ ] Response에 "[c]" 또는 "[w]" 응답이 포함되지 않은 경우 오류가 발생. 적절한 예외처리 필요.
👷 작업자
@Yellowtoast, @Xim-ya
💬 기타
보시다시피 로직 및 단계가 복잡하고 개선이 필요한 부분이 많습니다. 작업을 진행하실 때 기존 로직들을 완전히 배제해주셔도 무방합니다.
🚀 기능
기존 생성형 AI 모델을 ChatGPT에서 Gemini로 변경하면서 프롬프트 로직을 고도화합니다. Gemini로 변경했을 때 기존 ChatGPT 모델을 적용했을 때와 동일한 수준의 답변 정확도가 나오는지 중점적으로 살펴볼 필요가 있습니다.
기존 논의사항 #105
📸 상세
채팅 면접 페이지에서는 아래와 같은 단계로 면접 프로세스가 진행됩니다:
SetAiFeedbackUseCase
해당 UseCase는 크게 3가지 단계로 나누어지며, Response의 타입은)
Stream<String>
입니다. (RxDart 사용 == BehaviorSubject1. Request 단계
2. Stream Response를 받는 단계
이렇게 내려온 문자열을 response 변수에 합친 뒤,
합쳐진 문자열 맨 앞에
[c]
또는[w]
가 포함되어 있는지 판단하고, 태그 값에 따라 정답 여부 상태를 업데이트해주는 콜백을 실행합니다. 여기서 실행되는 콜백은UseCase Parameter
로 전달받으며, 위 코드에서param.checkAnswer
로 표기되어 있습니다.포맷팅된 문자열 값을
streamedFeedbackResponse
라는 Stream 변수에 더하여, 실시간으로 반환되는 Response를StreamBuilder
위젯 내부에 전달할 수 있도록 합니다.3. Stream Response가 종료된 이후
요청이 완료되면, 요청이 완료되었다는 상태를 업데이트해주어야 합니다.
UseCase 내부에 응답 진행 상태를 나타내는
state
변수에FeedbackProgress.init
값으로 초기화시켜주며,streamedFeedbackResponse
Stream 변수를 close해줍니다. 이후 useCase Param으로 전달받은param.onFeedBackCompleted
콜백을 실행시킵니다.param.onFeedBackCompleted
콜백이 실행된 이후다음 면접 질문을 제시
하는 로직이 순차적으로 실행됩니다.📄 기능 명세
[ ] 프롬프트 로직 설정
[ ] Response에 "[c]" 또는 "[w]" 응답이 포함되지 않은 경우 오류가 발생. 적절한 예외처리 필요.
👷 작업자
@Yellowtoast, @Xim-ya
💬 기타
보시다시피 로직 및 단계가 복잡하고 개선이 필요한 부분이 많습니다. 작업을 진행하실 때 기존 로직들을 완전히 배제해주셔도 무방합니다.
영어로 프롬프트 로직을 설정하면 응답 정확도가 올라갈 수 있을 것 같습니다.
구글이 공식적으로 지원하는 https://pub.dev/packages/google_generative_ai 패키지를 활용하는 것을 권장드립니다.
퇴근하고 정신없이 이슈를 등록해서 내용이 장황합니다...ㅠ 사소한 부분이라도 이해가 안 가는 부분이 있으시면 바로 DM 주세요.