上一篇 下一篇 分享链接 返回 返回顶部

从边缘推理到知识库:Cloudflare AI 落地场景与实战命令指南

发布人:慈云数据-客服中心 发布时间:6小时前 阅读量:4

Cloudflare AI应用场景分析|附完整命令

随着生成式 AI 从“概念验证”走向“真实业务落地”,企业和开发者越来越关注两个核心问题:如何更快地把 AI 能力接入应用,以及如何在成本、性能、安全和可观测性之间取得平衡。Cloudflare 作为全球边缘网络服务商,近年来围绕 AI 推出了一系列能力,包括 Workers AI、AI Gateway、Vectorize、R2、Workers、Pages、D1、KV、Durable Objects 等,逐渐形成了一套适合构建 AI 应用的云原生边缘架构。

本文将围绕 Cloudflare AI 的核心产品、典型应用场景、架构设计思路以及完整命令示例进行分析,帮助你快速理解如何使用 Cloudflare 构建 AI 应用。


一、Cloudflare AI 能力概览

Cloudflare 的 AI 能力并不是单一产品,而是一组可组合的服务。开发者可以根据业务需求选择不同模块进行组合。

常见能力包括:

能力 说明 典型用途
Workers AI 在 Cloudflare 边缘运行 AI 模型 文本生成、翻译、摘要、分类、图像识别
AI Gateway AI 请求网关 统一管理 OpenAI、Workers AI 等模型调用
Vectorize 向量数据库 RAG、语义搜索、知识库问答
R2 对象存储 存放文档、图片、音频、模型输出
Workers 边缘函数计算 构建 API、鉴权、请求编排
Pages 前端部署平台 部署 AI Web 应用
D1 Serverless SQL 数据库 存储用户、会话、日志、配置
KV 键值存储 缓存 Prompt、配置、短期数据
Durable Objects 有状态边缘对象 实时会话、协作、队列控制

从架构上看,Cloudflare AI 更适合构建以下类型的应用:

  1. 低延迟 AI API
  2. 企业知识库问答
  3. AI 内容生成工具
  4. 智能客服系统
  5. 多模型调用网关
  6. AI 安全代理
  7. 语义搜索系统
  8. 边缘智能应用

二、为什么选择 Cloudflare 构建 AI 应用?

传统 AI 应用通常部署在中心化云服务上,例如某个固定区域的数据中心。用户访问时,请求需要跨越较长网络路径,尤其当用户分布在全球多个地区时,延迟会明显增加。

Cloudflare 的优势在于其庞大的全球边缘网络。通过 Workers 和 Workers AI,开发者可以在靠近用户的位置处理请求,从而降低网络延迟。

1. 边缘低延迟

用户请求可以就近进入 Cloudflare 网络,由边缘节点完成 API 处理、鉴权、缓存、模型调用或请求转发。这对于聊天机器人、实时翻译、智能搜索等场景非常重要。

2. 开发体验简单

Cloudflare Workers 使用 JavaScript、TypeScript 等常见语言,开发者不需要维护服务器,也不需要配置复杂的容器环境。通过 Wrangler CLI,可以快速创建、开发、部署应用。

3. 成本可控

AI 应用的成本往往来自多个方面:模型调用费用、存储费用、数据库费用、网络流量费用等。Cloudflare 提供的 Workers AI、R2、Vectorize 等服务可以组合使用,适合从小规模应用逐步扩展。

4. 适合代理和编排多个模型

AI Gateway 可以统一代理来自不同模型供应商的请求,例如 Workers AI、OpenAI、Anthropic 等。它可以提供缓存、日志、速率限制、监控等能力,适合企业统一管理 AI 调用。

5. 安全能力强

Cloudflare 本身具备 WAF、Bot 管理、Access、Zero Trust、Rate Limiting 等安全产品。AI 应用可以与这些安全能力结合,减少恶意调用、Prompt 注入、接口滥用和成本攻击等风险。


三、核心应用场景分析


场景一:基于 Workers AI 的文本生成 API

