개인 자산을 들여다보는 도구를 만들면서 LLM 을 붙였다. 뉴스와 공시를 요약하고, 내가 정해 둔 조건이 충족됐는지 알려 주는 용도다. 만들기 전에 가장 오래 고민한 것은 기능이 아니라 "AI 가 어디까지 하게 둘 것인가"였다. 그때 그은 선과 그것을 코드로 지키는 방법을 적는다.
선 1. 값은 사람이 정한다
"몇 퍼센트 오르면 알림" 같은 기준값을 LLM 이 제안하게 만들 수도 있었다. 그럴듯한 숫자를 그럴듯한 이유와 함께 내놓을 것이다. 바로 그래서 막았다. 근거 없이 그럴듯한 숫자는 위험하고, 결과에 대한 책임은 어차피 내가 진다.
- 새 규칙을 만드는 화면의 입력 칸은 비워 둔다. 예시 숫자를 흐리게 보여 주는 것조차 넣지 않았다. 예시는 곧 추천처럼 읽힌다.
- 널리 쓰이는 관례값(지표의 표준 설정 등)으로 미리 만들어 둔 규칙에는 이름에 "(관례값)"이라고 붙여, 내 판단이 아니라는 것을 드러냈다.
- 대신 비교할 도구를 준다. 값의 조합별로 과거 데이터에 적용한 결과를 표로 보여 주고, 고르는 것은 사람이 한다.
선 2. 요약은 사실만
브리핑을 쓰는 모델의 지시문에 "사실 요약만. 매수·매도 권고, 전망, 목표 가격 금지"를 넣었다. 그리고 프롬프트를 믿는 데서 끝내지 않고, 생성된 글에서 손익이나 평균 단가를 언급한 문장은 내보내기 전에 코드로 지운다.
선 3. 민감한 숫자는 모델에게 주지 않는다
보유 수량, 평균 단가, 금액은 메모리와 로컬 저장소에만 두고 프롬프트에 넣지 않는다. 모델에는 등락률 같은 비율만 간다. 외부 API 로 나가는 데이터를 줄이는 것이기도 하고, 모델이 그 숫자를 요약문에 흘릴 가능성을 원천적으로 없애는 것이기도 하다. 저장소, 문서, 로그에도 같은 원칙을 적용했다.
선 4. 실행 권한은 코드에 없다
이 도구는 조회만 한다. 주문을 내는 API 호출은 클라이언트 코드에 아예 구현하지 않았다. "주문하지 말 것"이라는 지시는 뚫릴 수 있지만 존재하지 않는 함수는 호출할 수 없다.
자동 매매를 실험하는 별도의 연습용 봇은 모의 투자 서버만 쓰는데, 접속 주소를 설정이 아니라 코드에 고정하고 요청마다 그 주소가 맞는지 확인한다. 설정 실수 한 번으로 실제 계좌에 주문이 나가는 경로를 없앤 것이다. 키의 이름도 실제용과 다르게 지어 섞일 수 없게 했다.
선 5. 모르는 것은 모른다고 표시한다
- 근사치로 계산한 값에는 화면에 "근사"라고 쓴다.
- 과거 데이터가 없어 검증할 수 없는 조건이 규칙에 들어 있으면, 과거 검증 결과 화면에 "이 조건은 과거에는 항상 미충족으로 처리됨"이라는 경고를 띄운다. 경고가 없으면 결과 표가 그 조건까지 검증한 것처럼 보인다.
- 데이터가 늦게 반영되는 시간대에는 "미반영" 표시를 붙인다. 틀린 숫자를 자신 있게 보여 주는 것이 가장 나쁘다.
정리
LLM 은 정리하고 설명하는 데 뛰어나다. 그래서 그 역할만 맡겼다. 기준을 정하는 일, 실행하는 일, 민감한 숫자를 아는 일은 구조적으로 떼어 놓았다. "AI 가 실수하지 않게 잘 시킨다"가 아니라 "실수해도 닿을 수 없게 만든다"가 돈이 걸린 도구에서의 기본값이라고 생각한다. 이 글은 설계 경험을 적은 것이며 투자에 관한 조언이 아니다.
댓글 없음:
댓글 쓰기