最重要的说前面:我是小白,没技术,别喷,真的会哭。。。。。。
突发奇想,写个脚本(大部分功劳是cursor),测试以下硅基流动上的ai大模型哪个最好用,测试问题在网上和论坛里找的,不是原创。
测评结果 Qwen虐爆其他国产大模型,当然我的问题集很小众也很局限,期待大佬测出更全面的排名。
测试结果:
==================================================
测试结果汇总
==================================================
第 1 名: Qwen/Qwen2.5-72B-Instruct-128K
总分: 18/30
题目 1 得分: 0/3
回答记录: ['12.0', '12.0', '12.0']
题目 2 得分: 3/3
回答记录: ['B', 'B', 'B']
题目 3 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 4 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 5 得分: 0/3
回答记录: ['D', 'D', 'D']
题目 6 得分: 0/3
回答记录: ['A', 'A', 'A']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 2 名: Qwen/Qwen2.5-72B-Instruct
总分: 18/30
题目 1 得分: 0/3
回答记录: ['12', '12.0', '12']
题目 2 得分: 3/3
回答记录: ['B', 'B', 'B']
题目 3 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 4 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 5 得分: 0/3
回答记录: ['D', 'D', 'D']
题目 6 得分: 0/3
回答记录: ['A', 'C', 'A']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 3 名: LoRA/Qwen/Qwen2.5-72B-Instruct
总分: 18/30
题目 1 得分: 0/3
回答记录: ['12.0', '12.0', '12']
题目 2 得分: 3/3
回答记录: ['B', 'B', 'B']
题目 3 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 4 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 5 得分: 0/3
回答记录: ['D', 'D', 'D']
题目 6 得分: 0/3
回答记录: ['C', 'C', 'C']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 4 名: deepseek-ai/DeepSeek-V2.5
总分: 15/30
题目 1 得分: 2/3
回答记录: ['12', '14.4', '14.4']
题目 2 得分: 3/3
回答记录: ['B', 'B', 'B']
题目 3 得分: 2/3
回答记录: ['C', 'C', 'B']
题目 4 得分: 1/3
回答记录: ['C', 'B', 'B']
题目 5 得分: 1/3
回答记录: ['C', 'D', 'B']
题目 6 得分: 0/3
回答记录: ['B', 'B', 'C']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 0/3
回答记录: ['D', 'D', 'D']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 5 名: Qwen/QwQ-32B-Preview
总分: 14/30
题目 1 得分: 0/3
回答记录: ['12', '12', '12']
题目 2 得分: 0/3
回答记录: ['C', 'C', 'D']
题目 3 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 4 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 5 得分: 2/3
回答记录: ['C', 'C', 'B']
题目 6 得分: 0/3
回答记录: ['C', 'C', 'C']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 0/3
回答记录: ['D', 'D', 'D']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 6 名: Qwen/Qwen2.5-Coder-32B-Instruct
总分: 12/30
题目 1 得分: 3/3
回答记录: ['14.4', '14.4', '14.4']
题目 2 得分: 3/3
回答记录: ['B', 'B', 'B']
题目 3 得分: 0/3
回答记录: ['B', 'B', 'B']
题目 4 得分: 0/3
回答记录: ['B', 'B', 'B']
题目 5 得分: 0/3
回答记录: ['D', 'D', 'D']
题目 6 得分: 0/3
回答记录: ['C', 'A', 'C']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 0/3
回答记录: ['A', 'A', 'A']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 7 名: TeleAI/TeleChat2
总分: 12/30
题目 1 得分: 0/3
回答记录: ['12', '12', '12']
题目 2 得分: 3/3
回答记录: ['B', 'B', 'B']
题目 3 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 4 得分: 0/3
回答记录: ['0.95', '0.95', '0.95']
题目 5 得分: 0/3
回答记录: ['无响应', '无响应', '无响应']
题目 6 得分: 0/3
回答记录: ['要解决这个问题,我们可以通过设立方程来分析。', '要解决这个问题,我们可以通过设立方程来分析。', '要解决这个问题,我们可以通过设立方程来分析。']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 0/3
回答记录: ['A', 'A', 'A']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 8 名: Pro/THUDM/glm-4-9b-chat
总分: 10/30
题目 1 得分: 0/3
回答记录: ['12', '12', '12']
题目 2 得分: 0/3
回答记录: ['C', 'C', 'D']
题目 3 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 4 得分: 0/3
回答记录: ['B', 'B', 'B']
题目 5 得分: 0/3
回答记录: ['B', 'B', 'B']
题目 6 得分: 0/3
回答记录: ['C', 'C', 'C']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 1/3
回答记录: ['C', 'A', 'A']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 9 名: Pro/Qwen/Qwen2.5-Coder-7B-Instruct
总分: 9/30
题目 1 得分: 0/3
回答记录: ['15', '12', '15']
题目 2 得分: 1/3
回答记录: ['A', 'B', 'A']
题目 3 得分: 1/3
回答记录: ['C', 'D', 'D']
题目 4 得分: 1/3
回答记录: ['B', 'B', 'C']
题目 5 得分: 0/3
回答记录: ['A', 'D', 'D']
题目 6 得分: 0/3
回答记录: ['A', 'B', 'A']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 0/3
回答记录: ['B', 'B', 'D']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
第 10 名: 01-ai/Yi-1.5-34B-Chat-16K
总分: 7/30
题目 1 得分: 0/3
回答记录: ['15', '15', '15']
题目 2 得分: 1/3
回答记录: ['C', 'C', 'B']
题目 3 得分: 0/3
回答记录: ['B', 'B', 'B']
题目 4 得分: 0/3
回答记录: ['B', 'B', 'B']
题目 5 得分: 0/3
回答记录: ['B', 'B', 'B']
题目 6 得分: 0/3
回答记录: ['A', 'B', 'B']
题目 7 得分: 3/3
回答记录: ['D', 'D', 'D']
题目 8 得分: 0/3
回答记录: ['D', 'D', 'D']
题目 9 得分: 3/3
回答记录: ['C', 'C', 'C']
题目 10 得分: 0/3
回答记录: ['C', 'C', 'C']
测试代码:
import requests
import json
from collections import defaultdict
import time
from datetime import datetime
import re
# API配置
API_TOKEN = "用自己的key"
BASE_URL = "https://api.siliconflow.cn/v1/chat/completions"
# 测试模型列表
MODELS = [
"Qwen/QwQ-32B-Preview",
"Qwen/Qwen2.5-Coder-32B-Instruct",
"Qwen/Qwen2.5-72B-Instruct-128K",
"Qwen/Qwen2.5-72B-Instruct",
"deepseek-ai/DeepSeek-V2.5",
"TeleAI/TeleChat2",
"01-ai/Yi-1.5-34B-Chat-16K",
"Pro/Qwen/Qwen2.5-Coder-7B-Instruct",
"LoRA/Qwen/Qwen2.5-72B-Instruct",
"Pro/THUDM/glm-4-9b-chat"
]
# 测试问题和标准答案
TEST_CASES = [
{
"question": "'问题:72, 36, 24, 18, ?' 给出问号位置的答案,他是一个整数或小数,你只用输出这个数,不要多输出任何东西",
"answer": "14.4"
},
{
"question": "老李每天早晨9点准时出门散步锻炼身体。他以3千米每小时的速度步行6千米,其中每走20分钟休息5分钟。那么老李锻炼到什么时候回家?\nA 11点20分\nB 11点25分\nC 11点30分\nD 11点45分\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "B"
},
{
"question": "正值毕业季,306宿舍有A、B、C、D四位男同学,他们准备找班主任宋老师合影,若要求宋老师坐正中间,A、B两位同学不能挨着坐,那么总共有多少种坐法?\nA 8种\nB 12种\nC 16种\nD 24种\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "C"
},
{
"question": "一商品的进价比上月低了5%,但超市仍按上月售价销售,其利润率提高了6个百分点,则超市上月销售该商品的利润率为多少?\nA 12%\nB 13%\nC 14%\nD 15%\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "C"
},
{
"question": "甲、乙、丙三人均每隔一定时间去一次健身房锻炼。甲每隔2天去一次,乙每隔4天去一次,丙每7天去一次。4月10日三人相遇,下一次相遇是哪天?\nA 5月28日\nB 6月5日\nC 7月24日\nD 7月25日\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "C"
},
{
"question": "现有浓度为12%和24%的盐水各若干克,将其混合后加入50克水,配制成了浓度为18%的盐水600克,则原12%和24%的盐水质量之比是:\nA 6:5\nB 1:1\nC 5:6\nD 4:7\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "D"
},
{
"question": "使用自然语言表述算法的缺点不包括以下哪项?\nA 容易有歧义性\nB 语句太长\nC 有串行性很难清晰表示\nD 便于翻译成计算机程序\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "D"
},
{
"question": "以下关于使用特定程序设计语言表述算法的论述中,不正确的是?\nA 用特定程序设计语言编写的算法限制了与其他算法设计人员的交流\nB 需大量时间熟悉和掌握\nC 不会干扰算法设计的思路\nD 需考虑语法细节,忽视算法本质\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "C"
},
{
"question": "以下不属于算法的基本特征的是?\nA 有穷性\nB 确定性\nC 可读性\nD 算法有输入输出\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "C"
},
{
"question": "给定递归方程T(1)=0, T(2)=1, T(n)=2T(n/2)+2(当n>2时),其时间复杂度是?\nA O(1)\nB O(n)\nC O(nlog2(n))\nD O(n^2)\n注意,你的回复只能是以下四个中的一个:A B C D",
"answer": "B"
}
]
class ModelTester:
def __init__(self):
self.scores = defaultdict(lambda: defaultdict(int))
self.responses = defaultdict(lambda: defaultdict(list))
def call_api(self, model, question):
"""调用API获取模型回答"""
headers = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# 在问题中添加明确的输出格式要求
if "注意,你的回复只能是以下四个中的一个:A B C D" in question:
prompt = question + "\n请直接回答选项字母,不要解释。"
else:
prompt = question + "\n请直接给出答案,不要解释过程。"
payload = {
"model": model,
"messages": [
{
"role": "user",
"content": prompt
}
],
"stream": False,
"max_tokens": 512,
"temperature": 0.7,
"top_p": 0.7,
"top_k": 50,
"frequency_penalty": 0.5,
"n": 1,
"response_format": {"type": "text"}
}
try:
response = requests.post(BASE_URL, json=payload, headers=headers, timeout=30)
response.raise_for_status()
return self.clean_response(response.json()["choices"][0]["message"]["content"])
except Exception as e:
print(f"API调用错误: {str(e)}")
return None
def clean_response(self, response):
"""清理和规范化AI的回答"""
if response is None:
return None
# 去除所有空白字符
response = response.strip()
# 如果回答包含多行,只取第一行
response = response.split('\n')[0]
# 去除所有解释性文字
if response.upper() in ['A', 'B', 'C', 'D']:
return response.upper()
# 对于数字答案,提取第一个数字(包括小数)
number_match = re.search(r'-?\d*\.?\d+', response)
if number_match:
return number_match.group()
return response
def check_answer(self, model_answer, correct_answer):
"""检查答案是否正确"""
if model_answer is None:
return False
try:
# 统一转换为大写进行比较
model_answer = str(model_answer).strip().upper()
correct_answer = str(correct_answer).strip().upper()
# 对于数字答案,进行数值比较
if re.match(r'-?\d*\.?\d+', correct_answer):
try:
return abs(float(model_answer) - float(correct_answer)) < 0.0001
except ValueError:
return False
# 对于选择题答案,直接比较字母
return model_answer == correct_answer
except Exception as e:
print(f"答案比较错误: {str(e)}")
return False
def test_model(self):
"""运行所有测试"""
start_time = datetime.now()
print(f"测试开始时间: {start_time.strftime('%Y-%m-%d %H:%M:%S')}")
for model in MODELS:
print(f"\n{'=' * 50}")
print(f"测试模型: {model}")
for test_idx, test_case in enumerate(TEST_CASES):
question = test_case["question"]
correct_answer = test_case["answer"]
print(f"\n问题 {test_idx + 1}: {question}")
print(f"标准答案: {correct_answer}")
for attempt in range(3):
print(f"\n尝试 {attempt + 1}/3:", end=" ")
response = self.call_api(model, question)
if response is None:
print("❌ 无响应")
self.responses[model][test_idx].append("无响应")
continue
self.responses[model][test_idx].append(response)
if self.check_answer(response, correct_answer):
print(f"✅ 正确 - 回答: {response}")
self.scores[model][test_idx] += 1
else:
print(f"❌ 错误 - 回答: {response}")
time.sleep(1) # API限制
print(f"\n当前题目得分: {self.scores[model][test_idx]}/3")
self.print_results(start_time)
def print_results(self, start_time):
"""打印测试结果"""
print("\n" + "=" * 50)
print("测试结果汇总")
print("=" * 50)
# 计算总分
total_scores = {}
for model in MODELS:
total_scores[model] = sum(self.scores[model].values())
# 排序并显示结果
sorted_scores = sorted(total_scores.items(), key=lambda x: x[1], reverse=True)
for rank, (model, score) in enumerate(sorted_scores, 1):
print(f"\n第 {rank} 名: {model}")
print(f"总分: {score}/{len(TEST_CASES) * 3}")
# 显示每道题的详细得分
for test_idx in range(len(TEST_CASES)):
print(f"题目 {test_idx + 1} 得分: {self.scores[model][test_idx]}/3")
print("回答记录:", self.responses[model][test_idx])
end_time = datetime.now()
duration = end_time - start_time
print(f"\n测试结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"总耗时: {duration}")
def main():
tester = ModelTester()
tester.test_model()
if __name__ == "__main__":
main()