๐ค : "๋ง์ ์ฌ๋๋ค์ด ์ฝํ ๋ฅผ ๋๋นํด์ ํผ ์ฝ๋๋ค์ ๋จ์ํ github์ push๋ง ํ๊ณ ์๋๋ฐ, ๊ธฐ์์ด๋ฉด ์ฝ๋๋ฆฌ๋ทฐ๊น์ง ๋ฐ์ ์ ์๋ค๋ฉด ์ด๋จ๊น?"
Boramae-reviews-algorithm (์ดํ B.R.A.)
์ LLM์ ์ด์ฉํ์ฌ ์ฝํ
์ฉ ์ฝ๋๋ฅผ ๋ฆฌ๋ทฐํ๋ bot์
๋๋ค.
B.R.A.๋ ์ ๋ต ์ฝ๋์ ๋ํด ๊ฐ๋
์ฑ๊ณผ ์ฑ๋ฅ ๋ฉด์์ ์ต์ ํ๋ ์ฝ๋๋ฅผ ์ ์ํ ๋ฟ๋ง ์๋๋ผ, ์ค๋ต ์ฝ๋์ ๋ํด์๋ ์ ๋ต ์ฝ๋๋ก ์์ ํ ์ ์๋ ๊ฐ์ ๋ฐฉ์์ ์ ์ํฉ๋๋ค.
๋ง์ฝ ๋น์ ์ด ์๋ ๊ฐ ํธ์ ํ๋๋ผ๋ ํด๋นํ๋ฉด, ์ ํฌ๊ฐ ๋ง๋ bot์ด ๋ถ๋ช
๋์์ด ๋ ๊ฒ์ด๋ผ ํ์ ํฉ๋๋ค.
- ์ทจ์ ์ค๋น ๋ฑ์ผ๋ก ์ฝํ ๋ฅผ ์ค๋นํ๊ณ ์๋ค.
- ์ฝํ ๋ฅผ ๋๋นํ์ฌ ํผ ์ฝ๋๋ค์ ๋จ์ํ Github์ push๋ง ํ๊ณ ์๋ค.
- '๋ถ๋ช ๋ด๊ฐ ์ ์ถํ ์ฝ๋๊ฐ ๋ง์๋๋ฐ ์ ํ๋ ธ์ง?'๋ผ๊ณ ์๊ฐํด์ ๋ค๋ฅธ ์ฌ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ผ๋, ์ค๋ช ์ด ์ดํด๋์ง ์์ ์์ฌ์ ๋ ๊ฒฝํ์ด ์๋ค.
- ์ฝํ ์์ ๊ฐ๋ฅํ๋ค๋ฉด ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ๋ค.
B.R.A์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฌธ์ ๋ถ์ (ํต์ฌ ์๊ตฌ์ฌํญ, ์ต์ ํ๋ ์ฝ๋์์ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ/์๋ฃ๊ตฌ์กฐ ์ค๋ช )
- ์ต์ ํ๋ ์ฝ๋ ์ ์
- ๊ธฐ์กด ์ฝ๋์ ๋น๊ต์ ๋ณ๊ฒฝ์ฌํญ ์ค๋ช (๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ด์ ์ ๊ฐ์ ์ ๋ฑ)
- ์ฑ๋ฅ ๋ถ์ (์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋น๊ต)
ํ์ฌ B.R.A.๊ฐ ์ง์ํ๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๋ซํผ, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ทธ๋ฆฌ๊ณ LLM API ์ ๊ณต์ ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๋ซํผ :
ํ๋ก๊ทธ๋๋จธ์ค
,์๊ณ ์คํ
Warning
BOJ
์ ๊ฒฝ์ฐ ํ๋ซํผ ์ ์ฑ
์ ๋ฌธ์ ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ด ์ง์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด :
C
,C++
,Java
,Python
- LLM API ์ ๊ณต์
์ฒด :
OpenAI
,Anthropic
Note
B.R.A.๋ ๊ฐ ์
์ฒด๋ณ ์ต์ LLM์ ์ฌ์ฉํฉ๋๋ค.
๋ฒ์ ๋ณ LLM ์ ๋ณด๋ ์๋๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
-
Prerequisites
B.R.A.๋ฅผ ์คํํ๊ธฐ ์ํด์๋ ์๋ 2๊ฐ์ง๊ฐ ํ์ํฉ๋๋ค.- ์ฝํ ์ ์ ์ถํ ์ฝ๋๋ฅผ ์ ์ฅํ github repositroy ์์ฑ
- LLM API ํค ๋ฐ๊ธ
-
Github secret ์ค์
B.R.A.๋ ๋ณด์์ ์ํด Github secret์ ์ ์ฅ๋ ์ฌ์ฉ์ API ํค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ฃผ์๊ธธ ๋ฐ๋๋๋ค.- B.R.A.๋ฅผ ์คํํ๊ณ ์ถ์ repo ํํ์ด์ง ์ด๋
- ์๋จ์
Settings
ํด๋ฆญ Security > Secrets and variables
์๋Actions
ํด๋ฆญNew repository secret
ํด๋ฆญ- Name์
API_KEY
, Secret์ ๋ฐ๊ธ๋ฐ์ API ํค ๊ฐ ์ ๋ ฅํ ๋คAdd secret
ํด๋ฆญ
-
workflow ์์ฑ
B.R.A. bot์ ์คํํ๊ณ ์ถ์ repo์.github/workflows/code_review.yml
์ ์๋์ ๊ฐ์ด ์์ฑํฉ๋๋ค.
์ด๋ ์ฌ์ฉ์๋ ์ํ๋๋๋ก LLM API ์ ๊ณต์ ์ฒด๋ช(model_company)
์ few-shot learning ์ ์ฉ์ฌ๋ถ(few_shot_learning)
์ customizeํ ์ ์์ต๋๋ค.์ต์ ์ ์ค์ ๊ฐ์ ๋ํ ์คํ ๊ฒฐ๊ณผ
model_company : "ANTHROPIC"
,few_shot_learning: "true"
๋ก ์ค์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ฐ์ํ์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์คํ ๋ณด๊ณ ์๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.name: Code Review permissions: contents: read pull-requests: write on: pull_request: types: [opened, synchronize] paths: - "**.c" - "**.cpp" - "**.java" - "**.py" jobs: code-review: runs-on: ubuntu-latest steps: - name: check out repository uses: actions/checkout@v4 - name: ๐ฆ Boramae reviews algorithm uses: SukJinKim/Boramae-reviews-algorithm@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} # "OPENAI", "ANTHROPIC" ๋ ์ค ํ๋ ์ ํ model_company: "ANTHROPIC" api_key: ${{ secrets.API_KEY }} # Few shot learning ์ ์ฉ์ ์ํ์ง ์๋๋ค๋ฉด ์๋ ์ฃผ์ ์ฒ๋ฆฌ few_shot_learning: "true"
-
Create/Update PR(Pull Request)
flowchart LR; U[User] -- 1.Create/Update PR --> G[(Github repo)] -- 2.Trigger --> B([B.R.A.]); B -- 3.Review --> G;
- PR์ createํ๋ ๋ฐฉ๋ฒ์ ๋งํฌ ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
B.R.A.๋ ์ฌ์ฉ์๊ฐ Github repo์ PR์ createํ๊ฑฐ๋ updateํ๋ฉด ์๋์ผ๋ก ๋์ํ์ฌ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊น๋๋ค.
์ด๋ ๋ฐ๋์ ์๋ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํฉ๋๋ค.- ํ๋์ commit์๋ ๋ฐ๋์ ํ๋์ ์ ์ถ ์ฝ๋๋ง ์์ด์ผ ํ๋ค.
- commit message์๋ ๋ฐ๋์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ URL์ด ํฌํจ๋์ด์ผ ํ๋ค.
B.R.A ํ๋ก์ ํธ๋ NAVER D2์ ์๊ฐ์ ๊ธ์ด๋ค : LLM์ ์ด์ฉํ AI ์ฝ๋ ๋ฆฌ๋ทฐ ๋์
๊ธฐ
๋ก๋ถํฐ ์๊ฐ์ ๋ฐ์์ต๋๋ค!