更新于 2026-10-16

实用文章

低价 API 中转怎么辨别?5 个常见风险和验真方法

数据安全、偷换模型、倍率虚标、用量虚标、账号稳定性:每个风险给出怎么测、怎么判,最后用同一套标准自评犀速AI。

先说明: 低价不一定不可靠。价格差异可能来自官方折扣、缓存、批量采购或供应商策略。本文不评价任何具体服务商,只给可以复现的检查方法;判断以接口响应、账单记录、隐私政策和稳定性数据为准,不以价格高低或任何一方的说法为准,包括我们自己的。

本文怎么用:下面 5 个风险,每个都给出怎么测和怎么判,最后汇总成一张判断表。测试一律用虚构内容,不要把真实客户资料、API Key 或源代码发给任何中转做测试,包括我们。

1. 数据安全:「一块钱一百万 token,你以为捡了便宜,其实数据在裸奔」

你发给中转的每一条请求,都会先经过它的服务器。价格再低,也要先弄清它怎么处理这些内容。

怎么测:看政策里写没写这 5 件事。

要问的 看什么
是否保存请求和回复正文 默认存不存;存的话存什么、谁能看
留存多久 调用记录、正文、日志各留多久,有没有具体天数
人工能否接触 客服或运维在什么条件下能看到内容,有没有审计
能否删除 能不能申请删除,注销账号后怎么处理
是否用于训练或出售 有没有明确写「不用于训练、不出售」

然后用一段虚构文本把流程走一遍:

XISU_SECURITY_TEST_2026_001
客户姓名:测试用户甲(虚构)
订单号:TEST-0000-0001(虚构)
  1. 用这段文本发一次请求,记下响应头里的 request_id;
  2. 看控制台的调用记录里会不会显示这段正文;
  3. 问客服:能不能看到这一笔的内容?保存多久?能不能删除?
  4. 把看到的、听到的和政策逐条对照。

怎么判: 没有隐私政策,或者政策只有「我们重视您的隐私」而没有范围和天数,按高风险处理。控制台或客服能把正文原样给出来,而政策写的是「不保存」,说明做法和政策不一致,也是高风险。

反过来要记住:发了没泄露,不能证明安全。 你看不到服务端发生了什么。真正能依靠的只有两样:写清楚的政策,以及出了问题能不能按政策追责,也就是有没有明确的运营主体、联系渠道和留痕的工单记录。

2. 偷换模型:「付旗舰的钱,后台跑乞丐版」

先排除几种常见但不可靠的方法,它们最多算弱信号:

  • 问它「你是谁」:一句系统提示词就能改,真模型也经常认错自己;
  • 看响应里的 model 字段:服务端改一个字符串就行;
  • 测工具调用、严格 JSON:只能证明「有这个能力」,便宜模型也做得到。真要测结构化输出,要用 API 参数 response_format 的 json_schema(strict: true),而不是在提示词里要求输出 JSON。

怎么测:三步。

  1. 分词器指纹。 同一段文本,不同厂商的分词器算出的 prompt_tokens 不同。用验真文章里的检测脚本跑一遍,GPT 应当和 OpenAI 官方分词器逐段一致。这一步抓的是「换了厂商」。
  2. 同厂比能力。 同一家的大小模型往往共用分词器,第 1 步抓不到。准备 10~20 道能拉开差距的题,在官方和被测服务上同时各跑 3 遍,比通过率。
  3. request_id 对账。 每一笔在控制台查到的模型和 token 分项,要和响应里的 usage 一致。

怎么判: 分词器多次复测都对不上,是高风险;三步都通过,模型身份可以算「已验证」;只做了第 1 步,只能排除换厂商。完整脚本、原理和替换信号表见 如何确认调用到的是真模型?。

3. 倍率虚标:「单价看着低,账单比官方还狠」

要点:

  • 只认「每 100 万 token 多少钱」,并且按输入、输出、缓存读取、缓存写入四项分别比。「X 折」「倍率」「分组系数」都要换算回这个单位再比。
  • 算清充值换算。 如果充进去的是「额度」「美元」「点数」,先算清 1 元到底能买多少。
  • 别只看输入价。 输出通常比输入贵好几倍,只比输入价会严重低估账单。
  • 留意按次收费、最低消费、充值手续费这类不在单价里的费用。

最小核对: 拿一笔真实调用,用它的 usage 乘以平台公开的单价算一遍,和实际扣费比;再用同样的 usage 乘以官方单价算一遍。前一个应当对得上,后一个才是真正「便宜了多少」。

怎么判: 四项单价公开、手算和扣费对得上,是已验证;只公布倍率、换算后对得上,是部分可信;算不出单价或手算对不上,是高风险。逐项核对方法见 低价 API 中转的账单和用量怎么核对?。