这是最基础的 Cloudflare AI 应用场景。开发者可以通过 Workers AI 调用模型,实现文本生成、摘要、翻译、分类、代码生成等功能。

适合业务

  • AI 写作助手
  • 智能摘要工具
  • 标题生成器
  • 商品描述生成
  • 邮件自动回复
  • 评论情感分析
  • 多语言翻译

架构示意

用户
 ↓
Cloudflare Worker API
 ↓
Workers AI 模型
 ↓
返回生成结果

创建项目命令

首先安装 Node.js,推荐使用 LTS 版本。然后安装 Cloudflare Wrangler:

npm install -g wrangler

登录 Cloudflare:

wrangler login

创建 Worker 项目:

npm create cloudflare@latest cloudflare-ai-demo

进入项目目录:

cd cloudflare-ai-demo

如果项目还没有安装依赖,可以执行:

npm install

配置 wrangler.toml

在项目根目录中配置 Workers AI 绑定:

name = "cloudflare-ai-demo"
main = "src/index.ts"
compatibility_date = "2024-09-23"

[ai]
binding = "AI"

编写 Worker 代码

创建或修改 src/index.ts

export interface Env {
  AI: Ai;
}

export default {
  async fetch(request: Request, env: Env): Promise {
    if (request.method !== "POST") {
      return new Response("Only POST requests are supported", {
        status: 405,
      });
    }

    const body = await request.json().catch(() => null) as {
      prompt?: string;
    } | null;

    if (!body?.prompt) {
      return Response.json(
        { error: "Missing prompt" },
        { status: 400 }
      );
    }

    const result = await env.AI.run(
      "@cf/meta/llama-3.1-8b-instruct",
      {
        messages: [
          {
            role: "system",
            content: "你是一个专业、简洁、可靠的中文 AI 助手。",
          },
          {
            role: "user",
            content: body.prompt,
          },
        ],
      }
    );

    return Response.json(result);
  },
};

本地开发命令

wrangler dev

测试接口:

curl -X POST http://localhost:8787 \
  -H "Content-Type: application/json" \
  -d '{"prompt":"请用中文总结 Cloudflare Workers AI 的优势"}'

部署命令

wrangler deploy

部署后测试:

curl -X POST https://cloudflare-ai-demo..workers.dev \
  -H "Content-Type: application/json" \
  -d '{"prompt":"请生成一段适合电商商品页的耳机描述"}'

场景二:使用 AI Gateway 管理多模型调用

当业务逐渐复杂后,开发者往往不会只使用一个模型。比如:

  • 普通问题使用成本较低的小模型;
  • 复杂推理使用更强的大模型;
  • 图片理解使用视觉模型;
  • 企业内部应用走私有模型;
  • 外部应用调用 OpenAI 或其他模型服务商。

这时就需要统一入口管理模型调用。AI Gateway 可以作为 AI 请求的中间层,提供日志、缓存、限流、分析等能力。

适合业务

  • 多模型 AI 平台
  • 企业统一 AI 调用入口
  • AI 成本监控
  • 模型调用审计
  • 提示词缓存
  • 防止接口滥用

基础架构

应用前端 / 后端
 ↓
Cloudflare AI Gateway
 ↓
Workers AI / OpenAI / 其他模型

使用 AI Gateway 调用 Workers AI

假设你的 AI Gateway 地址类似:

https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_name}/workers-ai

可以使用以下命令调用:

curl https://gateway.ai.cloudflare.com/v1///workers-ai/@cf/meta/llama-3.1-8b-instruct \
  -H "Authorization: Bearer " \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {
        "role": "system",
        "content": "你是一个专业的中文技术顾问。"
      },
      {
        "role": "user",
        "content": "请解释 AI Gateway 在企业 AI 应用中的价值。"
      }
    ]
  }'

使用 AI Gateway 调用 OpenAI

如果需要通过 AI Gateway 代理 OpenAI 请求,可以使用如下形式:

curl https://gateway.ai.cloudflare.com/v1///openai/chat/completions \
  -H "Authorization: Bearer " \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {
        "role": "system",
        "content": "你是一个中文助手。"
      },
      {
        "role": "user",
        "content": "请用三点说明 AI Gateway 的作用。"
      }
    ]
  }'

