24.1 我为什么想要一个"只带一把钥匙"的网关
2周前我帮一个做客服系统的朋友排查问题,他前端、后端、定时任务三处各自硬编码了不同厂商的 Key,换一次模型要改三个仓库。我告诉他:Makers 有个独立的模型网关服务,一把 Key 调遍所有厂商,根本不用在代码里塞厂商密钥。
这就是 Makers Models——部署在 EdgeOne 边缘节点的统一模型接入服务。它和你写 Agent 时平台自动注入的那套网关,是同一张网,但用法完全不同。
24.2 它和 Agent 里的 AI_GATEWAY 不是一回事
我在前面 §04 讲过,Agent 运行时平台会自动注入 AI_GATEWAY_API_KEY 和 AI_GATEWAY_BASE_URL,你写 Agent 时不用管密钥。而 Makers Models 是独立对外暴露的网关,你拿自己的 MAKERS_MODELS_KEY,从任何地方都能调:前端后端代理、独立脚本、甚至别的平台。
| 维度 | AI_GATEWAY(Agent 内) | Makers Models(独立网关) |
|---|---|---|
| 密钥来源 | 平台自动注入,拿不到明文 | 控制台创建 MAKERS_MODELS_KEY |
| 调用位置 | 仅 Agent 运行时内 | 任意能发 HTTP 的地方 |
| 典型用法 | 写 Agent 业务逻辑 | 前端流式 UI、独立服务、Demo |
| 标叔的结论 | 写 Agent 用它最省心 | 要"带出门"调用就靠它 |
24.3 实战:三种 SDK 直接调用
我试过最顺手的是直接套 OpenAI 的 SDK,因为网关兼容 OpenAI 协议。换成 Anthropic 或 Vercel AI SDK 也行。
// 方式一:Vercel AI SDK + 官方 provider
import { createAiGateway } from "@edgeone/makers-models-provider";
import { generateText } from "ai";
const aiGateway = createAiGateway({ apiKey: process.env.MAKERS_MODELS_KEY });
const { text } = await generateText({
model: aiGateway("@makers/deepseek-v4-flash"),
prompt: "What can you do?",
});
// 方式二:OpenAI SDK(baseURL 指到网关)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.MAKERS_MODELS_KEY,
baseURL: "https://ai-gateway.edgeone.link/v1",
});
const completion = await client.chat.completions.create({
model: "@makers/deepseek-v4-flash",
messages: [{ role: "user", content: "What can you do?" }],
});
# 方式三:Python OpenAI SDK
import os
from openai import OpenAI
client = OpenAI(api_key=os.getenv("MAKERS_MODELS_KEY"), base_url="https://ai-gateway.edgeone.link/v1")
completion = client.chat.completions.create(
model="@makers/deepseek-v4-flash",
messages=[{"role": "user", "content": "What can you do?"}],
)
24.4 SSE 流式输出原生支持
我做对话 UI 时最在意的就是流式。网关对所有协议原生支持 SSE,前端拿 stream: true 就能边生成边渲染,密钥还不落前端——前端只碰 MAKERS_MODELS_KEY 经你后端代理转发。
curl -X POST "https://ai-gateway.edgeone.link/v1/chat/completions" \
--header "Authorization: Bearer $MAKERS_MODELS_KEY" \
--header "Content-Type: application/json" \
--data '{"model":"@makers/deepseek-v4-flash","stream":true,"messages":[{"role":"user","content":"What can you do?"}]}'
注意
MAKERS_MODELS_KEY 和厂商密钥一样,别提交进版本控制。
24.5 标叔的结论
我现在的习惯是:写 Agent 用平台注入的 AI_GATEWAY 省心;凡是要在 Agent 之外(前端代理、独立服务、Demo)调模型,就用 Makers Models 这把独立钥匙。两把钥匙分工,代码反而更干净。
接下来,翻到 §25,我看 Agent 是怎么在沙箱里"自己动手"封装工具的。