4. 用量虚标:「调一千,扣两三千」

要点:

  • token 数不能按字数换算。 各家分词器不同,「这段 1000 字」不等于 1000 token。
  • 输入看一致,输出看上限。 temperature=0 也不保证每次输出一样,所以别拿输出长短比;但同一个请求连发几次,prompt_tokens 应当完全一致,completion_tokens 不应超过你设的 max_tokens(推理模型的推理 token 也算在 completion_tokens 里,同样受这个上限约束)。
  • 关掉 SDK 的自动重试(max_retries=0)。否则一次调用失败后被悄悄重发,可能扣了几次钱你都不知道。
  • 流式请求要加 stream_options={"include_usage": true},否则拿不到 usage,也就没法对账。

最小核对: 关掉自动重试,选一个模型(下面以 claude-haiku-5-5 为例),让它写一段长回答,例如「详细介绍大熊猫,至少 300 字」,max_tokens 设 50,同一个请求发 3 次,记下 3 个 request_id 和各自的 usage。应当看到:prompt_tokens 三次相同;completion_tokens 不超过 50,被上限截断时 finish_reason 是 length。然后到控制台查:应当正好 3 笔,每笔的 token 分项和 usage 一致。

在调用明细里按请求编号核对一笔调用

怎么判: 条数和 token 都对得上,是已验证;平台只给汇总账单、没有逐笔明细,最多算部分可信;条数多出来、记录的 token 比 usage 大,或者同样的输入每次 prompt_tokens 都不同,是高风险。completion_tokens 超过 max_tokens 时,要么上限参数没有生效,要么计数有问题,两种情况你都在为超出的部分付费,应当要求服务商解释。详细步骤和脚本同样见 低价 API 中转的账单和用量怎么核对?。

5. 账号来路与稳定性:「半夜说封就封,智能体中断」

这一项靠提示词测不出来。服务商背后用什么账号、风控状态如何,都在服务端,你在请求里看不到。能看的是运营证据:

看什么 为什么重要
公开状态页 能不能随时查到当前是否可用
故障与维护记录 出过什么问题、多久恢复、有没有提前通知
多密钥 能不能按业务分开,一把出问题不拖垮全部
余额预警 余额快用完时会不会提前提醒,而不是直接断
退款规则 平台原因导致不可用时怎么退,写没写清楚
封禁或停服后的处理 余额怎么处理、通过什么渠道通知你

怎么测: 先用低金额、低风险的任务连续跑 3~7 天,白天和夜间都要覆盖,记下失败率、超时次数和错误码;中途开一张工单,看看客服多久回复。

怎么判: 有状态页和历史故障记录、试跑没有异常,是已验证;试跑正常但没有公开状态页或故障记录,只能算部分可信;试跑中频繁中断,或者停服、封禁都没有说明,是高风险。

生产环境怎么防: 无论用哪家,都要保留备用服务,关键智能体不要只绑一个中转。代码里至少做三件事:设超时、给重试设上限、主线路不行时切到备用 base_url。下面是一段可以直接运行的 Python(pip install openai):

import os
import time

from openai import OpenAI, APIConnectionError, APIStatusError

# 主线路在前,备用线路在后;地址、密钥、模型名都从环境变量读。
PROVIDERS = [
    {"base_url": os.environ.get("PRIMARY_BASE_URL", "https://api.xisu.ai/v1"),
     "key_env": "PRIMARY_API_KEY", "model": os.environ.get("PRIMARY_MODEL", "gpt-6-luna")},
    {"base_url": os.environ.get("BACKUP_BASE_URL", ""),
     "key_env": "BACKUP_API_KEY", "model": os.environ.get("BACKUP_MODEL", "")},
]
RETRY_SAME = {429, 500, 502, 503, 504}  # 这些状态值得在同一条线路上再试一次


def chat(messages, tries_per_provider=2):
    errors = []
    for p in PROVIDERS:
        key = os.environ.get(p["key_env"])
        if not (p["base_url"] and key and p["model"]):
            continue  # 没配置的线路直接跳过
        client = OpenAI(base_url=p["base_url"], api_key=key,
                        timeout=30,      # 单次请求最多等 30 秒
                        max_retries=0)   # 关掉 SDK 自带重试,次数由下面说了算
        for attempt in range(tries_per_provider):
            try:
                resp = client.chat.completions.create(
                    model=p["model"], messages=messages, max_tokens=200)
                return p["base_url"], resp
            except APIConnectionError as e:          # 连不上、超时
                errors.append(f"{p['base_url']}: {type(e).__name__}")
            except APIStatusError as e:
                errors.append(f"{p['base_url']}: HTTP {e.status_code}")
                if e.status_code == 400:
                    raise                            # 请求本身有错,换线路也没用
                if e.status_code not in RETRY_SAME:
                    break                            # 401/403 等:不重试,直接换下一条线路
            time.sleep(2 ** attempt)                 # 退避 1 秒、2 秒
    raise RuntimeError("所有线路都失败了:" + "; ".join(errors))


