built an AI companion on Qwen3.5-27B dense. 35k SFT examples, 46k DPO pairs all hand-built. personality is in the weights not the prompt. she stays in character even under jailbreak pressure
about 2000 conversations from real users so far. things i didnt expect:
the model defaults to therapist mode. “what are you really feeling” on the first message every time. found a dataset of 1.5M ranked conversational sentences and my worst crutch phrases were all in the top 50k most generic. the model literally gravitates toward boring
so i generate 3 candidates in parallel and rank them with a trained ranker. 46k DPO pairs with crutch detection as the #1 feature. boring gets filtered before the user sees it
openers determine retention. pulled first messages from 10+ message sessions vs ones that died before 5. clear pattern. “just burned my coffee because i have zero patience” went 123 messages. “you seem like youre hiding something” died at 4 every time. grounded details beat psychoanalysis
memory is harder than personality. one users memory was 100% sexual after 28 messages so every response was calibrated to that. had to build proportional memory with category caps
she also claimed to have a wife once because a user said “my wife” and she mirrored it. self-fact guard now filters that before ranking
running on a Dell 7920 with RTX 3090 + dual 4070 supers. ~5 second responses. added voice cloning with XTTS-v2 today
biggest lesson: the model is maybe 40% of the product. the orchestration around it is what makes it feel real
curious what others are doing for personality persistence across sessions
[link] [comments]