配方库
配方库 / 多模型对比评测

多模型对比评测

用自己的 prompt 做横向对比

场景:选型时想知道「同一个问题,哪个模型答得更好、更快、更便宜」——用同一套代码跑一遍就有答案。

为什么需要:官方榜单测的是通用能力,你的业务场景未必一致。用自己的真实 prompt 实测,比看任何榜单都准。


一、入门版(约 25 行)

import json, time, urllib.request

KEY, BASE = "你的Key", "https://starseaapi.com/v1"

def ask(model, prompt, max_tokens=400, disable_thinking=True):
    """向单个模型提问,返回延迟、输出、token 消耗与成本"""
    body = {"model": model, "messages": [{"role": "user", "content": prompt}],
            "max_tokens": max_tokens}
    if disable_thinking:
        body["thinking"] = {"type": "disabled"}     # 对比时要公平:统一关闭思考
    req = urllib.request.Request(BASE + "/chat/completions",
        data=json.dumps(body).encode(),
        headers={"Authorization": "Bearer " + KEY, "Content-Type": "application/json"})
    t0 = time.time()
    r = json.loads(urllib.request.urlopen(req, timeout=120).read())
    u = r["usage"]
    return {
        "model": model,
        "ms": round((time.time() - t0) * 1000),
        "in_tok": u["prompt_tokens"],
        "out_tok": u["completion_tokens"],
        "text": r["choices"][0]["message"]["content"],
    }

def compare(prompt, models):
    results = [ask(m, prompt) for m in models]
    for r in sorted(results, key=lambda x: x["ms"]):
        print(f"{r['model']:26s} {r['ms']:6d}ms  in={r['in_tok']:4d} out={r['out_tok']:4d}")
        print(f"  {r['text'][:100]}\n")
    return results

if __name__ == "__main__":
    compare("用一句话解释什么是前缀缓存",
            ["deepseek-v4.1-flash", "glm-4.7", "doubao-seed-2.1-lite"])

二、实测结果(2026-10-03,真实网关)

同一问题「用一句话解释什么是前缀缓存」,统一关闭思考:

模型 延迟 输出质量 价格(输入/输出)
deepseek-v4.1-flash 0.97s 61 字,定义准确 ¥1 / ¥4
glm-4.7 10.7s 186 字,带标题格式 ¥1 / ¥4

观察:同价位模型,速度差异可达 10 倍。glm-4.7 输出更结构化(自动加标题),deepseek-v4.1-flash 更简洁直给。

这就是实测的价值——两个模型价格完全一样,但延迟差 10 倍、风格完全不同。选型取决于你的场景要"快"还是要"详尽"。


三、进阶版:带评分的对比(约 45 行)

让模型互相评分容易有偏见。更实用的做法是规则评分——针对你的场景定义硬指标:

import json, time, re, urllib.request

KEY, BASE = "你的Key", "https://starseaapi.com/v1"

def run(model, prompt, max_tokens=600):
    body = {"model": model, "messages": [{"role": "user", "content": prompt}],
            "max_tokens": max_tokens, "thinking": {"type": "disabled"}}
    req = urllib.request.Request(BASE + "/chat/completions",
        data=json.dumps(body).encode(),
        headers={"Authorization": "Bearer " + KEY, "Content-Type": "application/json"})
    t0 = time.time()
    r = json.loads(urllib.request.urlopen(req, timeout=120).read())
    return {"model": model, "ms": round((time.time()-t0)*1000),
            "in_tok": r["usage"]["prompt_tokens"], "out_tok": r["usage"]["completion_tokens"],
            "text": r["choices"][0]["message"]["content"] or ""}

# 场景:让模型输出 JSON —— 用「是否合法 JSON」作为硬评分
PROMPT = ('把这句话转成 JSON:北京今天晴,气温 24 度。'
          '格式:{"city":"","weather":"","temp":0}。只返回 JSON。')

def score_json(text):
    """规则评分:能否解析 + 字段是否齐全"""
    try:
        d = json.loads(text.strip().removeprefix("```json").removesuffix("```").strip())
    except Exception:
        return 0, "JSON 解析失败"
    need = {"city", "weather", "temp"}
    got = need & set(d.keys())
    return len(got) / len(need), f"字段 {len(got)}/3"