AI Gateway 的实际价值

AI Gateway 不仅仅是一个代理层,更像是企业 AI 应用的“控制面”。它可以帮助企业回答以下问题:

  1. 哪些用户或应用调用了 AI?
  2. 哪些模型调用成本最高?
  3. 哪些 Prompt 可以缓存?
  4. 是否存在异常请求?
  5. 是否需要对不同业务设置不同限流策略?
  6. 是否需要记录请求日志用于审计?

对于企业来说,AI 应用一旦进入生产环境,“能调用模型”只是第一步,“能治理模型调用”才是长期稳定运行的关键。


场景三:基于 Vectorize 构建企业知识库问答

RAG,即 Retrieval-Augmented Generation,中文常称为“检索增强生成”。它是当前企业 AI 应用中非常常见的方案。其核心思想是:先从知识库中检索相关内容,再把检索结果和用户问题一起交给大语言模型生成回答。

Cloudflare Vectorize 是向量数据库服务,适合用来存储文档向量,配合 Workers AI 的 Embedding 模型,可以构建知识库问答系统。

适合业务

  • 企业内部知识库
  • 产品文档问答
  • 客服机器人
  • 法务资料检索
  • 技术支持助手
  • 语义搜索
  • FAQ 智能问答

架构示意

文档上传
 ↓
文本切分
 ↓
Embedding 模型生成向量
 ↓
写入 Vectorize

用户提问
 ↓
问题生成向量
 ↓
Vectorize 相似度检索
 ↓
拼接上下文
 ↓
Workers AI 生成回答

创建 Vectorize 索引

wrangler vectorize create docs-index \
  --dimensions=768 \
  --metric=cosine

注意:dimensions 需要与所使用的 Embedding 模型输出维度一致。如果更换模型,需要确认向量维度是否匹配。

wrangler.toml 中绑定 Vectorize

name = "cloudflare-rag-demo"
main = "src/index.ts"
compatibility_date = "2024-09-23"

[ai]
binding = "AI"

[[vectorize]]
binding = "VECTORIZE"
index_name = "docs-index"

写入文档向量示例

export interface Env {
  AI: Ai;
  VECTORIZE: VectorizeIndex;
}

async function embedText(env: Env, text: string): Promise {
  const embedding = await env.AI.run(
    "@cf/baai/bge-base-en-v1.5",
    {
      text,
    }
  ) as {
    data: number[][];
  };

  return embedding.data[0];
}

export default {
  async fetch(request: Request, env: Env): Promise {
    const url = new URL(request.url);

    if (url.pathname === "/upsert" && request.method === "POST") {
      const body = await request.json() as {
        id: string;
        text: string;
      };

      const values = await embedText(env, body.text);

      await env.VECTORIZE.upsert([
        {
          id: body.id,
          values,
          metadata: {
            text: body.text,
          },
        },
      ]);

      return Response.json({
        success: true,
        id: body.id,
      });
    }

    return new Response("Not Found", { status: 404 });
  },
};

测试写入文档

curl -X POST http://localhost:8787/upsert \
  -H "Content-Type: application/json" \
  -d '{
    "id": "doc-001",
    "text": "Cloudflare Workers 是一种 Serverless 边缘计算平台,可以在全球边缘节点运行 JavaScript 或 TypeScript 代码。"
  }'

查询并生成回答示例

export interface Env {
  AI: Ai;
  VECTORIZE: VectorizeIndex;
}

async function embedText(env: Env, text: string): Promise {
  const embedding = await env.AI.run(
    "@cf/baai/bge-base-en-v1.5",
    {
      text,
    }
  ) as {
    data: number[][];
  };

  return embedding.data[0];
}

