[DEV-188/BE] feat: llm 요청에 대한 인터페이스 설계 및 구현#378
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Summary of ChangesHello @zxc534, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 PR은 Gemini LLM과의 인터페이스를 확장하고 개선합니다. 주요 변경 사항은 Gemini 텍스트 생성 모델 엔드포인트를 Enum으로 관리하여 유연성을 높이고, 텍스트 임베딩 기능을 새롭게 도입하여 다양한 임베딩 옵션을 지원하는 것입니다. 또한, 임베딩 기능의 테스트를 위한 임시 API를 추가하여 개발 및 검증을 용이하게 합니다. Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
안녕하세요. LLM 요청 인터페이스 설계 및 구현에 대한 PR 잘 보았습니다.
Gemini 텍스트 생성 및 임베딩 요청을 위한 인터페이스를 추가하고, 모델 엔드포인트를 Enum으로 분리하여 확장성을 높인 점이 인상적입니다.
몇 가지 개선점을 제안드립니다.
- 테스트용 임베딩 API의 요청 방식을 DTO를 사용하도록 변경하여 API 명세를 더 명확하게 하는 것을 제안합니다.
- 임베딩 결과 로그가 누락된 부분을 수정하고, LLM 응답에서 JSON을 파싱하는 로직을 더 안정적으로 개선할 수 있습니다.
- PR 설명에서 질문주신 임베딩 엔드포인트 관리에 대해,
GenerateModel과 같이Enum으로 관리하여 일관성과 확장성을 높이는 방안을 제안합니다.
자세한 내용은 각 파일의 코드 리뷰 코멘트를 참고해주세요.
backend/src/main/java/com/shyashyashya/refit/domain/qnaset/api/QnaSetController.java
Outdated
Show resolved
Hide resolved
...end/src/main/java/com/shyashyashya/refit/domain/qnaset/service/StarAnalysisAsyncService.java
Outdated
Show resolved
Hide resolved
...end/src/main/java/com/shyashyashya/refit/domain/qnaset/service/StarAnalysisAsyncService.java
Show resolved
Hide resolved
backend/src/main/java/com/shyashyashya/refit/global/gemini/GeminiClient.java
Show resolved
Hide resolved
backend/src/main/java/com/shyashyashya/refit/domain/qnaset/api/QnaSetController.java
Outdated
Show resolved
Hide resolved
...end/src/main/java/com/shyashyashya/refit/domain/qnaset/service/StarAnalysisAsyncService.java
Outdated
Show resolved
Hide resolved
...end/src/main/java/com/shyashyashya/refit/domain/qnaset/service/StarAnalysisAsyncService.java
Outdated
Show resolved
Hide resolved
| if (text.startsWith("```json\n")) { | ||
| text = text.substring("```json\n".length()); | ||
| } | ||
| if (text.endsWith("```")) { | ||
| text = text.substring(0, text.length() - "```".length()); | ||
| } |
There was a problem hiding this comment.
혹시 이 파트가 전에 말씀하셨던 모델별 응답 형식의 차이? 와 관련된 로직일까요? 아니면 테스트 용으로 로직을 작성하는 과정에서 필요하여 작성된 로직일까요?
There was a problem hiding this comment.
특정 모델이 응답에 ```json ```을 붙이는 것을 해결하기 위한 로직입니다!
backend/src/main/java/com/shyashyashya/refit/global/exception/ErrorCode.java
Outdated
Show resolved
Hide resolved
backend/src/main/java/com/shyashyashya/refit/global/gemini/GeminiEmbeddingRequest.java
Outdated
Show resolved
Hide resolved
lja3723
left a comment
There was a problem hiding this comment.
좋습니다. 몇가지 사소한 코멘트 남겼습니다!
backend/src/main/java/com/shyashyashya/refit/global/gemini/GenerateModel.java
Outdated
Show resolved
Hide resolved
* feat: 나의 최근 한달동안 기록전 면접 조회 * test: 나의 최근 한 달 기록전 면접 리스트 조회 테스트 작성 * [DEV-234] feat: 데스크탑 record 페이지 개발 (#360) * feat: LiveAudioVisualizer 데스크탑, 모바일로 분리 * feat: 복기 대기 중인 면접 mock API 연동 * feat: /record 페이지 추가 * feat: 로딩 오버레이 추가 * refactor: query 사용하게 변경 * [DEV-220/FE] feat: 자소서 연동 mock-api 연결 (#356) * fix: 하이라이팅 API 응답에 맞추어 pageNumber로 변수명 통일 * feat: 자기소개서 연결된 텍스트 실시간으로 보이도록 UI 변경 및 버튼 파일 분리 * feat: useSuspenseQueries 사용하여 질답별 하이라이트 조회 API 연결 및 하이라이트 생성, 수정 API 연결 * feat: 뒤로 가기 버튼 추가 * feat: 질답 조회 API 연결 및 fallback skeleton 처리 추가 * feat: 하이라이팅 관련 mock handler 추가 * fix: 하이라이팅 API 응답에 맞추어 pageNumber로 변수명 통일 * fix: minimized sidebar skeleton 추가 * fix: qnaSetId null filter 추가 Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * [DEV-221/FE] feat: 스크랩 모달 UI 구현 및 회고 작성 페이지 일부 mock-api 연결 (#359) * feat: 회고 페이지 mock-api 등록 * feat: 질답 리스트 조회 API 연결 * feat: 스크랩 모달 구현 및 스크랩 폴더 목록 조회 API 연결 * fix: 모달 사이즈에 따라 title mb 스타일 수정 * feat: 회고 저장 useUpdateQnaSet API 연동 및 스크랩 아이콘 추가 * feat: 사이드바에서 번호 변경 시, 회고 저장되도록 추가 예정 * fix: Number(interviewId) 변수화 * fix: 초기 페이지 0으로 변경 * fix: import 에러 수정 * feat: 프론트 요청에 따라 dto 응답에 review status 를 응답하도록 추가 (#367) * [DEV-257/BE] docs: 모든 API 응답의 필수 필드에 @NotNull 어노테이션 추가 (#376) * docs: 프론트 요청에 따라 response 필드 중 not null 필드에 @NotNull 어노테이션 추가 * feat: user profile image url 필드에 not null 제약 추가 및 @NotNull 어노테이션 추가 * [DEV-258/FE] fix: 스크롤 폴더 이름 입력 안되는 이슈 수정 (#374) * fix: prevIsOpen 제거하고 key 기반 리마운트로 초기화 처리 * fix: 다른 폴더 선택 뿐만 아니라 열기/닫기(activeModal 상태 변경) 시에도 key 바뀌도록 수정 * [DEV-261/BE] refactor: Swagger의 Pageable 객체 렌더링 개선 (#382) * [DEV-263/BE] feat: 사용자 조회 API 응답에 동의 여부 필드 추가 (#386) * [DEV-176/BE] test: QnaSetController 테스트 작성 (#369) * feat: QnaSetIntegrationTest 생성 * test: 질답_세트_생성에_성공한다 작성 * feat: 질답 세트 생성 시 interview가 qnaSetDraft 상태인지 검증 로직 추가 * test: 인터뷰 상태에 검증 추가로 테스트 로직 수정 * chore: 프롬프트 파일 삭제 * test: 어려웠던 질문 마킹 등록/해제 테스트 작성 * feat: 인터뷰 상태 검증 로직 추가 * test: 질답 세트 수정 테스트 작성 * test: 면접 생성을 메소드 사용하여 간소화 * test: 질답 세트 수정 테스트 추가 * test: 질문 답변 세트 삭제 테스트 작성 * docs: 하이라이팅 등록/수정 API swagger 작성 * feat: PDF 하이라이팅 업데이트 시 면접 상태 검증 로직 추가 * test: PDF 하이라이팅 등록 테스트 작성 * test: createAndSavePdfHighlighting 메소드 구현 * test: PDF 하이라이팅 조회 테스트 작성 * chore: spotless 적용 * test: 실제 값 검증 로직을 추가 * fix: unmark 메소드가 값을 false로 설정하도록 수정 * chore: 잘못된 테스트 이름 수정 * [DEV-256/BE] test: QnaSetMyController 테스트 작성 (#371) * feat: QnaSetIntegrationTest 생성 * test: 질답_세트_생성에_성공한다 작성 * feat: 질답 세트 생성 시 interview가 qnaSetDraft 상태인지 검증 로직 추가 * test: 인터뷰 상태에 검증 추가로 테스트 로직 수정 * chore: 프롬프트 파일 삭제 * test: 어려웠던 질문 마킹 등록/해제 테스트 작성 * feat: 인터뷰 상태 검증 로직 추가 * test: 질답 세트 수정 테스트 작성 * test: 면접 생성을 메소드 사용하여 간소화 * test: 질답 세트 수정 테스트 추가 * test: 질문 답변 세트 삭제 테스트 작성 * docs: 하이라이팅 등록/수정 API swagger 작성 * feat: PDF 하이라이팅 업데이트 시 면접 상태 검증 로직 추가 * test: PDF 하이라이팅 등록 테스트 작성 * test: createAndSavePdfHighlighting 메소드 구현 * test: PDF 하이라이팅 조회 테스트 작성 * chore: spotless 적용 * test: 실제 값 검증 로직을 추가 * fix: unmark 메소드가 값을 false로 설정하도록 수정 * chore: 잘못된 테스트 이름 수정 * test: qnaSetCategory 테스트 데이터 추가 * test: qnaSetMy 통합 테스트 작성 * refactor: 테스트 코드의 공통 부분을 외부 클래스의 BeforeEach로 분리 * chore: QnaSetDraft->질답 세트 검토 중, 명칭 변경 * chore: 테스트 코드 들여쓰기 수정 * chore: 일회성 변수 타입을 var로 수정 * test: 테스트에 업데이트된 값 검증 추가 * test: 질답 세트 수정 테스트 ParameterizedTest+EnumSource로 케이스 추가 * test: 테스트 케이스 추가 * chore: given/when/then 주석 추가 * chore: spoless 적용 * [DEV-188/BE] feat: llm 요청에 대한 인터페이스 설계 및 구현 (#378) * refactor: 요청 URL을 Enum으로 분리 * feat: Gemini 생성 결과에 JSON 이외 텍스트 처리 로직 추가 * chore: gemini 요청 모델을 gemma 3 27B로 변경 * chore: spotless 적용 * feat: Embedding 요청 응답 dto 작성 * feat: 임베딩 요청 메소드 추가 * feat: 임베딩 요청 임시 API 추가 * chore: 불필요한 로그 제거 * chore: 메소드 명칭 수정 * chore: 에러 코드에서 의미가 명확하게 드러나도록 수정 * chore: 정적 팩토리 메소드 네이밍 수정 * chore: GenerateModel 필드명 변경 id->name * refactor: 테스트 메소드의 계층 분리 제거 * refactor: 임베딩 테스트 메소드를 테스트 컨트롤러로 이동 * chore: spotless 적용 * refactor: 최근 한달의 정의를 30일에서 실제 월 별 1달로 수정 * feat: 나의 최근 한달동안 기록전 면접 조회 # Conflicts: # backend/src/main/java/com/shyashyashya/refit/domain/interview/dto/InterviewSimpleDto.java * test: 나의 최근 한 달 기록전 면접 리스트 조회 테스트 작성 * refactor: 최근 한달의 정의를 30일에서 실제 월 별 1달로 수정 --------- Co-authored-by: forhyundaisofteer <[email protected]> Co-authored-by: Joohee Hwang <[email protected]> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Jangan Lee <[email protected]> Co-authored-by: Yeong-beom Song <[email protected]>
관련 이슈
close #262
작업한 내용
PR 리뷰시 참고할 사항