Comad World 가이드

Brain — 지식 그래프 + GraphRAG

RSS·arXiv·GitHub·HN에서 수집한 기사/논문/레포를 Neo4j 온톨로지로 저장하고 엔티티·관계·Claim을 자동 추출합니다. 21개 MCP 도구와 Dual-Retriever GraphRAG로 자연어 질의응답을 제공합니다.

TypeScript Bun Neo4j 5 MCP 21 tools recall 93% latency 13.8s

설치 & 초기 설정

Brain은 Neo4j 컨테이너와 Bun 런타임만 있으면 독립 실행됩니다. 최초 1회 실행:

# 루트에서
cd brain
docker compose up -d          # Neo4j (bolt 7688, http 7475)
bun install
bun run setup                 # 스키마 + 인덱스 + MetaEdge bootstrap
bun run mcp                   # MCP 서버 시작
bun run setup은 Neo4j에 제약조건(constraint) 7개, 풀텍스트 인덱스 4개, MetaEdge 규칙 10개, 석학 렌즈 노드 12개를 한 번에 부트스트랩합니다. 중복 실행해도 안전(idempotent)합니다.

현재 그래프 규모

운영 중인 데이터 예시 (2026-04-13 기준):

라벨노드 수설명
Claim9,046기사·논문에서 추출된 fact/opinion/prediction
Topic8,088개념/주제 태그
Technology4,457라이브러리·프레임워크·프로토콜
Person2,361연구자·창립자 등 인물
Organization1,562기업·연구소
Article1,553원본 기사/블로그 포스트
Paper38+arXiv 논문
Repo100GitHub 레포지토리

MCP 도구 (21개)

모든 도구는 bun run mcp로 시작되는 MCP 서버 위에서 Claude Code의 자연어 호출로 사용됩니다.

도구용도
comad_brain_askGraphRAG 기반 자연어 질의 → 출처 포함 답변
comad_brain_search풀텍스트 검색 (노드 타입 필터 가능)
comad_brain_recent최근 N일 추가된 기사/Claim 조회
comad_brain_stats그래프 통계 (노드/엣지/라벨별)
comad_brain_related엔티티의 관련 노드 N개 추천
comad_brain_impactOpenCrab I1~I7 기반 엔티티 영향도 분석
comad_brain_explore특정 노드 주변 서브그래프 탐색
comad_brain_claimsClaim 필터링 (type/confidence/verified)
comad_brain_claim_timeline엔티티에 대한 Claim의 시간축 타임라인
comad_brain_temporal시점 기준 그래프 스냅샷 쿼리
comad_brain_stale오래된/신뢰도 낮은 Claim 탐지
comad_brain_trend기간별 언급량 추이
comad_brain_contradictionsCONTRADICTS 엣지가 있는 Claim 쌍
comad_brain_communities커뮤니티 목록 + 구성원
comad_brain_dedup중복 엔티티 fuzzy 탐지 + 병합
comad_brain_metaMetaEdge 규칙 실행/조회
comad_brain_refine엣지 가중치 · 신뢰도 decay · 프루닝 제안
comad_brain_exportJSON / JSON-LD / CSV 내보내기
comad_brain_perf도구별 호출 횟수 · 응답 시간

GraphRAG 질의 (ask)

가장 자주 쓰는 도구. 자연어 질문 → 엔티티 추출 → Dual-Retriever(Local + Global + Temporal) → 3KB 컨텍스트 자르기 → synth → 출처 포함 답변.

Claude Code 안에서

You: MCP란 무엇이고 어떤 기업이 쓰고 있나?
(comad_brain_ask 호출 →)
Claude: MCP는 JSON-RPC 2.0 기반 오픈 표준으로 OAuth 2.0 통합.
9개 기업 식별: Anthropic, OpenAI, Google, Microsoft,
Block, Bloomberg, AWS, Cloudflare, Linux Foundation.
출처: [기사: "The MCP protocol landscape", 2026-03-18]
[Grounding rate 93% — 인용된 엔티티 모두 그래프에 실제 존재]

CLI 벤치마크 스크립트로

bun run packages/graphrag/src/run-benchmark.ts
벤치마크 50문항 2026-04-13

실제 측정값

지표의미
Entity Recall93%답변에 기대 엔티티가 포함된 비율
Grounding Rate93%인용된 엔티티가 실제 그래프에 존재하는 비율 (hallucination 방지)
Avg Latency13.8s질문당 p50 지연
Hard Good Rate72%다중 홉 추론 질문 good 판정 비율

크롤러 파이프라인

5개 소스 × 병렬 fetch + Haiku 엔티티 추출 + Neo4j 저장. 모두 --smol 메모리 플래그 적용.

