【一】使用cloudflare实现最低成本的RAG 个人知识库
1. 前言
赛博菩萨Cloudflare又出手了,不仅提供免费额度的AI 模型调用,还教咱们怎么做自己的RAG( Retrieval-Augmented Generation (检索增强生成))
RAG 是一种结合了信息检索和大语言模型生成的技术架构,用来让 AI 回答问题时能够:
先从外部知识库检索相关信息 再基于检索到的内容生成回答
而这一切通过Cloudflare实现的话,只需要开一个Workers Paid计划(每月5美元)😹,其中还包含了一堆其他的功能就不在这详细列出了。
文章以下内容根据Cloudflare的这篇博客完成,如果英文能力好的推荐阅读原文 。
Build a Retrieval Augmented Generation (RAG) AI
1.1 想先看代码?
所有代码你都能在GitHub上找到:demo-rag-ai-tutorial
1.2 Live Demo
还有一个在线可以直接试试效果的页面:https://demo-rag.runnable.run/ui
2. 构建检索增强生成(RAG)AI · Cloudflare Workers AI 文档
本指南将带你完成使用 Cloudflare AI 搭建并部署第一个应用的全过程。你将构建一个全功能的 AI 应用,使用 Workers AI、Vectorize、D1 以及 Cloudflare Workers 等工具。
完成本教程后,你将拥有一个 AI 工具,可将信息存储起来并使用大语言模型进行查询。这种模式称为检索增强生成(Retrieval Augmented Generation,RAG),你可以通过组合 Cloudflare AI 工具包中的多个能力来实现。构建该应用不需要有使用 AI 工具的经验。
- 注册 Cloudflare 账号。
- 安装
Node.js。
你还需要访问 Vectorize。本教程也会演示如何可选集成 Anthropic Claude,如需使用需准备 Anthropic API Key。
2.1. 创建新的 Worker 项目
C3(create-cloudflare-cli)是一款命令行工具,旨在帮助你快速在 Cloudflare 上创建并部署 Workers。
打开终端运行 C3 来创建你的 Worker 项目:
- npm
- yarn
- pnpm
npm create cloudflare@latest -- rag-ai-tutorial
yarn create cloudflare rag-ai-tutorial
pnpm create cloudflare@latest rag-ai-tutorial
在交互式设置中选择如下选项:
- 对于“开始于什么?”,选择
Hello World example - 对于“使用哪个模板?”,选择
Worker only - 对于“使用哪种语言?”,选择
JavaScript - 对于“是否使用 git 进行版本控制?”,选择
Yes - 对于“是否部署你的应用?”,选择
No(部署前我们会做一些修改)
在你的项目目录中,C3 会生成若干文件。
C3 创建了哪些文件?
wrangler.jsonc:你的 Wrangler 配置文件worker.js(位于/src):使用 ES Module 语法编写的最小化“Hello World!” Workerpackage.json:最小化的 Node 依赖配置文件package-lock.json:参见npm关于package-lock.jsonnode_modules:参见npm关于node_modules
然后进入新创建的项目目录:
cd rag-ai-tutorial
2.2. 使用 Wrangler CLI 进行开发
Workers 命令行工具 Wrangler 支持你创建、本地开发与部署 Workers 项目。C3 会默认为项目安装 Wrangler。
创建第一个 Worker 后,在项目目录运行 wrangler dev 启动本地开发服务器,便于在开发过程中进行本地测试。
npx wrangler dev
现在访问 http://localhost:8787 即可看到你的 Worker 正在运行。任何对代码的更改都会触发重构建,刷新页面即可看到最新输出。
2.3. 添加 AI 绑定
要使用 Cloudflare 的 AI 产品,可以在 Wrangler 配置文件中添加 ai 块作为远程绑定。这会在你的代码中设置一个到 Cloudflare AI 模型的绑定,以便与平台上的可用模型交互。
如果你此前未使用过 Wrangler,它会尝试打开浏览器让你用 Cloudflare 账号登录。
如在此步骤遇到问题或无法使用浏览器界面,请参阅 wrangler login 文档。
本示例使用 @cf/meta/llama-3-8b-instruct 模型,该模型用于生成文本。
- wrangler.jsonc
- wrangler.toml
{
"$schema": "./node_modules/wrangler/config-schema.json",
"ai": {
"binding": "AI",
"remote": true
}
}
[ai]
binding = "AI"
remote = true
接着找到 src/index.js 文件。在 fetch 处理器内,你可以通过 AI 绑定发起模型调用:
export default {
async fetch(request, env, ctx) {
const answer = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
messages: [{ role: "user", content: `What is the square root of 9?` }],
});
return new Response(JSON.stringify(answer));
},
};
通过 AI 绑定调用 LLM,我们可以在代码中直接与 Cloudflare AI 的大语言模型交互。本例使用的是 @cf/meta/llama-3-8b-instruct 模型,用于生成文本。
你可以使用 wrangler 部署 Worker:
npx wrangler deploy
向你的 Worker 发起请求将得到 LLM 生成的文本响应,并以 JSON 对象返回。
curl https://example.username.workers.dev
{"response":"Answer: The square root of 9 is 3."}
2.4. 使用 Cloudflare D1 与 Vectorize 添加向量嵌入
嵌入(Embeddings)让你在 Cloudflare AI 项目中为语言模型增加检索能力。这通过 Vectorize(Cloudflare 的向量数据库)来实现。
开始使用 Vectorize 时,先用 wrangler 创建一个嵌入索引。该索引存储 768 维向量,并使用余弦相似度来判断向量间的相似性:
npx wrangler vectorize create vector-index --dimensions=768 --metric=cosine
随后,将新建的 Vectorize 索引的配置添加到 Wrangler 配置文件:
- wrangler.jsonc
- wrangler.toml
{
"$schema": "./node_modules/wrangler/config-schema.json",
"vectorize": [
{
"binding": "VECTOR_INDEX",
"index_name": "vector-index"
}
]
}
# ... existing wrangler configuration
[[vectorize]]
binding = "VECTOR_INDEX"
index_name = "vector-index"
向量索引用于存储一组维度(浮点数),用来表示你的数据。当需要查询时,你也会把查询语句转换成向量。Vectorize 旨在高效找出与查询最相似的已存向量。
要实现搜索功能,你需要设置一个 Cloudflare D1 数据库。你可以在 D1 中存储应用数据,并将其转换为向量格式;当用户搜索并与某向量匹配时,再取回并展示对应数据。
使用 wrangler 创建一个新的 D1 数据库:
npx wrangler d1 create database