This post is from a low-reputation account and contains an unverified outbound link. Be cautious before clicking external links.

Vectorize

Words
380
Reading
2 min
Listen
Play
3M

마지막 한 단계 — 기존 노트 3건 백필

재색인 엔드포인트는 로그인(본인 세션)이 필요해서 제가 대신 호출할 수

없습니다. 앱에 로그인한 상태에서 브라우저 콘솔에 한 줄 실행하면 끝입니다:

fetch("https://hive-note-worker.variouscafe.workers.dev/api/search/reinde

  x", {method:"POST",

  credentials:"include"}).then(r=>r.json()).then(console.log)

→ {total: 3, indexed: 3, skipped: 0} 비슷하게 나오면 완료입니다. (쿠키는

워커 도메인 기반이라 credentials:"include"로 전송됩니다.)

참고

  • glm-4.6은 추론(reasoning) 모델이라 답변 전에 내부 사고 과정을 거쳐

토큰을 더 쓰고 응답이 1~수초 걸립니다(품질은 좋습니다). 속도/비용

우선이면 glm-4-flash나 glm-4.6-air로 바꾸는 것도 좋습니다 —

wrangler.toml의 GLM_MODEL만 바꾸고 재배포하면 됩니다. 원하시면 제가

교체+재배포해드릴게요.

  • 앞으로는 노트를 저장(발행)할 때마다 자동으로 색인되므로 백필은 이번

한 번이면 충분합니다.

⏺ 완료했습니다. Cloudflare Vectorize + Workers AI(bge-m3) + GLM RAG로 노트 기반 AI 검색

전체 파이프라인을 구현했고, 모든 타입체크와 wrangler 설정 검증을 통과했습니다.

구현된 아키텍처

질문 (Cmd/Ctrl+K 또는 헤더 검색 버튼)

→ POST /api/search/ai

   ① Workers AI(bge-m3, 1024차원)로 질문 임베딩

   ② Vectorize(cosine)에서 { authorUserId } 필터로 본인 노트 topK 검색

   ③ D1에서 본문 보강 + 권한/삭제 재확인 (snippet 생성)

   ④ 검색 결과를 컨텍스트로 GLM RAG 답변+출처 생성

→ UI: AI 답변 + 관련 노트 목록(클릭 시 페이지 이동)
  • 저장소 분리: D1 = 원본(진실), Vectorize = 임베딩(검색용)

  • 인덱싱 시점: 명시적 저장(발행) 시만 갱신 / 자동저장은 D1만 / 삭제 시 벡터 제거

  • 우아한 저하: GLM_API_KEY 미설정·실패 시 답변 생략, 의미 검색 결과만 반환

변경/추가 파일

Worker (백엔드)

  • wrangler.toml · src/env.ts — VECTORIZE, AI 바인딩 + GLM_*/ADMIN_EMAIL 추가

  • migrations/0002_vectorize.sql — pages.embedded_at 컬럼(백필 멱등성)

  • src/util/text.ts — 마크다운→평문 정제, 임베딩 텍스트/스니펫 생성

  • src/ai/embeddings.ts — embed/indexPage/unindexPage/semanticSearch (bge-m3)

  • src/ai/rag.ts — GLM OpenAI 호환 RAG 답변 생성

  • src/routes/search.ts — POST /ai(AI검색), POST /reindex(admin 백필)

  • src/routes/pages.ts · src/db/pages.ts — 생명주기 임베딩 훅 + setEmbeddedAt

Pages (프론트)

  • src/api/search.ts — aiSearch() 클라이언트

  • src/components/search/AiSearchDialog.tsx — AI 검색 다이얼로그

  • src/pages/Workspace.tsx — 검색 버튼 + Cmd/Ctrl+K 단축키

공유/문서

  • packages/shared/src/schemas.ts — AiSearch* 스키마

  • docs/VECTORIZE.md — 설정/운영 가이드

⚠️ 직접 실행하셔야 할 설정 (제가 대신할 수 없는 부분)

cd apps/worker

wrangler vectorize create hive-note-vector --dimensions 1024 --metric cosine

pnpm db:apply:remote # embedded_at 마이그레이션

wrangler secret put GLM_API_KEY # z.ai 키 (생략 시 검색 결과만 동작)

wrangler.toml 의 ADMIN_EMAIL 에 본인 이메일 입력 후

pnpm deploy

배포 후 기존 노트 1회 백필: POST /api/search/reindex (로그인 상태)

자세한 절차와 비고(긴 노트 한계, 재색인 등)는 docs/VECTORIZE.md에 정리했습니다.

GLM 기본값을 glm-4.6 / https://api.z.ai/api/paas/v4로 잡아뒀습니다. 사용 중인 키가

BigModel CN이거나 다른 모델명이면 wrangler.toml의 GLM_BASE_URL/GLM_MODEL만 바꾸시면

됩니다.

Vectorize | Ecency