Skip to content

进阶技巧

接通是起点,把成本压下去 + 监控做起来 + 调用更稳,看本页。

1. 控成本:选对模型 + 看清是哪段烧 token

大体的"性价比"思路

不同模型每千 token 价格相差可达 100 倍以上。先用便宜模型把流程跑通,再切贵模型做实际生产——这是最省钱的姿势。

场景建议起步模型
日常 chat / 简单问答gpt-5-mini / claude-haiku-4-5 / gemini-2.5-flash
中等代码 / 中等推理gpt-5 / claude-sonnet-4-6-*
长上下文 / 难推理 / Agentclaude-sonnet-4-* / gpt-5 / claude-opus-4-*

具体可用模型 + 当下定价以 控制台模型页 为准。

看清调用日志:哪段烧了 token

控制台 → 「日志」可以看到每次调用的:

  • prompt_tokens(输入)
  • completion_tokens(输出)
  • total_tokens

输出 token 的单价通常是输入的 3 倍以上——长输出比长输入更烧钱。常见浪费场景:

  • 让模型"用 markdown 表格列出所有 XXX"——表格语法消耗大量 token
  • 没设 max_tokens,模型放飞自我写一大段
  • 同样的 system prompt 每次都重发(见下文 prompt caching)

Prompt caching(适用 OpenAI / Claude 路径)

OpenAI 和 Claude 都支持把 system prompt + 长上下文标记为"可缓存"——后续命中缓存的部分按更低价(通常打 1 折左右)计费。

python
# OpenAI prompt caching 在协议层是自动的:
# 同样开头的 prompt(>= 1024 token)后续命中缓存,无需特殊参数
# 控制台日志看返回的 cached_tokens 字段判断命中情况
python
# Anthropic SDK 用 cache_control 标记
client.messages.create(
    model="claude-sonnet-4-6-...",
    system=[
        {
            "type": "text",
            "text": "<很长的 system prompt 或文档>",
            "cache_control": {"type": "ephemeral"}
        }
    ],
    messages=[...]
)

TIP

具体哪个模型支持 caching、命中条件、价格折扣,以上游官方 OpenAI 文档 / Anthropic 文档 为准。本站作为协议网关透传该字段。

2. 监控用量

控制台「日志」按时段过滤

「日志」页支持按时间 / 模型 / 状态码 / Key 过滤,看:

  • 某段时间总消耗:用于追溯"今天怎么烧了 ¥30"
  • 某个 Key 消耗:用于多 Key 拆分项目的成本归属
  • 失败调用:429 / 5xx 是不是集中在某个时段(可能是上游波动)

给 Key 设额度上限

创建 / 管理 API Key 时可以给单个令牌设额度上限——独立于账户余额。这样:

  • 接给客户端 / 队友的 Key 设个 ¥50 顶额,跑飞最多损失 ¥50
  • 给自动化脚本用的 Key 单独设额度,方便核算单业务成本
  • 主 Key 不设上限留给自己用

接入告警(自建)

控制台暂不提供"余额低于 X 时邮件告警"。需要的话自己写一个 cron:

