Cloudflare 平台一键部署 DeepSeek R1 推理模型教程:一分钟搞定,真正免费!
DeepSeek 作为当下最热门的 AI 大模型之一,有时会因用户过多导致服务器繁忙。想要本地部署,又面临 GPU 算力资源的高门槛,这让随时随地轻松使用 DeepSeek 变得困难。
这时,我们的“大善人” Cloudflare 又一次出手了!他们在平台上悄悄上线了 Deepseek-R1 32B 推理大模型,让我们能够快速且免费地部署 DeepSeek,畅享大模型的魅力。
今天,就为大家详细讲解如何利用 Cloudflare 的免费平台,轻松白嫖属于自己的 DeepSeek 大模型!
一、 注册或登录 Cloudflare 平台 (CF 老手可跳过)
如果您已经是 Cloudflare 用户,可以直接跳过此步骤。
-
进入 Cloudflare 平台官网,访问 Cloudflare 官网,点击登录或注册账号。

-
新用户注册:
- 注册过程可能需要您选择域名,无需理会,直接点击页面底部的
Start building按钮。

- 注册过程可能需要您选择域名,无需理会,直接点击页面底部的
-
进入仪表盘:
- 成功登录后,您将进入 Cloudflare 仪表盘。
二、正式开始部署 Deepseek API 项目
-
创建 Workers AI 项目:
- 在 Cloudflare 仪表盘左侧菜单栏中,找到 【AI】 选项,点击展开。
- 在 AI 菜单下,选择 【Workers AI】。

- 您可能会看到不同的界面,但目标一致:创建新的 Worker 项目。 通常会看到类似
Llama 3 Worker或Create project的选项,按照页面提示创建即可。


-
为项目命名并部署:
- 为您的项目取一个易于识别的名称,例如
DeepSeek-R1-API。 - 命名完成后,点击 【部署】 按钮,开始项目初始化部署。

- 为您的项目取一个易于识别的名称,例如
-
编辑 Worker 代码:
- 项目部署完成后,您需要编辑 Worker 的默认代码,替换为 DeepSeek R1 的推理代码。

- 项目部署完成后,您需要编辑 Worker 的默认代码,替换为 DeepSeek R1 的推理代码。
-
获取 DeepSeek R1 部署代码:
- 复制代码。
export default {
async fetch(request, env) {
// 检查 Authorization 请求头中的 Bearer Token
const apiKey = this.getApiKeyFromAuthorization(request);
if (!apiKey || apiKey !== "Pullautumn") {
return new Response('Unauthorized', { status: 401 });
}
if (request.method === 'POST' && request.url.includes('v1/chat/completions')) {
try {
const requestData = await request.json();
const { model, messages, stream: isStream = false } = requestData;
const created = Math.floor(Date.now() / 1000);
const uuid = crypto.randomUUID();
const aiResponse = await env.AI.run('@cf/deepseek-ai/deepseek-r1-distill-qwen-32b', {
messages,
max_tokens: 2048,
stream: isStream,
});
if (isStream) {
return this.handleStreamResponse(aiResponse, model, uuid, created);
} else {
return this.handleJsonResponse(aiResponse, model, uuid, created);
}
} catch (error) {
return this.handleError(error);
}
}
return new Response('Not Found', { status: 404 });
},
// 从请求头中提取 API 密钥
getApiKeyFromAuthorization(request) {
const authorizationHeader = request.headers.get('Authorization');
if (authorizationHeader && authorizationHeader.startsWith('Bearer ')) {
return authorizationHeader.slice(7); // 返回 Bearer 后面的部分
}
return null;
},
handleStreamResponse(stream, model, uuid, created) {
const { readable, writable } = new TransformStream();
const writer = writable.getWriter();
const reader = stream.getReader();
const processStream = async () => {
const decoder = new TextDecoder();
const encoder = new TextEncoder();
try {
while (true) {
const { done, value } = await reader.read();
if (done) break;
const stringValue = decoder.decode(value);
const lines = stringValue.split('\n').filter(line => !!line);
for (const line of lines) {
if (line.endsWith('data: [DONE]')) continue;
try {
const json = JSON.parse(line.replace(/^data: /, ''));
const formattedValue = this.formatStreamResponse(json, model, uuid, created);
await writer.write(encoder.encode(formattedValue));
} catch (e) {
console.error('Failed to parse JSON: ', e);
}
}
}
await writer.write(encoder.encode('data: [DONE]\n\n'));
writer.close();
} catch (err) {
console.error('Stream processing error: ', err);
writer.close();
}
};
processStream().catch(err => {
console.error('Stream processing error: ', err);
});
return new Response(readable, {
headers: {
'content-type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
},
});
},
handleJsonResponse(aiResponse, model, uuid, created) {
return Response.json({
id: uuid,
model,
created,
object: 'chat.completion',
choices: [
{
index: 0,
message: {
role: 'assistant',
content: aiResponse.response,
},
finish_reason: 'stop',
},
],
usage: {
prompt_tokens: 0,
completion_tokens: 0,
total_tokens: 0,
},
});
},
formatStreamResponse(json, model, uuid, created) {
return `data: ${JSON.stringify({
id: uuid,
created,
object: 'chat.completion.chunk',
model,
choices: [
{
delta: { content: json.response },
index: 0,
finish_reason: null,
},
],
})}\n\n`;
},
handleError(error) {
console.error('Error processing request: ', error);
return new Response(JSON.stringify({ error: 'Invalid request' }), {
status: 400,
headers: { "Content-Type": "application/json" },
});
},
};
-
粘贴并部署代码:
- 返回 Cloudflare Worker 项目编辑页面。
- 清空 编辑器中原有的默认代码。
- 将 第 4 步复制的 DeepSeek R1 代码 粘贴到代码编辑器中。
- 确认代码粘贴完整后,点击右上角的 【部署】 按钮,完成代码更新部署。


