
부제: 종목·데이터 유무를 서버가 분기하지 않고, 확실한 값은 LLM에 안 맡긴 이유
튜토리얼을 마친 사용자에게 개인화된 "러너 타입 분석 카드"를 LLM으로 만들어 보여준다.
이 기능을 만들며 몇 가지를 정했는데, 공통점은 "무엇을 서버가 정하고 무엇을 LLM에 맡길지"였다.
플래그를 두지 않는다
먼저 종목을 구분하는 필드를 두지 않았다.
러닝인지 사이클인지 나누는 플래그가 없다.
이유는 간단하다.
운동 기록에 이미 종류가 적혀 있으니, 단일 프롬프트가 그 데이터를 보고 알아서 적응한다.
서버는 종목을 모른다. 넘길 필요도 없다.
종목은 데이터에서 드러나는 창발적 속성이지, 따로 세워 둘 플래그가 아니다.
데이터 유무도 서버가 나누지 않았다.
운동 기록이 있으면 데이터 근거형, 없으면 설문 기반 태도형으로 카드가 달라져야 하는데,
이걸 서버 if문으로 가르지 않고 단일 프롬프트가 상황을 보고 적응하게 했다.
확실한 값은 LLM에 안 맡긴다
반대로, 확실한 값은 LLM에게 맡기지 않았다.
사용자 이름 같은 건 서버가 계산해서 넣는다.
LLM에게 이름을 채우게 하면 그럴듯한 이름을 지어내는 환각이 난다.
서버가 아는 값은 서버가 박아 넣어 그 여지를 원천 차단했다.
입력은 채팅과 같은 길로
카드 생성에 넣는 LLM 입력도 손수 만들지 않았다.
채팅이 쓰는 것과 똑같은 함수로 컨텍스트를 렌더한다.
그래서 카드의 입력과 채팅의 입력이 완전히 같다.
한쪽만 어긋나는 drift가 없고, 나중에 프로필에 필드를 추가하면 카드에도 자동으로 반영된다.
곁들여, 러닝 횟수 같은 값은 카드에 넣지 않았다.
사용자가 이미 아는 숫자라 "그래서 어쩌라고"가 된다.
이미 아는 데이터를 되읊는 건 흥미를 끌지 못한다.
정리
- 종목·데이터 유무를 서버 플래그/if문으로 나누지 않고 단일 프롬프트가 적응 — "창발적 속성이지 플래그가 아니다"
- 이름처럼 확실한 값은 서버가 계산해 주입 — LLM 환각 원천 차단
- 카드의 LLM 입력을 채팅과 동일한 경로로 렌더 — drift 0, 필드 추가 시 자동 반영
- 사용자가 이미 아는 값(횟수 등)은 넣지 않음 — 데이터 리캡은 훅이 못 됨
LLM 기능은 "무엇을 서버가 정하고 무엇을 LLM에 맡길지"의 분배가 핵심이다.
분기는 최소화해 프롬프트가 적응하게, 확실한 값은 서버가 박아 환각을 막고, 입력은 기존 경로를 재사용한다.
'AI' 카테고리의 다른 글
| [에이전트] 대화 선제 요약 트리거 백필 함정 반복 실패 쿨다운 (0) | 2026.08.04 |
|---|---|
| [메모리] 내부 신호와 대화 노출 분리 category tags 직렬화 제외 (0) | 2026.08.04 |
| [동시성] 락 대기가 클라이언트 타임아웃보다 길면 안 되는 이유 (0) | 2026.08.02 |
| [LLM] 정적 시스템 프롬프트 매 턴 바뀐 섹션만 주입 델타 컨텍스트 (0) | 2026.08.01 |
| [에이전트] 무엇을 잊을지의 설계, 자주 꺼낸 기억일수록 오래 남긴다 (0) | 2026.08.01 |