跳到主要内容
如果您正在 Cloudflare worker 中部署您的项目,您可以将 Cloudflare Vectorize 与 LangChain.js 结合使用。它是一个强大且方便的选项,直接内置于 Cloudflare 中。

设置

兼容性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 软件包的一般说明,请参阅此部分
npm
npm install @langchain/cloudflare @langchain/core

用法

下面是一个示例 worker,它根据所使用的路径向向量存储添加文档、查询它或清除它。它还使用了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 参数以按先前加载的元数据进行过滤。有关所需格式的信息,请参阅官方文档
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.