export default {
  async fetch(request: Request, env: Env): Promise {
    const url = new URL(request.url);

    if (url.pathname === "/ask" && request.method === "POST") {
      const body = await request.json() as {
        question: string;
      };

      const queryVector = await embedText(env, body.question);

      const matches = await env.VECTORIZE.query(queryVector, {
        topK: 3,
        returnMetadata: true,
      });

      const context = matches.matches
        .map((item: any, index: number) => {
          return `资料 ${index + 1}:${item.metadata?.text || ""}`;
        })
        .join("\n\n");

      const answer = await env.AI.run(
        "@cf/meta/llama-3.1-8b-instruct",
        {
          messages: [
            {
              role: "system",
              content:
                "你是企业知识库问答助手。请只根据提供的资料回答,如果资料不足,请明确说明无法从资料中判断。",
            },
            {
              role: "user",
              content: `已知资料:\n${context}\n\n用户问题:${body.question}`,
            },
          ],
        }
      );

      return Response.json({
        question: body.question,
        matches,
        answer,
      });
    }

    return new Response("Not Found", { status: 404 });
  },
};

测试问答

curl -X POST http://localhost:8787/ask \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Cloudflare Workers 是什么?"
  }'

场景四:使用 R2 存储文档和 AI 生成内容

R2 是 Cloudflare 的对象存储服务,适合存储大量非结构化数据,例如:

  • PDF 文档
  • Markdown 文件
  • 图片
  • 音频
  • 视频
  • 用户上传文件
  • AI 生成结果
  • 日志归档

在 AI 应用中,R2 常常用于作为知识库原始文档存储,Vectorize 存储向量,D1 存储结构化元数据。

创建 R2 Bucket

wrangler r2 bucket create ai-docs-bucket

绑定 R2

name = "cloudflare-r2-ai-demo"
main = "src/index.ts"
compatibility_date = "2024-09-23"

[[r2_buckets]]
binding = "AI_DOCS"
bucket_name = "ai-docs-bucket"

上传文件到 R2

wrangler r2 object put ai-docs-bucket/docs/cloudflare-workers.md \
  --file ./cloudflare-workers.md

查看文件

wrangler r2 object get ai-docs-bucket/docs/cloudflare-workers.md

删除文件

wrangler r2 object delete ai-docs-bucket/docs/cloudflare-workers.md

Worker 中读取 R2 文件

export interface Env {
  AI_DOCS: R2Bucket;
}

export default {
  async fetch(request: Request, env: Env): Promise {
    const object = await env.AI_DOCS.get("docs/cloudflare-workers.md");

    if (!object) {
      return new Response("File not found", { status: 404 });
    }

    const text = await object.text();

    return new Response(text, {
      headers: {
        "Content-Type": "text/plain;charset=utf-8",
      },
    });
  },
};

场景五:构建 AI Web 应用并部署到 Cloudflare Pages

如果你的 AI 应用需要提供网页界面,可以使用 Cloudflare Pages 部署前端,使用 Workers 提供后端 API。

常见架构

Cloudflare Pages 前端
 ↓
Cloudflare Worker API
 ↓
Workers AI / Vectorize / R2 / D1

创建 Vite 前端项目

npm create vite@latest ai-web-app -- --template react-ts

进入目录:

cd ai-web-app

安装依赖:

npm install

本地启动:

npm run dev

构建:

npm run build

安装 Wrangler:

npm install -g wrangler

登录:

wrangler login

部署到 Pages:

wrangler pages deploy dist --project-name ai-web-app

前端调用 Worker API 示例

async function askAI(prompt: string) {
  const response = await fetch("https://cloudflare-ai-demo..workers.dev", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ prompt }),
  });

  if (!response.ok) {
    throw new Error("AI request failed");
  }

  return response.json();
}

场景六:AI 安全代理与成本控制

AI 应用上线后,最容易被忽视的问题是安全和成本。许多开发者在测试阶段直接把模型 API 暴露给前端,甚至把 API Key 写入浏览器代码中,这是非常危险的。

正确做法是:

  1. 前端只调用自己的 Worker API;
  2. Worker 负责鉴权和限流;
  3. API Key 存储在 Cloudflare Secrets 中;
  4. 使用 AI Gateway 记录调用日志;
  5. 对用户、IP、Token 设置配额;
  6. 对 Prompt 长度和请求频率做限制。

设置 Secret

