大家好,我是 Ai 学习的老章

中简单介绍了纯互联网的全托管 RAG 流水线,本文我们实操看看部署流程和效果。

AutoRAG

AutoRAG 是一个由 Cloudflare 提供的全托管检索增强生成(RAG)流水线,旨在简化开发者将上下文感知 AI 集成到其应用程序中的方式。

RAG 是一种通过从您自己的数据中检索信息并将其提供给大型语言模型(LLM)以生成更具体回答的方法。RAG 在查询时从数据源检索相关的信息,将其与用户的查询输入结合起来,然后将两者一起输入到 LLM 中生成基于您数据的响应。这使得 RAG 成为 AI 驱动的支持机器人、内部知识助手、文档中的语义搜索以及其他源为实真相不断演化的应用场景的理想选择。

构建 RAG 流水线需要拼凑多个组件——数据存储、向量数据库、嵌入模型、LLMs 以及自定义索引、检索和生成逻辑等等工具和服务拼接在一起,才能开始。维护它更是难上加难,随着数据的变化,须手动重新索引和重新生成嵌入,以使系统保持相关性和性能。

AutoRAG 要实现的就是将脆弱的胶水代码管道、脆弱的集成和不断的维护,变成一个简单的“提问,获得智能回答”的体验。从导入数据、自动分块和嵌入,到在 Cloudflare 的 Vectorize 数据库中存储向量,进行语义检索,并使用 Workers AI 生成高质量的响应。AutoRAG 会持续监控数据源和索引,使 AI 保持最新,无需手动操作。

Cloudflare 非常慷慨,目前 AutoRAG 完全免费,索引、检索和增强的计算操作不会产生额外费用。每个账户的 Max AutoRAG 实例 10,最大文件数 10000 个。

R2、Vectorize Stores、Workers AI、AI Gateway 都可能产生费用,但是免费额度足够个人测试使用了,比如我长期把 R2 当图床,从没产生过费用。Vectorize 也有每月 3000 万的向量维度查询。

具体可以看看:https://developers.cloudflare.com/autorag/platform/limits-pricing/

下面我们开始:

第一步,创建 R2 对象存储

访问https://dash.cloudflare.com/点击 R2 对象存储,创建存储桶

名称:html-bucker,点击创建

第二步,创建 Worker 抓取网页到 R2

本地创建一个空白文件夹

cd 过去后,创建一个名为browser-r2-worker的 Worker 项目:

npm create cloudflare@latest -- browser-r2-worker

设置时,请选择以下选项:

  • What would you like to start with? Choose Hello World Starter.
    从哪里开始?选择 Hello World 入门。

  • Which template would you like to use? Choose Worker only.
    使用哪个模板?选择仅 Worker。

  • Which language do you want to use? Choose TypeScript.
    使用哪种语言?选择 TypeScript。

打开网易新闻 查看精彩图片

安装@cloudflare/puppeteer,这允许你控制浏览器渲染实例:

npm i @cloudflare/puppeteer

将以下配置添加到您的 Wrangler 配置文件中,以便您的 Worker 可以使用浏览器渲染并使用新的 R2 存储桶:

{  "compatibility_flags": ["nodejs_compat"], "browser": { "binding": "MY_BROWSER"  }, "r2_buckets": [   {    "binding": "HTML_BUCKET",    "bucket_name": "html-bucket",   }  ], }

将 src/index.ts 的内容替换为以下框架脚本:

import puppeteer from "@cloudflare/puppeteer"; // Define our environment bindings interface Env {  MY_BROWSER: any;  HTML_BUCKET: R2Bucket; } // Define request body structure interface RequestBody {  url: string; } export default { async fetch(request: Request, env: Env): Promise { // Only accept POST requests if (request.method !== 'POST') { return new Response('Please send a POST request with a target URL', { status: 405 });   } // Get URL from request body const body = await request.json() as RequestBody; // Note: Only use this parser for websites you own const targetUrl = new URL(body.url);  // Launch browser and create new page const browser = await puppeteer.launch(env.MY_BROWSER); const page = await browser.newPage(); // Navigate to the page and fetch its html await page.goto(targetUrl.href); const htmlPage = await page.content(); // Create filename and store in R2 const key = targetUrl.hostname + '_' + Date.now() + '.html'; await env.HTML_BUCKET.put(key, htmlPage); // Close browser await browser.close(); // Return success response return new Response(JSON.stringify({    success: true,    message: 'Page rendered and stored successfully',    key: key   }), {    headers: { 'Content-Type': 'application/json' }   });  } } satisfies ExportedHandler ;
打开网易新闻 查看精彩图片

可以通过运行以下命令将其部署到 Cloudflare 账户中:

cd browser-r2-worker  npx wrangler deploy
打开网易新闻 查看精彩图片

回到 Cloudflare 控制台,可以看到 Worker 已经创建好了

这个worker的核心功能是使用puppeteer访问、阅读网页并将其保存为完整HTML到刚刚创建的 R2 存储桶。但是我按照官方教程遇到 Couldn't connect to server 错误,暂未解决,所以后续用手动上传文件来测试。

这一步本身也不够傻瓜,后续开发成插件自动执行会优雅一点。

curl -X POST https://browser-r2-worker. .workers.dev \ -H "Content-Type: application/json" \ -d '{"url": "https://blog.cloudflare.com/introducing-autorag-on-cloudflare"}'

第二步,创建 AutoRAG 并监控索引过程

  1. 选择创建 AutoRAG 并完成设置过程:

    1. 选择包含知识库的 R2 存储桶,在这种情况下,选择html-bucket

      打开网易新闻 查看精彩图片

    2. 选择用于将您的数据转换为向量表示的嵌入模型。建议使用默认模型。

    3. 选择一个 LLM 来生成你的响应。建议使用默认项。

    4. 选择或创建一个 AI 网关以监控和控制您的模型使用情况。

    5. 将你的 AutoRAG 命名为my-rag

打开网易新闻 查看精彩图片

测试一下:

未上传任何文档情况

上传网页或其他文件

unsetunset第四步,测试并添加到应用程序unsetunset

AutoRAG 提供了 REST API,可以基于 API 开发应用:

curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/autorag/rags/{AUTORAG_NAME}/ai-search \-H 'Content-Type: application/json' \-H "Authorization: Bearer {API_TOKEN}" \-d '{  "query": "How do I train a llama to deliver coffee?",  "model": @cf/meta/llama-3.3-70b-instruct-sd,  "rewrite_query": true,  "max_num_results": 10,  "ranking_options": {    "score_threshold": 0.6  },  "stream": true,}'

具体参考:https://developers.cloudflare.com/autorag/usage/rest-api/

unsetunset总结unsetunset

Cloudflare 提供的仅是 RAG 解决方案,而非完整 RAG 应用。我觉得这一套流水线还是蛮方便流畅的,未来可以在网页采集环节开发一个浏览器插件,一键采集网页素材到自己的 R2 存储桶,类似 Obsidian 的 clippings 插件。

制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个,谢谢你看我的文章,我们下篇再见!