레오폴드 챗봇 개발로그 · 4화
레오폴드가 포트폴리오를 직접 운용하고, 매매는 채팅으로 내 결재를 받는다
10월 6일 대시보드에 운용실을 붙여 레오폴드가 하루 최대 두 번 장부를 점검하고 종목마다 판단을 남기게 했다. 10월 7일에는 결재 체계를 만들었다. 모든 매매는 번호 붙은 안건으로 채팅에 올라오고, 내가 승인해야만 장부가 바뀐다. 운용 모델은 Codex Sol 6.1로 바꿨다.
3화에서 보고서가 2천만원짜리 모의 포트폴리오가 됐다. 그런데 장부를 들여다보는 건 여전히 나였다. 레오폴드는 버튼을 눌러야 한마디 하는 조언자에 머물렀다.
10월 6일 아침 9시 50분에 대시보드 주소를 보내며 말했다. 이거 챗봇이랑 연관 지어서 진지하게 발전시켜 보고 싶다. 챗봇의 레오폴드가 진지하게 자신의 포트폴리오를 계속 관리하고 피드백하고 추적할 수 있는 시스템을 만들고 싶다. 이 글은 그날부터 10월 7일 아침까지의 기록이다.
운용실이 생겨 레오폴드가 하루 최대 두 번 장부를 점검한다
대시보드에 “운용실·판단 기록” 탭이 생겼다. 먼저 운용 원칙을 정했다. 현금은 15% 아래로 내리지 않고, 한 종목의 목표 비중은 30%를 넘기지 않는다. 판단은 1~3년짜리 가설과 분기 실적을 기준으로 한다.
점검은 서버가 1시간마다 데이터를 보고 필요할 때만 모델을 부른다. 오전 9시 이후 정기 점검이 하루 한 번 있고, 그 밖에는 새 뉴스나 자료가 들어왔거나, 지난 점검보다 가격이 5% 넘게 또는 환율이 3% 넘게 움직였거나, 내가 거래나 메모나 원칙을 바꿨을 때 점검한다. 자동 호출은 하루 최대 두 번, 6시간 이상 간격이고, 밤 11시부터 아침 8시까지는 쉰다. 바뀐 게 없으면 모델을 부르지 않는다.
레오폴드는 점검할 때마다 지금의 보유 종목과 원가, 현금, 시세, 처음 보고서에 적은 매수 근거, 운용 원칙, 최근 운용 대화 8개, 이전 점검 5개를 함께 받는다. 그래서 매번 처음부터 다시 생각하지 않고 지난 판단과 비교한다. 결과는 종목마다 유지·추가·축소·정리·보류 중 하나로 남기고, 판단 이유, 이전 판단과 달라진 점, 생각을 바꿀 조건, 다음에 확인할 것, 근거 출처를 붙인다. 뉴스 제목만 보고 가설이 맞았다 틀렸다를 확정하면 미확인으로 고친다. 점검은 장부를 바꾸지 않는다. 비중을 바꾸자는 제안이 나와도 리밸런싱 미리보기로만 이어진다.
첫 실제 점검은 Sonnet 5.5로 32초 걸렸다. 다섯 종목 모두 유지, 비중 변경 없음이었고 더 조사할 질문 세 개를 남겼다. 점검 전후로 장부의 거래 8건과 목표 비중이 그대로인지 코드로 확인했다.
제안은 생겼는데 승인할 길이 대시보드 버튼뿐이었다
10월 7일 새벽 3시, 더 진지하게 말했다. 챗봇의 레오폴드가 자기 포트폴리오를 실제 펀드매니저처럼 관리하면 좋겠다. 종목도 발굴하고, 대시보드에서 투자하고, 리밸런싱하고, 추적 리서치 보고서를 꾸준히 남기고. 물론 모든 결정 전에 나에게 보고하고 승인받고, 보고는 전부 챗봇으로 한다.
살펴보니 절반은 이미 있었다. 모의 장부, 시세 추적, 운용 점검, 운용 대화방, 리밸런싱 미리보기다. 빠진 건 결재 체계, 종목 발굴, 추적 보고서, 성과 평가였다. 게다가 자동 점검이 멈춰 있었다. 운용에 쓰던 Claude 계정이 다른 계정으로 바뀌어 모델을 부를 수 없는 상태였다.
결정할 것 네 가지를 물었고 이렇게 답했다. 기존 2천만원 장부를 이어서 운용한다. 승인받을 범위는 매매, 리밸런싱, 원칙 변경이고 리서치와 발굴 목록은 보고만 한다. 투자 대상은 레오폴드가 정리해 둔 AI 하이퍼사이클 기업 438개 안으로 한정한다. 운용 모델은 Codex Sol 6.1로 바꾼다.
모든 매매는 번호 붙은 안건이 되고, 내가 승인해야만 체결된다
레오폴드의 결정은 이제 “안건”이 된다. 안건에는 번호와 종류, 종목별 목표 비중, 근거, 반증 조건, 보고 시점의 기준 가격이 붙고, 3일이 지나면 만료된다. 운용 점검에서 비중을 바꾸자는 제안이 나오면 자동으로 안건이 되어 운용 대화방에 카드로 올라온다.
장부를 바꾸는 길은 하나뿐이다. 내가 승인하면 그 순간 시세를 다시 받는다. 보고 때보다 3% 넘게 움직였으면 바로 체결하지 않고 다시 묻는다. 그 안이면 미리보기를 거쳐 모의 체결하고, 체결 결과를 채팅으로 보고한다. 안건을 올린 뒤 장부에 다른 거래가 생기면 그 안건은 무효가 된다. 반려하거나 수정을 요청하면 그 사유가 다음 점검 때 레오폴드에게 그대로 전달된다.
결재는 카드의 버튼으로도, 말로도 한다. 승인 버튼은 두 번 눌러야 체결된다. 채팅에 “3번 승인”, “3번 반려 너무 비쌈”, “3번 수정: 현금 더 남겨”라고 쓰면 모델이 아니라 코드가 읽어서 처리한다. “승인하지 마”처럼 부정이 섞이거나 “1번 종목 왜 샀어?“처럼 질문인 말은 결재로 치지 않고 일반 대화로 넘긴다.
결재 테스트 12개를 새로 넣었다. 그중 하나는 모델이 답변에 “승인했다”고 써도 장부가 그대로인지 확인한다. 운영 장부의 복사본에 시험 안건을 하나 만들어 두 번 눌러 승인, 모의 체결, 체결 보고, 카드 상태가 “승인 · 체결 완료”로 바뀌는 것까지 화면에서 봤다. 실제 운영 장부는 거래 8건 그대로이고, 아직 올라온 안건은 없다.
Sol 6.1로 바꾸자 지시문과 출력 형식의 어긋남이 드러났다
운용 모델을 Codex Sol 6.1로 바꾸자 첫 점검이 실패했다. 지시문은 “지난번과 달라진 점”을 쓰라고 하는데, 출력 형식에는 그 칸이 없었다. Sol은 지시문을 따라 그 칸을 만들어 넣었고, 형식 검사가 그 답을 거부했다. 형식에 칸을 추가하자 다음 점검은 1분쯤 만에 성공했다. 결론은 전 종목 보유, 비중 변경 없음이라 안건은 생기지 않았다. Sol은 지난 점검의 “분할 매수 설계”라는 설명이 틀렸다고 스스로 고쳤다. 남은 현금은 분할 매수를 위해 남긴 게 아니라 정수 주로 사고 남은 돈이었다.
같은 날 아침 일반 레오폴드 대화방의 기본 모델도 Sol 6.1로 맞췄다. 그리고 “채팅도 뉴스 말고 이제 포트폴리오에 관한 것만 주는 걸로 바꿔”라는 말에 먼저 말을 거는 기준을 좁혔다. 이제 레오폴드는 보유하거나 목표로 잡은 종목이 종가 기준 ±4%, 장중 ±3% 넘게 움직일 때만 먼저 말을 건다. 일반 뉴스, 다른 종목의 가격 변동, AC Research 기사 알림은 채팅으로 보내지 않고 운용 점검의 근거로만 쓴다. 바꾼 그 시점에는 알림 후보 9건이 모두 걸러져 채팅으로 간 것은 0건이었다.
발굴, 정기 보고서, 성과 평가가 남았다
결재는 네 단계 중 첫 단계다. 남은 건 세 가지다. 438개 기업에서 코드로 10개를 거르고 Sol이 5개를 실사해 편입 안건을 올리는 발굴, 주간 HTML 보고서와 실적 추적 노트, 그리고 시간 가중 수익률과 벤치마크 비교, 30일 뒤 판단이 맞았는지 따지는 사후 평가다. 지금 점검 지시문은 새 종목을 추가하지 못하게 막혀 있어서, 발굴은 별도 경로로 만들어야 한다.
레오폴드 챗봇은 이제 포트폴리오에도 올렸다. 52초짜리 소개 영상이 붙어 있다.
배운 것
결재를 지시문이 아니라 코드로 만들었다. 지시문에 “승인 없이 매매하지 마”라고 쓰는 것으로는 부족했다. 모델이 무엇을 쓰든 체결 함수는 승인된 안건 번호가 있어야만 돈다. 2화에서 친구마다 무엇을 받지 않을지 정했던 것처럼, 이번에는 레오폴드가 혼자서는 무엇을 할 수 없는지를 정했다. 그 선이 분명해지자 오히려 레오폴드에게 더 많은 일을 맡길 수 있었다.