인간과 구별할 수 없는 AI를 만드는 이야기: LLM 심판과 함께하는 튜링 테스트 구현
Source: Dev.to
위의 링크에 포함된 전체 텍스트를 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다.
HL 4.1부터 시작
human‑persona 의 첫 번째 프로토타입은 “human‑likeness” 점수에서 4.1 / 10을 기록했습니다.
이는 “AI‑like”와 “human‑like” 사이의 임계값보다 훨씬 낮으며, 직접 제작하고 직접 점수를 매겼습니다.
다섯 차례의 버전을 거쳐 이 점수를 HL 7.7까지 끌어올렸습니다. 이 글에서는 그 여정—시도한 방법, 효과가 없었던 것, 그리고 크게 성공한 것—을 이야기합니다.
평가 방법: LLM Judge
Claude Sonnet을 “인간과 AI를 구별하는 전문가” 역할로 두어 출력물을 점수 매겼습니다.
JUDGE_PROMPT = """
You are an expert in distinguishing humans from AI.
Evaluate the following message and respond with JSON only:
{
"human_likeness_score": 1-10,
"style_variation_rate": 0.0-1.0,
"timing_naturalness": 1-10,
"reason_human_likeness": "Reason in one sentence",
"improvement_suggestion": "Improvement suggestion in one sentence"
}
"""
세 가지 지표
| Metric | Meaning | Target Value |
|---|---|---|
| HL (human_likeness_score) | 얼마나 비 AI‑같은가 | ≥ 7.5 |
| SV (style_variation_rate) | 얼마나 균일하지 않은가 (값이 낮을수록 좋음) | ≤ 0.35 |
| TN (timing_naturalness) | 타이밍이 자연스러운가 | ≥ 6.0 |
v1 – 매개변수만 반환 (HL 4.1)
base_persona.py는 감정 상태, 추천 스타일, 응답 지연만 반환했습니다. 텍스트 생성은 수동이었습니다.
HL: 4.1 / SV: 0.64 / TN: 4.1
판사의 진단: “글쓰기 스타일이 너무 균일합니다. 문장이 매번 같은 구조를 가지고 있습니다.”
매개변수가 텍스트에 반영되지 않았습니다 – 마치 설계도는 있지만 집을 짓지 않은 것과 같습니다.
v2 – Anthropic API를 이용한 텍스트 생성 (HL 6.1, 하지만…)
Claude API를 통합하고 감정 상태를 시스템 프롬프트에 전달하여 텍스트를 생성했습니다.
HL: 6.1 / SV: 0.56 / TN: 3.5
HL이 4.1 → 6.1로 상승했지만, TN은 4.1 → 3.5로 감소했습니다.
왜? API 응답이 너무 빨랐습니다. “2분 지연”을 설정했음에도 불구하고 메시지는 0.3 초 만에 반환되었고, 그 지연 정보는 판사에게 전달될 때 반영되지 않았습니다. 설계는 지연을 계산하고 반환했을 뿐 실제로 기다리지는 않았습니다.
교훈: 값만 반환하는 TimingController는 의미가 없습니다. 지정된 초만큼 대기하거나 “이 답변은 N분 후에 전송되었습니다”와 같은 메타데이터를 삽입해야 합니다.
v3에서는 후자를 채택했습니다: 시스템 프롬프트에 “이 메시지는 N분 후에 전송되었습니다”와 같은 컨텍스트를 추가했습니다.
v3 – 문화적 맥락 반영 (HL 6.8)
config/ja.json의 context_level: 0.85(고맥락 문화)를 시스템 프롬프트에 반영했습니다.
HL: 6.8 / SV: 0.50 / TN: 4.5
무엇이 바뀌었나요? 규칙을 추가했습니다:
“일본 비즈니스 커뮤니케이션에서는 직접적인 부정을 피하고 의미를 맥락에서 유추하도록 하는 경향이 있습니다.”
결과: “죄송하지만 그건 어려워요”가 “잠시 생각해 볼게요.” 로 바뀌었습니다.
HL + 0.7, TN + 1.0 (지연 메타데이터 덕분).
SV는 약간만 개선되었습니다(0.56 → 0.50); 스타일 일관성은 유지되었습니다.
v4 – Filler Insertion & Structural Variation (HL 7.2)
Based on the Ablation Study, I added fillers and structural variation.
HL: 7.2 / SV: 0.50 / TN: 4.5
HL + 0.4. The change worked, but SV stayed stuck at 0.50.
Even with fillers, they appeared in the same position each time, so the surrounding structure was still uniform. The issue wasn’t lack of randomness but the unchanged overall skeleton.
This hinted that “superficial transformations have limits,” foreshadowing the later decision to freeze the pipeline.
v5 – 금지 문구 + 톤 미러링 (HL 7.7)
최종 0.5점 상승은 두 가지 간단한 아이디어에서 비롯되었습니다.
금지 문구 탐색
많은 답변이 “Thank you for your message.”(메시지에 감사드립니다)로 시작합니다. 사람은 첫 번째 교환 이후에는 거의 이런 말을 하지 않지만, LLM은 자주 사용합니다.
"banned_phrases": [
"Thank you for your message",
"Please feel free to reach out",
"Feel free to contact me anytime"
]
이 목록을 설정 가능하도록 만들고 시스템 프롬프트에 “절대로 다음 문구를 사용하지 마세요.” 라는 지시를 추가했습니다.
결과: HL + 0.5.
돌이켜보면, 이 프로젝트의 가장 중요한 발견은 인간과 같은 느낌을 개선하는 것이 추가하는 것보다 멈춰야 할 것에 더 초점을 맞출 수 있다는 것이었다.
톤 미러링 (영어용)
영어 평가에서는 모델에게 “사용자의 톤에 맞추라”고 지시했습니다:
Match the formality level of the user's message.
If they use casual language, respond casually.
Never open with 'Thanks for reaching out' unless it's the very first message.
이로 인해 영어 HL이 7 → 8로 상승했습니다. “Thanks for reaching out”(연락해 주셔서 감사합니다)는 “Thank you for your message.”와 같은 의미의 영어 표현입니다.
최종 결과
| 버전 | 변경 내용 | HL | SV | TN |
|---|---|---|---|---|
| v1 | 매개변수만 반환 | 4.1 | 0.64 | 4.1 |
| v2 | Anthropic API를 이용한 텍스트 생성 | 6.1 | 0.56 | 3.5 |
| v3 | 문화적 맥락 반영 | 6.8 | 0.50 | 4.5 |
| v4 | 채우기 삽입 및 구조적 변형 | 7.2 | 0.50 | 4.5 |
| v5 | 금지 문구 + 어조 미러링 | 7.7 | 0.36 | 5.5 |
솔직한 회고
잘 된 점
- 금지 문구 설정 – 모델이 지나치게 정중하고 기계적인 시작을 사용하는 것을 차단함으로써 가장 큰 단일 향상을 얻었습니다.
- 문화 인식 프롬프트 – 시스템 프롬프트를 고맥락 일본식 커뮤니케이션에 맞게 조정함으로써 현실감을 더했습니다.
- 타이밍 메타데이터 – “N분 후에 전송”이라고 명시함으로써 타이밍이 보다 자연스럽게 느껴졌습니다.
- 톤 미러링 – 사용자의 격식 수준에 맞추어 모델이 일반적으로 들리는 것을 방지했습니다.
잘 안 된 점
- 주변 구조를 바꾸지 않은 단순한 채우기 삽입은 스타일 변화를 제한했습니다.
- 실제로 기다리거나 출력에 주석을 달지 않은 “지연 계산기”에 의존하는 것은 가치를 추가하지 못했습니다.
요점
인간과 같은 자연스러움을 향상시키는 것은 종종 AI 고유의 습관(예: 과도한 정중함, 일관된 표현)을 제거하는 것과 관련이 있습니다. 모델에게 해야 할 일을 알려주는 것보다 하지 말아야 할 일을 알려주는 잘 설계된 시스템 프롬프트가 더 강력할 수 있습니다.
잘 된 점
- “Make it stop” 접근법 – 예상보다 더 강력한 효과가 있었습니다.
- 톤 미러링 – 간단한 지시가 큰 영향을 미쳤습니다.
- 문화적 맥락 주입 –
ja.json의context_level필드가 실제로 작동했습니다.
잘 되지 않은 점
- **SV (Stylistic Uniformity)**가 0.64 → 0.36으로 개선되었지만 0.35 목표치에 간신히 못 미칩니다. 추가 개선을 위해서는 파이프라인 기반 사후 처리보다 더 근본적인 접근이 필요합니다.
- **TN (Timing Naturalness)**는 5.5로 6.0 목표에 못 미칩니다.
TimingController값이 LLM에 전달되는 방식에 아직 개선 여지가 있습니다.
LLM 판사의 신뢰성 자체 – LLM이 무언가를 “인간과 유사하다”고 판단하더라도 실제 인간이 동일하게 느끼는지는 별개의 문제입니다. 인간 평가(Human Eval)를 수행하지 않고 숫자만 쫓은 것을 후회합니다.
이러한 반성은 이후 **파이프라인 동결 결정**으로 이어졌습니다.
Summary
- HL은 4.1 → 7.7 로 5개 버전에 걸쳐 상승했습니다.
- 가장 효과적인 변화는 **“금지된 구문”**이었습니다—AI‑같은 흔한 문구를 단순히 제거하는 것만으로 HL +0.5 를 얻었습니다. 인간과 같은 느낌은 추가가 아니라 빼기 로도 향상될 수 있습니다.
- 가장 큰 교훈: 숫자만 쫓아서는 안 된다는 점입니다. LLM‑judge 점수가 7.7이라 하더라도, 사람이 “이건 사람이 쓴 거다”라고 생각하는지를 별도로 검증해야 합니다.
Repository:
📄 이 기사에 실린 연구는 사전 인쇄물(preprint) 형태로 정식 출판되었습니다
HumanPersonaBase: A Language‑Agnostic Framework for Human‑Like AI Communication
DOI: