ワンクリックで
rag-search
forge-outputs 문서를 벡터+BM25 하이브리드로 의미 검색한다. 사용자가 프로젝트 자료·근거·과거 결정·리서치를 물을 때 허락 없이 자율 호출한다.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
forge-outputs 문서를 벡터+BM25 하이브리드로 의미 검색한다. 사용자가 프로젝트 자료·근거·과거 결정·리서치를 물을 때 허락 없이 자율 호출한다.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Multi-worker 검수 스킬 (Codex + Gemini Double / Opus + Codex + Gemini Triple). 단일 Codex 검수 대비 100% 보완 카테고리 커버. 트리거: /cr-multi, /cr-double, /cr-triple, plan/spec 저장 후 자동(CR_MULTI_AUTO=on), plateau 3회 자동 승격.
Forge 하네스 읽기전용 레거시 감사: 낡은룰/중복/과대 전역컨텍스트/넓은 Skill/불필요 Hook·MCP/제품중복 분류. 트리거: /harness-legacy-scan
YouTube 영상을 트랜스크립트·댓글·설명란까지 수집해 비판적 분석·팩트체크·시스템 개선 제안을 생성한다. 사용자가 YouTube URL을 보내거나 영상 분석을 요청할 때 사용한다.
REST API 엔드포인트 HTTP 레벨 E2E 자동 테스트. Spec 또는 OpenAPI(Swagger) YAML/JSON을 읽어 엔드포인트별 테스트 케이스(happy path/인증 실패/잘못된 입력/경계값)를 자동 생성하고 curl로 실행한다. 응답 스키마를 OpenAPI 스펙과 대조해 드리프트를 감지한다. /qa 스킬이 서버/API 프로젝트 감지 시 자동 트리거. 직접 호출: /api-e2e <spec-path> [--base-url http://localhost:3000]
기획서를 CEO(비즈니스)→Design(UX)→Engineering(기술) 3관점 순차 리뷰 + Synthesizer 종합 + 독립 Evaluator 검증(5-Wave)하는 스킬. Phase 3 에이전트 회의 후 자동 트리거. (적대적 Codex 검수는 cr-triple/codex-review 별도 게이트.)
PR 생성 전 develop 대비 feature 브랜치의 성능을 비교하는 스킬. 번들 크기, 테스트 시간, API 응답 시간을 측정. P7 PR 생성 전 자동 트리거.
| name | rag-search |
| description | forge-outputs 문서를 벡터+BM25 하이브리드로 의미 검색한다. 사용자가 프로젝트 자료·근거·과거 결정·리서치를 물을 때 허락 없이 자율 호출한다. |
| context | fork |
| model | haiku |
| allowed-tools | Read, Bash, Glob, Grep |
| argument-hint | <검색 쿼리> [--top-k N] [--mode vector|bm25|hybrid] [--graph] [--context wiki|research|all] |
역할: 당신은 워크스페이스 전체 문서에서 벡터+BM25 하이브리드 의미 검색을 수행하는 문서 검색 전문가입니다. 컨텍스트: 사용자가 키워드가 아닌 의미 기반으로 정부과제 근거, 기획서, 리서치 자료 등 특정 구절을 찾을 때 호출됩니다. 출력: 파일 경로·유사도 점수·텍스트 프리뷰를 포함한 상위 N개 검색 결과를 반환합니다.
forge-outputs/ 문서에서 벡터(의미) + BM25(키워드) 하이브리드 검색을 수행한다.
/rag-search 투자 유치 전략
/rag-search TagHub 기술 차별점 --top-k 10
/rag-search 시장 규모 TAM --mode vector
# reasoning_context 포함 (AgentIR 패턴) — 현재 추론 단계를 쿼리에 명시
/rag-search [보안 취약점 분석 중] JWT 토큰 검증 방법
/rag-search [GodBlade 가챠 시스템 설계 중] 확률 설정 선례
reasoning_context 파라미터 (선택):
[현재 추론 단계] 형식으로 쿼리 앞에 붙이면 관련 문서 리트리브 정확도 향상.
오케스트레이터는 현재 작업 컨텍스트(CoT 요약)를 대괄호에 담아 전달한다.
인덱스가 없으면 빌드를 먼저 제안한다:
# 인덱스 존재 확인
ls {target_dir}/.rag-index/meta.json
# 없으면 빌드
python3 ~/forge/shared/scripts/rag/index.py {target_dir}
인덱스 위치:
${FORGE_OUTPUTS:-$HOME/forge-outputs}/.rag-index/ (통합 인덱스 — 기본)${FORGE_OUTPUTS:-$HOME/forge-outputs}/09-grants/.rag-index/ (과제 전용)다른 폴더: python3 ~/forge/shared/scripts/rag/index.py ${FORGE_OUTPUTS:-$HOME/forge-outputs}/01-research/
커버리지 항상 보고 (meta.json 존재 확인만으로 끝내지 않는다): 검색 결과 반환 시 meta.json의 file_count(색인 문서수)·built_at(최종 인덱싱 시각)을 함께 명시한다.
python3 -c "import json; m=json.load(open('{target_dir}/.rag-index/meta.json')); print(f\"색인 {m['file_count']}건 / built_at={m['built_at']}\")"
현재 {target_dir} 실제 파일 수 대비 file_count가 미달(신규 문서 다수 추가됨)하거나 built_at이 오래된 경우 → "grep 폴백 필요 — 커버리지 X% (색인 {file_count}건 / 최종인덱싱 {built_at})" 경고를 결과에 포함한다. meta.json 부재 시에도 동일하게 "미인덱싱 — grep 폴백 필요" 명시(침묵 금지).
KnowledgeStore 경유 (AD-173 T2, 권장) — 소비자가 엔진 무관하게 검색:
# python 코드에서 직접 호출
import sys; sys.path.insert(0, os.path.expanduser('~/forge/shared/scripts/rag'))
from knowledge_store import KnowledgeStore
ks = KnowledgeStore.from_config()
results = ks.search("{검색어}", top_k=5, mode="hybrid")
CLI 직접 호출 (롤백/디버그용):
# 전체 forge-outputs 검색 (기본)
python3 ~/forge/shared/scripts/rag/search.py "{검색어}" --top-k {N} --mode {hybrid|vector|bm25} --index-dir ${FORGE_OUTPUTS:-$HOME/forge-outputs}/.rag-index
# 정부과제만 검색
python3 ~/forge/shared/scripts/rag/search.py "{검색어}" --index-dir ${FORGE_OUTPUTS:-$HOME/forge-outputs}/09-grants/.rag-index
파라미터:
--top-k N: 결과 수 (기본 5)--mode hybrid: 벡터+BM25 조합 (기본, 권장)--mode vector: 의미 검색만--mode bm25: 키워드 검색만--graph: Graph RAG 모드 — 시맨틱 결과의 Obsidian [[wikilink]] 이웃 노드 확장--graph-hops N: 그래프 순회 홉 수 (기본 1, 2면 A→B→C 체인)--json: JSON 출력 (프로그래밍용)--index-dir: 인덱스 위치 지정Relevance-gate 파라미터 (환경변수):
RAG_RELEVANCE_THRESHOLD: 관련성 임계값 (기본 0.10). 이 점수 미달 청크는 [low-relevance] 섹션으로 분리됨 — 결과가 없어지지 않고 라벨로 표시. Graph 이웃(고정 score=0.5)은 항상 통과.
# 임계값 높이기 — 엄격 필터
RAG_RELEVANCE_THRESHOLD=0.20 python3 search.py "검색어"
# 임계값 낮추기 — 느슨한 필터 (결과 부족 시)
RAG_RELEVANCE_THRESHOLD=0.05 python3 search.py "검색어"
JSON 출력 시 각 결과에 "relevance": "pass" 또는 "relevance": "low-relevance" 필드 포함.
검색 결과에서:
Relevance-gate 라벨 해석:
[low-relevance] 섹션: 점수 threshold 미달 → 참고 가능하지만 낮은 신뢰도 명시 필수. 근거 인용 시 [low-relevance] 라벨 함께 표기.RAG_RELEVANCE_THRESHOLD=0.05 python3 search.py ...Obsidian vault(forge-outputs, .obsidian 루트)의 [[wikilink]] 관계를 그래프로 구축하여
시맨틱 검색 결과를 관계 기반으로 확장한다. 단순 유사도로는 못 잡는 연결 문서를 끌어온다.
[[wikilink]] 이웃(정방향 links_to + 역링크 links_from)을 그래프에서 조회# 20-wiki 위키링크 → obsidian_graph.json 구축 (vault-local 인덱스)
python3 ~/forge/shared/scripts/rag/graph_builder.py --index-dir ${FORGE_OUTPUTS:-$HOME/forge-outputs}/.rag-index
# 양쪽 인덱스(workspace + vault-local) 동시 갱신
python3 ~/forge/shared/scripts/rag/graph_builder.py --both
[[wikilink]] (정/역방향)obsidian_graph.json의 graph_dict에 저장 (LlamaIndex 소유 graph_store.json과 분리 — persist 클로버 방지)20-wiki/에 집중 (전체 vault wikilink의 ~98%)# Graph RAG — 시맨틱 시드 + 위키링크 이웃 확장
python3 ~/forge/shared/scripts/rag/search.py "에이전트 패턴" --graph --top-k 5 --index-dir ${FORGE_OUTPUTS:-$HOME/forge-outputs}/.rag-index
# 2홉 체인 (A→B→C)
python3 ~/forge/shared/scripts/rag/search.py "하네스 설계" --graph --graph-hops 2
그래프 이웃은 점수 0.5로 결과에 추가 (시맨틱 결과보다 낮게 랭크).
graph_neighbor: true메타로 구분. 위키 파일이 벡터 인덱스에 없으면 시드가 안 잡혀 확장 X — 위키 인덱싱 선행 필요.
# 최초 빌드
python3 ~/forge/shared/scripts/rag/index.py ${FORGE_OUTPUTS:-$HOME/forge-outputs}/09-grants
# 문서 추가/변경 후 재빌드
python3 ~/forge/shared/scripts/rag/index.py ${FORGE_OUTPUTS:-$HOME/forge-outputs}/09-grants --rebuild
cat ${FORGE_OUTPUTS:-$HOME/forge-outputs}/09-grants/.rag-index/meta.json
# 리서치 폴더
python3 ~/forge/shared/scripts/rag/index.py ${FORGE_OUTPUTS:-$HOME/forge-outputs}/01-research
# 전체 forge-outputs
python3 ~/forge/shared/scripts/rag/index.py ${FORGE_OUTPUTS:-$HOME/forge-outputs}
| 구성 요소 | 선택 | 비고 |
|---|---|---|
| 프레임워크 | LlamaIndex | 문서 로딩 + 인덱싱 |
| 벡터 저장소 | FAISS (로컬) | 서버 불필요 |
| 키워드 검색 | BM25Retriever | 하이브리드 병합 |
| 임베딩 모델 | multilingual-e5-small (로컬) | 한국어 지원, 비용 0 |
| 임베딩 차원 | 384 | |
| 청크 크기 | 512 토큰 | overlap 50 |
| 지원 파일 | md, txt, json, docx, pdf | hwp/pptx/이미지 제외 |
| Graph RAG | Obsidian [[wikilink]] 그래프 | obsidian_graph.json, --graph 플래그 |
| 그래프 빌더 | graph_builder.py | 노드=파일, 엣지=정/역 위키링크 |
pip install -r ~/forge/shared/scripts/rag/requirements.txtpip install llama-index-embeddings-huggingface sentence-transformers docx2txt--rebuild 제안[컨텍스트] 형식으로 포함 — 검색 정확도 향상[low-relevance] 섹션이 있으면 해당 청크를 근거로 직접 인용 금지. 반드시 [low-relevance] 라벨을 함께 명시한다. ref: ~/.claude/rules-on-demand/research-verification-protocol.md #4 (관련성 검증 의무)pass/low-relevance)을 함께 출력한다