抛砖引玉,国产ai测试,硅基流动

最重要的说前面:我是小白,没技术,别喷,真的会哭。。。。。。

突发奇想,写个脚本(大部分功劳是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()

图穷匕见:AFF 听说幸运的人都身体本能地点一下哎,你不试试吗?

小声表示,deepseek也很不错,经常用的国产大模型,平时在app上使用时,个人体验来说:glm,通义,deepseek比较好,deepseek无法version.

4 个赞

qwen屠榜??

图穷匕见:AFF 硅基流动统一登录

1 个赞

大帅哥的AFF 那不得不注册了

水哥来了tieba_024

:tieba_087: 我就是蹭蹭,没事的

你快点去学习

哈哈哈 :smiling_face_with_three_hearts: :kissing_heart:

走个aff,硅宝国产o1,好用还便宜,注册送2000万tokens,硅基流动统一登录 AFF

这个怎么用呀,我也是小白,注册了不知道怎么用

入门版:

谢谢大佬,你就是我的神啊

glm啥的可以去智谱官网,硅基流动的有点旧了