ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

用聚合 API 做多模型评测排行榜:一份代码给主流大模型打分排名

用聚合 API 做多模型评测排行榜:一份代码给主流大模型打分排名 关键词大模型评测、模型排行榜、LLM-as-judge、聚合 API、Python 实战适用已经做过一轮横评想把「跑一遍」升级成「可复用的打分榜单」一、为什么需要排行榜而不是一次性横评上一篇我们用一份代码把 Claude / GPT / DeepSeek / Qwen / Kimi 在同一道题上跑了一遍看到的是「单次印象」。但真实选型要看多维度的稳定表现代码写得对不对、推理准不准、长文本抓不抓得住重点、中文理解到不到位。如果每次都靠人肉看输出既慢又主观。本文在聚合 API 的基础上加两样东西LLM-as-judge用一个强模型当「裁判」给每个回答按维度打分自动校验客观题代码、数学用程序直接验证对错。最后把分数聚合成一张排行榜模型换名字就能复跑厂商更新模型后随时重排。二、环境准备pipinstallopenai登录 TokenPortal 控制台创建 API Key只显示一次存好。控制台入口与模型清单来我主页查看。base_url指向平台网关以控制台「API 文档」页为准本文用https://api.tokenportal.ai/v1占位。三、核心思路题库(多维度) ──▶ 候选模型逐题作答 ──▶ 两份结果 ├─ 客观题程序自动校验(对/错) └─ 主观题裁判模型 LLM-as-judge 打分 │ ▼ 聚合 → 排行榜(按维度 综合)关键点候选模型和裁判模型走同一个网关换模型只改model一行不需要再对接第二家 SDK。四、核心代码4.1 候选模型 题库importtime,json,refromopenaiimportOpenAI clientOpenAI(api_key你的_KEY,base_urlhttps://api.tokenportal.ai/v1)# 想评谁往这里加——换模型只改名字candidates[anthropic/claude-opus-4.8,openai/gpt-5.5,deepseek/deepseek-v4-pro,qwen/qwen3.7-max,moonshotai/kimi-k3,zhipu/glm-5.2,google/gemini-3.1-pro-preview,minimax/minimax-m3,baidu/ernie-5.1,]# 裁判模型单独走网关挑一个综合强的JUDGEopenai/gpt-5.5# 题库每题带 维度 与 客观校验方式# checkNone 走裁判打分code 跑单元测试math:答案 正则比对tasks[{dim:代码,prompt:用 Python 写函数 is_palindrome(s)忽略大小写和非字母数字字符返回布尔值。只给代码。,check:code},{dim:推理,prompt:鸡兔同笼共 35 只94 只脚。问鸡和兔各几只只给最终答案鸡X只兔Y只。,check:math:23,12},{dim:长文本,prompt:请用 3 句话总结以下内容的核结论此处放一段长文。,check:None},{dim:中文理解,prompt:『他差一点没赶上火车』与『他差一点赶上火车』意思相同吗简要解释。,check:None},]4.2 作答 客观校验defask(model,prompt):t0time.time()rclient.chat.completions.create(modelmodel,messages[{role:user,content:prompt}])dttime.time()-t0returnr.choices[0].message.content,r.usage,dtdefauto_check(kind,answer):客观题自动校验返回 1.0 / 0.0ifkindcode:# 抽出代码块能定义函数且回文判断正确即给分try:mre.search(rdef is_palindrome.*,answer,re.S)ifnotm:return0.0ns{}exec(m.group(0),ns)fns.get(is_palindrome)okfandf(A man, a plan, a canal: Panama)isTrueandf(hello)isFalsereturn1.0ifokelse0.0exceptException:return0.0ifkindandkind.startswith(math:):wantkind.split(:,1)[1]return1.0ifwant.replace( ,)inanswer.replace( ,)else0.0returnNone# 主观题交给裁判4.3 裁判模型打分LLM-as-judgedefjudge_score(prompt,answer):sys(你是严谨的评测裁判。请从准确性(0-5)、完整性(0-5)、表达清晰度(0-5)三项打分并给一句话理由。只输出 JSON{\acc\:0,\comp\:0,\clarity\:0,\reason\:\\})rclient.chat.completions.create(modelJUDGE,messages[{role:system,content:sys},{role:user,content:f题目{prompt}\n回答{answer}}],)try:jjson.loads(re.search(r\{.*\},r.choices[0].message.content,re.S).group(0))return(j[acc]j[comp]j[clarity])/15.0# 归一化到 0-1exceptException:return0.04.4 跑全流程生成排行榜board{m:{score:0.0,n:0,cost:0,latency:0.0}formincandidates}formincandidates:fortintasks:ans,usage,dtask(m,t[prompt])autoauto_check(t[check],ans)sautoifautoisnotNoneelsejudge_score(t[prompt],ans)board[m][score]s board[m][n]1board[m][cost](usage.completion_tokensor0)board[m][latency]dt# 综合分 平均分按分数降序排rankingsorted(((m,round(v[score]/v[n],3),v[cost],round(v[latency]/v[n],2))form,vinboard.items()),keylambdax:x[1],reverseTrue,)print(f{排名:4}{模型:28}{综合分:8}{用量(token):12}{平均延迟(s):10})fori,(m,sc,c,lt)inenumerate(ranking,1):print(f{i:4}{m:28}{sc:8}{c:12}{lt:10})跑完你会得到一张类似这样的表数值为示意排名 模型 综合分 用量(token) 平均延迟(s) 1 openai/gpt-5.5 0.91 1820 2.31 2 anthropic/claude-opus-4.8 0.89 2010 2.78 3 deepseek/deepseek-v4-pro 0.84 1540 1.96 ...五、进阶按维度拆榜综合分容易被「全能型」模型拉高但很多团队只关心某一个场景。把board按dim分组统计就能产出分场景榜单fromcollectionsimportdefaultdict by_dimdefaultdict(lambda:defaultdict(float))formincandidates:fortintasks:ans,_,_ask(m,t[prompt])autoauto_check(t[check],ans)sautoifautoisnotNoneelsejudge_score(t[prompt],ans)by_dim[t[dim]][m]sfordim,scoresinby_dim.items():print(f\n【{dim}榜】)form,scinsorted(scores.items(),keylambdax:x[1],reverseTrue):print(f{m:28}{round(sc,3)})这样你选型时就不是看一张总榜而是「写代码看代码榜、做长文摘要看长文本榜」——更有指导意义。六、小结用聚合 API 做评测排行榜优势很实在一个接口跑全部候选换model就换大脑重排榜单只要改一行裁判与候选同网关LLM-as-judge 不用再单独接一家覆盖广Anthropic、OpenAI、Google、DeepSeek、阿里通义、月之暗面、智谱、MiniMax、百度等主流厂商通吃有折扣部分模型在平台上有折扣如 Anthropic 系列低至 5 折高频评测成本也压得住可开票、官方货源、稳定做公司级选型报告也站得住脚。
返回列表