주권 시냅스: 지역 두뇌

발행: (2026년 6월 9일 PM 11:12 GMT+9)
10 분 소요
원문: Dev.to

Source: Dev.to

3,150개의 Markdown 파일이 들어있는 금고는 아주 정돈된 디지털 다락방과 같습니다. 지난 2년 동안 AI와 함께 탐험한 모든 대화, 코드 스니펫, 연구 토픽을 보관한 저장소이지만, 지금까지는 정적인 것이었습니다. “정리된” 상태였지만 지능적이진 않았습니다. 특정 Movesense API 호출이나 잊혀진 특허 날짜를 찾으려면 여전히 어느 상자에 넣었는지 알아야 했습니다.

오늘, 우리는 열쇠를 돌립니다. 단순 저장소에서 개인적인 의미 기반 인텔리전스 부동산으로 옮겨갑니다.

엔지니어링 레흐 한숨

이 단계에 도달하기까지의 고군분투를 저는 레흐 한숨이라고 부릅니다. “간단한” 작업이 숨은 이빨을 드러낼 때 내쉬는 피곤하고 익숙한 한숨 말이죠. 이론적으로는 로컬 의미 검색을 구축하는 것이 쉽습니다: 데이터베이스를 고르고, 임베딩 API를 호출하고, 저장하면 됩니다. 현실은 시스템 엔지니어링의 “마지막 10%”와 맞서는 33번의 반복 전쟁이었습니다.

우리는 컨텍스트 벽에 부딪혔습니다. 방대한 기술 로그가 임베딩 모델의 안전 한계를 초과해 데이터를 어떻게 나눌지 재고하게 만들었습니다. 좀비 인덱스와도 싸웠습니다. 오래된 파일 버전의 낡은 데이터가 검색 결과에 귀신처럼 남아 있었고, 이를 해결하기 위해 원자적인 “삭제‑후‑업서트” 인덱싱을 구현했습니다. 그리고 텔레메트리 위기를 겪었습니다. 데이터베이스 엔진이 개발자에게 “전화”하려다가 CLI를 반복적으로 크래시시켰고, 내부 트래커를 침묵시키는 외과적 조치가 필요했습니다.

사고의 좌표 지도

이 문제들을 해결하기 위해 우리는 편리함보다 무결성을 우선하는 스택을 만들었습니다. 핵심은 Ollama이며, 로컬에서 mxbai-embed-large 모델을 실행합니다. 이 엔진이 인간의 사고를 고차원 좌표로 변환합니다.

모델의 토큰 제한으로 아이디어가 절반으로 잘리는 일을 방지하기 위해 슬라이딩 윈도우 방식을 도입했습니다. 하나의 벡터가 저장되기 전에, Scribe는 텍스트를 800자 길이의 청크로 나누고, 각 청크는 150자의 의미 겹침을 가집니다.

def _chunk_text(text: str) -> list[str]:
    """Split text into chunks of CHUNK_SIZE chars with CHUNK_OVERLAP."""
    if not text.strip():
        return []
    if len(text) <= CHUNK_SIZE:
        return [text]
    chunks: list[str] = []
    start = 0
    step = max(1, CHUNK_SIZE - CHUNK_OVERLAP)
    while start < len(text):
        chunk = text[start : start + CHUNK_SIZE]
        if chunk.strip():
            chunks.append(chunk)
        start += step
    return chunks

시냅스가 인덱싱될 때, 우리는 이제 16자리 SHA‑256 콘텐츠 지문 해시를 계산해 가벼운 데이터 드리프트 지표로 사용합니다. Scribe는 스스로를 인식합니다; 파일이 변하지 않았다면 시스템은 한 번도 CPU 사이클을 낭비하지 않습니다. 파일이 변했을 경우, 원자적인 업데이트를 트리거합니다: 기존 “기억”을 삭제하고, 전체 과정이 성공했을 때만 새로운 기억을 기록합니다. 전부 혹은 전무입니다.

