서문
기본적으로 AI 모델은 학습 데이터와 현재 대화 컨텍스트만을 기반으로 질문에 답변합니다. 하지만 실제 시나리오에서는 AI가 회사 문서, 제품 매뉴얼 또는 개인 노트를 참조하여 답변하기를 원하는 경우가 많습니다. RAG(Retrieval-Augmented Generation, 검색 증강 생성) 기술이 바로 이 문제를 해결하는 핵심입니다. 본 글에서는 OpenClaw를 위한 지식베이스 시스템을 단계별로 구축하는 방법을 안내합니다.
1. RAG 원리 간략 소개
1.1 RAG란 무엇인가
RAG의 작동 흐름은 다음과 같습니다:
사용자 질문
│
├── ① 질문을 벡터로 변환 (Embedding)
│
├── ② 벡터 데이터베이스에서 가장 관련성 높은 문서 조각 검색
│
├── ③ 관련 문서 조각을 컨텍스트로 프롬프트에 주입
│
└── ④ AI 모델이 컨텍스트를 기반으로 답변 생성
1.2 RAG vs 파일 직접 업로드
| 방식 | 장점 | 단점 |
|---|---|---|
| 텍스트 직접 붙여넣기 | 간단하고 직관적 | 컨텍스트 윈도우 제한 |
| RAG 검색 | 대규모 문서 지원 | 추가 설정 필요 |
| 모델 파인튜닝 | 지식 내재화 | 비용 높음, 유연성 부족 |
대부분의 팀에게 RAG는 가성비가 가장 높은 방안입니다.
2. 지식베이스 디렉토리 설정
2.1 기본 설정
// ~/.config/openclaw/openclaw.json5
{
"knowledgeBase": {
"enabled": true,
// 지식베이스 문서 디렉토리 (복수 지원)
"directories": [
{
"path": "/data/knowledge/company-docs",
"name": "회사 문서",
"description": "회사 정책, 프로세스, 규범 등"
},
{
"path": "/data/knowledge/product-docs",
"name": "제품 문서",
"description": "제품 사용 매뉴얼, API 문서 등"
},
{
"path": "/home/user/notes",
"name": "개인 노트",
"description": "개인 학습 노트 및 메모"
}
],
// 파일 변경 모니터링
"watchChanges": true,
// 변경 후 자동 재인덱싱
"autoReindex": true
}
}
2.2 지식베이스 디렉토리 생성
# 문서 디렉토리 생성
sudo mkdir -p /data/knowledge/company-docs
sudo mkdir -p /data/knowledge/product-docs
sudo chown -R $USER:$USER /data/knowledge
# 문서 추가
cp ~/Documents/회사규정.pdf /data/knowledge/company-docs/
cp ~/Documents/API문서.md /data/knowledge/product-docs/
cp -r ~/Documents/기술규범/ /data/knowledge/company-docs/
3. 지원 파일 형식
3.1 파일 형식 지원 목록
| 형식 | 확장자 | 지원 수준 | 설명 |
|---|---|---|---|
| Markdown | .md | 완전 지원 | 권장 형식, 구조 보존 |
| 일반 텍스트 | .txt | 완전 지원 | 간단하고 직관적 |
| 완전 지원 | 자동 텍스트 추출 | ||
| Word | .docx | 완전 지원 | 텍스트 및 표 자동 추출 |
| HTML | .html | 지원 | 본문 내용 추출 |
| CSV | .csv | 지원 | 표 데이터 |
| JSON | .json | 지원 | 구조화된 데이터 |
| EPUB | .epub | 기본 지원 | 전자책 콘텐츠 |
| 코드 파일 | .py/.js/.go 등 | 지원 | 코드 주석 및 문서 |
3.2 파일 형식 설정
{
"knowledgeBase": {
"fileTypes": {
"include": [".md", ".txt", ".pdf", ".docx", ".html", ".csv"],
"exclude": [".tmp", ".bak", ".log"],
// 단일 파일 최대 크기
"maxFileSize": "10MB",
// 무시할 디렉토리
"ignoreDirs": ["node_modules", ".git", "__pycache__"]
}
}
}
3.3 PDF 처리 최적화
# PDF 처리 의존성 설치 (PDF 파싱 문제 발생 시)
sudo apt install -y poppler-utils
# PDF 추출 테스트
pdftotext /data/knowledge/company-docs/규정.pdf -
4. 벡터 저장소 설정
4.1 내장 벡터 저장소 (기본)
OpenClaw는 중소 규모 지식베이스에 적합한 경량 벡터 저장 엔진을 내장하고 있습니다:
{
"knowledgeBase": {
"vectorStore": {
"type": "builtin",
"storagePath": "/var/lib/openclaw/vectors",
// 벡터 차원 (Embedding 모델에 따라 결정)
"dimensions": 1536,
// 유사도 알고리즘
"similarityMetric": "cosine"
}
}
}
4.2 ChromaDB 사용
더 대규모 지식베이스의 경우 ChromaDB를 권장합니다:
# ChromaDB 설치
docker run -d \
--name chromadb \
--restart=always \
-p 8000:8000 \
-v chroma-data:/chroma/chroma \
chromadb/chroma:latest
{
"knowledgeBase": {
"vectorStore": {
"type": "chroma",
"url": "http://localhost:8000",
"collection": "openclaw_knowledge"
}
}
}
4.3 Qdrant 사용
Qdrant는 더 강력한 필터링 및 검색 기능을 제공합니다:
# Qdrant 설치
docker run -d \
--name qdrant \
--restart=always \
-p 6333:6333 \
-v qdrant-data:/qdrant/storage \
qdrant/qdrant:latest
{
"knowledgeBase": {
"vectorStore": {
"type": "qdrant",
"url": "http://localhost:6333",
"collection": "openclaw_knowledge"
}
}
}
4.4 벡터 저장소 비교
| 저장소 방안 | 문서 규모 | 조회 속도 | 배포 복잡도 | 적합한 시나리오 |
|---|---|---|---|---|
| 내장 | < 1만 건 | 빠름 | 추가 배포 불필요 | 개인/소규모 팀 |
| ChromaDB | < 10만 건 | 빠름 | 간단 | 중간 규모 |
| Qdrant | < 100만 건 | 매우 빠름 | 보통 | 대규모/프로덕션 |
5. 청킹 전략
문서를 적절한 크기의 작은 조각(Chunk)으로 분할해야 효과적으로 인덱싱하고 검색할 수 있습니다.
5.1 청킹 매개변수 설정
{
"knowledgeBase": {
"chunking": {
// 청킹 전략
"strategy": "recursive",
// 각 청크의 목표 크기 (문자 수)
"chunkSize": 1000,
// 인접 청크의 중복 크기
"chunkOverlap": 200,
// 구분자 우선순위 (높은 순서에서 낮은 순서)
"separators": ["\n## ", "\n### ", "\n\n", "\n", "。", ".", " "],
// 문서 메타데이터 보존
"preserveMetadata": true
}
}
}
5.2 청킹 전략 설명
| 전략 | 설명 | 적합한 시나리오 |
|---|---|---|
fixed |
고정 문자 수로 분할 | 명확한 구조가 없는 텍스트 |
recursive |
구분자 기반 재귀 분할 | 일반 문서 (권장) |
markdown |
Markdown 제목 기반 분할 | Markdown 파일 |
semantic |
의미 경계 기반 분할 | 높은 품질 요구 시나리오 |
5.3 청크 크기 선택
청크가 너무 큰 경우 (> 2000자):
✗ 검색 정확도 낮음, 무관한 내용 포함
✗ 컨텍스트 윈도우 많이 차지
청크가 너무 작은 경우 (< 200자):
✗ 컨텍스트 부족, 정보 불완전
✗ 검색 횟수 증가
권장 범위: 500-1500자, 중복 100-300자
6. Embedding 모델 설정
6.1 Embedding 모델 선택
{
"knowledgeBase": {
"embedding": {
// OpenAI Embedding 사용
"provider": "openai",
"model": "text-embedding-3-small",
"dimensions": 1536,
"batchSize": 100
}
}
}
6.2 각 Embedding 모델 비교
| 모델 | 차원 | 품질 | 속도 | 비용 |
|---|---|---|---|---|
| OpenAI text-embedding-3-large | 3072 | 최고 | 빠름 | $0.13/1M tokens |
| OpenAI text-embedding-3-small | 1536 | 높음 | 매우 빠름 | $0.02/1M tokens |
| Ollama nomic-embed-text | 768 | 보통 | 보통 | 무료 (로컬) |
| Ollama mxbai-embed-large | 1024 | 중상 | 보통 | 무료 (로컬) |
6.3 로컬 Embedding 사용 (Ollama)
# Embedding 모델 다운로드
ollama pull nomic-embed-text
{
"knowledgeBase": {
"embedding": {
"provider": "ollama",
"model": "nomic-embed-text",
"dimensions": 768,
"baseUrl": "http://localhost:11434"
}
}
}
7. 인덱스 관리
7.1 인덱스 구축
# 최초 지식베이스 인덱스 구축
openclaw knowledge index
# 출력 예시:
# 디렉토리 스캔: /data/knowledge/company-docs
# 파일 발견: 45개
# 처리 중... ████████████████████ 100%
# 벡터 생성: 1,234개 문서 청크
# 인덱싱 완료! 소요 시간: 2분 15초
# 인덱스 업데이트 (변경된 파일만 처리)
openclaw knowledge index --update
# 인덱스 재구축 (초기화 후 전체 재구축)
openclaw knowledge index --rebuild
7.2 인덱스 상태 확인
# 지식베이스 상태 확인
openclaw knowledge status
# 출력 예시:
# ┌──────────────────┬────────┬──────────┬──────────────┐
# │ 지식베이스 │ 파일 수 │ 문서 청크 │ 마지막 업데이트 │
# ├──────────────────┼────────┼──────────┼──────────────┤
# │ 회사 문서 │ 45 │ 892 │ 2026-04-09 │
# │ 제품 문서 │ 23 │ 342 │ 2026-04-08 │
# │ 개인 노트 │ 67 │ 234 │ 2026-04-09 │
# ├──────────────────┼────────┼──────────┼──────────────┤
# │ 합계 │ 135 │ 1,468 │ │
# └──────────────────┴────────┴──────────┴──────────────┘
7.3 검색 효과 테스트
# 검색 테스트
openclaw knowledge search "연차 정책은 무엇인가요"
# 검색된 관련 문서 조각과 유사도 점수 출력
# [0.92] company-docs/직원핸드북.pdf (제3장)
# "정규직 입사 1년 후 5일의 유급 연차를 사용할 수 있습니다..."
# [0.87] company-docs/HR정책.md
# "연차 신청은 3영업일 전에..."
8. 검색 최적화
8.1 쿼리 최적화 설정
{
"knowledgeBase": {
"retrieval": {
// 가장 관련성 높은 Top K개 결과 반환
"topK": 5,
// 최소 유사도 임계값 (이 값 미만의 결과는 폐기)
"minScore": 0.7,
// 쿼리 재작성 활성화 (AI가 검색 키워드 최적화)
"queryRewrite": true,
// 하이브리드 검색 활성화 (벡터 + 키워드)
"hybridSearch": true,
"hybridWeight": 0.7 // 벡터 검색 가중치
}
}
}
8.2 검색 결과를 프롬프트에 주입
{
"knowledgeBase": {
"promptTemplate": {
// 검색 결과를 시스템 프롬프트에 주입하는 템플릿
"prefix": "다음 참고 자료를 바탕으로 사용자의 질문에 답변해 주세요. 참고 자료에 관련 내용이 없으면 솔직히 알려주세요.\n\n---\n참고 자료:\n",
"suffix": "\n---\n\n위 참고 자료를 바탕으로 답변해 주세요:",
// 주입할 최대 토큰 수
"maxTokens": 4000
}
}
}
9. 실제 활용 시나리오
9.1 기업 내부 지식베이스
# 회사 문서를 지식베이스에 추가
/data/knowledge/company-docs/
├── 직원핸드북.pdf
├── 비용처리절차.md
├── 기술규범/
│ ├── 코드규범.md
│ ├── 배포절차.md
│ └── 보안규범.md
└── 제품문서/
├── 사용자가이드.pdf
└── API문서.md
사용자가 Telegram에서 "비용 처리 절차가 어떻게 되나요?"라고 질문하면, OpenClaw가 관련 문서를 자동으로 검색하여 정확한 답변을 제공합니다.
9.2 개인 노트 어시스턴트
# Obsidian 노트 직접 연동
/home/user/notes/
├── 기술학습/
│ ├── Docker입문.md
│ ├── Kubernetes노트.md
│ └── Linux명령어사전.md
├── 독서노트/
└── 프로젝트기록/
9.3 고객 서비스 지식베이스
{
"knowledgeBase": {
"directories": [
{
"path": "/data/knowledge/faq",
"name": "자주 묻는 질문",
"description": "고객 자주 묻는 질문 및 표준 답변"
},
{
"path": "/data/knowledge/product-manual",
"name": "제품 매뉴얼",
"description": "제품 기능 설명 및 사용 튜토리얼"
}
]
}
}
10. 유지보수 및 모범 사례
10.1 문서 품질이 검색 품질에 영향을 미침
- 문서 구조가 명확해야 함 (제목, 목록 등 사용)
- 대량의 중복 콘텐츠 지양
- 정기적으로 오래된 문서 정리
- Markdown 형식을 사용하면 최적의 청킹 효과 달성 가능
10.2 정기 유지보수
# 매주 인덱스 재구축 (cron)
0 3 * * 0 openclaw knowledge index --rebuild >> /var/log/openclaw-index.log 2>&1
# 인덱스 상태 점검
openclaw knowledge status
10.3 성능 최적화
| 최적화 포인트 | 방법 |
|---|---|
| 인덱싱 속도 느림 | batchSize 증가, 더 빠른 Embedding 모델 사용 |
| 검색 부정확 | chunkSize와 overlap 조정, 하이브리드 검색 활성화 |
| 결과 무관 | minScore 임계값 높이기, topK 줄이기 |
| 메모리 사용 과다 | 외부 벡터 저장소 사용 (ChromaDB/Qdrant) |
지식베이스와 RAG 시스템을 구축하면 OpenClaw가 범용 AI 어시스턴트에서 전용 지식 Q&A 전문가로 업그레이드되어, 보유한 문서를 기반으로 한 다양한 질문에 정확하게 답변할 수 있게 됩니다.