六维教程

EdgeOne Makers AI 与数据库集成

前面的教程讲了函数开发、部署、监控,这些是基础能力。但实际做项目的时候,你迟早会遇到两个问题: 数据往哪存? AI 模型怎么接? 函数是无状态的,请求结束资源就释放了,数据不会自动保存。AI 模型也不是函数自带的能力,需要单独对接。这篇讲怎么在 Makers 里集成数据库和 AI 服务,让你的应用能存数据、能用 AI。

数据库服务集成

Makers 的存储方案

EdgeOne Makers 本身提供了一些内置存储能力,但对于关系型数据的需求,通常需要对接外部数据库。

存储方案 类型 适合存什么 特点
Edge KV 键值存储 配置、缓存、简单数据 全球分布式,读取快
Blob 存储 对象存储 文件、图片、视频 大容量,适合非结构化数据
Supabase 关系型数据库(PostgreSQL) 用户、订单、业务数据 开源,自带认证和权限管理
其他数据库 MySQL/PostgreSQL/MongoDB 各类业务数据 需要自己搭建或购买云服务

集成 Supabase

Supabase 是最常用的选择,它提供 PostgreSQL 数据库、用户认证、文件存储等一整套服务,和 Makers 集成非常方便。

官方也提供了 SaaS 模板,直接整合了 Supabase 和 Stripe,开箱即用。

第一步: 创建 Supabase 项目

  1. Supabase 注册账号
  2. 创建新项目,等一两分钟初始化完成
  3. 进入项目后,在 Settings -> API 页面获取三个关键信息:
    • Project URL(项目地址)
    • Anon Public Key(匿名公钥,前端用)
    • Service Role Key(服务密钥,后端用,注意保密)

第二步: 配置环境变量

在 Makers 控制台的项目设置里,添加三个环境变量:

SUPABASE_URL = https://xxxxx.supabase.co
SUPABASE_ANON_KEY = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
SUPABASE_SERVICE_KEY = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

也可以在本地用 CLI 拉取和管理环境变量,参考CI/CD 集成那篇的环境变量管理部分。

第三步: 在函数中连接 Supabase

安装 Supabase 客户端:

npm install @supabase/supabase-js

在 Cloud Function 中使用:

// cloud-functions/api/users.js
// 查询用户列表的函数

import { createClient } from '@supabase/supabase-js';

// 从环境变量读取配置
const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_KEY
);

export default async function onRequestGet(context) {
  // 查询 users 表的所有记录
  const { data, error } = await supabase
    .from('users')
    .select('*')
    .order('created_at', { ascending: false });

  if (error) {
    return Response.json(
      { message: '查询失败', detail: error.message },
      { status: 500 }
    );
  }

  return Response.json({ users: data });
}

第四步: 数据写入示例

// cloud-functions/api/users.js
// 创建新用户的函数

import { createClient } from '@supabase/supabase-js';

const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_KEY
);

export default async function onRequestPost(context) {
  // 解析请求体
  const body = await context.request.json();
  const { name, email } = body;

  // 写入数据
  const { data, error } = await supabase
    .from('users')
    .insert({ name, email })
    .select()  // select() 让 insert 返回插入的数据
    .single();

  if (error) {
    return Response.json(
      { message: '创建失败', detail: error.message },
      { status: 500 }
    );
  }

  return Response.json({ user: data }, { status: 201 });
}

集成其他数据库

如果你用 MySQL 或其他数据库,思路和 Supabase 类似: 安装对应的客户端库,在函数中用环境变量里的连接信息建立连接。

// cloud-functions/api/data.js
// 使用 MySQL 的示例

import mysql from 'mysql2/promise';

// 创建数据库连接池
const pool = mysql.createPool({
  host: process.env.DB_HOST,
  port: process.env.DB_PORT,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  waitForConnections: true,
  connectionLimit: 5
});

export default async function onRequestGet(context) {
  try {
    // 执行查询
    const [rows] = await pool.query('SELECT * FROM products LIMIT 10');

    return Response.json({ products: rows });
  } catch (err) {
    return Response.json(
      { message: '查询失败', detail: err.message },
      { status: 500 }
    );
  }
}

需要注意的是,Cloud Functions 在中心机房运行,访问数据库的延迟比边缘节点低。如果数据库操作比较频繁,建议把逻辑放在 Cloud Functions 里而不是 Edge Functions。

数据持久化方案对比

不同场景适合不同的存储方案:

场景 推荐方案 理由
缓存和配置 Edge KV 全球分布式读取,速度最快
用户注册登录 Supabase 自带认证系统,省去自己开发
业务数据(订单、文章) Supabase / MySQL 关系型数据库,支持复杂查询
文件上传 Blob 存储 / Supabase Storage 大容量对象存储
会话数据 Agent 内置会话存储 Agent 应用自带会话记忆
简单计数和标记 Edge KV 读写快,适合轻量场景

AI 模型集成

AI 网关

EdgeOne Makers 提供了 AI 网关,统一管理各种大模型的调用。你不需要自己去各家申请 API Key、处理不同格式的接口,通过统一的网关地址就能调用多种模型。

优势 说明
统一接口 不同模型用同一个 API 格式调用
密钥托管 平台加密管理密钥,不用写在代码里
模型切换 改个环境变量就能切换模型
免费额度 新用户有限时免费 Token 额度
安全加速 经过 EdgeOne 边缘网络加速,延迟更低

使用内置模型

Makers 提供了一些免费模型额度,新用户注册后有 50 万 Token 的免费额度(按账号维度所有项目共享)。

使用方式很简单,通过统一的网关地址调用:

