리뷰 루프 함수에 모델 선택 인자를 추가해 유연성 확보
목차
리뷰 루프의 rewrite_post 함수에 model 인자를 추가했다. 기본값은 여전히 Sonnet으로 유지했는데, 이 작은 변경이 생각보다 고민이 많이 들어간 결정이었다.
초기 설계의 한계
처음 코드를 짤 때는 마크다운 생성 로직이 특정 모델(Sonnet)에 고정되어 있었을 것 같다. 그건 초기 프로토타입으로는 충분했지만, 시간이 지나면서 여러 시나리오가 생겨났다.
- 비용 최적화: 어떤 작업은 Haiku로 충분한데 Sonnet을 쓰는 게 낭비
- 품질 실험: 특정 케이스에서는 Opus가 더 좋은 결과를 주는지 테스트하고 싶음
- 토큰 비용 추적: 모델별로 호출을 분석할 때 어떤 모델이 얼마나 쓰였는지 알아야 함
- 점진적 마이그레이션: 새 모델이 나왔을 때 일부 호출만 먼저 바꾸고 싶음
하드코딩된 모델로는 이런 시나리오들을 처리하기 어려웠다.
파라미터화 결정
그래서 rewrite_post(text, model="claude-3-5-sonnet-20241022")처럼 함수 시그니처를 확장했다. 핵심 선택지들:
| 선택지 | 장점 | 단점 |
|---|---|---|
| 필수 매개변수로 만들기 | 의도 명확, 실수 방지 | 기존 호출문 모두 수정 필요 |
| 선택 매개변수 (기본값 Sonnet) | 기존 코드 동작 유지, 점진적 전환 | 명시성 약해짐 |
| 환경변수로 제어 | 배포 시 동적 변경 가능 | 함수 시그니처는 여전히 고정 |
선택 매개변수가 가장 실용적이었다.
기본값을 Sonnet으로 유지한 이유
여기가 가장 고민이 많이 들어간 부분이다.
호환성: 코드 리뷰를 하면서 기존 호출문 rewrite_post(some_text)가 깨지지 않아야 한다. 팀이 점진적으로 모델을 지정하도록 마이그레이션할 시간을 줄 수 있다.
예측 가능성: 누군가 명시하지 않은 호출을 봤을 때, "Sonnet을 쓴다"는 게 명확해진다. 모델 비용과 품질 프로파일이 일관된다.
테스트 안정성: CI/CD에서 돌리는 자동화된 리뷰가 있다면, 예측 가능한 모델이 중요하다.
만약 팀이 "기본은 Haiku로" 결정했다면, 기존 호출문들이 더 저렴해지겠지만 대신 품질 회귀 위험이 있다. 기본값은 "일반적으로 안전한 선택"이 되도록 했다.
def rewrite_post(text: str, model: str = "claude-3-5-sonnet-20241022") -> str:
"""
포스트를 LLM으로 다시 작성.
Args:
text: 원본 마크다운 텍스트
model: 사용할 Claude 모델 (기본: Sonnet)
Returns:
리뷰된 마크다운
"""
# 실제 API 호출에서 model을 지정
...
이런 류 변경에서 놓치기 쉬운 것들
- 문서화: 함수 docstring에 model 파라미터의 의미와 기본값을 명확히 적는 것
- 타입 힌팅: IDE와 타입 체커가 호출자를 도와줄 수 있도록
model: str정도는 당연 - 마이그레이션 계획: "언제까지 기본값을 Sonnet으로 유지할 건가?" 팀과 공유
- 테스트: 특정 모델이 지정됐을 때 올바르게 호출되는지 테스트
한 함수의 파라미터를 하나 추가하는 것처럼 보이지만, 실은 리뷰 루프 전체의 유연성을 높이는 결정이다. 하위호환성을 유지하면서도 향후 실험과 최적화의 문이 열린다.
이런 리팩터링들이 쌓이면, 나중에 "아, 이 부분 다른 모델로 바꾸면 더 좋겠다"는 요청이 와도 함수 시그니처 변경 없이 한두 줄만 수정하면 된다. 그게 설계 빚을 줄이는 방식이라고 본다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.