Cloudflare vectorize 통합

Cloudflare vectorize 통합

LangChain JavaScript로 Cloudflare vectorize 벡터 스토어와 통합해요.

프로젝트를 Cloudflare worker에 배포한다면 Cloudflare Vectorize를 LangChain.js와 함께 사용할 수 있어요. Cloudflare에 직접 내장된 강력하고 편리한 옵션이에요.

설정 (Setup)

**호환성 (Compatibility)**

Cloudflare Vectorize는 현재 오픈 베타이며, 사용하려면 유료 플랜의 Cloudflare 계정이 필요해요.

프로젝트를 설정한 뒤, 다음 Wrangler 명령으로 인덱스를 생성하세요:

$ npx wrangler vectorize create <index_name> --preset @cf/baai/bge-small-en-v1.5

vectorize 명령의 전체 옵션 목록은 공식 문서에서 볼 수 있어요.

그런 다음 wrangler.toml 파일에 [[vectorize]] 항목을 추가해야 해요:

[[vectorize]]
binding = "VECTORIZE_INDEX"
index_name = "<index_name>"

마지막으로 LangChain Cloudflare 통합 패키지를 설치해야 해요:

LangChain 패키지 설치에 대한 일반적인 지침은 [이 섹션](/oss/javascript/langchain/install)을 참고하세요. ```bash npm npm install @langchain/cloudflare @langchain/core ```
yarn add @langchain/cloudflare @langchain/core
pnpm add @langchain/cloudflare @langchain/core

사용법 (Usage)

아래는 경로에 따라 벡터 스토어에 문서를 추가하거나, 쿼리하거나, 비우는 워커 예제예요. 또한 Cloudflare Workers AI Embeddings를 사용해요.

로컬에서 실행한다면 `npx wrangler dev --remote`로 wrangler를 실행하세요!
name = "langchain-test"
main = "worker.ts"
compatibility_date = "2024-01-10"

[[vectorize]]
binding = "VECTORIZE_INDEX"
index_name = "langchain-test"

[ai]
binding = "AI"
// @ts-nocheck

import type {
  VectorizeIndex,
  Fetcher,
  Request,
} from "@cloudflare/workers-types";

import {
  CloudflareVectorizeStore,
  CloudflareWorkersAIEmbeddings,
} from "@langchain/cloudflare";

export interface Env {
  VECTORIZE_INDEX: VectorizeIndex;
  AI: Fetcher;
}

export default {
  async fetch(request: Request, env: Env) {
    const { pathname } = new URL(request.url);
    const embeddings = new CloudflareWorkersAIEmbeddings({
      binding: env.AI,
      model: "@cf/baai/bge-small-en-v1.5",
    });
    const store = new CloudflareVectorizeStore(embeddings, {
      index: env.VECTORIZE_INDEX,
    });
    if (pathname === "/") {
      const results = await store.similaritySearch("hello", 5);
      return Response.json(results);
    } else if (pathname === "/load") {
      // Upsertion by id is supported
      await store.addDocuments(
        [
          {
            pageContent: "hello",
            metadata: {},
          },
          {
            pageContent: "world",
            metadata: {},
          },
          {
            pageContent: "hi",
            metadata: {},
          },
        ],
        { ids: ["id1", "id2", "id3"] }
      );

      return Response.json({ success: true });
    } else if (pathname === "/clear") {
      await store.delete({ ids: ["id1", "id2", "id3"] });
      return Response.json({ success: true });
    }

    return Response.json({ error: "Not Found" }, { status: 404 });
  },
};

이전에 로드한 메타데이터로 필터링하기 위해 filter 파라미터를 전달할 수도 있어요. 필수 형식에 대한 정보는 공식 문서를 참고하세요.

출처: 문서

본문

CloudflareVectorizeStore는 Cloudflare Vectorize에 벡터를 저장·검색하는 통합이에요. @langchain/cloudflare 패키지에서 가져와 CloudflareWorkersAIEmbeddingsenv.VECTORIZE_INDEX 바인딩으로 인스턴스화하고, addDocuments(ID 업서트 지원)·similaritySearch·delete를 사용해요. Cloudflare worker에서 실행할 때 특히 유용하며, 오픈 베타이므로 유료 플랜 계정이 필요해요.

더 알아보기 (Learn more)