왜 local
cwkPippa 가 모든 걸 the local machine 에서 실행. embedding 이 Ollama 의 bge-m3 (multilingual, 1024-dim) 거침. ChromaDB 가 <app-data>/chroma/ 에 저장. memory 작업 위해 머신 떠나는 API 호출 없음.
두 collection
- messages — 모든 assistant + user message 가 turn 끝난 후 embedded. '어디서 X 얘기했지?' 검색에 사용.
- vault — 모든 vault file 이 edit 후 embedded. RAG + '아빠 가 Y 에 대해 어떻게 생각?' 검색에 사용.
왜 specifically bge-m3
multilingual — 한국어와 영어 같은 vector space 에서 처리. 피파 vault 에 둘 다 있어. 영어만 embedding 대부분 한국어 entry 에서 무너짐.
Embedding 결과는 기억 자체가 아니라 후보 목록이야. vector distance가 가깝다고 지금 질문의 답이라는 보장은 없어. source path와 chunk boundary를 같이 남기고, reranker 뒤에도 원문을 읽어 판단해야 해. 검색 점수가 기억의 진실성을 대신하면 안 돼.
local provider를 쓰는 이유도 단순한 비용 절감이 아니야. 가족의 대화와 vault chunk가 retrieval을 위해 외부 API로 나가지 않게 하고, provider가 잠깐 멈춰도 원본 memory는 그대로 보존해. embedding index는 다시 만들 수 있는 mirror고 Markdown과 JSONL이 source야.