명령소스Haiku 사용기본 스케줄
bun run crawl:hnHacker News◯ (엔티티)crawl-blogs와 병합
bun run crawl:arxivarXiv API + 논문 fetch◯ (엔티티+Claim)매일 09:00 (limit 200)
bun run crawl:githubGitHub trending월 11:00
bun run crawl:blogs25개 블로그 RSS매일 10:00
bun run crawl:ingest로컬 JSON 파일 인제스트각 크롤 직후
bun run crawl:resume실패한 인제스트 재시도수동
bun run crawl:retryfailed articles 재처리수동
Content Guard — 10개 prompt injection 패턴 + invisible Unicode 스캔이 모든 크롤 입력에 자동 적용됩니다. 플래그된 콘텐츠는 정제본으로 대체되거나 격리됩니다.

실제 로그 스니펫

$ bun run crawl:arxiv -- --limit 100
arxiv Crawler: target 100 papers
=== cs.CL (target: 100) ===
  "language model" offset=0 → 200 found, 100 new (total: 100)
Collected 100 papers total
$ bun run crawl:ingest -- --source arxiv --file /tmp/arxiv.json
Ingesting 100 items from arxiv...
  Fetching full content for 100 items (5 workers)...
[content-guard] 1 threats in https://arxiv.org/html/...: invisible_unicode_U+200b
[content-fetcher] Content flagged. Using cleaned version.
  Entities extracted: 87/100 (claude -p --model haiku)
  Claims extracted: 312 (avg 3.1/paper)
  Done: 100/100 items ingested (3.2 min)

커뮤니티 감지

Cypher 기반 label propagation (Community Edition에 GDS 없음). C1→C2→C3 3단계 계층 클러스터링.

# MCP 도구로
comad_brain_communities   # 22개 커뮤니티 목록

# 직접 스크립트로 재실행
bun run packages/core/src/community-detector.ts
단계단위기준출력
C1 TechTechnology 공동등장같은 Article에서 함께 언급ecosystem 클러스터
C2 TopicTopic 클러스터SUBTOPIC_OF 계층주제 카테고리
C3 MetaC1 + C2 교차멤버 중첩 ≥ threshold상위 커뮤니티

그래프 시각화

Neo4j Browser를 http://localhost:7475에서 열고, 왼쪽 노드 라벨 중 Community를 클릭하면 계층 구조가 보입니다. 또는 커스텀 explorer:

bun run packages/explorer/src/server.ts
# → http://localhost:3001 (D3.js 인터랙티브 뷰)
Brain knowledge graph visualization
커뮤니티 감지 후 시각화. 각 색상은 다른 커뮤니티 — Tech 클러스터(파랑), AI 안전성 클러스터(오렌지) 등.

품질 벤치마크

50문항 고정 문제 세트로 주간 측정합니다. 난이도별 recall · grounding rate · latency를 기록해 그래프 성장에 따라 품질이 향상되는지 추적.

$ bun run packages/graphrag/src/run-benchmark.ts
GraphRAG Benchmark — Starting...
Graph: 27,320 nodes, 45,103 edges

[b01] easy   Transformer 아키텍처를 처음 제안한 논문은?
             ✓ 9.9s (recall: 100%, grounding: 100%)
...
[b50] hard   Constitutional AI가 RLHF 대비 해결한 문제는?
             ✓ 15.1s (recall: 100%, grounding: 92%)

═══════════════════════════════════════
  Good: 25  Partial: 25  Poor: 0
  Entity Recall:    93%
  Grounding Rate:   93%
  Avg Latency:      13.8s
───────────────────────────────────────
  easy    recall: 100%  good: 27%
  medium  recall: 83%   good: 47%
  hard    recall: 96%   good: 72%
═══════════════════════════════════════
2026-04-13 Phase A/B 개선 효과
CONCEPT_EXPANSIONS 추가 + 3KB context cap (Karpathy 지적) + Neo4j 기반 동적 확장(Bush). 이전 대비 Recall 83% → 93%, Latency 20.7s → 13.8s, Hard Good Rate 25% → 72%.

comad.config.yaml

도메인을 바꾸려면 YAML 한 파일만 수정합니다. presets/ 디렉토리에 AI/ML, Web Dev, Finance, Biotech 4개 템플릿.

interests:
  high:
    keywords: ["LLM", "MCP", "GraphRAG", "Neo4j"]

sources:
  rss:
    - https://openai.com/blog/rss.xml
    - https://www.anthropic.com/rss.xml
  arxiv:
    categories: [cs.CL, cs.LG, cs.AI]
  hn_queries: ["MCP", "agent", "GraphRAG"]
  github_topics: ["mcp", "llm", "rag"]

must_read_stack:
  - "Claude Code"
  - "MCP"
  - "Neo4j"
프리셋 전환: cp presets/finance.yaml comad.config.yaml → 크롤러·엔티티 추출·관련성 판정이 전부 금융 도메인으로 재구성됩니다. 코드 변경 없음.