역할이 고정되면 질문이 무시된다
이날은 다중 에이전트 투자 분석 데스크를 만든 날이다.
분석 에이전트들이 서로 토론하게 만들었다.
근데 가장 큰 교훈은 따로 있었다.
LLM의 역할이 고정되어 있으면, 약한 힌트로는 행동을 바꿀 수 없다.
정체성 자체를 바꿔야 한다.
투자 분석 데스크에 “삼성전자 내일 가격 예측해줘”라고 물었다.
근데 자꾸 매매 추천을 내놓았다.
“매수” “비중 축소” 같은 포트폴리오 관리 답변이 나온 거다.
시스템 프롬프트에 “너는 포트폴리오 매니저다”라고 적혀 있었다.
이 정체성이 매매 추천 행동을 강제하고 있었다.
질문이 뭐든 간에, 포트폴리오 매니저니까 매매를 추천한 거다.
약한 힌트는 안 먹힌다
“두 가지 모드가 있어”, “직접 답해, JSON 말고”, “한국어로 답해” 같은 힌트를 넣었다.
전부 안 먹혔다.
한국어로 매매를 추천할 뿐이었다.
약한 힌트로는 역할 고정을 못 깬다.
“포트폴리오 매니저”라는 정체성이 너무 강하다.
부가적인 지시로 덮을 수가 없다.
정체성을 바꿔야 한다
해결은 정체성 자체를 바꾸는 거였다.
질문 모드일 때 “포트폴리오 매니저”를 “투자 분석 종합자”로 바꿨다.
그리고 “너는 포트폴리오 매니저가 아니다.
매수, 매도, 비중 제안을 하지 마라”라고 명시했다.
여기에 삼중 방어를 넣었다.
첫째, 시스템 프롬프트의 정체성을 완전히 교체한다.
둘째, 사용자 메시지에서 매매 스키마를 제거한다.
셋째, 보유 종목 데이터를 빈 배열로 넣는다.
에이전트가 물리적으로 보유 종목을 못 보게 하는 거다.
일반 원칙
역할 고정 LLM은 약한 힌트로 안 바뀐다.
정체성 자체를 바꿔야 한다.
그리고 “이 데이터를 쓰지 마라”는 안 먹힌다.
데이터를 아예 빼야 한다.
이건 광범위하게 적용되는 원칙이다.
에이전트의 행동을 바꾸려면, 부가적인 지시를 추가하는 게 아니라, 근본적인 정체성과 데이터를 바꿔야 한다.
에이전트가 토론하는 투자 데스크
투자 분석 데스크를 만들었다.
여덟 개 에이전트가 토론하는 구조다.
기술 분석, 펀더멘털 분석, 뉴스 분석 에이전트가 각자 결론을 낸다.
불파 연구원과 약파 연구원이 대립하는 논쟁을 한다.
리스크 관리자랑 판단 검토자가 병렬로 검증한다.
마지막으로 포트폴리오 매니저가 종합한다.
단일 진실 원천
모든 에이전트가 하나의 캐시된 시장 스냅샷을 읽는다.
아무도 직접 API를 안 부른다.
스냅샷이 하나의 진실 원천이다.
이게 일관성을 보장한다.
읽기 전용 브로커
증권사 API는 조회만 한다.
주문이나 거래는 절대 안 한다.
보유 종목, 잔고, 매수 가능 금액만 읽는다.
거래는 전적으로 사람이 한다.
파이썬에서 타입스크립트로
데이터 처리를 파이썬에서 타입스크립트로 옮겼다.
언어를 하나로 통일한 거다.
yfinance 파이썬 서브프로세스를 없애고 타입스크립트 라이브러리로 바꿨다.
환경 의존성이 줄었다.
프로세스 경계가 사라졌다.
수학 패리티도 검증했다.
이동평균, RSI, MACD, 볼린저 밴드를 파이썬에서 타입스크립트로 포팅했다.
실측으로 정확히 일치하는 걸 확인했다.
자동 중단 금지
자율 루프에서 “어떤 자동 중단도 하지 마라”는 원칙을 세웠다.
기존에는 최대 실행 시간이나 고아 감시가 런을 강제로 죽일 수 있었다.
근데 이게 “캡이 너무 짧아서”가 아니라 “평면 캡이 존재한다” 자체가 문제였다.
그래서 모든 자동 중단을 제거했다.
중단은 두 가지에서만 온다.
판정자의 “중지 승인”이거나, 사람의 명시적 중단이다.
그 외에는 멈추지 않는다.
마무리
이날의 핵심은 “정체성을 바꿔야 행동이 바뀐다”였다.
포트폴리오 매니저에게 가격 예측을 물어도 매매를 추천했다.
약한 힌트로는 안 바뀌었다.
정체성을 “투자 분석 종합자”로 바꾸니까 비로소 가격 예측을 했다.
이건 모든 에이전트 시스템에 해당한다.
에이전트의 행동을 바꾸려면, 부가 지시를 추가하는 게 아니라 근본 정체성을 바꿔야 한다.
“이걸 하지 마라”가 아니라, 그걸 하게 만드는 정체성 자체를 교체해야 한다.
그리고 데이터도 빼야 한다.
“이 데이터를 쓰지 마라”는 안 먹힌다.
데이터를 아예 안 주면, 쓸 수가 없다.
정체성 교체랑 데이터 제거가 함께 가야 한다.