위로받고 싶은 날 말 걸 곳이 없어서 직접 만들기 시작했습니다. 고3이고, 혼자 설계·운영하고 있습니다.

가입이나 이메일 입력 없이 게스트로 바로 대화해볼 수 있습니다. 들어가면 아르가 먼저 안부를 묻고, 대화를 기억해서 다시 오면 이름을 부르며 지난 이야기를 이어갑니다.

기존 서비스와의 차이

ChatGPT 같은 범용 어시스턴트는 매번 처음 보는 상대처럼 응대하고, 캐릭터챗 계열은 몰입·체류시간을 늘리는 방향으로 설계되는 경우가 많습니다. 아르는 반대 방향입니다 — 연속성(기억)을 핵심 축으로 하되, 사용자가 서비스를 덜 필요로 하게 되는 것을 성공으로 정의하고 의존을 유도하는 표현과 다크패턴을 금지했습니다.

기술적인 세부사항

굴절반사 게이트: "내 마음이 왜 이런지 찾아줘" 같은 발화를 키워드("찾아줘")만 보고 검색으로 보내면 위로가 필요한 순간을 망칩니다. 그래서 키워드 트리거에 걸린 요청만 실행 직전에 초소형 LLM 호출로 의도를 재평가하고, 대화성 발화면 검색을 취소합니다. 판정 실패 시 기존 키워드 판정을 유지합니다(fail-open). 생성 후 필터링이 아니라 도구 실행 전 재평가라는 구조입니다.
기억: 구조화 기억(이름·취향·진행 맥락)과 원문 아카이브(SQLite + 한글 2-gram 유사도 검색)를 분리했고, 민감한 대화는 기본 미저장이며 사용자가 직접 조회·수정·삭제할 수 있습니다.
안전: 위기 신호 감지 시 전문기관(자살예방 통합번호 109) 안내를 우선합니다. 정신건강 전문 서비스가 아니라는 경계를 화면과 페르소나 양쪽에서 유지합니다.
스택: FastAPI + 바닐라 JS, 모델은 API 조달(모델-애그노스틱), Docker/Caddy 단일 드롭릿, 회귀 테스트 296개, 익명 코호트 리텐션 측정 내장.
초기 베타라 부족한 점이 많습니다. 특히 첫 대화 품질과 진입 화면 전환율을 개선하는 중입니다. 사용해보시고 어색한 부분을 알려주시면 반영하겠습니다. 개인 대화 원문은 보지 않고 익명 지표로만 확인합니다.

실제 사례

사용자가 어떤 노래를 물었을 때 아르가 웹 검색을 하고도 계속 엉뚱한 답을 한 적이 있습니다. 로그를 보니 검색은 실행됐는데 검색어가 문제였습니다. "그 곡은 주제가 뭔지 말해줘"라는 후속 질문에서 이전 대화의 주제어(곡 이름)가 빠진 채 "그 곡은 주제가"로 검색하고 있었습니다. 지금은 지시어("그 곡")를 감지하면 이전 발화에서 주제어를 찾아 합성하도록 고쳤습니다. 후속 질문의 검색어 생성이 이 계열 서비스의 숨은 난제라는 걸 운영하면서 배웠습니다.

혼자 운영하기 위한 장치들

1인 운영이라 사람 대신 규율이 일하게 만들었습니다. 배포 전 데이터 스냅샷과 무결성 검증 자동화, 실사용자/평가/운영자/봇 트래픽의 물리적 로그 분리(제 테스트가 지표를 오염시킨 적이 있어서), 그리고 회귀 테스트를 매 배포 전에 전부 돌립니다.

댓글과 토론