// cloud-functions/api/chat.js
// 调用 AI 模型的示例

import OpenAI from 'openai';

// 创建客户端,指向 Makers AI 网关
const client = new OpenAI({
  apiKey: process.env.MAKERS_MODELS_KEY,  // 平台自动注入的密钥
  baseURL: 'https://ai-gateway.edgeone.link/v1'  // 统一网关地址
});

export default async function onRequestPost(context) {
  const body = await context.request.json();
  const { message } = body;

  try {
    // 调用模型
    const completion = await client.chat.completions.create({
      model: '@makers/deepseek-v4-flash',  // 使用内置模型
      messages: [
        { role: 'system', content: '你是一个有帮助的助手。' },
        { role: 'user', content: message }
      ]
    });

    const reply = completion.choices[0].message.content;

    return Response.json({ reply });
  } catch (err) {
    return Response.json(
      { message: '模型调用失败', detail: err.message },
      { status: 500 }
    );
  }
}

绑定自有模型密钥

如果你想用自己的 API Key(比如你有 OpenAI 或通义千问的密钥),可以在控制台的 Models -> API Key 页面绑定。平台会加密托管你的密钥,调用时通过环境变量引用。

// 使用自有密钥调用
const client = new OpenAI({
  apiKey: process.env.MY_OPENAI_KEY,  // 在控制台绑定的自有密钥
  baseURL: 'https://ai-gateway.edgeone.link/v1'
});

模型切换

AI 网关的好处是切换模型只需要改模型名称,代码不用动:

// 切换不同的模型,只需要改 model 参数
const completion = await client.chat.completions.create({
  model: '@makers/deepseek-v4-flash',    // DeepSeek 模型
  // model: '@makers/hunyuan-lite',      // 混元模型
  // model: 'gpt-4o-mini',               // OpenAI 模型(需要自有密钥)
  messages: [
    { role: 'user', content: message }
  ]
});

完整示例: 带数据库的 AI 聊天应用

下面把数据库和 AI 模型串起来,做一个能保存聊天记录的 AI 对话应用。

数据库表结构

在 Supabase 中创建聊天表:

-- 创建聊天记录表
CREATE TABLE chat_messages (
  id BIGSERIAL PRIMARY KEY,
  session_id TEXT NOT NULL,        -- 会话 ID
  role TEXT NOT NULL,              -- user 或 assistant
  content TEXT NOT NULL,           -- 消息内容
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 按 session_id 查询的索引
CREATE INDEX idx_chat_session ON chat_messages(session_id, created_at);

发送消息并保存

// cloud-functions/api/chat.js
// AI 聊天接口,同时保存聊天记录到数据库

import { createClient } from '@supabase/supabase-js';
import OpenAI from 'openai';

const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_KEY
);

const client = new OpenAI({
  apiKey: process.env.MAKERS_MODELS_KEY,
  baseURL: 'https://ai-gateway.edgeone.link/v1'
});

export default async function onRequestPost(context) {
  const body = await context.request.json();
  const { sessionId, message } = body;

  // 第一步: 保存用户消息
  await supabase.from('chat_messages').insert({
    session_id: sessionId,
    role: 'user',
    content: message
  });

  // 第二步: 获取历史消息作为上下文
  const { data: history } = await supabase
    .from('chat_messages')
    .select('role, content')
    .eq('session_id', sessionId)
    .order('created_at', { ascending: true })
    .limit(20);  // 最近 20 条消息作为上下文

  // 第三步: 调用 AI 模型
  const completion = await client.chat.completions.create({
    model: '@makers/deepseek-v4-flash',
    messages: history
  });

  const reply = completion.choices[0].message.content;

  // 第四步: 保存 AI 回复
  await supabase.from('chat_messages').insert({
    session_id: sessionId,
    role: 'assistant',
    content: reply
  });

  return Response.json({ reply });
}

查询聊天记录

// cloud-functions/api/history.js
// 查询某个会话的聊天记录

import { createClient } from '@supabase/supabase-js';

const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_KEY
);

export default async function onRequestGet(context) {
  const url = new URL(context.request.url);
  const sessionId = url.searchParams.get('sessionId');

  if (!sessionId) {
    return Response.json(
      { message: '缺少 sessionId 参数' },
      { status: 400 }
    );
  }

  const { data, error } = await supabase
    .from('chat_messages')
    .select('*')
    .eq('session_id', sessionId)
    .order('created_at', { ascending: true });

  if (error) {
    return Response.json(
      { message: '查询失败', detail: error.message },
      { status: 500 }
    );
  }

  return Response.json({ messages: data });
}

这个例子展示了数据库和 AI 模型配合使用的典型模式: 用户输入 -> 保存记录 -> 查历史上下文 -> 调用模型 -> 保存回复。实际项目中可以根据需求扩展,比如加用户认证、多会话管理、消息搜索等。

速查卡片

要点 说明
内置存储 Edge KV(键值)、Blob(文件),适合轻量场景
外部数据库 Supabase 最常用,自带认证和权限管理
集成步骤 创建数据库项目 -> 获取密钥 -> 配置环境变量 -> 函数中调用
AI 网关 统一接口调用多种模型,密钥由平台加密管理
内置模型 新用户有免费 Token 额度,通过网关地址直接调用
模型切换 改 model 参数就行,代码不用动
推荐搭配 Edge KV 做缓存、Supabase 做业务数据、AI 网关做模型调用
函数选择 数据库操作放 Cloud Functions,延迟更低
上一篇
EdgeOne Makers 日志分析
下一篇
EdgeOne Makers 电商支付与其他集成