用自己的 prompt 做横向对比
场景:选型时想知道「同一个问题,哪个模型答得更好、更快、更便宜」——用同一套代码跑一遍就有答案。
为什么需要:官方榜单测的是通用能力,你的业务场景未必一致。用自己的真实 prompt 实测,比看任何榜单都准。
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"])
同一问题「用一句话解释什么是前缀缓存」,统一关闭思考:
| 模型 | 延迟 | 输出质量 | 价格(输入/输出) |
|---|---|---|---|
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 倍、风格完全不同。选型取决于你的场景要"快"还是要"详尽"。
让模型互相评分容易有偏见。更实用的做法是规则评分——针对你的场景定义硬指标:
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
关键洞察:高缓存命中场景下,贵模型的成本差距会被压缩(因为输入侧主要走缓存价)。选择时要把"缓存命中率"纳入计算,而不是只看牌价。
| 项 | 结果 |
|---|---|
| 三模型同题对比 | ✅ 全部返回,延迟 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. 在 Key 服务台创建一把 Key
2. 把代码里的 你的Key 替换为实际 Key
3. 直接运行即可
每篇配方均经真实调用实测 · 返回配方库 · 前往 Key 服务台