“니 멋대로 대답하냐” — 6칸 슬롯에서 도구 호출 에이전트로

오늘 실사용 대화 한 편이 구조를 바꿨다. “누가 나와”에 줄거리를 답하고, “최신 타짜”를 ‘타겟’으로 읽고, “그걸 찾아보라고”를 제목으로 검색해 그것·그물·계절을 되물었다. 사용자가 “왜 다 니 멋대로 대답하냐”고 했고, 맞는 말이었다.

진단 — 양식에 칸이 없으면 정보가 사라진다

09-27부터 채팅 첫 단계는 EXAONE 7.8B가 발화를 6칸 JSON(intent·title·region·time·chain·followup)으로 읽는 “이해 단계”였다. 문제는 출연진·현재 상영작·직전 카드 전체 같은 질문이 그 6칸 어디에도 들어갈 자리가 없다는 것. 규칙을 하나씩 더하면 질문 유형마다 분기가 늘고 롱테일은 끝이 없다.

실측 — 판단은 EXAONE, 사실은 템플릿

기존 트랙(추천·예매·평가)을 도구 6개로 감싸고 두뇌 후보 셋에게 같은 14턴을 다시 풀게 했다.

두뇌 도구 판단 답변이 도구 결과에 충실한가
EXAONE 4.0 1.2B 7/14 5/14
EXAONE 3.5 7.8B 13/14 9/14 — 시간표를 지어냄
Gemini(기준점) 10/14 13/14

판단은 EXAONE이 Gemini보다 나았고, 문장은 Gemini가 나았다. 그래서 역할을 갈랐다 — 판단은 학습한 2.4B, 사실 문장은 코드 템플릿, LLM 문장은 추천 이유·리뷰 요약에만. 7.8B를 학습 없이 두뇌로 두면 턴당 3~10회 과호출·제목 창작이 나와서, 가드(인자 근거·반복 차단·호출 예산)를 학습이 아니라 코드에 뒀다.

v9 — 하루 만에 데이터·학습·합격

이해 단계 v7을 만들던 생성기의 어휘·대화 템플릿을 그대로 써서 “다음 행동 하나”를 정답으로 1,600행을 합성했다(교사 비용 0원). 평가셋 66에는 오늘 실사용 대화 17턴을 그대로 넣었다. Colab L4로 학습 후 노트북 GGUF 재채점 62/66 — 운영 7.8B 59, 학습 전 2.4B 55. 코랩 fp16 채점(57)보다 GGUF가 높은 건 v7 때와 같은 패턴이라 내보내기 판단은 GGUF 기준으로 못 박았다.

이름 정리 — 오케스트레이터는 두뇌에만

저장소에 “오케스트레이터”가 둘 있었다. 하나는 mova 채팅의 판단 단계, 하나는 SuvisdevOrchestrator — 실체는 Ollama에 요청을 보내는 HTTP 클라이언트였다. 이름이 거창해 “전체를 통괄하나?”라는 혼란이 생겼다. 네 층으로 고정했다: 오케스트레이터(허브 전체 두뇌, 예정) → 에이전트(앱 두뇌) → 도구 → 클라이언트. 전화기는 OllamaClient로 개명하고, 판단 루프·행동 프로토콜은 허브(ontology)의 공용 부품으로 올렸다. 허브는 스포크를 import하지 않으니 앱이 기동 때 자기 에이전트를 등록하는 방식이다.

같은 날 다른 것들

  • 길들: 건물 그림자 표를 8월 하나에서 월별 12벌로(여름 74°·겨울 29°, 그림자 길이 6배), “병원으로 가는 최단 경로” 같은 목적지 문장, 들를 곳을 고르면 빠른·그늘·푸른 후보 전부가 그 장소를 경유.
  • 방문자 통계: 하루 22명 급증이 새 쿠키·0초 체류 19명이었다. User-Agent로 봇을 판정하고 실방문/봇/1회성을 나눴다.
  • 문서: 작업 일지 11,257행에서 “실패 → 원인 → 극복” 328건을 뽑아 LESSONS.md로 압축했다.