에이전트 메모리 엔진 (7/10) — 멀티 에이전트 공유 지식 인프라: wikycore와 Knowledge Graph

부제: RRF 하이브리드 검색 + 명시 등록 스킬 레지스트리로 중복 작업을 줄이는 구조


핵심 요약

  • 여러 에이전트가 각자의 CLAUDE.md만으로 동작하면 같은 문제를 반복해서 푼다. 이 글은 그 중복을 제거하는 공유 인프라 두 가지의 설계와 작동 원리를 정리한다.
  • wikycore는 공유 문서 저장소(SQLite 기반, 홈서버 호스팅). 벡터(bge-m3, 1024-dim)와 FTS5 키워드를 RRF로 결합한 하이브리드 검색을 제공한다.
  • Knowledge Graph는 "어떤 도메인의 전문가가 누구인가"를 답하는 스킬 레지스트리. 자동 추론 등록과 명시 등록(docPath 필수)을 분리해 신뢰도를 유지한다.
  • 이 글에서 얻어갈 수 있는 것: 하이브리드 검색을 단일 임계값 튜닝 없이 굴리는 방법, 자기평가형 레지스트리의 거품을 막는 운영 규칙, 공유/사적 메모리 경계를 설정하는 기준.

문제 정의 — 공유 메모리 진입점의 부재

여러 에이전트를 병렬 운영할 때 실제로 비용이 발생하는 지점은 모델 토큰이 아니라 중복 작업이다. 한 에이전트가 해결한 OAuth 토큰 갱신 로직을 다른 에이전트가 처음부터 다시 구현하거나, 한쪽이 끝낸 sqlite-vec macOS 빌드 이슈를 다른 쪽이 동일한 에러 메시지로 재검색하는 상황이 반복된다.

원인은 공유 메모리의 부재가 아니라 공유 메모리를 검색할 진입점의 부재다. 각자 docs/에 기록하더라도 외부 에이전트가 그 위치를 발견할 방법이 없으면 사적 메모리에 머문다. 이 진입점 문제를 두 축으로 분리해 해결한다.

시스템 답하는 질문 단위
wikycore "이 주제에 대해 정리된 문서가 있나?" 내용
Knowledge Graph "이 분야의 전문가는 누구인가?" 사람

wikycore — 하이브리드 검색 기반 공유 문서 저장소

홈서버(Mac mini, Tailscale 내부망)에 SQLite로 구성한 위키. 현재 상태는 다음과 같다.

지표
docs 다수
chunks (분할) 다수
임베딩 모델 bge-m3 (oMLX, 1024-dim, fp16)
감사 로그 누적 기록
DB 크기 경량 (수 MB 수준)

벡터 단독·키워드 단독의 한계

운영 중 관찰된 실패 패턴은 두 방향에서 대칭적으로 나타났다.

  • 벡터 단독: "OAuth 토큰 갱신" 질의가 "credential rotation" 문서를 놓친다. 의미적으로는 가깝지만 동의어 매칭이 부족할 때 코사인 거리가 임계값을 넘지 못한다.
  • 키워드 단독: "BM25" 질의가 정확히 "BM25"를 포함한 문서만 잡는다. "하이브리드 검색", "랭킹 결합" 같은 인접 개념 문서가 누락된다.

RRF(Reciprocal Rank Fusion) 결합 방식

두 검색기 결과를 Reciprocal Rank Fusion으로 병합한다. 각 검색기에서 문서의 순위 rank1 / (k + rank) 점수로 변환해 합산하는 방식이다. 점수 스케일이 다른 벡터 유사도와 BM25 점수를 직접 더하지 않고 순위만 사용하므로 단일 임계값 튜닝이 불필요하다는 것이 주된 이점이다.

API 인터페이스:

POST /api/wiki/search
{"q": "OAuth 토큰 갱신", "k": 10, "mode": "hybrid"}

modehybrid(기본), vector, keyword 세 가지. 후자 둘은 디버깅·품질 검증용이며 운영 트래픽은 hybrid가 처리한다.

Knowledge Graph — 스킬 레지스트리의 구조

wikycore가 "내용"을 인덱싱한다면 Knowledge Graph는 "누가 해당 도메인에 전문성을 등록했는가"를 인덱싱한다. 현재 상태는 다음과 같다.

지표
등록된 스킬 다수
등록 에이전트 여러 팀
카테고리 분포 ai, mobile, content, devops, frontend, backend, misc, infra

자동 등록 vs 명시 등록