bash
# 每小时查余额,低于阈值发钉钉/Slack
# 假设有 GET /api/balance 端点(按实际控制台 API 文档调整)
BALANCE=$(curl -s -H "Authorization: Bearer $WHY01_API_KEY" \
  https://s1.why01.top/api/balance | jq -r '.data.balance')
if (( $(echo "$BALANCE < 10" | bc -l) )); then
  # 调你的告警通道
  curl -X POST $WEBHOOK -d "{\"text\":\"why01 余额 $BALANCE\"}"
fi

控制台 API 端点和返回结构以实际可见的为准;若控制台没暴露余额查询 API,直接定时人工看「钱包」也是一种办法。

3. 多 Key 管理

一个账户能建几个 Key

不限。建议按用途拆分

  • dev-local — 开发机用,额度低、容易换
  • prod-app-A — 生产 App A 用,独立额度归属
  • prod-app-B — 生产 App B 用
  • cli-claude-code — 自己 Claude Code 用,单独看消耗
  • temp-debug-{date} — 临时调试,跑完即禁

Key 命名约定

{环境}-{业务}-{创建月} 之类,避免半年后看着一堆 mykey1/test/abc 不知谁是谁。

轮换节奏

生产 Key 建议每 90 天主动轮换

  1. 控制台建新 Key,名称加上日期后缀
  2. 更新业务侧配置(.env / 配置中心 / CI 变量)
  3. 灰度切换 → 观察 24 小时
  4. 把老 Key 禁用(不删,留作回滚)
  5. 7 天没问题 → 老 Key 真删

4. 调用更稳:重试 + 超时 + 限流

重试策略(核心)

5xx 几乎一定要重试;429 也重试但要有 backoff。不要重试 4xx 里的 400/401/402/404——那是你自己的 bug,重试只是浪费 token。

python
import time, random
from openai import OpenAI, APIError

client = OpenAI(base_url="https://s1.why01.top/v1", api_key="sk-...")

def chat_with_retry(messages, max_attempts=4):
    for attempt in range(max_attempts):
        try:
            return client.chat.completions.create(
                model="gpt-5-mini",
                messages=messages,
                timeout=300,  # 5 分钟,长 prompt 必加
            )
        except APIError as e:
            status = getattr(e, "status_code", 0)
            # 不重试的 4xx
            if status in (400, 401, 402, 403, 404, 422):
                raise
            # 5xx 和 429:指数退避 + 抖动
            if attempt == max_attempts - 1:
                raise
            wait = (2 ** attempt) + random.uniform(0, 1)
            time.sleep(min(wait, 30))

客户端 timeout 设到多大

  • 短对话 / 非流式:60 秒
  • 长 prompt / agent 类:300 秒(5 分钟)
  • 批量任务:900 秒(15 分钟)

短了的话长 prompt 处理中途就会被自己客户端断掉,看起来像"网关有问题"实则是自己 timeout 太短。

控制并发

不要并发打满。单 Key 同时进行的请求不超过 5 个是个稳妥的起点。需要更高并发先观察 429 日志,再 联系客服 评估升级用户组。

5. 流式 vs 非流式

维度非流式流式
实现复杂度一次 request → response需要处理 SSE / async iterator
用户体感等几秒一次性出边出边看,更流畅
中途出错整次 fail已收到的 token 能保留
计费按返回 token 算同样按返回 token 算(不区分)

面向人的对话:用流式(更好的 UX)。 机器调用机器(写代码生成、批量处理):非流式更简单。

流式实现见 OpenAI 兼容 § 流式输出

6. Agent 类应用的几个坑

Claude Code / Codex / 自写 agent 都属于这类。最大的成本来源是上下文不断膨胀

  • 每轮对话 = 把所有历史消息 + 工具调用结果都重发一次
  • 长会话到 100k token 后单次调用就要 ¥几毛
  • 文件越多 + 工具调用越频繁,token 消耗越快

应对:

  • 及时 /clear 清上下文——长会话超过 1 小时考虑重开
  • 窄化项目目录——只 cd 到相关子目录,避免读 node_modules/
  • .claudeignore / .gitignore——把无关文件挡在外面
  • 能用便宜模型完成的子任务用便宜模型——比如让 haiku 跑文件搜索 / 简单替换,sonnet 留给真的需要推理的部分

7. 多家上游切换

本站根据用户组路由到不同上游。同一个模型名调用过去可能跑在不同上游商,结果略有差异(特别是 token 计算 / 边缘情况输出)。

如果你需要严格"对齐 OpenAI 官方"或"对齐 Anthropic 官方"的输出,本站作为聚合网关不保证完全一致——这是渠道分发模型的固有性质。需要绝对一致请直接走官方账号。

对绝大多数应用场景(写代码、对话、翻译、总结),上游差异在可接受范围内。

下一步