Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: gradeExam #144

Merged
merged 9 commits into from
Aug 2, 2024
Merged

Feat: gradeExam #144

merged 9 commits into from
Aug 2, 2024

Conversation

adorableco
Copy link
Contributor

@adorableco adorableco commented Aug 2, 2024

PR

✨ 작업 내용

  • 문제 풀이 제출 시 채점 결과를 응답으로 보내는 기능을 구현했습니다.
  • 주관식 문제인 경우 ChatGPT를 통해 유사도를 측정하여 정오답을 체크하는데 이는 단순하므로 gpt-4o-mini (하위 버전) 을 사용하는 것으로 결정했습니다.
    • 더 저렴할 것 같은 gpt-3.5-turbo 로 고려했는데 공식 문서에서 2024년 7월부로 터보 버전 대신 4o mini 버전을 권장한다고 합니다

<응답 바디 예시>

스크린샷 2024-08-02 오후 12 28 43

✨ 참고 사항

  • Answer 클래스의isMultipleAndCheckAnswer() 이 모냥이 조금 애매하네요.. 객관식인 경우 문자열 비교만 하면 되서 해당 메서드 내에서 채점까지 하고, 주관식인 경우에는 chatgpt 외부 의존성이 있어서 false 만 반환하고 AnswerService 에서 chatGPT 호출할 수 있도록 했습니다. -> 멘토님께 개선 방향을 여줘보려고 합니다!
  • api 전반의 sequence 는 1부터 하는걸로 변경했습니다 (기존에는 0 이상 정수) 확인 부탁드려요 @Goonco

⏰ 현재 버그

  • 프롬프트를 영어로 변환해보았는데 문제 변환 기능에서는 영어 프롬프트가 제대로 실행되는 듯한데, 채점 기능에서는 제가 보기에 유사하고, 또한 한글 프롬프트에서는 true라고 판단한 답변도 false 라고 답하는 경우가 잦아서 일단은 한글로 유지해두고 있습니다. (토큰 수가 많이 차이나서 이것도 언젠간 영어 프롬프트로 바꾸긴 해야할 듯 합니다)

<⚠️ 오류 예시 >
스크린샷 2024-08-02 오전 10 30 43

  • 해당 기능에서 쿼리 개수가 상당히 많습니다. (현재 11번 쿼리 요청)
    • 여기에는 exam 처럼 db에 새로 save되는 엔티티들이 save 전에 select 쿼리 요청을 추가로 해서 더 길어진 것 같습니다. 이유는 엔티티 생성 시에 id 필드에 UUID.random~ 으로 값을 채우면서 JPA에서 해당 엔티티를 isNew = false 로 인식해서 select로 확인을 거친다고 합니다.
    • 따라서 Exam 엔티티의 id를 시험삼아 @GeneratedValue(strategy = GenerationType.UUID) 로 생성 후에 id 값을 채우도록 했고 성공적으로 쿼리 개수를 줄일 수 있었습니다.
    • 다른 엔티티의 id 필드도 이렇게 전환하면 어떨까 제안합니다! (공식 문서에서도 id 는 nullable로 한다네요)
    • 이 때문에 @RinRinPARK 님이 작성하신 dto 일부분의 id 필드에 !! 을 추가했습니다!

✏ Git Close

part of swm-125
related to: #135
part of swm-125
related to: #135
part of swm-125
related to: #135
part of swm-125
related to: #135
part of swm-125
related to: #135
@adorableco adorableco added ✨ Feature 기능 개발 ✅ Test test 관련(storybook, jest...) 🔨 Refactor 코드 리팩토링 🫧 seyeon seyeon labels Aug 2, 2024
@adorableco adorableco requested review from Goonco and RinRinPARK August 2, 2024 03:35
@adorableco adorableco self-assigned this Aug 2, 2024
@adorableco adorableco linked an issue Aug 2, 2024 that may be closed by this pull request
3 tasks
Copy link

github-actions bot commented Aug 2, 2024

Unit Test Results

16 tests   16 ✔️  1s ⏱️
  6 suites    0 💤
  6 files      0

Results for commit fba06ba.

♻️ This comment has been updated with latest results.

@adorableco adorableco marked this pull request as draft August 2, 2024 03:37
@adorableco adorableco marked this pull request as ready for review August 2, 2024 04:01
Copy link
Contributor

@RinRinPARK RinRinPARK left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아따 복잡허네 간밤에 수고 좀 했겠구먼요 고생했씁니당

Comment on lines 98 to 106
val exam =
examRepository.save(
Exam
.createExam(
memberRepository.findById(memberId).getOrElse { throw NotFoundException(fieldName = "member") },
workbook,
examRepository.findMaxSequenceByWorkbookId(workbook) + 1,
),
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 time을 저장하는 로직이 빠진 것 같습니다
request로 time(문제풀이 소요 시간) 받고 같이 저장해줘야 할 듯 합니당

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그리고 만약 문제 정답을 입력하지 않았다면 request에

	[
		{
			"questionId" : "133222-f3443",
			"submittedAnswer" : "",
		}
	] 

이런식으로 빈 문자열을 보내줘야하는건가요?? 아니면 그냥 request에서 빼도 되는건가요?? 명세서에 관련 설명도 같이 있으면 좋을 것 같습니다!!
현재 그냥 후자(request에 안넣고 빼고) 보내면 request에 들어있는 문제들만 채점되어 저장하고 있어서 여쭤봅니당. 만약 후자가 맞는거라면 request에 없는 문제도 탐색해서 따로 isCorrect를 false로해서 저장해야 될 것 같은데 그러면 굳이 또 쿼리 발생하고 복잡하니 전자가 나은 것 같고,
전자를 의도로 개발하신 것 같은데 맞나 아닌가 몰겠어서 질문!!!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앗 api docs 업데이트를 안해뒀네요!!

빈 답안인 경우 submittedAnswer : null처럼 보내면 됩니다

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

헉 time 추가하겠슴둥

@adorableco adorableco requested a review from RinRinPARK August 2, 2024 05:29
Copy link
Contributor

@RinRinPARK RinRinPARK left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

따봉~

@adorableco adorableco merged commit f52621a into develop Aug 2, 2024
2 checks passed
@adorableco adorableco deleted the seyeon/swm-125 branch August 2, 2024 05:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발 🔨 Refactor 코드 리팩토링 🫧 seyeon seyeon ✅ Test test 관련(storybook, jest...)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

✨ Feat: gradeExam
2 participants