if __name__ == "__main__":
    used, resp = chat([{"role": "user", "content": "只回复 OK"}])
    print("线路:", used)
    print("request_id:", resp._request_id)
    print("usage:", resp.usage.prompt_tokens, resp.usage.completion_tokens)

运行前设置环境变量 PRIMARY_API_KEY;配了 BACKUP_BASE_URL、BACKUP_API_KEY 和 BACKUP_MODEL 才会启用备用线路,没配就跳过。不同的错误分开处理:

  • 400:请求本身有错,换线路也没用,直接抛出;
  • 401 / 403:这条线路的密钥或账号有问题,不重试,直接换下一条;
  • 429 / 5xx、连接失败或超时:同一条线路退避后再试一次,还不行再换。

超时的那次请求可能已经在服务端执行并计费,所以重试次数一定要有上限。备用线路的模型名可能不一样,单独配置。

6. 最终判断表

项目 已验证 部分可信 高风险
模型身份 分词器指纹通过,同厂比能力没有明显差距,request_id 对账一致 只跑了分词器,或者没有官方账号对照 分词器多次复测都对不上,或贵模型表现和同厂小模型一样
价格 四项单价公开,手算和扣费一致 只给倍率或折扣,换算后对得上 算不出单价,或手算对不上
用量 逐笔明细和 usage 一致,条数一致,输出不超过上限 只有汇总账单;或输出超过 max_tokens,但逐笔记录和 usage 一致 条数或 token 多于 usage,相同输入 prompt_tokens 不同
数据安全 政策写明存储范围、天数、人工接触条件、删除方式和不训练,实际表现与政策一致 有政策,但缺天数或范围 没有政策,或实际表现和政策矛盾
稳定性 有状态页和历史故障记录,试跑 3~7 天无异常 试跑正常,但没有公开状态页或故障记录 试跑中频繁中断,停服或封禁没有说明

7. 用同样的标准看犀速AI

我们的价格同样低于官方,模型广场上部分模型标注为官方价 1–3 折,所以欢迎你用本文的方法来测我们。下面是如实的自评:

检查项 犀速AI 目前的情况 在哪里看
隐私政策与留存期限 有。 默认不保存请求和回复正文;调用明细保留 40 天,之后只留按天汇总;登录记录 30 天;工单在最后一次回复后 30 天删除;不用于训练、不出售;可以通过工单申请注销账号,注销后删除账号信息。请求需要转发给上游模型供应商,这一段按其各自的数据政策处理 隐私政策
人工接触内容 只有你在工单里同意后,才会对相关密钥临时开启内容采样:最长 24 小时,加密保存,3 天后删除,开启和查看都有审计 隐私政策
逐笔对账 有。 每笔都有 request_id(响应头 x-request-id)、Token 分项、耗时、费用和状态;失败请求不计费 用量与账单怎么核对
单价公开 有。 每个模型公开输入、输出、缓存读取、缓存写入四项单价;按量计费,调用结束才结算,不预扣 模型广场
输出上限参数 目前有已知问题。 2026-10-16 实测:GPT 系列的 max_tokens、max_completion_tokens、max_output_tokens 没有生效,输出可能超过你设的上限,并按实际输出计费;Claude 系列正常。修复之前,请不要依赖这个参数控制 GPT 模型的费用 —
模型掺假退款 有。 提供证据、经核实后退还受影响的费用 充值与退款
密钥控制 有。 IP 白名单、模型范围、单密钥预算、轮换(有宽限期)、吊销,可以建多把密钥 数据安全与密钥安全说明
余额提醒 有。 余额低于 10 元时,控制台会收到通知,并发邮件到已验证的注册邮箱;余额用完、新请求被拒绝时也会提醒。同一种提醒 24 小时内最多发一次 充值与退款
维护与变更通知 有。 官方公告页 官方公告
客服渠道 站内工单、Telegram @xisuai_support —
公开状态页 目前没有 —
公开历史故障记录 目前没有 —
SLA 目前没有 —
上游来源 不公开上游账号和供应来源 —

按第 6 节的标准,「稳定性」这一项我们目前最多只能算部分可信,需要你自己试跑来判断;「用量」这一项逐笔对账能对上,但在 GPT 输出上限的问题修复之前,也只能算部分可信。建议先买 10 元测试(见 充值与退款),用低风险任务跑几天,再决定要不要放进生产环境。关键业务保留备用服务,这一条对我们同样适用。