cirolini/genai-code-review

GitHub Action that reviews pull request diffs with an LLM and posts the comments on the PR

해결하는 문제

이 프로젝트는 대규모 언어 모델(LLM)을 사용하여 풀 리퀘스트의 차이점을 자동으로 검토하고 인라인 댓글을 게시하는 GitHub Action을 제공합니다. 특히 '리뷰 피로' 문제를 해결하기 위해 댓글 예산을 도입하여, 낮은 가치의 댓글이 많은 양으로 몰리지 않고, 가장 중요한 발견만 리뷰어에게 강조 표시되도록 합니다.

작동 방식

  1. 필터링: LLM에 데이터를 전송하기 전에 ignore_paths에 일치하는 파일(예: 잠금 파일 또는 생성된 코드)을 제거합니다.
  2. 증분 리뷰: 이후 푸시 시, 이전 리뷰 이후에 추가된 커밋만 분석합니다.
  3. 체크포인트 분할: 차이점을 모델의 컨텍스트 창에 맞게 청크로 나누며, 수용되지 않는 콘텐츠는 요약에 보고됩니다.
  4. 스키마 기반 분석: 모델은 JSON 스키마(중요도, 신뢰도, 근거 등)를 기반으로 발견 내용을 생성합니다. 출력이 검증에 실패하면 한 번의 복구 시도가 수행됩니다.
  5. 검증: 발견 내용이 차이점과 일치하는지 확인하고 GitHub에 올바르게 배치 가능한지 검증합니다. 유효하지 않은 배치는 요약으로 이동됩니다.
  6. 게시: max_comments 수만큼(중요도와 신뢰도 기준으로 순위 매김) 상위 발견 내용이 그룹화된 리뷰로 게시되며, 스티커 요약 댓글이 업데이트됩니다.

대상 사용자

GitHub를 사용하고 AI 지원 코드 리뷰를 원하며, OpenAI, Anthropic, Google Gemini 또는 Ollama, vLLM과 같은 자체 호스팅 OpenAI 호환 서버를 사용하는 개발자 및 팀에게 적합합니다.

주요 특징

  • 댓글 예산: 댓글 수를 제한하고 요약에 억제된 발견 내용을 명시함으로써 리뷰어의 피로를 방지합니다.
  • 광범위한 프로바이더 지원: Gemini, OpenAI, Anthropic 및 모든 OpenAI 호환 API를 지원합니다.
  • 보안 우선 설계: 프롬프트 인젝션을 방지하기 위해 센티넬을 사용하여 차이점을 신뢰할 수 없는 데이터로 취급하며, 포크 PR에서는 pull_request_target을 사용하지 않습니다.
  • 제로 디스크 프로필: actions/checkout를 필요로 하지 않고 API를 통해 풀 리퀘스트를 읽습니다.
  • 투명한 보고: 요약 댓글에서 리뷰되지 않은 내용(예: 자르기된 차이점 또는 무시된 파일)을 명시적으로 기재합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트