wrangler secret put OPENAI_API_KEY

输入密钥后,Cloudflare 会加密保存。

Worker 中读取 Secret

export interface Env {
  OPENAI_API_KEY: string;
}

export default {
  async fetch(request: Request, env: Env): Promise {
    const response = await fetch(
      "https://gateway.ai.cloudflare.com/v1///openai/chat/completions",
      {
        method: "POST",
        headers: {
          "Authorization": `Bearer ${env.OPENAI_API_KEY}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          model: "gpt-4o-mini",
          messages: [
            {
              role: "user",
              content: "请介绍 Cloudflare AI Gateway",
            },
          ],
        }),
      }
    );

    const data = await response.json();
    return Response.json(data);
  },
};

简单限制 Prompt 长度

const MAX_PROMPT_LENGTH = 2000;

if (body.prompt.length > MAX_PROMPT_LENGTH) {
  return Response.json(
    {
      error: "Prompt is too long",
    },
    {
      status: 400,
    }
  );
}

简单 API Token 鉴权

export interface Env {
  API_TOKEN: string;
}

function checkAuth(request: Request, env: Env): boolean {
  const token = request.headers.get("X-API-Token");
  return token === env.API_TOKEN;
}

设置 Token:

wrangler secret put API_TOKEN

请求时携带:

curl -X POST https://your-worker.workers.dev \
  -H "Content-Type: application/json" \
  -H "X-API-Token: " \
  -d '{"prompt":"请总结今天的会议纪要"}'

四、推荐架构:企业级知识库 AI 助手

如果要构建一个较完整的企业级知识库 AI 助手,可以采用如下架构:

用户浏览器
 ↓
Cloudflare Pages
 ↓
Cloudflare Worker API
 ↓
鉴权 / 限流 / 日志
 ↓
问题 Embedding
 ↓
Vectorize 检索相关文档
 ↓
R2 读取原始文档或片段
 ↓
Workers AI 生成答案
 ↓
D1 存储会话和反馈
 ↓
返回用户

各组件职责

组件 职责
Pages 部署前端页面
Workers 提供 API、业务编排、安全控制
Workers AI 生成回答、文本分类、Embedding
Vectorize 存储向量,实现语义检索
R2 存储原始文档和附件
D1 存储用户、会话、反馈、文档元数据
AI Gateway 统一管理外部模型调用
KV 缓存系统 Prompt、配置、热点结果

这种架构的优势是清晰、轻量、可扩展,并且非常适合全球用户访问。如果业务从内部工具逐步发展到面向客户的 SaaS 产品,也可以在这个基础上继续扩展。


五、使用 D1 存储会话记录

为了让 AI 应用具备上下文能力,通常需要保存用户会话。Cloudflare D1 是基于 SQLite 的 Serverless 数据库,适合保存结构化数据。

创建 D1 数据库

wrangler d1 create ai_app_db

执行后会返回数据库 ID,将其写入 wrangler.toml

[[d1_databases]]
binding = "DB"
database_name = "ai_app_db"
database_id = ""

创建 SQL 文件

创建 schema.sql

CREATE TABLE IF NOT EXISTS conversations (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  user_id TEXT NOT NULL,
  role TEXT NOT NULL,
  content TEXT NOT NULL,
  created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

执行迁移:

wrangler d1 execute ai_app_db --file=./schema.sql

插入会话记录

export interface Env {
  DB: D1Database;
}

async function saveMessage(
  env: Env,
  userId: string,
  role: string,
  content: string
) {
  await env.DB.prepare(
    "INSERT INTO conversations(user_id, role, content) VALUES (?, ?, ?)"
  )
    .bind(userId, role, content)
    .run();
}

查询历史记录

async function getHistory(env: Env, userId: string) {
  const result = await env.DB.prepare(
    "SELECT role, content FROM conversations WHERE user_id = ? ORDER BY id DESC LIMIT 10"
  )
    .bind(userId)
    .all();

  return result.results.reverse();
}

六、Cloudflare AI 应用落地建议

1. 从单一场景开始

不要一开始就构建复杂的 AI 平台。建议先从一个明确场景开始,例如:

  • 文档问答;
  • 客服辅助;
  • 内容摘要;
  • 评论分类;
  • 工单自动归类。

先把一个场景跑通,再逐渐扩展模型、数据源和用户权限。

2. 优先设计数据流

AI 应用的效果不仅取决于模型,也取决于数据。尤其是 RAG 应用,需要重点设计:

  • 文档如何上传;
  • 文本如何切分;
  • 向量如何生成;
  • 元数据如何保存;
  • 检索结果如何排序;
  • 回答如何引用来源;
  • 用户反馈如何回流。

3. 对 Prompt 做版本管理

Prompt 是 AI 应用的重要资产。建议把系统 Prompt、任务 Prompt、检索模板等进行版本管理,可以存储在 KV、D1 或代码仓库中。对于企业应用,还需要记录每次调用使用了哪个 Prompt 版本,方便问题追踪。

4. 使用 AI Gateway 做监控

AI 应用上线后,必须关注调用量、延迟、错误率和成本。AI Gateway 可以帮助开发者观察模型请求,并对异常调用进行分析。

5. 加强安全控制

至少应实现以下安全措施:

  • 不在前端暴露模型 API Key;
  • 使用 Worker 作为后端代理;
  • 对请求设置鉴权;
  • 限制 Prompt 长度;
  • 限制请求频率;
  • 对用户输入做基础过滤;
  • 对敏感数据做脱敏处理;
  • 对企业内部应用接入 Zero Trust。

七、常用完整命令汇总

下面整理一组常用命令,便于实际开发时复制使用。

安装 Wrangler

npm install -g wrangler

登录 Cloudflare

wrangler login

创建 Worker 项目

npm create cloudflare@latest cloudflare-ai-demo

进入项目

cd cloudflare-ai-demo

安装依赖

npm install

本地运行

wrangler dev

部署 Worker

wrangler deploy

设置 Secret

wrangler secret put OPENAI_API_KEY
wrangler secret put API_TOKEN

创建 Vectorize 索引

wrangler vectorize create docs-index \
  --dimensions=768 \
  --metric=cosine

创建 R2 Bucket

wrangler r2 bucket create ai-docs-bucket

上传 R2 文件

wrangler r2 object put ai-docs-bucket/docs/example.md \
  --file ./example.md

下载 R2 文件

wrangler r2 object get ai-docs-bucket/docs/example.md

删除 R2 文件

wrangler r2 object delete ai-docs-bucket/docs/example.md

创建 D1 数据库

wrangler d1 create ai_app_db

执行 D1 SQL

wrangler d1 execute ai_app_db --file=./schema.sql

创建 Vite 前端项目

npm create vite@latest ai-web-app -- --template react-ts

构建前端

npm run build

部署 Pages

wrangler pages deploy dist --project-name ai-web-app

八、总结

Cloudflare AI 的价值不只是“调用一个大模型”,而是提供了一套适合 AI 应用工程化落地的边缘云基础设施。Workers AI 负责模型推理,AI Gateway 负责调用治理,Vectorize 支持语义检索,R2 负责对象存储,D1 保存结构化数据,Workers 承担业务编排,Pages 则负责前端部署。

对于个人开发者来说,Cloudflare AI 可以帮助快速构建 AI Demo、知识库机器人、摘要工具和智能 API。对于企业来说,它更适合构建统一的 AI 接入层、企业知识库、智能客服、内部助手和全球低延迟 AI 应用。

如果你正在规划一个 AI 产品,可以优先从以下路径开始:

  1. 使用 Workers AI 构建基础文本生成接口;
  2. 使用 AI Gateway 管理模型调用;
  3. 使用 R2 和 Vectorize 构建知识库;
  4. 使用 D1 记录用户会话和反馈;
  5. 使用 Pages 部署前端;
  6. 最后加入鉴权、限流、监控和成本控制。

通过这种方式,Cloudflare 不仅能帮助你快速上线 AI 应用,也能让应用具备更好的扩展性、安全性和全球访问体验。

目录结构
全文