-
Notifications
You must be signed in to change notification settings - Fork 0
Repository Config
리포지토리 루트에 설정 파일을 두면 리뷰 방식을 팀에 맞게 바꿀 수 있다. 파일이 없어도 봇은 기본값으로 돈다 — 필요할 때만 만들면 된다.
상황별로 무엇을 만지면 되는지는 리뷰 강도 조정에 정리해뒀다. 이 페이지는 항목 전체를 다루는 레퍼런스다.
아래 네 곳을 순서대로 찾아 먼저 발견된 하나만 쓴다. 여러 개를 두면 뒤의 것은 무시된다.
.reviewbot/config.yml.reviewbot/config.yaml.reviewbot.yml.reviewbot.yaml
다음 리뷰부터 바로. 봇은 리뷰할 때마다 그 PR의 최신 커밋에서 설정을 읽는다. 기본 브랜치를 보지 않으므로, 설정을 고친 PR은 그 PR부터 새 설정으로 리뷰된다.
설정을 바꾸고 확인하는 가장 빠른 방법:
- 브랜치에서
.reviewbot/config.yml을 고쳐 PR을 연다 - 그 PR에
/review를 단다 - 결과를 보고 값을 조정한다 → 커밋을 밀면 자동으로 다시 리뷰가 돈다
model: darwin-35b-q4_k_m.gguf
language: ko
temperature: 0.2
maxOutputTokens: 16384
maxFiles: 40
maxFileChars: 24000
maxPromptChars: 140000
exclude:
- '**/*.generated.ts'
- 'docs/**'
autoReview: true
minSeverity: minor
minConfidence: 0.5
maxInlineComments: 25
triggerPrefix: '/review'
customInstructions: |
- 이 리포지토리는 TypeScript strict 모드다. any 사용을 지적하라.
- 외부 API 호출에는 반드시 타임아웃과 재시도가 있어야 한다.전부 적을 필요는 없다. 적은 항목만 바뀌고 나머지는 기본값이다.
| 항목 | 타입 | 기본값 | 자주 만지나 |
|---|---|---|---|
minSeverity |
열거형 | minor |
✅ |
minConfidence |
숫자 | 0.5 |
✅ |
maxInlineComments |
숫자 | 25 |
✅ |
exclude |
문자열 배열 | 아래 참고 | ✅ |
include |
문자열 배열 |
[] (제한 없음) |
|
customInstructions |
문자열 | '' |
✅ |
autoReview |
불리언 | true |
|
triggerPrefix |
문자열 | /review |
|
language |
문자열 | ko |
|
maxFiles |
숫자 | 40 |
|
maxFileChars |
숫자 | 24000 |
|
maxPromptChars |
숫자 | 140000 |
|
maxOutputTokens |
숫자 | 16384 |
|
temperature |
숫자 | 0.2 |
|
model |
문자열 | darwin-35b-q4_k_m.gguf |
|
baseUrl |
문자열 | 관리자 설정 |
이 심각도 미만은 코멘트하지 않는다. 기본 minor.
높은 순서로 critical → major → minor → nit 이다.
| 값 | 통과하는 지적 |
|---|---|
critical |
critical만 |
major |
critical, major |
minor |
critical, major, minor (기본값 — nit 만 버린다) |
nit |
전부 |
모델이 함께 보고한 확신도(0~1)가 이 값 미만이면 버린다. 기본 0.5.
모델에게도 "0.5 미만이면 보고하지 말라"고 지시돼 있어서 기본값에서는
사실상 모델의 판단을 그대로 받는다. 오탐이 많다고 느끼면 0.7 쯤으로 올린다.
확신도 0.7 미만인 지적에는 코멘트 아래에 확신도 N% — 오탐일 수 있다. 가 붙는다.
이 문구는 설정으로 끌 수 없다.
인라인으로 다는 코멘트의 최대 개수. 기본 25.
심각도 순, 같은 심각도면 확신도 높은 순으로 정렬한 뒤 앞에서 이만큼만 인라인으로 달고, 넘친 지적은 버리지 않고 요약 코멘트의 접기 블록에 목록으로 실린다.
프롬프트 끝에 ## 리포지토리 추가 지침 으로 덧붙는 자유 서술이다.
팀 규약을 알려줄 때 쓴다.
customInstructions: |
- 이 리포지토리는 TypeScript strict 모드다. any 사용을 지적하라.
- 외부 API 호출에는 반드시 타임아웃과 재시도가 있어야 한다.
- 사용자 입력을 그대로 로그에 남기는 코드는 보안 이슈로 취급하라.- 명령형으로 짧게 쓰는 편이 잘 먹는다
- 길게 쓰면 그만큼 diff에 쓸 예산이 줄어든다
-
.gemini/styleguide.md를 쓰고 있었다면 그 내용을 여기로 옮기면 된다
잘 쓰는 법은 리뷰 강도 조정에 있다.
둘 다 glob 패턴 배열이다. 경로는 리포지토리 루트 기준이고,
. 로 시작하는 숨김 파일에도 매칭된다.
둘의 동작이 다르다.
| 동작 | |
|---|---|
exclude |
적은 패턴이 기본 목록에 추가된다 |
include |
적으면 기본값([])을 대체한다
|
include 를 적으면 거기에 매칭되는 파일만 리뷰한다. 비워두면 제한이 없다.
둘 다 있으면 include 를 통과한 뒤 exclude 에 걸리는 파일이 빠진다 — exclude 가 이긴다.
include:
- 'src/**' # src 아래만 리뷰한다
exclude:
- 'src/generated/**' # 단, 이건 빼고기본 exclude 목록은 아래와 같다. 여기 있는 항목은 다시 적을 필요가 없고, 없앨 수도 없다.
**/node_modules/** **/dist/** **/build/** **/out/** **/.next/**
**/coverage/** **/vendor/** **/*.min.js **/*.map **/*.snap
**/*.lock **/package-lock.json **/pnpm-lock.yaml **/yarn.lock
**/*.png **/*.jpg **/*.jpeg **/*.gif **/*.svg **/*.ico
**/*.pdf **/*.woff*
패턴과 무관하게 바이너리 파일과 삭제된 파일은 항상 제외된다. 삭제된 파일에는 코멘트를 달 수 없기 때문이다.
리뷰할 최대 파일 수. 기본 40.
제외 규칙을 통과한 파일을 변경량이 큰 순서로 정렬한 뒤 앞에서 이만큼만 가져간다.
예산이 모자랄 때 사소한 파일이 먼저 잘려나가게 하려는 것이다.
잘린 파일 수는 리뷰 요약 하단에 (N개 제외) 로 표시된다.
파일 하나의 diff를 프롬프트에 넣을 때의 최대 문자 수. 기본 24000.
이걸 넘는 파일은 뒤가 잘린 채로 들어간다. 큰 파일의 뒷부분이 리뷰되지 않는다면 이 값을 올린다.
한 번의 모델 호출에 실어보낼 최대 문자 수. 기본 140000 (코드 기준 대략 4만 토큰).
이 값은 두 군데에 쓰인다.
- 청크 분할 기준: diff가 이 값의 절반을 넘으면 파일 단위로 쪼개 여러 번 호출한다. 청크가 2개면 리뷰 시간도 토큰도 대략 2배다
- 최종 절단: 한 호출의 diff 부분은 이 값의 85% 지점에서 잘린다
리뷰가 자주 실패한다면 이 값을 줄이는 쪽이 맞다.
PR이 열리거나 커밋이 밀렸을 때 자동으로 리뷰할지. 기본 true.
false 로 두면 /review 로 부를 때만 리뷰한다.
자동 리뷰가 도는 정확한 조건은 쓰는 법에 있다.
리뷰를 부르는 코멘트 명령. 기본 /review.
triggerPrefix: '/리뷰'
/로 시작하는 값만 쓸 수 있다. 봇은/로 시작하지 않는 코멘트를 먼저 걸러내므로,!review나review로 바꾸면 아무 반응도 없는 상태가 된다.
바꾸면 팀 전체가 새 명령을 써야 한다. 특별한 이유가 없으면 기본값을 두는 편이 낫다.
이 아래는 보통 건드리지 않는다.
리뷰 코멘트의 언어. 기본 ko.
모델에게 "이 언어로 써라"라고 지시하는 값이라, ko · en · ja · zh 는 각각
한국어 · English · 日本語 · 中文으로 풀어 전달하고, 그 외 값은 적은 문자열 그대로 들어간다
(Português 같이 적어도 통한다).
코드 · 식별자 · 에러 메시지는 언어 설정과 무관하게 원문 그대로 유지된다.
기본 0.2. 리뷰는 창의성보다 일관성이 중요해서 낮게 잡아뒀다. 올릴 이유는 거의 없다.
모델이 한 번에 뱉을 수 있는 토큰 수. 기본 16384.
이 모델은 추론을 끌 수 없고, 그 추론 토큰도 이 예산을 함께 쓴다. 부족하면 응답이 JSON을 다 못 쓰고 잘려 리뷰가 실패한다. 줄이는 건 권하지 않는다.
호출할 모델과 엔드포인트다. 서버 관리자 영역이라 리포지토리에서 바꿀 일이 없다. 잘못 적으면 리뷰가 통째로 실패하므로 그냥 두는 편이 좋다.
설정 파일은 틀려도 리뷰를 멈추지 않는다. 잘못된 부분만 조용히 무시되므로, 바꾼 값이 안 먹는 것 같으면 이 표를 먼저 본다.
| 상황 | 결과 |
|---|---|
| YAML 문법 오류 | 파일 전체를 버리고 기본값으로 리뷰한다 |
타입이 안 맞음 (maxFiles: '40') |
그 항목만 무시하고 기본값을 쓴다 |
모르는 항목 (maxComments: 10) |
조용히 무시한다 |
없는 값 (minSeverity: warning) |
그 항목만 무시하고 기본값(minor)을 쓴다 |
배열이어야 하는데 문자열 (exclude: 'docs/**') |
그 항목만 무시한다 |
숫자를 따옴표로 감싸는 실수가 가장 잦다. 문자열이 되어 무시된다.
maxFiles: '40' # ✗ 무시된다
maxFiles: 40 # ✓오타나 이름이 틀린 항목은 아무 경고도 없이 무시된다는 점을 기억해 둔다. 바꾼 값이 반영되지 않는 것 같으면 문제 해결을 본다.
서버 쪽에서 특정 항목을 고정해 둘 수 있고, 그 경우 리포지토리 설정보다 우선한다. 설정을 분명히 적었는데도 반영되지 않는다면 이 경우일 수 있다.
고정 대상이 될 수 있는 항목은 model · baseUrl · language · minSeverity ·
autoReview · maxFiles · triggerPrefix · customInstructions 이다.
나머지 항목(minConfidence · maxInlineComments · exclude · include 등)은
항상 리포지토리 설정이 적용된다.
무엇이 고정돼 있는지는 관리자에게 물어보면 된다.