BHGBrain은 일주일 전 오픈 소스 MCP 메모리 서버로 출시되었다: SQLite와 Qdrant 위에 구축된 AI 에이전트용 공유 벡터 브레인으로, 의미 회상, 자동 중복 제거, 하이브리드 검색을 갖추고 있다. 초기 릴리스는 핵심 아키텍처 — 듀얼 스토어 쓰기 파이프라인, 메모리 타입, 네임스페이스, 컬렉션, 엔터프라이즈 인증, 다중 에이전트 시나리오 — 를 다루었다.
이 업데이트는 그 이후 출시된 것을 다룬다: 전체 메모리 수명 주기 시스템, 크게 개선된 검색, 운영 안전 기능, 다국어 문서. 이들은 작은 추가가 아니다 — 특히 계층형 보존 시스템은 평면 저장을 시간에 따른 에이전트와 메모리의 상호작용을 바꾸는 지능적 수명 주기 관리로 대체한다.
메모리 수명 주기: 계층, 슬라이딩 윈도우, 자동 승격
계층형 보존 (T0–T3)
BHGBrain의 모든 메모리는 쓰기 시 보존 계층이 할당된다. 네 계층이 영구 참조 지식부터 일시적 작업 컨텍스트까지의 전 스펙트럼을 다룬다:
| 계층 | 라벨 | TTL | 전형적 콘텐츠 |
|---|---|---|---|
| T0 | 기반 | 만료 없음 | 아키텍처 참조, 컴플라이언스 위임, 회사 정책 |
| T1 | 제도적 | 0 접근 1년 | 설계 결정, API 계약, 런북, 코딩 표준 |
| T2 | 운영 | 0 접근 90일 | 프로젝트 상태, 스프린트 결과, 기술 조사 |
| T3 | 일시적 | 0 접근 30일 | 문제 티켓, 이메일 요약, 디버깅 세션 |
계층 할당은 우선순위 체인을 따른다: 명시적인 호출자 제공 retention_tier가 우선; 그렇지 않으면 카테고리는 항상 T0; 그다음 소스 기반 휴리스틱 적용(절차적 에이전트 메모리 → T1, 에피소드형 → T2); 그다음 추출 파이프라인이 활성일 때 LLM 분류; 마지막으로 다른 것이 일치하지 않으면 T2 기본.
T0 메모리는 만료되지 않는다. 또한 모든 정리 작업에서 제외되고, 벡터 스토어를 재구성해야 할 경우를 위해 SQLite에 전체 콘텐츠로 저장되며, 하이브리드 검색 결과에서 +0.1 점수 부스트를 받는다.
슬라이딩 윈도우 TTL
TTL은 생성일이 아닌 접근 기반이다. 메모리가 회상되거나 검색될 때마다 만료 시계가 그 순간부터 전체 TTL로 재설정. 28일 전에 생성된 T3 메모리가 오늘 회상되면 지금부터 30일로 연장.
이것은 메모리 붕괴가 실제 사용에 의해 구동됨을 뜻한다. 에이전트가 능동적으로 참조하는 메모리는 살아 있다. 진정으로 사용되지 않는 메모리는 수동 관리 없이 자연히 붕괴. 어떤 메모리가 장기적으로 중요할지 미리 추측할 필요가 없다.
자동 승격
TTL 창 내에서 5회 이상 접근된 T2 또는 T3 메모리는 자동으로 한 계층 승격 — T3에서 T2로, T2에서 T1로. 운영 지식이 지속적으로 유용함이 증명되면, 시스템이 그것을 인식하고 당신이 개입할 필요 없이 더 내구성 있는 저장을 제공.
슬라이딩 윈도우 TTL과 결합하여, 보존 시스템이 사전 분류가 완벽할 것을 요구하는 대신 실제 에이전트 행동에 적응함을 뜻한다.
검색 개선
하이브리드 RRF 검색
검색 엔진은 이제 **Reciprocal Rank Fusion (RRF)**을 사용하여 두 개의 독립적인 검색 경로의 결과를 병합:
- 의미 벡터 검색 — Qdrant 임베딩에 대한 코사인 유사도 (기본 70% 가중치)
- 전문 BM25 검색 — SQLite의 FTS5 인덱스 (기본 30% 가중치)
RRF는 각 시스템의 결과를 독립적으로 순위 매긴 뒤, 각 결과의 양쪽 목록에서의 위치를 기반으로 결합 점수를 계산. 의미에서 3위, 전문에서 8위인 메모리가 의미에서 1위, 전문에서 없는 메모리보다 더 좋은 점수를 받는다.
{
"tool": "bhgbrain.search",
"params": {
"query": "authentication architecture decisions",
"mode": "hybrid",
"limit": 10
}
}
세 가지 검색 모드가 있다: semantic, fulltext, hybrid. 워크로드가 정확 일치 검색이나 순수 의미 회상에 치우치면 가중치를 config.json에서 설정할 수 있다.
recall 도구(search와 구별)는 세션 시작 컨텍스트 주입에 최적화 — 계층 부스트가 있는 의미 검색을 사용하고 최소 점수 임계값을 적용. search는 전체 필터와 모드 지원을 갖춘 범용 도구다.
개선된 의미 중복 제거
중복 제거는 이제 새 메모리를 저장하기 전 두 패스를 실행:
SHA-256 체크섬 일치 — 콘텐츠는 해싱 전에 정규화(공백 축소, 대소문자 접기, 구두점 제거). 사소한 형식 차이가 있는 기능적으로 동일한 콘텐츠는 임베딩이 계산되기 전에 여기서 잡힌다.
코사인 유사도 임계값 — 새 메모리의 임베딩을 기존 메모리와 비교. 기준 임계값은 0.92, 계층 조정 임계값: T0와 T1 메모리는 더 엄격한 임계값(내구성 있는 지식에 대한 중복 제거가 더 어려움), T3는 더 느슨한 임계값(일시적 콘텐츠는 더 적극적으로 중복 제거).
중복이 감지되면, 들어오는 메모리는 기존 레코드에 병합 — 접근 시간 갱신, 태그 병합, 더 높은 보존 계층 유지 — 두 번째 항목을 만드는 대신. 벡터 공간이 깨끗하게 유지.
중요도 점수
메모리는 이제 검색 결과 순위에 영향을 주는 importance 필드(0.0–1.0, 기본 0.5)를 갖는다. 더 높은 중요도의 메모리는 회상 결과에서 점수 부스트를 받아, 정확한 쿼리 일치로 검색되지 않아도 중요 지식이 더 두드러진다.
메모리 저장 시 중요도를 명시적으로 설정:
{
"tool": "bhgbrain.remember",
"params": {
"content": "All database writes must go through the repository layer. No direct ORM calls in service code.",
"type": "procedural",
"retention_tier": "T1",
"importance": 0.9,
"category": "coding-standards"
}
}
운영 안전
용량 예산
각 계층은 이제 네임스페이스별 메모리 한도를 갖는다:
| 계층 | 기본 한도 |
|---|---|
| T0 | 무제한 |
| T1 | 100,000개 메모리 |
| T2 | 200,000개 메모리 |
| T3 | 200,000개 메모리 |
계층이 한도에 가까워지면 /health 엔드포인트가 보고. 한도는 config.json에서 설정 가능. 이는 대량의 에이전트 워크로드에서 T2/T3의 무한 성장이 벡터 공간에서 T0/T1 지식을 밀어내는 것을 방지.
사전 만료 경고
메모리가 만료되기 7일 전, 메타데이터 스토어에 플래그가 표시. 에이전트와 운영자는 health 엔드포인트를 쿼리하거나 CLI를 사용하여 만료에 접근하는 메모리를 나열:
bhgbrain list --expiring-within 7d
이 창은 개입할 시간을 준다 — 메모리를 수동으로 승격, TTL 재설정, 또는 진정으로 아카이브할 준비가 되었는지 결정.
삭제 전 아카이브
만료된 메모리는 직접 삭제되지 않는다. 활성 메모리 스토어와 Qdrant에서 제거 전 SQLite의 archive 테이블로 이동. 아카이브는 CLI를 통해 쿼리 가능하며 전체 콘텐츠, 메타데이터, 접근 기록을 보존.
메모리가 오류로 아카이브되었거나 — 일시적으로 보였던 것이 중요하게 드러난 경우 — 복원할 수 있다. 명시적 삭제 없이 영구히 손실되는 것은 없다.
원자적 쓰기와 지연 플러시
보존 시스템과 함께 두 가지 성능 및 신뢰성 개선이 출시:
원자적 쓰기 — 모든 SQLite 디스크 I/O는 쓰기-임시파일-후-이름변경 패턴을 사용. 디스크의 데이터베이스 파일은 부분 작성 상태가 결코 아니다. 쓰기 중간에 프로세스가 충돌하면 이전 유효 상태가 보존.
지연 플러시 — 접근 메타데이터 갱신(마지막 접근 타임스탬프, 자동 승격용 접근 횟수)은 디스크에 플러시 전 최대 5초 동안 메모리에 배치. 읽기가 많은 경로 — 세션 시작 시 대량 컨텍스트 주입을 하는 에이전트 — 에서 이는 회상당 데이터베이스 쓰기를 의미 있게 TTL 정확도에 영향 주지 않고 제거.
카테고리: 영구 정책 슬롯
카테고리는 네임스페이스 내 모든 에이전트가 일관되게 접근할 수 있는 구조화된 참조 콘텐츠용 이름이 지정된 저장 슬롯. 일반 메모리와 달리, 카테고리는 계층에 관계없이 모든 정리 주기를 견디며, TTL이 없고, 예측 가능한 슬롯 형식으로 컨텍스트에 주입.
사용 사례는 아키텍처 결정 기록, 코딩 표준, 보안 정책, 운영 규칙을 포함:
{
"tool": "bhgbrain.category",
"params": {
"action": "set",
"name": "database-access-policy",
"slot": "coding-standards",
"content": "All database access must use the repository pattern. Direct ORM calls in service layer are not permitted. Repositories must return domain objects, not ORM entities."
}
}
카테고리는 개별적으로 검색하거나 그룹으로 나열할 수 있다. 벡터 인덱스된 의미 메모리가 아닌 키-값 정책 슬롯으로 구조화 — 중복 제거 또는 임베딩 파이프라인을 거치지 않는다는 점에서 T0 메모리와 구별.
다국어 문서
전체 README는 이제 5개 언어로 게시:
- 영어 (
README.md) - 중국어 간체 (
README.zh-CN.md) - 독일어 (
README.de.md) - 프랑스어 (
README.fr.md) - 스페인어 (
README.es.md)
이들은 기계 번역된 stub가 아닌 전체 번역 — 아키텍처 다이어그램, 설정 참조, CLI 명령, MCP 도구 매개변수가 각 언어에서 모두 다루어진다.
다음은 무엇인가
계층형 보존과 하이브리드 검색 시스템은 이후 릴리스에서 올 몇 가지의 기반이다: 추출 LLM 파이프라인을 통한 자동 계층 분류(현재 수동 또는 휴리스틱 주도), 다중 테넌트 시나리오를 위한 교차 네임스페이스 메모리 연합, 메모리 상태 모니터링용 대시보드.
저장소의 ROADMAP.md가 계획된 것과 진행 중인 것을 추적.
BHGBrain은 오픈 소스이며, MIT 라이선스이고, github.com/Big-Hat-Group-Inc/BHGBrain에서 이용할 수 있다. 프로덕션에서 AI 에이전트를 운영하고 컨텍스트 세금을 다루고 있다면 — 에이전트가 이전에 본 상태를 재발견하고, 매 세션마다 아키텍처를 재설명하고, 실행 사이에 결정을 잃고 있다면 — 이것이 해결하려 설계된 문제다.
Star를 주고, 이슈를 올리고, PR을 보내라. 더 많은 프로덕션 워크로드를 볼수록 계층 분류 휴리스틱이 개선.
Kevin Kaminski는 Big Hat Group의 주역으로, 엔터프라이즈 AI 인프라, Microsoft 365, Windows 365에 집중하고 있다. 그는 업무에서 AI 에이전트를 운영하는 팀을 위한 오픈 소스 도구를 구축한다.