01 · 문제의식과 비교 환경
정답 모델은 없었습니다
프로젝트가 시작한 지점
DearMate는 부트캠프 최종 프로젝트로 만든 AI 인플루언서·companion 대화 서비스입니다. 인플루언서·연예인·아이돌이 팬과 구독 형태로 소통하는 서비스와, role-playing 기반으로 캐릭터와 대화하는 서비스를 함께 보며 출발했습니다. 목표는 답변을 생성하는 chatbot이 아니라, 사용자가 하나의 인플루언서와 계속 대화하고 관계를 만들어 갈 수 있는 agent였습니다.
prompt와 모델을 함께 비교해야 했던 이유
팀은 먼저 각자가 만들고 싶은 agent persona를 정리하고, 그 persona를 바탕으로 기준 system prompt를 만들었습니다. 처음에는 비용 효율과 응답 품질을 함께 만족하는 모델 하나를 골라 쓰려 했습니다. GPT-OSS 계열을 기반으로 먼저 시도했지만, 기대한 대화 품질에 미치지 못한다는 피드백이 있었습니다.
그래서 문제를 단순한 모델 교체로 풀기보다, 같은 persona와 같은 대화 맥락에서 여러 모델의 응답을 직접 비교할 수 있는 LLM Arena 형태의 환경으로 바꾸었습니다. LeviTheWeasel/rp-benchmark는 role-playing 대화에 맞는 후보군을 넓히는 출발점으로만 참고했습니다. 이 페이지에서 말하는 실험 모델은 이후 동일한 persona·system prompt·대화 맥락으로 실제 비교한 후보이며, 전체 목록과 결과는 아래 표에 정리했습니다.