-
获取项目 URL:
- 部署完成后,返回 Cloudflare 仪表盘,点击您刚刚部署的项目名称。
- 进入项目详情页面,点击 【设置】 选项卡。
- 在设置页面中,找到平台为您分配的 项目网址 (通常以
.workers.dev结尾)。 - 复制 此网址,并妥善保存,后续配置 UI 软件时需要用到。


三、选择可用的 UI 软件 (以 Chatbox AI 为例,Cherry Studio也很好用)
Cloudflare 部署的 DeepSeek API 接口兼容 OpenAI API 规范,因此可以与许多支持 OpenAI API 的 UI 软件或插件配合使用。 这里我们以 Chatbox AI 为例进行演示。
-
下载 Chatbox AI:
- 根据您使用的操作系统平台 (Windows/macOS/Linux 等),下载对应的 Chatbox AI 安装包。
- 您可以在 Chatbox AI 官网 下载,或者从博主提供的 全平台软件安装包 中获取。

-
打开 Chatbox AI 并进入设置:
- 安装完成后,打开 Chatbox AI 客户端。
- 点击 Chatbox AI 界面左下角的 【设置】 图标 (通常是齿轮状)。

-
添加自定义提供方:
- 在设置菜单中,选择 【添加自定义提供方】 选项。

- 在设置菜单中,选择 【添加自定义提供方】 选项。
-
配置自定义提供方:
- 按照以下说明填写自定义提供方信息:
- 【模型提供方名称】: 您可以自定义名称,例如
Cloudflare DeepSeek R1。 - 【API 域名】: 填写您在 第二步第 6 点复制的项目网址, 务必在网址末尾加上
/v1。 例如:https://your-project-name.your-namespace.workers.dev/v1 - 【改善网络兼容性】: 务必开启 此功能,以确保网络连接的稳定性。
- 【API 密钥】: 默认 API 密钥为
”Pullautumn”(注意是英文双引号)。 您可以根据代码中的设置自行修改密钥。 如果使用默认密钥,此处填写Pullautumn即可。

- 【模型提供方名称】: 您可以自定义名称,例如
- 按照以下说明填写自定义提供方信息:
-
保存配置并开始使用:
- 填写完毕后,点击 【保存】 按钮。
- 现在,您就可以在 Chatbox AI 中选择您刚刚配置的
Cloudflare DeepSeek R1提供方,开始与 DeepSeek R1 模型进行对话了!


总结
恭喜您!您已经成功在 Cloudflare 平台上 一键部署 了 DeepSeek R1 推理模型,并且 完全免费!
Cloudflare 部署的 DeepSeek API 接口具有良好的 OpenAI API 兼容性,您可以将其导入到许多支持 AI 功能的软件或插件中如:Cherry Studio,尽情探索 DeepSeek R1 大模型的强大能力。
希望本教程对您有所帮助!如果您在部署过程中遇到任何问题,欢迎留言交流。
提示:
- 请确保您使用的代码包来源可靠,并仔细阅读代码中的相关说明。
- Cloudflare 免费版 Workers 有一定的使用限制,如果您的请求量过大,可能会受到限制。
- API 密钥
Pullautumn仅为默认密钥,出于安全考虑,建议您在实际使用中修改为您自己的密钥。
感谢阅读!
评论区