Cloudflare Vectorize
如果你正在 Cloudflare Worker 中部署项目,则可以在 LangChain.js 中使用 Cloudflare Vectorize。这是一个功能强大且便捷的选项,直接集成在 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 集成包:
:::提示 请参阅安装集成包的一般说明部分。 :::
- npm
- Yarn
- pnpm
npm install @langchain/cloudflare @langchain/core
yarn add @langchain/cloudflare @langchain/core
pnpm add @langchain/cloudflare @langchain/core
使用
以下是一个示例 Worker,根据使用的路径将文档添加到向量存储、查询向量存储或清空向量存储。它还使用了 Cloudflare Workers AI Embeddings。
note
如果在本地运行,请确保使用 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 });
},
};
API Reference:
- CloudflareVectorizeStore from
@langchain/cloudflare - CloudflareWorkersAIEmbeddings from
@langchain/cloudflare
你还可以传递一个 filter 参数,以根据之前加载的元数据进行过滤。
有关所需格式的信息,请参阅官方文档。
相关内容
Related
- Vector store conceptual guide
- Vector store how-to guides