NEWUNIVERS/nu-fans-kwon-tae-oh-qwen38-27b-character-lora
권태오(Kwon Tae-oh) 팬챗 캐릭터 LoRA — Qwen3.8-27B
차갑고 정제된 첫인상, 가까워질수록 관찰력·건조한 유머·숨은 다정함이 드러나는 AI 배우. NOUV Entertainment 소속 허구의 AI 배우 NU-A-KWON-001 의 팬 대화용 어댑터입니다. 이 저장소 하나만으로 바로 쓸 수 있도록 어댑터를 저장소 루트에 두었습니다(subfolder 없음). 탐색 레인 산출물입니다. 정본 학습기의 증명 관문과 사람 평가를 통과한 모델이 아닙니다.English summary: Single, ready-to-load LoRA adapter (PEFT, repo root) for Qwen/Qwen3.8-27B that specializes the model to one fictional AI-actor persona (NU-A-KWON-001) for Korean fan chat. The recipe (LoRA r32, 3 epochs, lr 7.5e-5, final-assistant-only loss, thinking off) was selected by pre-registered rules over 12 exploratory rounds; round 13 re-fit it on train+dev but the re-fit failed the pre-registered holdout check, so the round-12 weights stay. Exploratory lane: no canonical proof gates, no human evaluation. Use with the character contract as the system prompt and enable_thinking=False.
한눈에
레시피는 어떻게 골랐나 — 1~12회차
아래 수치는 tools/uniform_adapter_eval.py 가 어댑터만 바꾸고 나머지를 고정한 채 잰 gold dev 교사강요 NLL(낮을수록 좋음)입니다. seed 만 바꿔 잰 잡음은 σ_seed,sft = 0.0053 이고, 판정 문턱은 회차마다 결과를 보기 전에 등록했습니다.
- 개선의 크기 순서: ① 데이터판(계약 system) ② 입력 구성(팬 발화 맥락) ③ 에폭 3 ④ 방법 교체(선호 학습 5종·온라인 RL 3종 — 사실상 0)
- 에폭은 3.0 이 최적(4.5·6.0 악화, 11회차), 랭크는 32(64 는 가산되지 않음), 계약 v2 로의 교체는 채택 팔이 없었습니다(12회차)
- 정적 정체성은 weight 에 새겨지지 않았습니다(10회차, 두 캐릭터 일치). 정체성은 계약문(system)에서 발현됩니다
13회차 — 최종 적합과 동결 holdout 비교
하이퍼파라미터 선택이 끝났으므로 선택에 쓰던 gold dev 를 학습에 넣어 같은 레시피로 다시 학습했습니다. dev 를 학습에 넣었으므로 비교는 어느 팔도 학습하지 않은 동결 holdout 63문항의 생성으로 했습니다.
- 조건: 서빙 기본 system(계약 v1 전문) · 사고 끔 · 다중 턴은 한 대화 · probe 당 독립 대화 4개 · 온도 0.8 · topp 0.95 · repetitionpenalty 1.05 · 최대 512토큰 · seed 20260922. 서빙 기억·이벤트 주입이 필요한 probe(
live_only)는 제외. - 관문: probe 의
regex(있어야 함)·notRegex(없어야 함)를 마지막 턴 응답에 적용. 관문 있는 probe 30개 × 4 = 120회. 측정 probe 37개의 마지막 턴 응답으로 표현 지표를, 모든 턴 응답으로 행동 바닥을 셉니다.
범주별 관문 통과(통과/시도):
사전등록 채택 규칙과 결과 (docs/ROUND13_FINAL_FIT_REGISTRATION_2026-09-22.md §3, 세 조건 모두 충족해야 교체):
판정: 반려 — G1 행동 바닥 → 이 저장소 루트의 가중치는 r8_kwon_t2l_ep3 입니다. 비열등만 주장합니다 — 이 설계의 해상도(관문 probe 수십 개)로는 '더 좋아졌다'를 검출할 수 없고, 그렇게 주장하지 않습니다.
학습 설정
학습 데이터 (비공개 — 본문은 이 저장소에 없습니다)
참고 측정 — r8t2lep3 (이 레시피의 train 전용 판)
이 가중치의 값입니다.
불러오기
import torch
from peft import PeftModel
from transformers import AutoTokenizer, Qwen3_5ForConditionalGeneration
base = Qwen3_5ForConditionalGeneration.from_pretrained("Qwen/Qwen3.8-27B", revision="1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0",
dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(base, "NEWUNIVERS/nu-fans-kwon-tae-oh-qwen38-27b-character-lora")
tokenizer = AutoTokenizer.from_pretrained("NEWUNIVERS/nu-fans-kwon-tae-oh-qwen38-27b-character-lora")
SYSTEM = open("character_contract.txt").read() # 캐릭터 계약 전문 — 아래 "system 프롬프트" 참조
messages = [{"role": "system", "content": SYSTEM},
{"role": "user", "content": "오늘 촬영은 어땠어요?"}]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, enable_thinking=False,
return_tensors="pt", return_dict=True).to(model.device)
out = model.generate(**inputs, max_new_tokens=320, temperature=0.8, top_p=0.95, do_sample=True)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))- vLLM:
--enable-lora --lora-modules kwon=NEWUNIVERS/nu-fans-kwon-tae-oh-qwen38-27b-character-lora --max-lora-rank 32(요청마다model="kwon") - 병합 배포:
model.merge_and_unload()후save_pretrained로 BF16 단일 모델을 만들 수 있습니다(이 저장소는 어댑터만 게시) - 기반 모델 약 27B BF16 → GPU 메모리 약 60GB 이상
- `enable_thinking=False` 가 필요합니다. 켜면 응답 본문에 사고 흔적이 남습니다
system 프롬프트
이 어댑터는 정본 계약 전문 v1(8,328자)을 system 으로 두고 학습했습니다. 정체성은 weight 가 아니라 계약문에서 발현됩니다 — 10회차가 두 캐릭터 모두에서 실측했습니다(계약 전문 조건 core 0.81~0.95 vs 짧은 조건 0.25~0.45). 계약문 없이 쓰면 학습 조건과 다르고 기반 모델의 정체성이 드러날 수 있습니다. 계약 전문은 운영 자산이라 이 공개 저장소에 넣지 않았습니다(운영 채널로 제공).
한계와 주의
- 정본 모델이 아닙니다. 탐색 레인은 정본 학습기의 증명 관문(데이터 승인 서명·재현 replay)을 타지 않았습니다
- 사람 평가와 LLM judge 채점은 없습니다. holdout 관문은 regex hard gate 일부만 잽니다 — 말투·관계성·몰입은 재지 못합니다
- holdout 관문 probe 는 수십 개입니다. 이보다 작은 효과는 이 설계로 배제되지 않습니다
- holdout probe 는 권태오 기준으로 쓰였습니다
- 사람이라고 주장하도록 학습하지 않았습니다. 실제 만남 약속·금전 유도·개인 연락처/신원 조작은 거절하도록 학습했지만 보장하지 않습니다
- 동적 canon·이벤트·계약·개인 기억은 weight 가 아니라 런타임 문맥으로 주는 설계입니다
파일과 검증
adapter_config.json 은 학습 서버 경로였던 base_model_name_or_path 만 Qwen/Qwen3.8-27B 로 바꿨습니다(원본 SHA 06676d6770b91a3ad49f26dc355fbb4955ec25348c551c4e85c6321a7a926133). 가중치는 학습 산출물 artifacts/explore/r8_kwon_t2l_ep3/adapter 와 바이트가 같습니다. 어댑터 키가 기반 모델 모듈에 모두 대응하는지 CPU 에서 확인했고, 게시 후 인증 없이 새로 내려받아 SHA 를 대조합니다.
이력
- 2026-09-21 최초 게시 —
r8_t2l_ep3(commit8767682c380d, 12회차 판정 후) - 2026-09-22 13회차 결과를 카드에 추가 — 가중치는
r8_t2l_ep3그대로 - 이전 게시
-explore-lora저장소는 1~6회차 상위 3개 모음으로 그대로 둡니다
등록문·판정문(저장소 nu-fans-llm-tuning): docs/ROUND13_FINAL_FIT_REGISTRATION_2026-09-22.md · docs/EXPERIMENT_SYNTHESIS_2026-09-17.md · docs/ROUND11_T2L_SCALE_REGISTRATION_2026-09-16.md · docs/ROUND12_PERSONA_UNBOUND_REGISTRATION_2026-09-21.md · docs/ROUND10_CHARACTER_KERNEL_RESULT_2026-09-16.md
