본문 바로가기

개발이야기

(9)
RAG 임베딩 검색 품질 개선기, 리랭킹은 후보 회수 뒤에야 효과가 났다 Katsubee 지식 검색은 nomic-embed-text 벡터 검색과 키워드 검색을 RRF로 합치고, 켜면 채팅 모델이 후보를 다시 줄 세우는 구조다.리랭킹을 처음 켰을 때 정답이 상위 4개에 드는 비율(hit@4)은 10%에서 15%로 겨우 올랐다. 원인은 키워드 검색이 질문 40개 중 0건을 돌려주던 후보 회수 문제였다.키워드를 고친 뒤에는 같은 리랭킹이 hit@1을 17.5%에서 70%로 끌어올렸다. 대신 질문당 6.4초가 더 들어서 기본값은 꺼 두었다.Katsubee의 프로젝트 지식 검색(RAG)은 임베딩 모델 하나에 기대지 않고 벡터, 키워드, 리랭킹을 겹쳐 쓴다. 이 글은 그 구성을 일반적인 임베딩 검색 방법과 견주어 보고, 측정하면서 틀렸던 가정을 시행착오 순서로 남기는 개발일지다. 수치는..
도메인 구매부터 Cloudflare 셀프 호스팅까지 이 글은 을 실제로 운영하면서 쓴 Cloudflare 설정을 화면 그대로 정리한 기록이다.도메인은 Cloudflare Registrar에서 샀고, 등록과 DNS가 같은 대시보드에 있어 네임서버를 따로 옮길 일이 없었다.정적 사이트는 Workers에 올리고 를 커스텀 도메인으로 연결했다.집 Mac에서 도는 서비스는 포트를 열지 않고 Cloudflare Tunnel로 서브도메인에 붙였다.1. 도메인 구매Domains 메뉴의 Registrations에서 Buy domain을 눌러 검색하고 결제한다. 도메인은 원가에 가깝게 파는 구조라 갱신 때 가격이 튀지 않는다는 점이 Cloudflare를 고른 이유였다. Registrations 목록에서 만료일과 자동 갱신 여부를 볼 수 있고, 내 도메인은 자동 갱신이 켜져..
환각 방지 프롬프트, 효과는 입증 못 했다 katsubee의 환각 방지 시스템프롬프트(TB-224)는 정기 수집에서 드러난 저점 답변 6건을 계기로 넣었고, 배포는 했지만 효과는 입증하지 못했다.규칙 4개를 더 얹은 TB-225 버전은 골든셋 6건을 3회씩 돌려 2/6 대 2/6으로 달라진 점이 없어서 반영하지 않았다.배포 게이트가 막은 별도 케이스(TB-270)는 코드와 무관한 모델 비결정성으로 판단해 flaky 표시로 분리했다. 실제 품질 문제는 그대로 남아 있다.이 글은 katsubee의 환각 방지 시스템프롬프트와 배포 게이트 불안정을 다룬 개발 기록이다. 저장소의 티켓 문서와 커밋 기록에서 확인한 내용만 적었다.문제: 근거 없이 단정하는 답변katsubee는 검색 결과와 프로젝트 지식을 바탕으로 답하는 채팅 서비스다. 정기적으로 수집한 질..
katsubee 답변 품질 측정, 골든셋과 한계 katsubee는 답변 품질을 골든셋 회귀 eval, 정기 eval, 일반 질의 수집 세 갈래로 잰다.골든셋은 43케이스이고, 통과는 규칙 검사와 LLM 판정 점수를 모두 넘어야 한다.채팅 모델이 판정도 맡아서 절대 점수보다 기준선 대비 변화를 보고, 프롬프트로 품질을 올리려던 시도는 두 번 모두 효과가 입증되지 않았다.이 글은 katsubee·katsubox 소개 글에서 이어지는 개선 시리즈의 여섯 번째 글이다. 앞선 글들이 검색 품질을 다뤘다면, 이번에는 답변 자체의 품질을 어떻게 재고 있고 그 방법이 어디서 한계에 부딪히는지 정리한다.모델이나 프롬프트를 바꿀 때 무엇이 나빠졌는지 알아야 한다로컬 모델은 바꾸거나 시스템 프롬프트를 고칠 때마다 답이 달라질 수 있다. 눈으로 몇 개 확인하는 것으로는 어..
katsubox DB 백업 자동화, 매일 04:10 katsubox의 앨범, 공유 링크, 페이지, 댓글 메타데이터는 katsubox.db 파일 하나에만 있어서, 이 파일이 지워지면 복구할 방법이 없다.앱이 스케줄러를 갖지 않는 대신 launchd가 매일 04:10에 백업 API를 호출하고, SQLite 온라인 백업으로 일관된 스냅샷을 만든다.설치 후 6일 동안 5번 돌았고 10월 23일 하루가 비었는데, Mac이 그 시간에 꺼져 있었던 것이 확인됐다.이 글은 katsubee·katsubox 소개 글에서 남겨 둔 개선점 가운데 katsubox의 DB 백업을 다룬 시리즈의 네 번째 글이다.파일은 남아도 DB가 없으면 복구할 수 없다katsubox는 파일을 데이터 폴더에 그대로 쌓는다. 폴더 구조가 곧 정보라서 파일만 보면 백업이 필요 없어 보인다. 문제는 그..
katsubee RAG 리랭킹, 기본 꺼짐과 운영 켜짐 katsubee의 지식 검색에는 LLM으로 후보를 다시 줄 세우는 리랭킹이 있고, 코드 기본값은 꺼짐이지만 운영 설정은 켜짐이다.검색이 고장 난 상태에서는 hit@4가 10%에서 15%로 올랐을 뿐이고, 복구 뒤에는 47.5%에서 72.5%로 올랐다.정확도는 크게 오르지만 질문당 6.4초가 늘어서, 어드민에서 즉시 켜고 끄는 토글로 두었다.이 글은 katsubee·katsubox 소개 글과 RAG 키워드 검색 복구 글에 이어지는 시리즈의 세 번째 글이다. 앞 글이 후보를 제대로 뽑는 이야기였다면, 이번에는 뽑힌 후보의 순서를 바꾸는 리랭킹을 다룬다.리랭킹이 하는 일katsubee의 검색은 벡터 검색과 키워드 검색을 RRF로 합쳐 후보를 만든다. 리랭킹은 그 후보를 채팅 모델에게 한 번에 보여 주고 질문에..
katsubee RAG 로우데이터 수집, 198건 분석 katsubee는 매일 새벽 지식 청크에서 질문을 만들어 실제 검색 경로를 돌리고, 단계별 정답 순위를 기록한다.10월 12일부터 25일까지 쌓인 198건을 보면 정답은 키워드 후보에 82.3%, 벡터 후보에 29.8% 들어 있었다.정답이 후보 어디에도 없는 경우가 26건이고, RRF 12개 단계에서 잘린 경우가 43건이라 다음 개선 대상이 보인다.이 글은 katsubee·katsubox 소개 글에서 이어지는 개선 시리즈의 다섯 번째 글이다. 앞선 글에서는 한 번 돌린 벤치마크 40문항으로 검색을 고치고 리랭킹을 쟀다. 이번에는 그 측정을 한 번으로 끝내지 않기 위해 만든 로우데이터 수집을 다룬다.벤치마크 40문항 한 번으로는 부족했다키워드 검색이 0건이던 문제를 찾은 것도, 리랭킹 효과를 잰 것도 벤치..
katsubee·katsubox 소개, 직접 구축한 AI 채팅 katsubee는 회사에서 쓸 수 없는 AI 채팅을 로컬 Ollama로 직접 서버에 구축한 것이고, katsubox는 대용량 파일을 떨어뜨리고 정리하는 개인용 파일 드롭이다.katsubee는 문서 검색, 운영 질의, 주간 보고 작성에 쓰이고, katsubox는 Docker 이미지 tar를 Windows FTP로 넘기는 경유지다.이 글은 두 서비스 소개이고, 이후 글은 여기서 드러난 개선점을 하나씩 다룬다.katsubee와 katsubox, 한 줄 소개katsubee와 katsubox는 내가 직접 구축해 같은 Mac mini 위에서 돌리는 두 서비스다. 같은 Cloudflare 터널을 쓰지만 레포와 프로세스는 분리돼 있다.katsubee는 로그인 없이 바로 묻고, 로그인하면 대화와 문서가 계정에 남는 LL..