Base URL

OpenAI 兼容 API 的推荐 Base URL:

https://miyang.cn/api/v1
旧地址 https://miyang.cn/v1 继续兼容已有客户端;新接入请使用 https://miyang.cn/api/v1
鉴权

除公开的模型列表接口外,推理接口均需在请求头携带 API Key。支持两种请求头:

  • 推荐Authorization: Bearer miyang-xxxxx
  • 备用x-api-key: miyang-xxxxx

API Key 在控制台创建并加密保存,可在「API Keys」页面再次查看和复制。

bash
# Bearer Token(推荐)
curl https://miyang.cn/api/v1/models \
  -H "Authorization: Bearer miyang-xxx"

# x-api-key(备用)
curl https://miyang.cn/api/v1/models \
  -H "x-api-key: miyang-xxx"
模型命名规范

模型 ID 通常采用 {provider_slug}/{model_name} 格式。推荐使用 miyang/auto 自动选择模型,也可通过模型列表接口或控制台复制其他可用的调用 ID。

  • miyang/auto — 自动选择适合当前请求的模型
  • miyang/standard — 标准档模型
  • miyang/premium — 高级档模型

miyang/* 模型用于 Alice 客户端;其他应用或脚本请从模型列表中选择 usage_scopegeneral 的模型。

python
# 自动选择适合当前请求的模型
model = "miyang/auto"
限速

每个 API Key 独立计数,默认 60 次/分钟,可在控制台调整上限。超出限速返回 429 Too Many Requests

http
{
  "error": {
    "message": "Rate limit exceeded",
    "type": "rate_limit_error",
    "code": 1002
  }
}
计费

结算单位为米粒,按调用实时扣费。当前充值固定按 1 元人民币 = 140 米粒 到账,活动赠送另计。

  • 调用前检查余额 > 0,余额不足返回 402
  • 按 prompt + completion token 用量计费
  • 支持 Prompt Cache:cache_read_tokens 按折扣价计算

可在控制台充值米粒,并在「用量明细」中查看调用和消费记录。

json
// 余额不足响应(402)
{
  "error": {
    "message": "Insufficient balance",
    "type": "insufficient_balance",
    "code": 1004
  }
}
Chat Completions
POST /api/v1/chat/completions

OpenAI 兼容的对话接口,支持流式和非流式输出。可直接替换 OpenAI SDK 的 base_url

参数类型说明
model 必填string模型 ID,格式 provider_slug/model
messages 必填array对话消息列表,每条含 rolecontent
streamboolean是否启用流式输出(SSE),默认 false
temperaturefloat采样温度,范围 0–2
max_tokensinteger最大输出 token 数
response_formatobject结构化输出格式,见「结构化输出」章节
bash
curl https://miyang.cn/api/v1/chat/completions \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "miyang/auto",
    "messages": [
      {"role": "user", "content": "Hello!"}
    ],
    "stream": false
  }'
模型列表
GET /api/v1/models

公开接口,无需 API Key。返回当前公开可用模型;携带 API Key 时还会按账号权限返回内部或白名单模型。响应字段在标准 OpenAI 格式基础上扩展了 pricingcontext_length 和使用范围信息。

json
{
  "object": "list",
  "data": [
    {
      "id": "miyang/auto",
      "object": "model",
      "owned_by": "miyang",
      "name": "自动",
      "model_type": "text",
      "usage_scope": "alice",
      "usage_hint": "请在 Alice 客户端内使用",
      "pricing": {
        "prompt": "3.250000",
        "completion": "13.500000",
        "cache_read": "0.550000",
        "cache_write": "0.000000"
      },
      "context_length": 262144
    }
  ]
}
Embeddings
POST /api/v1/embeddings

OpenAI 兼容的向量接口。模型是否支持向量任务,请以模型列表和控制台标记为准。

参数类型说明
model 必填stringEmbedding 模型调用 ID
input 必填string / array需要向量化的文本或文本数组
encoding_formatstring向量编码格式,常用值为 float
bash
curl https://miyang.cn/api/v1/embeddings \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "provider/embedding-model",
    "input": "需要向量化的文本"
  }'
Images Generations(文生图)
POST /api/v1/images/generations

OpenAI 兼容的图像生成接口。根据文本 prompt 生成图像,响应返回图片 URL 或 Base64 数据,与 OpenAI Images API 完全兼容。

图像生成耗时较长(通常 30–120 秒),请在 SDK 或 HTTP 客户端中设置 至少 180 秒 的超时。
参数类型说明
model 必填string模型 ID,格式 provider/model,如 ts/gpt-image-2
prompt 必填string图像描述文本
ninteger生成图像数量,默认 1,支持多张
sizestring图像尺寸。常用值:1024x1024(方图)、1024x1536(竖图)、1536x1024(横图)、auto(模型自动选择)。最大边长 3840px,两边须为 16 的倍数,长短边比不超过 3:1
qualitystring渲染质量:low(快速草稿)、mediumhighauto(默认,模型自动选择)
output_formatstring输出格式:png(默认)、jpeg(更快)、webp
output_compressioninteger压缩率 0–100,仅 JPEG / WebP 有效
backgroundstringopaque(默认)或 transparent(透明背景,适合 icon/贴纸)
moderationstring内容审核:auto(默认)或 low(宽松)

基础示例 — 文生图:

bash
curl https://miyang.cn/api/v1/images/generations \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ts/gpt-image-2",
    "prompt": "A children'\''s book drawing of a veterinarian listening to the heartbeat of a baby otter",
    "size": "1024x1024",
    "quality": "high"
  }'
python
from openai import OpenAI
import base64

client = OpenAI(
    api_key="miyang-xxx",
    base_url="https://miyang.cn/api/v1",
    timeout=180.0,  # 图像生成需要较长超时
)

result = client.images.generate(
    model="ts/gpt-image-2",
    prompt="A children's book drawing of a veterinarian listening to the heartbeat of a baby otter",
    size="1024x1024",
    quality="high",
)
print(result.data[0].url)

进阶示例 — JPEG 输出 + 压缩 + 保存到本地:

python
import httpx, json, base64

resp = httpx.post(
    "https://miyang.cn/api/v1/images/generations",
    headers={"Authorization": "Bearer miyang-xxx"},
    json={
        "model": "ts/gpt-image-2",
        "prompt": "A serene Japanese garden with a koi pond",
        "size": "1536x1024",
        "quality": "medium",
        "output_format": "jpeg",       # jpeg 比 png 更快
        "output_compression": 80,     # 压缩率 0-100
    },
    timeout=180.0,
)
data = resp.json()
print(data["data"][0]["url"])
json
// 响应示例
{
  "created": 1779691963,
  "data": [
    {
      "url": "https://image.token-recyclebin.com/images/2026/05/25/xxx.png",
      "revised_prompt": "A serene Japanese garden with a koi pond..."
    }
  ]
}

尺寸与质量参考

参数可选值说明
size1024x1024(方)
1536x1024(横)
1024x1536(竖)
2048x2048(2K)
3840x2160(4K 横)
auto
最大边长 ≤ 3840px,双边为 16 的倍数,比例 ≤ 3:1,总像素 655,360 – 8,294,400
qualitylow · medium · high · autolow 最快,适合草稿和快速迭代;high 最精细,适合最终出图
output_formatpng · jpeg · webpjpegpng 更快,优先用于对延迟敏感的场景

GPT Image 2 参考定价(米粒 / 张)

Quality1024×10241024×1536 / 1536×1024
Low6 米粒5 米粒
Medium53 米粒41 米粒
High211 米粒165 米粒
Images Edits(垫图 / 图生图)
POST /api/v1/images/edits

OpenAI 兼容的图像编辑接口。上传一张或多张参考图,配合文本 prompt 生成新图像。支持局部编辑(mask)和多图合成。请求使用 multipart/form-data 格式。

典型场景:

  • 风格转换 — 上传照片 + "转为油画风格"
  • 多图合成 — 上传多张素材 + "生成包含这些物品的礼品篮"
  • 局部编辑 — 上传原图 + mask + "在遮罩区域添加一只火烈鸟"
参数类型说明
model 必填string模型 ID,如 ts/gpt-image-2
image 必填file / file[]参考图片。单张用 image,多张用 image[](支持多个 image[]=@file.png
prompt 必填string编辑指令描述
maskfile蒙版图片(需含 alpha 通道),透明区域为需要编辑的部分。多图时 mask 应用于第一张
ninteger生成数量,默认 1
sizestring输出尺寸,默认 auto,支持与 Generations 相同的尺寸选项
qualitystringlow · medium · high · auto

单图编辑 — 风格转换:

bash
curl https://miyang.cn/api/v1/images/edits \
  -H "Authorization: Bearer miyang-xxx" \
  -F "model=ts/gpt-image-2" \
  -F "prompt=Turn this photo into a Studio Ghibli style illustration" \
  -F "image=@photo.png" \
  -F "size=1536x1024"
python
from openai import OpenAI

client = OpenAI(
    api_key="miyang-xxx",
    base_url="https://miyang.cn/api/v1",
    timeout=180.0,
)

result = client.images.edit(
    model="ts/gpt-image-2",
    image=open("photo.png", "rb"),
    prompt="Turn this photo into a Studio Ghibli style illustration",
)
print(result.data[0].url)

多图合成 — 将多张素材合为一张:

bash
# 多图参考:用 image[] 传多张
curl https://miyang.cn/api/v1/images/edits \
  -H "Authorization: Bearer miyang-xxx" \
  -F "model=ts/gpt-image-2" \
  -F "image[]=@lotion.png" \
  -F "image[]=@soap.png" \
  -F "image[]=@candle.png" \
  -F 'prompt=A gift basket on a white background containing all these items'

局部编辑 — 使用 mask 遮罩:

python
# mask 需要有 alpha 通道,透明区域为编辑区
result = client.images.edit(
    model="ts/gpt-image-2",
    image=open("room.png", "rb"),
    mask=open("mask.png", "rb"),
    prompt="Add a flamingo in the pool area",
    quality="high",
)
print(result.data[0].url)
Mask 要求:mask 和原图须相同尺寸和格式,均 < 50MB。mask 须含 alpha 通道(透明区域为编辑区)。GPT Image 的 mask 是基于 prompt 的引导,不保证精确贴合遮罩边缘。
网络搜索(总览与计费)

为 Agent 和应用提供实时联网能力:网页搜索、新闻搜索和网页正文读取。全部为 GET 接口,使用与推理接口相同的 API Key 鉴权(Authorization: Bearer miyang-xxx)。

计费:每次成功请求扣 1 米粒,四个接口统一价。请求失败(上游异常、参数错误、新闻搜索无结果)不扣费。
接口参数说明
/api/v1/websearch/searchq深度搜索:结果附带页面正文抽取与重排序上下文,适合 RAG
/api/v1/websearch/simple-searchq快速搜索:仅返回标题和摘要,响应更快
/api/v1/websearch/readerurl网页读取:抓取指定 URL 并转成干净文本
/api/v1/websearch/search-newsq新闻搜索:只搜近期新闻源,结果同样附带检索上下文
快速搜索
GET /api/v1/websearch/simple-search

只做搜索、不做页面抽取和重排序,通常 1 秒内返回。适合只需要标题 + 摘要 + 链接的场景。命中答案卡片时响应会额外包含 answerBox 字段。

参数类型说明
q 必填string搜索关键词
bash
curl "https://miyang.cn/api/v1/websearch/simple-search?q=最新AI新闻" \
  -H "Authorization: Bearer miyang-xxx"
json
// 响应示例
{
  "code": 200,
  "message": "ok",
  "took_ms": 950,
  "data": {
    "answerBox": {
      "title": "Latest AI news",
      "snippet": "..."
    },
    "organic": [
      {
        "title": "AI News",
        "link": "https://example.com",
        "snippet": "Latest updates..."
      }
    ]
  }
}
网页读取
GET /api/v1/websearch/reader

已知目标网页 URL 时,抓取页面并转换为干净的 Markdown 文本。注意此接口返回的是顶层 content 字段,而不是 data

参数类型说明
url 必填string要读取的网页地址,必须以 http://https:// 开头
bash
curl "https://miyang.cn/api/v1/websearch/reader?url=https://go.dev" \
  -H "Authorization: Bearer miyang-xxx"
json
// 响应示例(content 为页面正文)
{
  "code": 200,
  "message": "ok",
  "content": "# The Go Programming Language\n\nGo is an open source programming language..."
}
新闻搜索
GET /api/v1/websearch/search-news

只搜索近期新闻源,其余链路与深度搜索一致,结果同样附带 contexts 正文片段。

没有匹配的新闻时返回 404(响应体为 {"code": 404, "message": "no search results"}),这属于正常业务结果,不扣费
参数类型说明
q 必填string新闻搜索关键词
bash
curl "https://miyang.cn/api/v1/websearch/search-news?q=OpenAI" \
  -H "Authorization: Bearer miyang-xxx"
json
// 响应示例
{
  "code": 200,
  "message": "ok",
  "took_ms": 4200,
  "data": {
    "organic": [
      {
        "title": "Latest OpenAI news",
        "link": "https://example.com/news",
        "snippet": "Recent product and research updates...",
        "contexts": [
          { "idx": 0, "text": "..." }
        ]
      }
    ]
  }
}
流式输出(SSE)

在请求体中设置 "stream": true 启用流式输出,响应格式与 OpenAI 的 SSE 规范完全兼容。流式结束标志为 data: [DONE]

python
from openai import OpenAI

client = OpenAI(
    api_key="miyang-xxx",
    base_url="https://miyang.cn/api/v1",
)

stream = client.chat.completions.create(
    model="miyang/auto",
    messages=[{"role": "user", "content": "Hello!"}],
    stream=True,
)

for chunk in stream:
    print(chunk.choices[0].delta.content, end="")
结构化输出

透传 response_format 字段,支持 JSON Schema。由上游模型保证输出格式,平台不做额外处理。

json
{
  "model": "miyang/auto",
  "messages": [...],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "result",
      "schema": {
        "type": "object",
        "properties": {
          "answer": { "type": "string" }
        }
      }
    }
  }
}
Prompt Cache

对支持 Prompt Cache 的模型,上游返回的缓存命中 token 会按折扣价计费。平台完整透传上游 usage 字段,账单中会显示缓存命中量。

不同供应商的字段名称有差异:

  • cache_read_input_tokens — Anthropic
  • prompt_cache_hit_tokens — DeepSeek
  • cached_tokens — OpenAI
json
{
  "usage": {
    "prompt_tokens": 1000,
    "completion_tokens": 200,
    "cache_read_input_tokens": 800,   // Anthropic
    "prompt_cache_hit_tokens": 800,    // DeepSeek
    "cached_tokens": 800               // OpenAI
  }
}
Python SDK 示例

只需替换 base_urlapi_key,即可通过 OpenAI SDK 调用。

python
from openai import OpenAI

client = OpenAI(
    api_key="miyang-xxx",
    base_url="https://miyang.cn/api/v1",
)

resp = client.chat.completions.create(
    model="miyang/auto",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)
cURL 示例
bash
# 非流式
curl https://miyang.cn/api/v1/chat/completions \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "miyang/auto",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

# 流式
curl https://miyang.cn/api/v1/chat/completions \
  -H "Authorization: Bearer miyang-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "miyang/auto",
    "messages": [{"role": "user", "content": "Hello"}],
    "stream": true
  }'