코드 생성 태스크에서의 Large Language Model 활용: 리뷰
Usage of Large Language Model for Code Generation Tasks: A Review
TL;DR Highlight
LLM 기반 코드 생성 기술의 현황과 한계를 정리한 서베이 논문
Who Should Read
LLM을 활용해 코드 자동 생성, 코드 완성, 버그 수정 기능을 개발하거나 도입을 검토 중인 개발자 및 ML 엔지니어.
Core Mechanics
- GPT-4, Codex, StarCoder, Code Llama 등 주요 코드 특화 LLM들의 성능과 특징을 비교 정리
- 코드 생성 품질은 프롬프트 설계 방식(zero-shot, few-shot, chain-of-thought)에 따라 크게 달라짐
- HumanEval, MBPP, CodeContests 등 대표 벤치마크별로 모델 성능 차이가 존재하며, 단순 pass@k 지표만으론 실제 품질 판단 어려움
- 코드 생성 LLM의 주요 한계: 긴 컨텍스트 처리, 보안 취약 코드 생성, 도메인 특화 언어 지원 부족
- Fine-tuning(특정 태스크에 맞게 모델을 추가 학습하는 것)과 RLHF(인간 피드백으로 강화학습)를 결합하면 코드 정확도와 안전성이 향상됨
- RAG(외부 코드 문서나 예시를 검색해 프롬프트에 주입하는 방식)를 활용하면 최신 API나 라이브러리 코드 생성 품질 개선 가능
Evidence
- GPT-4는 HumanEval 벤치마크에서 pass@1 기준 약 67~85% 수준의 정확도를 기록
- Code Llama-34B는 HumanEval에서 pass@1 약 48.8%, MBPP에서 약 55% 달성
- StarCoder2-15B는 HumanEval에서 pass@1 약 46.3%로 동급 오픈소스 모델 중 경쟁력 있는 수치
- few-shot 프롬프팅은 zero-shot 대비 코드 생성 정확도를 평균 10~20%p 향상시키는 것으로 보고됨
How to Apply
- 코드 자동완성 기능을 만들 때, zero-shot 대신 유사한 코드 예시 2~3개를 few-shot으로 프롬프트에 포함시키면 정확도가 높아짐
- 사내 API나 특정 프레임워크 코드를 자주 생성해야 한다면, 해당 문서를 RAG로 연결하거나 도메인 데이터로 fine-tuning하는 방식을 검토할 것
- 생성된 코드의 품질 측정 시 pass@1만 보지 말고, 보안 취약점 스캔(bandit 등)과 실제 테스트 통과율을 함께 측정하는 파이프라인 구성 권장
Code Example
snippet
# Few-shot 프롬프트로 코드 생성 품질 높이기 예시 (OpenAI API)
import openai
client = openai.OpenAI()
prompt = """
아래 예시를 참고해서 함수를 작성해줘.
예시 1:
# 두 수의 합을 반환
def add(a, b):
return a + b
예시 2:
# 두 수의 곱을 반환
def multiply(a, b):
return a * b
이제 다음을 구현해줘:
# 리스트에서 최댓값과 최솟값의 차이를 반환하는 함수
"""
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "당신은 Python 전문 개발자입니다. 명확하고 효율적인 코드를 작성하세요."},
{"role": "user", "content": prompt}
],
temperature=0.2 # 코드 생성 시 낮은 temperature 권장
)
print(response.choices[0].message.content)Terminology
pass@k코드 생성 모델이 k번 시도했을 때 최소 1번이라도 정답을 맞출 확률. pass@1은 한 번에 맞추는 확률.
HumanEvalOpenAI가 만든 코드 생성 벤치마크. 164개 프로그래밍 문제로 모델 코딩 능력을 측정하는 시험지.
few-shot모델에게 답을 바로 묻지 않고, 먼저 예시 몇 개를 보여준 뒤 비슷한 문제를 풀게 하는 프롬프팅 기법.
RLHF사람이 좋은 답변에 점수를 매기고, 그 점수를 기반으로 모델을 더 학습시키는 방법. 사람 취향에 맞게 모델을 조율하는 과정.
CodexOpenAI가 코드 생성에 특화해 만든 GPT 계열 모델. GitHub Copilot의 기반 모델.
StarCoderBigCode 프로젝트에서 만든 오픈소스 코드 특화 LLM. 80여 개 프로그래밍 언어 지원.
RAG모델이 답을 생성할 때, 외부 문서나 DB를 검색해 관련 정보를 가져와 함께 활용하는 방식. 모델이 몰랐던 최신 정보를 활용할 수 있게 해줌.