핵심 요약
Cloudflare 단일 스택으로 사내 RAG 검색봇 — Workers AI(임베딩·생성) + Vectorize(벡터 인덱스) + KV(메타) + R2(원본 문서). 월 비용 $14, p50 320ms, 사용자 28명 6개월 운영. 가성비 압승.
1. 파이프라인
// 색인
const embed = await env.AI.run('@cf/baai/bge-large-en-v1.5', { text: chunk })
await env.VECTOR.upsert([{ id, values: embed.data[0], metadata: { docId } }])
await env.KV.put(`doc:${id}`, JSON.stringify({ title, url }))
await env.R2.put(`docs/${docId}.md`, raw)
// 검색
const q = await env.AI.run('@cf/baai/bge-large-en-v1.5', { text: query })
const results = await env.VECTOR.query(q.data[0], { topK: 8 })
const ctx = await Promise.all(results.matches.map(m => env.KV.get(`doc:${m.id}`)))
const answer = await env.AI.run('@cf/meta/llama-4-8b', { messages: ... })
2. 데이터 규모
- 문서 8,400개(사내 위키, 노션, PDF)
- chunk 142K, 임베딩 1024차원
- Vectorize index 580MB
- R2 raw 4.8GB
3. 비용 분해
| 항목 | 월 비용 | |
|---|---|---|
| Workers AI(임베딩+생성) | $8.4 | |
| Vectorize | $3.2 | |
| KV reads | $0.6 | |
| R2 storage | $0.08 | |
| Workers 요청 | $2 |
4. 함정
- Vectorize 인덱스 metadata 필터 — 정확 매칭만, range·full-text는 KV로 보조
- 임베딩 모델 변경 = 재색인 — 모델 선택 신중
- rate limit — Workers AI 분당 500, 큰 색인 작업은 Queue로 분산
- chunk 크기 — 한국어는 800자, 영어는 1024 토큰 권장

댓글 0