자동화 slecs

봇 프롬프트 생성 코드의 튜플 연결 방식을 명시적으로 수정

목차

튜플 연결 방식이 암묵적 동작에 의존하고 있던 걸 뒤늦게 잡아냈다.

bot/generate.py 안에서 user_prompt를 구성할 때 튜플 concatenation을 쓰고 있었는데, 코드 리뷰 중에 문제를 발견했다. 의도는 두 튜플을 이어 붙이는 거였는데, 실제 코드는 그걸 명시적으로 표현하지 않고 있었다.

뭐가 문제였나

Python에서 튜플을 다룰 때 흔히 빠지는 함정이 있다. 암묵적 연결(implicit concatenation)이 그 대표 사례다. 문자열은 인접하게 두면 자동으로 이어지지만, 튜플은 그 동작이 문맥에 따라 해석이 달라진다. 특히 함수 인자나 변수 할당 안에서 콤마와 괄호가 얽히면 "이게 튜플 두 개를 합친 건지, 단일 튜플 안의 원소인지" 읽는 사람 입장에서 순간 멈칫하게 된다.

대략 이런 패턴이었다:

# before — 암묵적, 해석 여지 있음
user_prompt = base_prompt, context_block

# after — 명시적 concat
user_prompt = base_prompt + context_block

한 줄 차이인데, 전자는 user_prompt(base_prompt, context_block) 형태의 튜플 of 튜플이 될 수도 있고, 의도와 전혀 다른 구조가 만들어질 수도 있다. 후자는 읽는 순간 "두 튜플을 하나로 이어 붙인다"는 의도가 명확하다.

왜 이런 코드가 생기나

솔직히 말하면 자동화 봇 코드는 빠르게 프로토타이핑하다 보니 이런 암묵적 패턴이 끼어들기 쉽다. generate.py 같은 파일은 초반엔 실험적으로 짜고, 잘 돌아가면 그대로 굳어지는 경우가 많다. "일단 돌아가니까" 넘어간 코드가 나중에 프롬프트 구조가 바뀌거나 컨텍스트 블록 타입이 달라지는 순간 예상 밖 동작을 낸다.

자동화 코드의 특성상 실패가 소리 없이 지나가기도 한다. API 호출이 에러 없이 완료됐는데 실제 프롬프트 내용이 의도와 달랐던 거라면, 로그만 봐선 놓치기 딱 좋다.

패턴 결과 타입 의도 명확성 실수 가능성
a, b tuple (2-element) 낮음 높음
(a, b) tuple (2-element) 중간 중간
a + b tuple (concatenated) 높음 낮음
(*a, *b) tuple (unpacked) 높음 낮음

코드리뷰에서 이런 걸 어떻게 잡나

팀 내에서 자동화 관련 코드는 상대적으로 리뷰 강도가 낮아지는 경향이 있다. "어차피 사람 대상 서비스 아니잖아"라는 심리가 은근히 작용한다. 근데 봇이 생성하는 프롬프트 품질이 결국 아웃풋 품질로 직결되는 시스템이라면, 이 코드는 사실상 핵심 로직이다.

이번 수정은 작은 픽스지만, 회고 관점에서 두 가지를 다시 확인하게 됐다:

  • 암묵적 동작에 기대는 코드는 작성자 본인이 제일 나중에 발견한다
  • 자동화 봇 코드도 "프로덕션 코드"와 동일한 기준으로 리뷰 테이블에 올려야 한다

튜플 concat 하나였지만, 명시적으로 적는 습관이 팀 전체 코드 가독성에 쌓이는 방식으로 작동한다는 걸 다시 한 번 느꼈다. 작은 거 하나 제대로 고치는 게 결국 나중에 디버깅 시간 아끼는 거다.


다음 작업은 generate.py 안의 프롬프트 빌딩 로직 전반을 정리할 생각이다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.