字节笔记本

2026年2月22日

EdgeOne Pages AI:免费在边缘部署 DeepSeek R1 大模型

本文介绍 EdgeOne Pages AI 项目,一个基于腾讯 EdgeOne 边缘计算平台的开源模板,让你能够免费在边缘节点部署 DeepSeek R1 大语言模型,并集成网络搜索能力。该项目采用 Next.js + TypeScript 构建,提供与 OpenAI 兼容的 API 接口,可无缝集成到各类第三方工具中。

项目简介

EdgeOne Pages AI 是腾讯云 EdgeOne 团队开源的示例项目,旨在展示如何在边缘函数中部署和运行 DeepSeek R1 模型。该项目的核心优势在于:

  • 完全免费:利用 EdgeOne Pages 的免费额度部署和运行
  • 边缘部署:模型推理在边缘节点执行,延迟更低
  • 网络搜索:集成 SearXNG 搜索引擎,支持联网查询
  • OpenAI 兼容:API 接口与 OpenAI 格式一致,易于集成
  • 多模型支持:支持 DeepSeek R1 多个版本模型切换

在线体验地址:https://deepseek-r1-edge.edgeone.site

核心特性

1. 边缘函数架构

项目采用 EdgeOne Pages Functions 作为后端运行环境,将 AI 推理逻辑部署在全球边缘节点:

  • 低延迟响应,就近处理用户请求
  • 自动扩缩容,无需管理服务器
  • 免费额度充足,适合个人开发者和小型项目

2. 网络搜索集成

通过 SearXNG 搜索引擎实现联网能力:

  • 支持 Bing 等多个搜索引擎
  • 搜索结果自动格式化为上下文
  • 大模型基于搜索结果生成回答

3. 多模型支持

支持多种 DeepSeek 模型:

模型说明
@tx/deepseek-ai/deepseek-r1-distill-qwen-32b默认模型,轻量高效
@tx/deepseek-ai/deepseek-r1-0528DeepSeek R1 正式版
@tx/deepseek-ai/deepseek-v3-0324DeepSeek V3 版本

4. 现代化前端

基于 Next.js 14 构建的 Chat UI:

  • React 18 + TypeScript
  • Tailwind CSS + Radix UI 组件
  • 支持 Markdown 渲染和代码高亮
  • Mermaid 图表渲染支持

技术栈

前端

  • 框架:Next.js 14.2.5 (App Router)
  • 语言:TypeScript 5
  • 样式:Tailwind CSS 3.4
  • 组件:Radix UI + Lucide Icons
  • 字体:Inter (Google Fonts)

后端

  • 运行环境:EdgeOne Pages Functions
  • AI 推理:腾讯云 AI 接口
  • 搜索服务:SearXNG
  • 数据验证:Zod

开发工具

  • ESLint + Prettier 代码规范
  • PostCSS 样式处理
  • 支持 npm/yarn/pnpm/bun

安装指南

前置要求

  • Node.js >= 18
  • npm >= 8 或 pnpm >= 8(推荐)

快速部署

方式一:一键部署(推荐)

点击以下按钮直接部署到 EdgeOne Pages:

Deploy with EdgeOne Pages

方式二:本地开发

  1. 克隆项目
bash
git clone https://github.com/TencentEdgeOne/pages-templates.git
cd pages-templates/examples/deepseek-r1-edge
  1. 安装依赖
bash
npm install
# 或
pnpm install
  1. 启动开发服务器
bash
npm run dev
  1. 访问应用

打开浏览器访问 http://localhost:3000

项目结构

text
deepseek-r1-edge/
├── app/                    # Next.js App Router
│   ├── layout.tsx         # 根布局
│   └── page.tsx           # 主页面
├── components/            # React 组件
│   ├── ui/               # UI 基础组件
│   └── chat/             # 聊天相关组件
├── functions/            # 边缘函数
│   └── v1/chat/completions/
│       └── index.ts      # AI 接口处理
├── lib/                  # 工具函数
├── public/               # 静态资源
├── package.json
├── tailwind.config.ts
└── next.config.mjs

核心代码解析

边缘函数实现

functions/v1/chat/completions/index.ts 是项目的核心,处理 AI 聊天请求:

typescript
export async function onRequest({ request, env }: any) {
  // 处理 CORS 预检请求
  if (request.method === 'OPTIONS') {
    return handleOptionsRequest();
  }

  // 解析请求体
  const json = await request.clone().json();
  const parseResult = messageSchema.safeParse(json);

  // 获取用户输入
  const { messages, network, model } = parseResult.data;
  const currentInput = messages[messages.length - 1]?.content;

  // 如启用网络搜索,获取搜索结果
  const { content, searchResults } = await getContent(
    currentInput,
    !!network
  );

  // 调用 AI 模型
  const aiStream = await AI.chatCompletions({
    model: selectedModel,
    messages: processedMessages,
    stream: true,
  });

  return new Response(aiStream, {
    headers: {
      'Content-Type': 'text/event-stream',
      // ... 其他 headers
    },
  });
}

网络搜索功能

typescript
async function searxngSearch(
  query: string,
  SEARXNG_URL = 'https://proxy.edgeone.app/search'
): Promise<SearchResult[]> {
  const params = new URLSearchParams({
    q: query,
    format: 'json',
    engines: 'bing',
  });

  const response = await fetch(`${SEARXNG_URL}?${params}`);
  const data = await response.json();
  return data?.results || [];
}

搜索结果格式化

typescript
function formatSearchResults(results: SearchResult[]): string {
  return results
    .map((result, i) => {
      const index = i + 1;
      return `
[webpage ${index} begin]
Title: ${result.title}
Url: ${result.url}
Snippet: ${result.content}
[webpage ${index} end]
`;
    })
    .join('\n\n');
}

API 使用示例

基础对话

bash
curl -X POST https://your-domain.edgeone.app/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "你好,请介绍一下自己"}
    ]
  }'

启用网络搜索

bash
curl -X POST https://your-domain.edgeone.app/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "今天的天气怎么样"}
    ],
    "network": true
  }'

指定模型

bash
curl -X POST https://your-domain.edgeone.app/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "写一首关于春天的诗"}
    ],
    "model": "@tx/deepseek-ai/deepseek-r1-0528"
  }'

配置说明

环境变量

项目支持以下环境变量配置:

变量名说明默认值
SEARXNG_URLSearXNG 搜索服务地址https://proxy.edgeone.app/search

模型选择

在请求中通过 model 参数指定模型:

json
{
  "model": "@tx/deepseek-ai/deepseek-r1-distill-qwen-32b"
}

可用模型列表:

  • @tx/deepseek-ai/deepseek-r1-distill-qwen-32b(默认)
  • @tx/deepseek-ai/deepseek-r1-0528
  • @tx/deepseek-ai/deepseek-v3-0324

注意事项

  1. 免费额度:EdgeOne Pages 提供免费额度,超出后需要升级套餐
  2. 网络搜索:搜索功能依赖 SearXNG 服务,可能受网络环境影响
  3. 模型限制:不同模型的能力和响应速度有所差异
  4. 流式响应:API 默认使用 SSE 流式返回,前端需正确处理
  5. CORS 配置:边缘函数已配置跨域支持,可直接从前端调用

相关资源

总结

EdgeOne Pages AI 是一个优秀的开源项目,展示了如何在边缘计算环境中部署大语言模型。通过结合 DeepSeek R1 的强大能力和 EdgeOne 的边缘网络,开发者可以快速构建低延迟、高可用的 AI 应用。项目代码结构清晰,文档完善,适合作为学习边缘函数和 AI 集成的参考案例。

分享: