PetAI WBS 3.0 로컬 AI·장기 기억
목표: 관계와 게임 규칙은 결정론적으로 유지하면서, 로컬 SLM이 승인된 상태를 자연스러운 한국어 표현으로 바꾼다.
주 책임: Local AI
협업: Content, Unity, Privacy, QA
핵심 원칙: template-first, local-first, AI는 상태를 결정하지 않음
1. AI가 하는 일과 하지 않는 일
| 구분 |
포함 |
제외 |
| 표현 |
승인된 intent와 상태를 자연스러운 문장으로 변환 |
관계·재화·해금 결정 |
| 변주 |
같은 의미의 반복 표현 완화 |
설정에 없는 사실 추가 |
| 추출 |
사용자 선택에서 취향 후보 생성 |
사용자 성격을 단정 |
| 요약 |
하루·사건을 구조화된 episode summary로 압축 |
대화 원문을 cloud로 전송 |
| 검색 |
현재 장면에 필요한 local memory 선택 |
전체 기록 무차별 prompt 삽입 |
| 안전 |
출력 schema·금지 패턴·사실 ID 검증 |
validator 없는 직접 표시 |
2. 작업분해구조
| WBS |
작업 |
우선 |
선행 |
산출물 |
수용 기준 |
| 3.1.1 |
Intent catalog |
P0 |
제품·콘텐츠 |
intent, allowed state/action |
unknown intent 차단 |
| 3.1.2 |
Template fallback |
P0 |
intent catalog |
intent별 3문장 |
모델 없이 Day 0 완주 |
| 3.1.3 |
한국어 style guide |
P0 |
캐릭터 바이블 |
어미·주어·금지 표현 |
30문장 블라인드 검수 |
| 3.2.1 |
Input DTO |
P1 |
domain contract |
state/facts/memory/style budget |
forbidden field 0건 |
| 3.2.2 |
Output DTO |
P1 |
Unity adapter |
line/emotion/gesture/used IDs |
invalid JSON fallback |
| 3.2.3 |
Validator |
P1 |
DTO·catalog |
schema/fact/action/safety 검사 |
malformed fixture 100% 차단 |
| 3.2.4 |
Timeout·fallback |
P1 |
local inference |
cancel, retry policy |
1.5초 내 template |
| 3.3.1 |
Model benchmark |
P1 |
target device |
latency/RAM/한국어 표 |
기기별 P50/P95 |
| 3.3.2 |
Prompt assembly |
P1 |
memory retrieval |
deterministic prompt sections |
전체 대화 삽입 없음 |
| 3.4.1 |
Memory schema |
P1 |
privacy policy |
fact/preference/episode/recent phrase |
stable ID·source |
| 3.4.2 |
Memory write |
P1 |
result/event |
verified fact만 저장 |
AI invented fact 0건 |
| 3.4.3 |
Retrieval |
P1 |
memory store |
relevance/recency/confirmation |
source IDs 반환 |
| 3.4.4 |
수정·삭제 |
P1 |
settings UX |
edit/delete/exclude |
삭제 기억 재사용 0건 |
| 3.4.5 |
Conflict policy |
P1 |
schema |
confirmed fact 우선 |
동점 deterministic |
| 3.5.1 |
Observability |
P2 |
consent |
local error code/latency |
원문·prompt 로그 off |
3. 입력 계약
{
"intent": "approved_catalog_id",
"characterState": {
"mood": "enum",
"relationshipStage": "enum",
"currentActivity": "catalog-id"
},
"sceneFacts": [
{"id": "fact-id", "value": "structured-value", "source": "domain"}
],
"memorySummaries": [
{"id": "memory-id", "kind": "confirmed_preference", "summary": "..."}
],
"allowedEmotions": ["enum"],
"allowedGestures": ["catalog-id"],
"styleBudget": {"maxChars": 45, "sentenceCount": 1}
}
입력 금지
- 전체 대화 원문
- 정확한 GPS·주소·연락처
- HealthKit·웨어러블 원시 데이터
- 파일 시스템 절대 경로
- API token·account identifier
- validator가 모르는 임의 action·emotion
- 삭제 또는 사용 제외된 memory
4. 출력 계약
{
"line": "표시할 한국어 한 문장",
"emotion": "allowed-enum",
"gesture": "allowed-catalog-id",
"usedFactIds": ["fact-id"],
"usedMemoryIds": ["memory-id"]
}
출력은 suggestion이다. Unity가 schema, 길이, enum, 사용 fact, 금지 표현을 검증한 뒤에만 표시한다. 검증 실패는 같은 prompt 무한 재시도가 아니라 승인 template로 종료한다.
5. 기억 수명과 권위
| 종류 |
생성 권위 |
기본 수명 |
사용 조건 |
삭제 효과 |
| 게임 사실 |
Domain |
관련 추억 유지 기간 |
현재 scene 관련 |
검색·요약에서 제외 |
| 확인된 취향 |
사용자 선택+확인 |
사용자 수정까지 |
관계 단계 허용 |
즉시 미사용 |
| 취향 후보 |
deterministic extractor/SLM |
30일 또는 확인 전 |
사용자에게 단정 금지 |
즉시 삭제 |
| episode summary |
Event/Memory use case |
추억 유지 기간 |
source memory 존재 |
source와 함께 제외 |
| 최근 표현 |
Presentation |
최근 20발화 |
반복 방지 |
자연 만료 |
로컬 memory는 대화 원문 보관함이 아니라 검증된 사실과 episode의 인덱스다. 원문이 필요 없는 기능은 원문을 저장하지 않는다.
6. 자연스러운 한국어 Gate
~하고 싶어 해요처럼 관찰자 설명과 직접 화법을 섞지 않는다.
- 같은 문장 안에서 반말·존댓말을 임의 전환하지 않는다.
- 생략 가능한 주어를 매 문장 반복하지 않는다.
- 감정을
기뻐요, 슬퍼요로 설명하기보다 현재 행동과 선택으로 드러낸다.
- 사용자의 실패를 상담문·훈계문·생산성 코칭 문체로 바꾸지 않는다.
- 사실을 기억할 때 출처가 있는 구체성만 사용한다.
- 같은 어미·감탄사·호칭이 세 번 연속되지 않는다.
- 한국어 검수자는 의미 보존, 캐릭터성, 자연스러움을 별도 점수로 기록한다.
7. 성능·실패 계약
| 상황 |
앱 동작 |
사용자 경험 |
| 모델 미설치 |
template-only |
기능 손실 없이 완주 |
| cold start 지연 |
제한 시간 후 template |
기다림 spinner 최소화 |
| timeout |
요청 취소·template |
오류 문구 노출 안 함 |
| invalid JSON |
validator reject·template |
상태 변경 없음 |
| forbidden fact |
reject·local audit code |
잘못된 기억 표시 없음 |
| memory conflict |
confirmed·recent deterministic 우선 |
단정 대신 확인 선택 가능 |
| low memory |
모델 unload 또는 기능 비활성 |
저장·플레이 유지 |
8. 완료 증거
- template-only Day 0·1·3·7 완주
- input/output JSON schema fixture
- unknown intent, invalid enum, hallucinated fact, deleted memory, unsafe phrase 테스트
- target device cold/warm P50·P95 latency와 peak RAM
- airplane mode에서 inference 또는 fallback 정상
- 네트워크 request 0건 증거
- 한국어 30문장 블라인드 검수와 수정 이력
- 동일 입력 반복 시 의미 일관성, 표현 중복률 기록
9. 연결 문서