用 OpenAI SDK 快速上手 Yeap LLM API
Yeap LLM API 兼容 OpenAI 接口:保留你现有的 SDK,把 base_url 换成 https://llm.yeap.cloud/v1 即可。本文涵盖创建令牌、Python 和 Node.js 示例、流式输出、向量嵌入,以及令牌的额度、模型和 IP 限制。
Yeap LLM API 是一个兼容 OpenAI 接口的模型网关。它的设计目标很简单:你不需要学习新的 SDK,也不需要重写代码。保留现有的 OpenAI SDK,把 base_url 换成 https://llm.yeap.cloud/v1,换上 Yeap 的 API 令牌,就可以开始调用。费用按 token 计算,从你的 Yeap 账户余额中扣除,与其他 Yeap 产品共用同一个余额。
可用的接口
| 接口 | 用途 |
|---|---|
POST /v1/chat/completions | 对话补全,支持流式输出 |
POST /v1/completions | 文本补全 |
POST /v1/embeddings | 向量嵌入 |
POST /v1/images/generations | 图像生成 |
POST /v1/audio/transcriptions | 语音转文字 |
GET /v1/models | 列出当前令牌可用的模型 |
所有接口都使用 Authorization: Bearer <令牌> 认证。可用模型和价格会不断更新,最准确的来源永远是 GET /v1/models 或控制台中的模型列表,所以下面的示例都用占位符代替具体的模型名。
第 1 步:创建 API 令牌
登录 console.yeap.cloud,进入 LLM → 令牌,点击创建。创建时可以设置:
- 名称:建议按项目或环境命名,例如
blog-summarizer-prod; - 配额限制:为这个令牌设置消费上限,或者选择无限配额;
- 模型限制:只允许这个令牌调用指定的模型;
- IP 限制:只接受来自指定 IP 的请求;
- 过期时间:到期后令牌自动失效。
令牌以 sk- 开头,创建后请立即保存。建议每个项目、每个环境使用独立的令牌,并为生产环境之外的令牌设置较低的配额,这样即使令牌泄露,影响也在可控范围内。
把令牌放到环境变量中,不要写进代码仓库:
export YEAP_API_KEY="sk-..."
第 2 步:先用 curl 确认连通
curl https://llm.yeap.cloud/v1/models \
-H "Authorization: Bearer $YEAP_API_KEY"
返回的 JSON 中,data 数组里每一项的 id 就是可以在请求中使用的模型名。
第 3 步:Python
安装官方 SDK:pip install openai。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["YEAP_API_KEY"],
base_url="https://llm.yeap.cloud/v1",
)
resp = client.chat.completions.create(
model="your-model-id", # 从 /v1/models 中选择
messages=[
{"role": "system", "content": "你是一个简洁的技术助手。"},
{"role": "user", "content": "用一句话解释什么是 CDN。"},
],
)
print(resp.choices[0].message.content)
print(resp.usage) # prompt_tokens / completion_tokens / total_tokens
流式输出
对话类应用通常希望逐字显示结果。设置 stream=True,响应会以 Server-Sent Events 的形式陆续到达:
stream = client.chat.completions.create(
model="your-model-id",
messages=[{"role": "user", "content": "写一首关于缓存命中的短诗。"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
向量嵌入
emb = client.embeddings.create(
model="your-embedding-model-id",
input=["Yeap CDN 支持 HTTP/3", "如何清除缓存"],
)
vectors = [item.embedding for item in emb.data]
print(len(vectors), len(vectors[0]))
图像生成与语音转文字
图像和音频接口同样通过 SDK 的标准方法调用,只是模型名要换成对应类型的模型:
# 图像生成
img = client.images.generate(
model="your-image-model-id",
prompt="一张极简风格的服务器机房插画",
size="1024x1024",
)
print(img.data[0].url or "base64 image returned")
# 语音转文字
with open("meeting.mp3", "rb") as f:
tr = client.audio.transcriptions.create(
model="your-transcription-model-id",
file=f,
)
print(tr.text)
不同模型返回图像的方式可能不同(URL 或 base64),代码里最好两种都处理。
控制成本的几个习惯
- 设置
max_tokens。输出 token 通常比输入更贵,为每类请求设定合理的输出上限,可以避免模型"说个不停"带来的意外费用。 - 精简上下文。多轮对话时,每一轮都会把历史消息重新发送一遍。对较早的轮次做摘要或截断,输入 token 会少很多。
- 按任务选模型。分类、提取、改写这类简单任务,往往用较小的模型就足够;把大模型留给真正需要推理能力的场景。用 Playground 对比几个模型,再决定默认值。
- 用令牌配额兜底。即使代码里出现循环调用之类的错误,令牌的配额上限也能阻止消费失控。
第 4 步:Node.js
安装:npm install openai。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.YEAP_API_KEY,
baseURL: "https://llm.yeap.cloud/v1",
});
const stream = await client.chat.completions.create({
model: "your-model-id",
messages: [{ role: "user", content: "列出三个降低 API 延迟的方法。" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
不改代码也能切换
官方 OpenAI SDK 会读取环境变量 OPENAI_BASE_URL 和 OPENAI_API_KEY。如果你的工具或脚本已经在使用 OpenAI SDK、又不方便修改代码,可以只改环境变量:
export OPENAI_BASE_URL="https://llm.yeap.cloud/v1"
export OPENAI_API_KEY="$YEAP_API_KEY"
大多数支持"自定义 API 地址"的第三方工具同样适用:把地址填为 https://llm.yeap.cloud/v1,密钥填 Yeap 令牌即可。
错误处理与重试
生产环境中要为失败做好准备:
- 401:令牌无效、已过期,或者请求来自不在 IP 限制名单中的地址。检查令牌设置。
- 额度不足:令牌配额用完或账户余额不足时请求会被拒绝,错误信息中会说明原因。在控制台为令牌调整额度或为账户充值。
- 429 和 5xx:这类错误通常是暂时的,应当带退避重试。OpenAI SDK 内置了重试机制,可以通过
max_retries调整次数,用timeout控制单次请求超时。
client = OpenAI(
api_key=os.environ["YEAP_API_KEY"],
base_url="https://llm.yeap.cloud/v1",
max_retries=3,
timeout=60.0,
)
观察用量
每个请求都会被记录,包括使用的模型、token 数和费用。在控制台的 LLM 菜单中可以查看调用日志和统计,按令牌区分不同项目的消耗。如果想在写代码之前先比较不同模型的效果,可以使用控制台里的 Playground 直接在浏览器中试验。
小结
接入 Yeap LLM API 只需要三件事:一个令牌、一个 base_url、一个从 /v1/models 里选出的模型名。其余的代码,你已经写好了。
在 Yeap Cloud 上构建
新用户即享 DNS 与 CDN 免费套餐。
继续阅读
缓存清除实用指南:从缓存键到变体级精确清除
清除了缓存却还是命中?大多数时候问题出在缓存键上。本文解释 Yeap CDN 的缓存键如何构成、查询参数的几种模式,以及带与不带查询参数的 URL 清除分别会清掉什么。
TLS 会话恢复与 HTTP/3:边缘上的握手优化
会话恢复能让回访用户省掉一次完整的 TLS 握手。我们讲讲票据密钥为什么必须跨重启持久化、如何安全地轮换,以及边缘上的 HTTP/3 是怎样复用同一套业务逻辑的。
我们的 DNS 如何为你的域名挑选名称服务器
每个托管在 Yeap DNS 的域名都会分到一对名称服务器。这对 NS 要稳定、要分散、还必须真的能应答。本文介绍我们基于稳定哈希的分配方式,以及为什么"状态是意图,心跳才是事实"。