스킬 등록은 두 계층으로 분리된다.

  • 자동 등록: 프로젝트가 사용하는 언어·프레임워크를 추론해 등록. "Flutter 쓴다" 수준의 메타데이터.
  • 명시 등록: 전문가 수준 + docPath 필드를 요구. "Hive 암호화 파이프라인을 구현했고 문서는 여기에 있다" 수준의 주장.

명시 등록 예시:

에이전트 명시 등록 스킬
마인스위퍼 firebase-auth, flutter-hive-encryption, linear-design-tokens
영상 제작 디렉터 shorts-production-pipeline, comfyui-remote-image-gen, ffmpeg-ken-burns-clip
라우팅 관리 llm-multi-provider-routing, llm-proxy-optimization, oauth-token-lifecycle
글 작성 디렉터 research-verification, blogger-publish-pipeline, content-wiki-synthesis

조회 흐름

새 문제가 도착하면 해당 도메인에 expert로 등록된 에이전트의 docPath를 먼저 읽는다. 직접 해결에 착수하기 전 한 번 조회하는 단계를 추가하는 것이다. 조회 비용이 재구현 비용보다 작다는 전제에서 성립하는 패턴이다.

적용 패턴 — 실제 조회 흐름

블로그 publish 스킬에 ComfyUI 연동을 추가하는 작업을 예로 들면 호출 순서는 다음과 같다.

  1. wikycore 검색: "comfyui SDXL Tailscale" → 영상 제작 디렉터의 comfyui-windows-setup.md 슬러그 반환.
  2. Knowledge Graph 조회: comfyui-remote-image-gen 스킬 보유자 = 영상 제작 디렉터, 레벨 expert.
  3. 해당 에이전트의 docPath를 읽고 호출 패턴을 그대로 재사용.
  4. 새로 추가된 지식은 wikycore에 다시 등록 → 다음 질의는 1단계에서 종결.

즉, Knowledge Graph가 "읽을 문서의 출처"를 지정하고, wikycore가 "그 문서 자체"를 저장한다. 두 시스템은 포인터와 컨텐츠 관계다.

운영 규칙 — 자주 부딪히는 판단 지점

공유(wikycore) vs 사적(docs/) 경계

원칙: 다른 에이전트가 읽었을 때 가치가 있는 도구·유틸리티·패턴이면 wikycore, 프로젝트 내부 컨벤션·작업 로그면 docs/. 판단이 애매하면 "옆 에이전트가 본다고 가정했을 때 의미가 있는가"라는 질문으로 환원한다. 없으면 사적.

자기평가형 레지스트리의 레벨 거품

명시 등록은 본질적으로 자기평가다. 레벨 인플레이션을 막기 위해 운영 규칙에 한 줄을 추가했다 — expert 레벨은 docPath의 파일이 실존해야 한다. 등록 메타데이터는 과장될 수 있어도 참조된 파일의 내용은 검증 가능하다.

문서 stale화

위키 문서는 작성 시점의 사실이다. 코드는 바뀐다. 사용 규칙에 명시한 원칙: 메모리가 코드와 충돌하면 코드를 신뢰한다. 위키는 출발점이지 결론이 아니다. 이 규칙이 없으면 오래된 위키가 적극적으로 잘못된 방향을 가리키는 리스크가 생긴다.

적용 가능 범위와 열린 질문

이 구조는 다음 조건에서 유효하다.

  • 여러 에이전트를 병렬 운영하며 작업 도메인이 부분적으로 겹침.
  • 공유 저장소를 호스팅할 상시 가용 노드가 존재 (홈서버, VPS, 사내망 어디든).
  • 각 에이전트가 공유 API를 호출할 수 있는 권한·네트워크 경로 확보.

반대로 단일 에이전트 또는 완전히 독립된 도메인만 다루는 구성이라면 오버헤드가 이득을 넘을 수 있다.

열린 질문:

  • 위키 stale 검출을 자동화하려면 무엇을 측정해야 하는가 (문서 마지막 참조 일시, 링크된 코드 경로의 최근 커밋 시점 등).
  • Knowledge Graph의 레벨 표기는 자기평가 외에 어떤 신호로 보정 가능한가 (타 에이전트의 참조 빈도를 역신호로 쓸 수 있는가).
  • RRF의 k 파라미터를 도메인별로 자동 조정할 가치가 있는가, 아니면 단일 값으로 충분한가.

시리즈 전체 안내: 시리즈 목차

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"