Quant Trading Bot Devlog

Read in English

[260706] 로컬 LLM 3종 비교에서 찾아낸 숨은 실패 패턴들

등급 분포만 봐서는 안 보였던 두 가지 실패 유형, 그리고 프레임워크 마이그레이션으로 잡은 구조화 출력 문제

프로젝트 초반이라 하루 단위로 바뀌는 게 많습니다. 매일 올리진 못하겠지만, 굵직한 변화가 있었던 날은 이렇게 짧게 남겨보려고 합니다. 오늘은 세 가지 축으로 작업했습니다.

1. 로컬 LLM 3종 정식 비교

멀티에이전트 LLM 리서치 파이프라인에 쓸 로컬 모델을 하나 골라야 해서, 후보 3개를 같은 조건(같은 종목 목록, 같은 날짜)으로 순차 실행해서 비교했습니다.

비교는 두 단계로 했습니다.

여기서 흥미로운 걸 발견했는데, 표면적인 지표만 봐서는 안 잡히는 문제가 두 가지 있었습니다.

결국 두 후보 다 탈락하고 기존에 쓰던 모델을 유지하기로 했습니다. 지표만 믿지 않고 실제 출력을 까봐야 하는 이유를 다시 확인한 하루였습니다.

2. LLM 프레임워크 자체를 원본으로 갈아탐

멀티에이전트 리서치에 쓰는 프레임워크를 커스텀 포크에서 원본 오픈소스 프로젝트로 옮겼습니다. 계기는, 더 가벼운 모델로 테스트하던 중 최종 판단 단계에서 구조화된 출력(JSON 등)이 자꾸 파싱에 실패하는 문제를 겪은 것이었습니다.

원인을 추적해보니, 로컬 LLM 서버(Ollama)의 OpenAI 호환 API가 "이 형식으로만 답해줘"라는 요청을 사실상 무시하는 알려진 이슈가 있었습니다. 프레임워크가 이 경로로 모델을 호출하고 있어서, 모델이 가끔 정해진 형식 대신 자유 문장으로 답하면 그대로 실패로 이어졌던 것입니다.

우회 방법은 같은 서버의 네이티브 API를 쓰는 것이었습니다. 이쪽은 출력 형식 자체를 문법 수준에서 강제할 수 있어서, 같은 테스트를 돌렸을 때 마이그레이션 전엔 구조화 출력이 매번 실패해서 자유 텍스트로 겨우 통과했던 것이, 마이그레이션 후엔 안정적으로 통과했습니다.

3. 자동투자 기능 다듬기 + 배포 전 버그 하나 잡음

AI가 추천한 종목들에 금액을 자동으로 나눠 담아주는 기능을 손봤습니다. 배분 방식을 조금 더 정교하게 바꿨고, 매수 직전에 실시간 호가 스프레드가 비정상적으로 넓으면(유동성 문제 신호) 자동으로 매수를 보류하고 별도로 알려주는 안전장치도 추가했습니다.

리밸런싱 알림 로직도 몇 가지 손봤는데, 이 과정에서 배포 전에 잠재적인 버그를 하나 발견했습니다. 알림 조건을 바꾸면서 실제 주문을 넣는 부분이 예전 계산 방식을 그대로 참조하고 있다는 걸 놓칠 뻔했는데, 검토 중에 잡아서 실제 계좌에 반영되기 전에 고쳤습니다.

4. 인프라 버그 두 건

그 밖에

.env 같은 민감 설정 파일의 권한을 더 엄격하게 조정했습니다.


오늘은 이 정도로 정리합니다. 앞으로도 눈에 띄는 변화가 있으면 이런 형태로 가볍게 남겨볼 예정입니다.