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

[BE] AI 코드 리뷰 시스템 구축 #15

Open
wants to merge 74 commits into
base: develop
Choose a base branch
from

Conversation

viaunixue
Copy link
Member

@viaunixue viaunixue commented Oct 4, 2024

💡 작업 내용

  • Llama3.2 3B 모델
  • Github Actions 워크플로우 파일 작성
  • AI 코드 리뷰 스크립트 작성
  • airllm 라이브러리를 통한 양자화로 모델 최적화 시도
  • Code Llama 7B 모델로 AI 모델 변경
  • 코드 리뷰 코멘트 등록 방식 결정
  • Groq API 통해 Llama 3.1 70B 모델 적용
  • 전체 리뷰 코멘트와 파일 별 리뷰 코멘트 등록 구현
  • 파일 별 리뷰 코멘트 중요 파일 선별 로직 추가
    • 파일 변경된 라인 수 100개 초과할 경우
    • 파일 변경 비율이 50% 초과할 경우
  • 삭제 파일도 전체 리뷰에 분석될 수 있도록 구현
  • 리뷰 제외 대상 파일 조건 추가
  • 파일 내 상세 코멘트 선별 로직 추가
    • 중요도에 따라 가중치 부여 3개 선별
  • 개별 코멘트 등록 비활성화
  • 전체 코드에서 가장 수정해야 될 부분만 개선 코드 제공
  • 코드 리뷰 프롬프트 개선

🫨 고민한 부분

  • ollama api를 통해 각자 로컬에서 해당 서비스 이용?
    → 간단한 초기 구현을 완료
  • 클라우드 서비스를 통한 고성능 AI 모델과 통신 가능한지?
    groq api를 통해 클라우드에서 Llama3.2 70B 모델과 api 통신 성공
  • 해당 PR에서 작업한 내용 병합? No. CI 테스트 커밋이 너무 많음
    PR은 닫지 않고 지속적으로 프롬프트 테스트하고 develop 브랜치에서 직접 push 예정

📌 중점적으로 볼 부분

CI 동작을 기반으로 지속해서 테스트 할 예정입니다.

  • PR 타이틀, 상세설명, 커밋 리스트도 모두 프롬프트에 반영되어 분석

    → 위 설정을 통해 해당 내용을 신경써서 상세하게 작성해주시면 리뷰 퀄리티가 좋아집니다!
    → 아직 테스트 해야하지만 PR 등록할 때 🙏리뷰 요구사항(선택) 이 부분 관련 해결책 우선순위 제공하도록 설정했습니다!
    → 코멘트 하나에는 한가지 개선점만 제공합니다! (추가 push마다 차례차례 제공되는 방식)

🎯 테스트 결과

Ollama API 호출 성공

image

Groq API 호출 성공

image

🎇 동작 화면

Llama 3.2 3B 모델

image

Code Llama 모델

image

Llama 3.1 8B 모델

image

Llama 3.2 70B 모델

image

📗 참고 자료 (선택)

🙏리뷰 요구사항(선택)

🚩 후속 작업 (선택)

✅ 셀프 체크리스트

  • PR 제목을 형식에 맞게 작성했나요?
  • 브랜치 전략에 맞는 브랜치에 PR을 올리고 있나요?
  • 이슈는 close 했나요?
  • Reviewers, Labels, Projects를 등록했나요?
  • 작업 도중 문서 수정이 필요한 경우 잘 수정했나요?
  • 테스트는 잘 통과했나요?
  • 불필요한 코드는 제거했나요?

💫 기타사항

closed #6

@viaunixue viaunixue added 👨🏻‍💻 backend 백엔드 작업 ⚙️ chore 세팅 관련 labels Oct 4, 2024
@viaunixue viaunixue requested a review from swwho96 October 4, 2024 17:42
@viaunixue viaunixue self-assigned this Oct 4, 2024
- 파일별 SHA 값에서 최신 커밋 SHA로 수정

close #6
scripts/review_prompt.py Outdated Show resolved Hide resolved

This comment was marked as off-topic.

@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 5, 2024

This comment was marked as off-topic.

@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
Copy link

github-actions bot commented Oct 8, 2024

🧑🏻‍💻 주요 기능

이 코드는 AI 코드 리뷰 시스템 구축을 위한 Python 스크립트입니다. 주요 기능으로는 다음과 같습니다.

  • PR 정보를 가져와서 리뷰 프롬프트를 생성합니다.
  • Groq API를 사용하여 전체 코드에 대한 리뷰를 수행하고, 중요 파일에 대한 상세 리뷰를 수행합니다.
  • 리뷰 결과를 PR에 코멘트로 게시합니다.

🔍 개선할 점

  1. 현재 코드
def get_pr_files(repo, pr_number, token):
    url = f"https://api.github.com/repos/{repo}/pulls/{pr_number}/files"
    headers = {
        "Authorization": f"Bearer {token}",
        "Accept": "application/vnd.github+json",
        "X-GitHub-Api-Version": "2022-11-28"
    }
    
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        return response.json()
    except requests.RequestException as e:
        logger.error(f"PR 파일 가져오기 오류: {str(e)}")
        return None
  1. 권장되는 변경
def get_pr_files(repo, pr_number, token):
    url = f"https://api.github.com/repos/{repo}/pulls/{pr_number}/files"
    headers = {
        "Authorization": f"Bearer {token}",
        "Accept": "application/vnd.github+json",
        "X-GitHub-Api-Version": "2022-11-28"
    }
    
    try:
        with requests.Session() as session:
            response = session.get(url, headers=headers)
            response.raise_for_status()
            return response.json()
    except requests.RequestException as e:
        logger.error(f"PR 파일 가져오기 오류: {str(e)}")
        return None
  1. 변경 이유

기존 코드는 requests 라이브러리를 사용하여 HTTP 요청을 수행합니다. 그러나 requests 라이브러리에는 Connection 수립에 시간이 걸리는 문제가 있습니다. 이를 해결하기 위해 requests.Session()을 사용하여 요청을 수행하면, Connection을 재사용할 수 있습니다. 따라서 성능이 향상됩니다.

📢 제안된 솔루션

기존 코드에서 requests.Session()을 사용하여 요청을 수행하도록 변경하면, 성능이 향상됩니다. 또한, try-except 블록을 사용하여 오류를 처리하면, 코드의 안정성이 향상됩니다.

@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@neonadeuli-project neonadeuli-project deleted a comment from github-actions bot Oct 8, 2024
@viaunixue viaunixue removed the 👨🏻‍💻 backend 백엔드 작업 label Oct 9, 2024
Copy link
Contributor

@Miaash Miaash left a comment

Choose a reason for hiding this comment

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

확인했습니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⚙️ chore 세팅 관련
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[CHORE] AI 코드 리뷰 시스템 구축
4 participants