模型定价(Owner 覆盖)

本页介绍如何让主账户(Owner)在系统默认定价之上提供"差量覆盖"。覆盖值通过配置键 PRICING 写入,立即生效;结算优先使用覆盖值,未覆盖部分回退到系统默认(参考文件:pricing.json)。


端点与鉴权

  • 获取当前覆盖:GET /x-config(读取 configs.PRICING 字段,字符串)
  • 设置/更新覆盖:PUT /x-config(传入 PRICING 字段,字符串)
  • 清空覆盖(恢复默认):DELETE /x-config{"keys":["PRICING"]}

需使用主账户密钥(isOwner)。


数据结构(与 pricing.json 一致)

PRICING 是一个 JSON 字符串,解析后整体结构如下(仅需填写“差量”,未填写的字段保留系统默认)。为简洁起见,以下示例仅保留常用字段;如无特殊需要,可忽略 Size*/Find/Page/Query 等高级计费项:

{
  "ChatPricing": {
    "<model>": {
      "CacheWrite": 0,
      "CachedText": 0,
      "CachedAudio": 0,
      "InputText": 0,
      "InputAudio": 0,
      "InputImage": 0,
      "ReasonText": 0,
      "OutputText": 0,
      "OutputAudio": 0,
      "OutputImage": 0,
      "Rates": 1
    }
  },
  "ImgPricing": {
    "<model>": {
      "Call": 0,
      "Rates": 1,
      "Sizes": {"1024x1024": 0}
    }
  },
  "AudioPricing": {
    "<model>": {
      "Input": 0,
      "InputAudio": 0,
      "Output": 0,
      "OutputAudio": 0,
      "Call": 0,
      "Rates": 1
    }
  },
  "CallPricing": {
    "<model>": {"Call": 0, "Rates": 1}
  },
  "RerankPricing": {
    "<model>": {"Input": 0, "Call": 0, "Rates": 1}
  },
  "FineTuningPricing": {
    "<base-model>": {"InputText": 0, "OutputText": 0, "Rates": 1}
  }
}

字段含义与单位

ChatPricing(对话/通用)常用字段

  • InputText/OutputText:USD/百万 tokens(输入/输出文本)
  • CachedText/CacheWrite:USD/百万 tokens(缓存读取/写入)
  • ReasonText:USD/百万 tokens(推理过程文本,如 o1 系列)
  • InputAudio/OutputAudio:USD/百万等价 tokens(音频输入/输出)
  • InputImage/OutputImage:USD/百万等价 tokens(图像输入/输出)
  • CachedAudio:USD/百万等价 tokens(缓存音频)
  • Rates:模型级倍率(缺省 1)

ChatPricing 高级字段(仅特定模型,通常不需要设置):

  • Call:USD/次(极少数模型如 Perplexity Sonar 系列使用)
  • SizeHigh/SizeMedium/SizeLow:USD(Perplexity Sonar 系列的搜索结果大小计费)
  • Find/Query:USD(OpenAI gpt-4o、Anthropic 等的搜索/grounding 功能)
  • Page:USD/页(Mistral OCR 等按页计费的模型)

其他定价类别

  • ImgPricing(图片生成):Call 单次调用费用,Sizes 为不同尺寸的单价(USD/张),Rates 倍率
  • AudioPricing(语音/音频):Input/Output(USD/1M tokens),InputAudio/OutputAudio(USD/1M tokens),Call(USD/次),Rates 倍率
  • RerankPricing(重排/排序):Input(USD/1M tokens),Call(USD/次),Rates 倍率
  • CallPricing(纯调用计费):Call(USD/次),Rates 倍率
  • FineTuningPricing(微调):以基础模型为键(例如 gpt-4o-mini-2024-07-18),字段同 ChatPricing 常用字段

行为与覆盖范围

  • 支持新增模型名(仅对该主账户生效)。/v1/models 列表仍基于系统默认,不会显示新增项。
  • 未设置的字段与模型沿用系统默认;合并后形成“有效定价”。
  • 新增模型要能正常调用,请在 MODEL_MAPPERLEVEL_MAPPER 中为它配置路由(映射到实际上游模型或所在 Level)。
  • 计费按合并后的“有效定价”结算,并叠加用户维度的 Rates/Factor 系数。

示例

  1. 最小差量(仅调整一个对话模型的输入/输出单价):

my_pricing.json

{
  "ChatPricing": {
    "gpt-4o": {"InputText": 3.5, "OutputText": 12, "Rates": 1}
  }
}

写入(使用 jq 将 JSON 文件转为字符串):

curl -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -X PUT https://api.xaixapi.com/x-config \
  -d "{\"PRICING\": $(jq -Rs . < my_pricing.json)}"
  1. 覆盖图片尺寸单价(仅改动某些尺寸):
{
  "ImgPricing": {
    "dall-e-3": {"Sizes": {"1024x1024": 0.05, "1792x1024": 0.10}}
  }
}
  1. 读取与清空:
# 读取当前覆盖(字符串形式)
curl -H "Authorization: Bearer $API_KEY" https://api.xaixapi.com/x-config | jq -r '.configs.PRICING'

# 清空覆盖,恢复系统默认
curl -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -X DELETE https://api.xaixapi.com/x-config \
  -d '{"keys":["PRICING"]}'

校验与限制

  • JSON 大小 ≤ 128 KB
  • 条目总数(所有板块内模型条数之和)≤ 1024
  • 拒绝未知字段(严格模式解析)
  • 所有数值必须是有限且非负