diff --git a/docs/PLANNING.md b/docs/PLANNING.md index d3f3590..5264236 100644 --- a/docs/PLANNING.md +++ b/docs/PLANNING.md @@ -125,6 +125,8 @@ 아직 별개로 필요 — `poc-plan.md` "필요한 것" 참고) - [x] 라벨 없는 원천 대화 34,030건 추가 확보 — `poc/tone-corpus/build_unlabeled_corpus.py`로 `unlabeled.jsonl` 정리 (화행/슬롯 라벨 없음, 순수 언어모델링용) +- [x] 개인화 레이어 설계 구체화 — `tech-design.md` §2-1 (v1은 커스텀 학습 없이 과거 발화 검색 + + few-shot, 기반 코퍼스는 평가/v2 온디바이스 증류용으로 역할 한정) - [x] 응답 초안 생성기 프로토타입 — `poc/tone-corpus/generate_draft.py` (말투 예시 + 대화 맥락 → LLM 호출로 초안 생성, 에스컬레이션 케이스는 `[ESCALATE]`로 거절). API 키 없이 코퍼스 실제 대화로 프롬프트 구성까지만 확인함 — 실제 자동 호출은 `ANTHROPIC_API_KEY` 설정 후 가능 diff --git a/docs/poc-plan.md b/docs/poc-plan.md index 461420d..d9c7ca1 100644 --- a/docs/poc-plan.md +++ b/docs/poc-plan.md @@ -41,6 +41,9 @@ 일반 톤 생성 모델을 먼저 학습/평가할 수 있게 정리함 — [`poc/tone-corpus/`](../poc/tone-corpus/) 참고. 이건 개인화 검증(위 방법론)을 대체하지 않는다 — 익명 화자쌍의 일반 대화라 "내 말투 같다"는 질문에는 답을 못 준다. 개인화 검증은 여전히 실제 참가자의 대화 샘플이 필요하다. +- **개인화 메커니즘**: v1은 커스텀 모델 학습이 아니라 그 사람의 과거 발화를 검색해 few-shot으로 + 주입하는 방식 — `tech-design.md` §2-1에 구체화. PoC #1에서 수집한 참가자 샘플이 바로 이 메커니즘의 + "말투 예시"가 된다. ## PoC #3 — 사칭/신뢰 수용성 (분신 뱃지·거부권 UX) diff --git a/docs/tech-design.md b/docs/tech-design.md index c73b4cb..854c3c6 100644 --- a/docs/tech-design.md +++ b/docs/tech-design.md @@ -30,6 +30,30 @@ 서버 왕복 지연이나 서버 장애에 영향받지 않아야 안전선이 항상 지켜진다. - **대화방 저장/릴레이는 서버.** 멀티 디바이스 동기화, 상대방에게 메시지를 전달하는 기본 기능. +### 2-1. 개인화 레이어 — 실제로 어떻게 "그 사람 말투"가 되는가 + +v1에서는 커스텀 모델을 새로 학습하지 않는다. 대신 **검색 기반 few-shot**으로 개인화한다 — +[`poc/tone-corpus/generate_draft.py`](../poc/tone-corpus/generate_draft.py)가 이미 구현한 +"말투 예시 + 대화 맥락 → LLM 호출" 방식을 그대로 쓰되, 말투 예시를 고정 목록이 아니라 +**그 순간 대화와 가장 비슷한 과거 발화 5~8개를 그 사람의 메시지 이력에서 검색해 넣는다.** + +1. **온디바이스**: 사용자의 과거 메시지(온보딩 시 임포트한 50~100개 + 계속 쌓이는 실사용 이력)를 + 기기 내에서만 저장. 원문은 서버로 안 올라간다 (§ 위 원칙과 동일) +2. **검색**: 지금 답장해야 할 맥락과 유사한 과거 발화를 찾는다 — v1은 가벼운 키워드/최근성 + 기반 검색으로 시작하고, 임베딩 기반 검색은 필요성이 확인되면 추가한다 (지금부터 임베딩 + 인프라를 먼저 만들지 않는다) +3. **생성**: 검색된 예시 + 최근 대화 맥락을 `generate_draft.py`와 같은 프롬프트 계약으로 서버 + LLM(Gemini)에 보내 초안 하나를 받는다. 온디바이스로 충분해지면 이 호출을 온디바이스 모델로 + 교체하되, 프롬프트 계약(예시+맥락 in, 초안 1개 out)은 그대로 둔다 + +**기반 코퍼스(AI-Hub 14.2만 건, `poc/tone-corpus/`)의 역할은 이 개인화 메커니즘 자체가 아니다.** +호스팅된 LLM(Gemini)이 이미 일반적인 한국어 대화 유창성을 갖고 있어서, v1에 별도로 코퍼스를 +학습시킬 필요가 없다. 이 코퍼스는 두 가지로만 쓴다: +- **평가**: 검증셋으로 "일반적인 한국어 SNS 대화로서 얼마나 자연스러운가"를 벤치마크 (개인화 + 여부와 무관한 기초 품질 체크 — `poc/tone-corpus/README.md` "샘플 검증"이 그 예) +- **v2 이후 온디바이스 증류 대비**: 배터리/지연/프라이버시 압박으로 자체 경량 모델이 필요해지면, + 이 코퍼스가 그 모델의 기반 학습 데이터가 된다. v1 시점에는 착수하지 않는다 + ## 3. 자율성 엔진 (L0~L2) 1. 수신 메시지 → 에스컬레이션 판정기 먼저 통과 (금전/약속 확정/민감 키워드+의도 분류)