Sovereign Synapse 시스템의 로컬 벡터 저장소 인덱싱 파이프라인을 상세히 보여주는 기술 블록 다이어그램. 워크플로는 Markdown 파일을 읽고, YAML 프론트매터를 추출한 뒤 대화형 prose tax를 제거합니다. 남은 본문 내용은 콘텐츠 해시 검사를 통과합니다: 16자리 SHA‑256 지문이 기존 엔트리와 일치하면 중복을 피하기 위해 인덱스 과정이 건너뛰어집니다. 일치하지 않는 데이터는 슬라이딩 윈도우 텍스트 청크러(800자 블록, 150자 겹침)로 전달됩니다. 각 청크는 Ollama 임베딩 루프에 들어가며, 로그가 과다해 상태 400 오류가 발생하면 500자 하드 트렁케이션을 적용한 후 재시도합니다. 모든 임베딩이 성공하면 원자적인 ‘삭제‑후‑업서트’ 트랜잭션이 실행되어 컬렉션의 기존 UUID 레코드를 안전하게 제거하고, 새로운 벡터 배치를 로컬 ChromaDB 저장소에 일괄 기록합니다.)

성과: 의미 기반 스포트라이트

결과는 제가 “첫 빛”이라 부르는 순간입니다—머신이 실제로 쿼리의 의도를 이해하는 순간이죠. 이제 12,400개의 의미 청크를 가로질러 검색하면, Scribe는 3초 이내에 건초더미 속 바늘을 찾아냅니다.

# 2_The_Prose_Tax.8_Forensic_Receipt 초 안에 2년 치 연구를 쿼리
python3 main.py query "Movesense calibration" --n-results 1

🔍 Top 1 match for: Movesense calibration

--- Result 1 ---
Timestamp: 2025-06-20 07:07
Snippet: It sounds like rolling my own would indeed be the best option, plus if I'm working 
         directly with therapists they might have some insights into what specific 
         information would be valuable for their clients...
File: vault/synapses/2025-06-20-0707-rolling-my-own-logic.md

이것은 키워드 매칭이 아닙니다. 시스템은 “calibration”이라는 단어가 파일 전체 맥락에만 등장했음에도 불구하고, 임상용 맞춤형 보정 도구를 구축한다는 개념을 이해했기 때문에 이 결과를 찾아낸 것입니다.

Sovereign 아키텍처

볼트가 커질수록 내 데이터와 하드웨어 간의 관계가 궁극적인 병목이 됩니다. 임베딩을 디바이스에서 직접 실행함으로써 쿼리는 절대 로컬 네트워크를 떠나지 않습니다.

프라이버시는 설정이 아니라 아키텍처다

고성능 NVMe에 인덱스를 저장하면 “생각의 지연”이 서브초 수준을 유지합니다—에스테이트가 확장돼도 말이죠. 기반은 이미 마련되었습니다: 3,150개의 시냅스, 12,400개의 의미 벡터, 그리고 클라우드로 전송된 바이트는 단 한 바이트도 없습니다.

우리는 디지털 다락방에서 살아있는 인지 에스테이트로 옮겨갔습니다. 데이터의 가치는 존재 자체가 아니라 접근성에 있습니다.

하지만 과거만 기억하는 뇌는 단지 도서관일 뿐입니다. 진정한 협업 파트너가 되려면 Scribe는 정보를 찾는 것에 그치지 않고 통합해야 합니다. 2단계에서는 뒤를 돌아보는 것을 멈추고 미래를 구축합니다. 이제 Scribe에게 대답하도록 할 시간입니다.

여러분은 자신의 워크플로에서 “디지털 다락방” 문제를 어떻게 다루고 있나요? 데이터가 여러분을 위해 일하고 있나요, 아니면 단순히 저장만 되고 있나요?

Sovereign Synapse 시리즈

The Local Brain - 이 포스트

The Interactive Agent - 곧 공개

0 조회
Back to Blog

관련 글

더 보기 »

Eidentic 소개

Today we're releasing Eidentic, an open-source TypeScript SDK for building AI agents with self-improving memory and the production fundamentals built in — not b...

Typescript의 타입

Introdução Tipos são uma forma de definir a “forma” ou o contrato dos dados que estamos usando no código. Pensando em Javascript puro, ele é dinâmico: você pode...