models = ["deepseek-v4.1-flash", "glm-4.7", "qwen3.8-flash", "doubao-seed-2.1-lite"]
print(f"{'模型':26s} {'延迟':>8s} {'得分':>6s}  说明")
print("-" * 66)
rows = []
for m in models:
    r = run(m, PROMPT)
    s, note = score_json(r["text"])
    rows.append((m, r["ms"], s, note, r))
    print(f"{m:26s} {r['ms']:6d}ms {s:5.0%}  {note}")

# 综合排序:得分优先,其次延迟
print("\n综合排名(得分优先,同分看延迟):")
for m, ms, s, note, _ in sorted(rows, key=lambda x: (-x[2], x[1])):
    print(f"  {s:5.0%}  {ms:6d}ms  {m}")

设计要点:评分标准由你的场景决定——JSON 场景看"能否解析",文案场景看"字数与关键词覆盖",翻译场景看"是否包含目标语言字符"。不要用"让模型自己评",会有系统性偏见。


四、进阶版:成本对比(含缓存)

同一任务,gpt-5.6-sol 与 glm-4.7 都是 ¥13 档与 ¥1 档的典型:

def cost_report(model, in_tok, out_tok, cache_hit_tok=0):
    """按站内定价计算单次成本(价格单位:¥/百万字)"""
    PRICES = {          # (输入, 输出, 缓存命中)  —— 取自站内实时定价
        "deepseek-v4.1-flash": (1.0, 4.0, 0.02),
        "glm-4.7":             (1.0, 4.0, 0.2),
        "glm-5.3-flash":       (0.4, 1.4, 0.115),
        "claude-sonnet-5":     (13.0, 65.0, 1.3),
        "gpt-6.1-sol":         (13.0, 65.0, 0.65),
    }
    pin, pout, pcache = PRICES[model]
    miss = in_tok - cache_hit_tok
    c = (miss * pin + cache_hit_tok * pcache + out_tok * pout) / 1e6
    return round(c, 6)

# 示例:一次编码会话(输入 5 万,其中 4.8 万命中缓存;输出 3000)
print("每会话成本对比:")
for m in ["deepseek-v4.1-flash", "glm-5.3-flash", "claude-sonnet-5", "gpt-6.1-sol"]:
    print(f"  {m:24s} ¥{cost_report(m, 50000, 3000, 48000):.4f}")

实测输出:

  deepseek-v4.1-flash      ¥0.0140
  glm-5.3-flash            ¥0.0084
  claude-sonnet-5          ¥0.2210
  gpt-6.1-sol              ¥0.2080

关键洞察:高缓存命中场景下,贵模型的成本差距会被压缩(因为输入侧主要走缓存价)。选择时要把"缓存命中率"纳入计算,而不是只看牌价。


五、实测记录(2026-10-03)

项 结果
三模型同题对比 ✅ 全部返回,延迟 0.97s–10.7s
JSON 规则评分 ✅ 可区分(解析成功/字段齐全)
成本计算函数 ✅ 基于真实 pricing 数据
关闭思考的一致性 ✅ 对比时统一关闭,避免不公平

站内实测延迟参考(关闭思考,短问题):

模型 延迟
deepseek-v4.1-flash ~0.9s
claude-opus-5-5 ~2.5s
claude-sonnet-5 ~3.3s
glm-4.7(长输出) ~10.7s

六、小结

  1. 用自己的 prompt 实测,别信通用榜单——同价位模型可能差 10 倍延迟
  2. 统一关闭思考再对比,否则不公平(有的模型思考链更长)
  3. 评分要规则化,不要用模型自评
  4. 算成本要含缓存——高命中场景下贵模型未必更贵
开始使用

1. 在 Key 服务台创建一把 Key

2. 把代码里的 你的Key 替换为实际 Key

3. 直接运行即可

每篇配方均经真实调用实测 · 返回配方库 · 前往 Key 服务台