Loading the catalog…
Loading the catalog…
현재 공시 AI 요약은 당시 무료 api중 가장 괜찮다고 판단했던 Gemini 2.5 Flash를 사용중이었다. 다만 시간이 오래 지나 신버전이 풀렸고, 지난 세션에 최신인 3.8 Flash를 재봤다가 떨어뜨렸는데 글을 쓰다가 그 판정 기준이 2.5의 출력을 정답지로 삼은 것이었음을 알았다. 그래서 이번엔 기준을 공시 원문에서 뽑아 다시 재기로 했다. 계획은 프롬프트 v2를 먼저 넣고 세 모델을 시간대 세 차례에 걸쳐 판정하는 것이었다(F108). 결과는 두 번째서 끝났다. 예상대로 3.5 Flash-Lite는 1차부터 탈락했고, 2차 채점에서 3.8이 2.5를 앞서 3.8을 기본 모델로 올리되 2.5를 fallback으로 남기는 구조로 닫았다. 시작 전에 Gemini 밖 무료 API도 한 번 훑었는데, 조건에 맞는 후보는 없었다. Gemini 밖 무료 API 조사 2.5 Flash의 무료 한도는 하루 20콜이라 리뷰어 한 명이 소진할 수 있는 수치다. 포트폴리오 서비스인만큼 감수하기로 했지만, Gemini 안에서만 고르기 전에 다른 무료 API에 이 문제를 풀 후보가 있는지 확인했다. 조건은 카드 등록 없음, 하루 100콜 이상, JSON 스키마 구조화 출력, 공시 원문 길이의 한국어 입력, Vercel에서 HTTP로 호출 가능, 다섯 개였다. 후보 판정 OpenAI 기각. 데이터 공유 조건의 무료 토큰도 결제 잔액이 있어야 함 Groq · Cerebras 기각. 요청 수는 넉넉하나 분당 토큰·컨텍스트 상한(8K)이 공시 원문 1건에 걸림 OpenRouter free · Cohere 기각. 하루 50콜 · 월 1,000콜 CLOVA Studio 기각. 종량제, 무료 티어 없음 Mistral 무료 플랜 보류. 한도는 충분, 한국어 품질 미확인, 입력이 학습에 쓰임 Upstage Solar Pro 4 보류. 한국어·스키마·컨텍스트 전부 맞으나 무료가 아님(가입 크레딧 3개월 뒤 건당 약 $0.001) NVIDIA NIM 보류. 하루 1만 콜, "trial use only" 약관 다섯 조건을 다 맞추는 후보는 없었다. 근접한 셋도 성능 때문에 붙일 이유는 없고 한도와 장애의 대안일 뿐이라, 어댑터는 Gemini 무료 티어가 깨질 때의 보험으로 백로그에 두었다(F109). 한도 100콜 이상으로 필터링 한 건 현행에서 교체하려면 5배정도 이득은 있어야 한다고 생각해서다. 조사하면서 확인한 것 하나가 이후 계획을 정했는데, Gemini의 무료 일일 한도가 미국 태평양 자정, 한국 시각 16시에 리셋된다는 점이다. 원문 기준 채점 설계 지난 세션의 실수는 기준을 지금 쓰는 모델의 출력에서 뽑은 것이었다. 이번엔 공시 8건(공급계약·전환사채·최대주주 변동·대량보유·주총 소집 2건·감사보고서·거래정지)을 골라, 모델을 한 번도 돌리기 전에 원문만 보고 "독자가 알아야 할 항목"을 건별로 뽑아 고정했다. 채점은 출력에 A·B 같은 라벨만 붙이고 어느 모델인지 가린 채로 했고, 채점이 끝난 뒤에 라벨을 풀었다. 프롬프트는 세 모델 모두 같은 v2를 받았다. 규칙을 한 곳에 모으고 금지어 대신 본문 근거를 묻는 쪽으로 바꾼 것인데, 이 글에서는 모델 비교의 전제로만 둔다. 원문 8건 → 건별 필수 항목 추출·고정 (모델 출력을 보기 전) → 시간대마다 실행 → 라벨 셔플 → 모델명 가린 채점 → 라벨 해제 → 판정 한도가 16시에 리셋되니 새벽과 오전 두 차례로 같은 날의 20콜을 나눠 썼고(8건 × 2창), 3차는 16시 이후로 잡았다. 1차 — 새벽의 503과 자초한 429 모델 결과 2.5 Flash 8/8 성공, 9~22초 3.8 Flash 3건에서 중단. 503(서버 과부하) 다섯 번, 429(한도 초과) 한 번 3.5 Flash-Lite v2 4/8 · v1 7/8. 실패는 전부 30초 무응답 3.8의 429는 내가 만든 것이었다. 503 재시도가 한 요청 안에서 22초에 네 번 나가는데, 스크립트의 호출 간격이 그 재시도를 세지 않아 분당 5회 한도를 넘겼다. 간격을 "최근 60초 송신 4회 이하"로 바꿨다. Lite의 실패는 성공한 건이 2~3초인데 30초 동안 응답 자체가 없는 형태였다. 한도 초과라면 429가 왔을 테고 우리 요청은 한도의 1/4이었으니, 무료 티어가 부하 때 뒤로 밀리는 Google 쪽 큐잉으로 보였다. 2차 — 채점 결과 오전 실측에서는 3.8이 8건 모두 성공했고 503도 한 번뿐이었다(재시도로 회복). Lite는 첫 창에서 v1과 v2 점수가 같아 프롬프트로 올릴 여지가 없음이 확인돼 2차에서 뺐다. 항목 3.8 Flash 2.5 Flash 필수 항목 80/92 (87%) 75/92 (82%) 값 오류 0 1 형식 위반 4 13 응답 시간 4~11초 9~22초 503 1 (회복) 0 숫자만 보면 큰 차이는 아니다. 필수 항목 5개 차이는 8건 중 4건에서 3.8이 앞서고 2건에서 뒤진 결과이고, 형식 위반 13은 대부분 detail이 표의 값을 되풀이한 것이라 독자 피해가 작아 근거로 세게 쓰지 않았다. 결정을 만든 건 값 오류 쪽이다. 2.5는 전환사채 공시에서 발행사의 매도청구권을 조기상환청구로 바꿔 썼고, 이게 1차와 2차에서 똑같이 나왔다. 같은 자리에서 3.8은 맞게 썼다. 요약이 값을 틀리면 다른 항목이 다 맞아도 소용이 없는데, 재현되는 오류 하나와 절반인 응답 시간이 3.8 쪽으로 기울게 했다. 3.8 승격과 2.5 fallback 이쯤에서 "어차피 부하는 두 모델이 비슷할 테니 fallback만 붙이고 넘어가자"는 생각이 들었다. 앞 절반은 틀렸다. 같은 시각에 2.5는 열여섯 번 중 503이 0이고 3.8은 열아홉 번 중 6이었으니, 신모델일수록 무료 티어가 먼저 밀린다. 뒷 절반은 맞되 조건이 붙었다. fallback을 붙이면 코드와 캐시의 모델 기록, 출처 표기가 두 모델로 늘고 최악의 대기가 14초에서 36초가 되니, 3.8이 실제로 더 낫다는 게 확인돼야 낼 비용이었다. 2차 채점이 그걸 보여줬다. 3.8 성공 → 그대로 3.8 429(한도 소진) → 즉시 2.5 3.8 503 재시도 소진 · 30초 timeout → 남은 예산이 15초 이상이면 2.5 그 외 오류(안전 차단·파싱 실패 등) → fallback 없음 fallback이 429에도 걸리는 게 덤으로 큰 효과였다. 두 모델의 하루 20콜 한도가 따로라 실효 한도가 40콜이 되고, 리뷰어가 소진할 수 있다는 첫 문제가 절반으로 준다. 지난 세션에 2.5를 유지한 근거가 "README 전의 안정 상태"였는데, 이 구조가 2.5 단독보다 안정적이라 그 근거는 뒤집혔다. 결정 변수가 셋째 창의 가용성에서 둘째 창의 품질로 옮겨져 셋째 창은 돌리지 않았고, v1 프롬프트로 만든 캐시 8행은 배포 뒤 지워 v2로 다시 만들어지게 했다. 정리 F108 종결 — 프롬프트 v2 반영, 원문 기준 채점 8건 × 2창, 3.8 Flash 기본 + 2.5 Flash fallback, v1 캐시 리셋. 3.5 Flash-Lite 탈락 F109 backlog — 외부 무료 API 조사 완료, 다섯 조건을 충족하는 후보 없음. Gemini 무료 티어가 깨질 때의 보험 F110 backlog — 프롬프트·요약 route 잔손질. 날짜 표기는 프롬프트가 아니라 코드 정규화로, 6월 결산 법인의 headline 예시 등 요약 요청 입력을 서버로 — 제목·회사명을 클라이언트가 보내지 않고 서버가 DART 목록에서 찾도록 바꿔, 조작된 문자열이 프롬프트와 공유 캐시에 닿는 경로를 없앰. 재시도도 요청 전체 55초 예산 안에서 backoff로. 별도 글감 측정의 실수 하나 — 첫 창의 3.8 429는 재시도를 세지 않은 스크립트 간격이 만든 것 판정을 뒤집었지만 3.8이 압도한 건 아니다. 엄밀히는 항목 점수 5%p 차이고, 결정적이었던 건 재현되는 값 오류 하나와 fallback으로 가용성 리스크가 사라진 점이다. 기준을 원문에서 뽑고 모델명을 가리는 채점 인프라는 남았으니 다음 교체는 실행과 채점 두 번이면 된다. 다음 작업 세션 외 — prod에서 요약 한 건을 요청해 3.8이 기록되는지 확인(16시 리셋 뒤), 거래일 실측 항목들 다음 세션 — README 마감(G1) → 신규 상장 일간 편입(F105) → 포트폴리오 정리(G2)
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
[SlateKR #168] AI 공시 요약 gemini 3.8 flash 승격 및 기존 버전 폴백 결정. 현재 공시 AI 요약은 당시 무료 api중 가장 괜찮다고 판단했던 Gemini 2.5 Flash를 사용중이었다. 다만 시간이 오래 지나 신버전이 풀렸고, 지난 세션에 최신인 3.8 Flash를 재봤다가 떨어뜨렸는데 글을 쓰다가 그 판정 기준이 2.5의 출력을 정답지로 삼은 것이었음을 알았다. 그래서 이번엔 기준을 공시 원문에서 뽑아 다시 재기로 했다. 계획은 프롬프트 v2를 먼저 넣고 세 모델을 시간대 세 차례에 걸쳐 판정하는 것이었다(F108). 결과는 두 번째서 끝났다. 예상대로 3.5 Flash-Lite는 1차부터 탈락했고, 2차 채점에서 3.8이 2.5를 앞서 3.8을 기본 모델로 올리되…
Open source