프롬프트를 고정한 LLM Arena 실험에 사용한 모델
팀 내부에서 약 800개 turn을 비교하며, 모델별 선택률뿐 아니라 호출 성공률과 P50·P95 latency를 함께 기록했습니다. 선택률은 해당 모델이 선택지에 등장한 횟수 중 preferred로 선택된 비율입니다. 즉, 응답 품질을 단일 점수로 확정하는 값이 아니라 같은 조건에서 어느 응답이 사람에게 선택됐는지 읽기 위한 지표입니다.
| 모델 | 선택률 | 선택/비교 | 성공률 | P50 | P95 |
|---|---|---|---|---|---|
| google/gemma-4-31b-it | 42.9% | 3/7 | 100.0% | 1.43s | 11.44s |
| google/gemini-3.1-flash-lite | 30.5% | 40/131 | 97.7% | 1.26s | 1.88s |
| z-ai/glm-5-turbo | 29.7% | 33/111 | 97.0% | 3.78s | 23.78s |
| anthropic/claude-sonnet-5 | 25.8% | 42/163 | 98.1% | 4.51s | 8.56s |
| openai/gpt-oss-120b | 25.0% | 5/20 | 96.9% | 0.81s | 1.54s |
| deepseek/deepseek-v4-flash | 21.2% | 38/179 | 97.8% | 5.70s | 7.44s |
| meta-llama/llama-4-maverick | 17.1% | 7/41 | 100.0% | 1.17s | 1.92s |
| nvidia/nemotron-3-super-120b-a12b | 15.0% | 6/40 | 72.1% | 16.99s | 33.73s |
| mistralai/mistral-small-2603 | 12.2% | 5/41 | 100.0% | 1.62s | 4.48s |
| qwen/qwen3.6-flash | 6.5% | 3/46 | 100.0% | 14.57s | 32.64s |
| minimax/minimax-m2-her | 0.0% | 0/6 | 100.0% | 8.73s | 9.99s |
| openai/gpt-5.4-mini | 0.0% | 0/6 | 100.0% | 2.65s | 2.86s |
원시 선택률만 보면 Gemma 4가 42.9%로 가장 높아 보이지만, 이는 7회 비교 중 3회가 선택된 값입니다. 반면 비교 수가 100회 이상인 후보에서는 Gemini 3.1 Flash Lite가 30.5%(40/131)로 가장 높았고, DeepSeek V4 Flash는 가장 많이 노출된 179회 중 38회가 선택되어 21.2%였습니다. 따라서 DeepSeek를 포함해 어떤 모델도 절대적인 승자라고 부를 수 없었습니다.
- 표본이 적은 후보는 조기 탈락 결과입니다. 7회, 20회, 40여 회처럼 비교 수가 적은 모델은 비용 최적화를 위해 추가 호출을 중단한 후보입니다. 낮은 비교 수를 곧바로 낮은 품질로 읽거나, 높은 선택률을 최종 순위로 읽지 않았습니다.
- 응답 품질과 운영 조건은 함께 봐야 했습니다. 선택률이 비슷해도 성공률과 P50·P95 latency의 차이가 커 실제 서비스에서 같은 선택이 되지 않을 수 있었습니다.
- weighted ranking은 후보를 좁히는 신호였습니다. 모델 하나를 고르는 답이 아니라, 다음 비교와 prompt 개선에 어떤 응답을 남길지 판단하는 출발점이었습니다.
02 · 선호 응답을 남기는 loop
선호를 데이터로 바꾸다
비교 화면에서 데이터 수집 loop로
LLM Arena는 처음에는 가장 선호되는 모델을 고르기 위한 비교 화면으로 시작했습니다. 하나의 사용자 입력에 대해 여러 모델이 답을 만들고, 평가자는 그중 preferred·non-preferred를 고릅니다. 그러나 비교 수가 충분한 후보에서도 과반의 선택률을 가진 모델은 없었고, 비용 최적화를 위해 일부 후보는 빠르게 비교를 중단했습니다. 이 결과를 확인하면서, 이 구조의 목적을 다시 보게 되었습니다.
모델을 한 번 선택하고 끝내는 것보다, 선택된 답이 왜 선택되었는지와 선택되지 않은 답이 무엇이었는지를 계속 남기는 편이 이후의 agent를 만드는 데 더 가치가 있었습니다.
비교 turn마다 남긴 것
같은 기준 prompt 아래에서 나온 응답과 사람의 선택을 다시 읽을 수 있도록, 비교 turn에는 아래 정보를 함께 저장하는 방향으로 설계했습니다.
- 기준 — agent persona와 system prompt
- 맥락 — 해당 turn까지의 대화 흐름
- 비교 — 각 모델과 각 모델이 만든 응답
- 선호 — turn별 preferred 응답과 비선호 응답
- 연결 — 선택된 응답이 다음 대화로 이어지는 관계
다음 모델을 위한 데이터
선택된 답변은 instruction tuning을 위한 응답 후보가 될 수 있고, 선호·비선호 응답의 쌍은 preference 기반 학습을 고민할 수 있는 재료가 됩니다. 이는 fine-tuning이나 DPO를 이미 완료했다는 뜻이 아닙니다. 범용 모델을 계속 바꿔 가며 비교하는 단계에서, 먼저 사람에게 선택된 응답과 그 근거를 잃지 않고 모을 수 있는 loop를 만든 것이 핵심이었습니다.
03 · avatar와 행동의 사용성
대화 품질은 화면에도 있습니다
텍스트 응답 비교에서 제품 interaction으로
avatar에 대한 고민은 LLM Arena의 텍스트 응답 비교와 분리된 기능에서 시작하지 않았습니다. 동일한 persona와 대화 맥락에서 어떤 응답이 선택되는지 확인한 뒤, 실제 인플루언서 경험에서는 그 응답을 누가, 어떤 모습과 반응으로 전달하는지도 품질에 들어간다고 보았습니다. 대화 안에서 쌓인 관계를 화면에서도 같은 인물에게 연결하려면, persona의 언어적 일관성만큼 시각적·행동적 일관성도 필요했습니다.
이 흐름에서 3D avatar가 필요해진 이유
DearMate에서 avatar는 화면을 꾸미는 요소가 아니라 인플루언서의 정체성을 유지하기 위한 artifact였습니다. 생성형 AI로 이미지를 만들 때마다 얼굴이나 분위기가 흔들리면, 사용자는 같은 인플루언서와 대화하고 있다는 감각을 잃을 수 있습니다. 그래서 정해진 캐릭터를 3D avatar로 먼저 만들고, 이후 이미지와 다른 생성 결과를 만들 때도 같은 인물의 기준으로 활용하고자 했습니다.
발화와 행동을 함께 반환하기
Grok의 companion처럼 avatar가 사용자의 말에 반응하는 경험을 참고해, 텍스트 응답만 보내는 agent가 아니라 발화와 함께 표정·제스처·animation 같은 행동도 선택할 수 있게 만들고자 했습니다. 행동을 별도 tool call로 결정하면 대화 turn에 추가 latency가 붙을 수 있었기 때문에, prompt에서 필요한 행동을 함께 지정하고 structured output으로 반환하도록 접근했습니다.
화면은 정해진 형식의 값을 읽어 준비된 행동을 보여 주고, 모델은 임의의 동작이나 형식을 만들지 않도록 하는 방식입니다. 이 선택으로 문장의 자연스러움뿐 아니라 발화와 행동의 일치, structured output의 일관성도 평가 대상이 됐습니다.
행동은 설명할까, 보여 줄까
role-playing 서비스에는 캐릭터가 자신의 행동을 문장으로 설명하는 방식이 흔합니다. 행동 서술은 장면을 상상하게 하고 대화를 더 흥미롭게 만들 수 있지만, 인플루언서와 메시지를 주고받는 상황에서는 오히려 부자연스럽거나 과하게 느껴질 수도 있습니다. 내부에서도 두 의견이 함께 나왔기 때문에, 이 문제를 정답으로 결정하지 않고 A/B로 확인할 사용성 가설로 두었습니다.
- 텍스트 응답만 제공할 때도 avatar가 충분히 반응하는 존재처럼 느껴지는가
- 행동 서술이 사용자의 상상과 몰입을 돕는가, 아니면 설명처럼 느껴지는가
- 발화와 animation을 함께 보여 줄 때 더 자연스럽고 다음 말을 이어 가고 싶어지는가
- structured output이 발화와 행동을 일관되게 연결하는가