企业网站建设主要考虑哪些山西seo推广
2026/5/21 15:15:44 网站建设 项目流程
企业网站建设主要考虑哪些,山西seo推广,黑龙江新闻媒体求助电话,kuler 网站我们究竟该如何评估大语言模型#xff08;LLMs#xff09;#xff1f; 这是一个看似简单的问题#xff0c;但往往会引出一场更为宏大的讨论。 在我为项目提供建议或参与协作时#xff0c;被问到最多的问题之一就是#xff1a;如何在不同模型之间做出选择#xff0c;以…我们究竟该如何评估大语言模型LLMs这是一个看似简单的问题但往往会引出一场更为宏大的讨论。在我为项目提供建议或参与协作时被问到最多的问题之一就是如何在不同模型之间做出选择以及如何理解现有的各种评测结果。当然还包括在微调或开发我们自己的模型时如何衡量进展。正因为这个问题被反复提及我觉得分享一份关于人们用于比较大语言模型的主要评估方法的简要概览或许会很有帮助。当然LLM 评估是一个非常庞大的主题不可能在单一资源中被全面覆盖但我认为拥有一张关于这些主要方法的清晰“心智地图”会让我们更容易解读各种基准测试、排行榜和论文。我最初计划将这些评估技术纳入我即将出版的书《从零构建推理模型》中但它们最终有些超出了该书的主要范围。这本书本身更侧重于基于验证器的评估。因此我想把这些内容作为一篇更长的文章并配以从零开始的代码示例来分享会是一个不错的选择。在《从零构建推理模型》中我采取了一种动手实践的方法从零开始构建一个推理型大语言模型。如果你喜欢《从零构建大语言模型》那么这本书在“从零开始、纯 PyTorch 构建”的写作风格上与之类似。推理是近年来提升大语言模型能力中最令人兴奋、也最重要的进展之一但如果你只是听到“推理”这个词并在理论层面阅读相关内容它同样也是最容易被误解的概念之一。因此在这本书中我采取了一种从零开始、动手实践的方式来构建一个推理型大语言模型这本书目前处于早期访问阶段已经有 100 多页内容上线。我刚刚完成了另外 30 页目前正在由排版团队处理中。如果你加入了早期访问计划非常感谢你的支持当这些内容上线时你应该会收到一封邮件通知。PS最近 LLM 研究领域发生了很多事情。我仍在努力追赶不断增长的论文书签列表并计划在下一篇文章中重点介绍其中一些最有趣的工作。现在让我们来讨论四种主要的 LLM 评估方法并结合从零开始的代码实现更好地理解它们的优缺点。理解用于评估大语言模型的主要方法在实践中评估已训练的大语言模型通常有四种常见方式多项选择、验证器、排行榜以及 LLM 裁判如下图所示。研究论文、市场材料、技术报告以及模型卡这是针对 LLM 的一种技术报告形式通常会包含来自其中两类或更多类别的评测结果。此外这里介绍的四个类别可以进一步归为两大类基于基准的评估和基于判断的评估如上图所示。此外还有一些其他指标例如训练损失、困惑度和奖励值但它们通常用于模型开发过程中的内部评估。接下来的小节将对这四种方法分别进行简要概述和示例说明。方法一评估答案选择准确率我们从一种基于基准的方法开始多项选择问答。从历史上看最广泛使用的评估方法之一是多项选择基准测试例如 MMLUMassive Multitask Language Understanding 的缩写。为了说明这种方法图 2 展示了一个来自 MMLU 数据集的代表性任务。图 2通过将 LLM 的多项选择预测与数据集中给出的正确答案进行比较对模型在 MMLU 上进行评估图 2 只展示了 MMLU 数据集中的一个示例。完整的 MMLU 数据集包含 57 个学科从高中数学到生物学总计约 1.6 万道多项选择题其性能通常以准确率来衡量例如如果 16,000 道题中有 14,000 道答对则准确率为 87.5%。像 MMLU 这样的多项选择基准测试以一种直接、可量化的方式测试 LLM 的知识回忆能力类似于标准化考试、学校考试或理论驾驶考试。需要注意的是图 2 展示的是一种简化版本的多项选择评估方法即直接将模型预测的答案字母与正确答案进行比较。还有两种同样流行的方法它们涉及对数概率评分。我已经在 GitHub 上实现了这些方法。由于这些方法建立在本文解释的概念之上我建议在读完本文后再查看。接下来的小节将展示如何在代码中实现图 2 所示的 MMLU 评分方法。1.2 加载模型首先在我们能够在 MMLU 上评估模型之前需要加载一个预训练模型。在这里我们将使用一个纯 PyTorch 实现的、从零构建的 Qwen3 0.6B 模型它只需要大约 1.5 GB 的内存。请注意Qwen3 模型的具体实现细节在这里并不重要我们只是将它视为一个需要被评估的 LLM。不过如果你感兴趣可以在我之前的文章《从零理解与实现 Qwen3》中找到完整的从零实现讲解其源代码也可以在 GitHub 上获取。为了避免复制粘贴大量的 Qwen3 源代码我们从我的 reasoning_from_scratch Python 库中直接导入它该库可以通过以下方式安装pip install reasoning_from_scratch或者uv add reasoning_from_scratch代码块 1加载一个预训练模型from pathlib import Pathimport torchfrom reasoning_from_scratch.ch02 import get_devicefrom reasoning_from_scratch.qwen3 import ( download_qwen3_small, Qwen3Tokenizer, Qwen3Model, QWEN_CONFIG_06_B)device get_device()# Set matmul precision to high to # enable Tensor Cores on compatible GPUstorch.set_float32_matmul_precision(high)# Uncomment the following line # if you encounter device compatibility issues# device cpu# Use the base model by defaultWHICH_MODEL baseif WHICH_MODEL base: download_qwen3_small( kindbase, tokenizer_onlyFalse, out_dirqwen3 ) tokenizer_path Path(qwen3) / tokenizer-base.json model_path Path(qwen3) / qwen3-0.6B-base.pth tokenizer Qwen3Tokenizer(tokenizer_file_pathtokenizer_path)elif WHICH_MODEL reasoning: download_qwen3_small( kindreasoning, tokenizer_onlyFalse, out_dirqwen3 ) tokenizer_path Path(qwen3) / tokenizer-reasoning.json model_path Path(qwen3) / qwen3-0.6B-reasoning.pth tokenizer Qwen3Tokenizer( tokenizer_file_pathtokenizer_path, apply_chat_templateTrue, add_generation_promptTrue, add_thinkingTrue, )else: raise ValueError(fInvalid choice: WHICH_MODEL{WHICH_MODEL})model Qwen3Model(QWEN_CONFIG_06_B)model.load_state_dict(torch.load(model_path))model.to(device)# Optionally enable model compilation for potential performance gainsUSE_COMPILE Falseif USE_COMPILE: torch._dynamo.config.allow_unspec_int_on_nn_module True model torch.compile(model)1.3 检查生成的答案字母在这一节中我们将实现最简单、也可能是最直观的一种 MMLU 评分方法它依赖于检查模型生成的多项选择答案字母是否与正确答案一致。这与前面图 2 中所展示的过程是类似的下面为了方便再次展示。图 3通过将 LLM 的多项选择预测与数据集中给出的正确答案进行比较对模型在 MMLU 上进行评估为此我们将使用一个来自 MMLU 数据集的示例example { question: ( How many ways are there to put 4 distinguishable balls into 2 indistinguishable boxes? ), “choices”: [7, 11, 16, 8], “answer”: D,}接下来我们定义一个函数用于格式化 LLM 的提示词。代码块 2格式化提示词def format_prompt(example): return ( f{example[question]}\n fA. {example[choices][0]}\n fB. {example[choices][1]}\n fC. {example[choices][2]}\n fD. {example[choices][3]}\n Answer: )# Trailing space in Answer: encourages a single-letter next token让我们在这个 MMLU 示例上执行该函数以直观了解格式化后的 LLM 输入是什么样子prompt format_prompt(example)print(prompt)输出结果是How many ways are there to put 4 distinguishable balls into 2indistinguishable boxes?A. 7B. 11C. 16D. 8Answer:如上所示该提示词向模型提供了一组不同的答案选项并以“Answer: ”结尾从而鼓励模型生成正确的答案。虽然这并非严格必要但有时在输入中额外提供一些示例问题及其正确答案也会有所帮助这样模型可以观察到期望的解题方式。例如提供 5 个示例的情况也被称为 5-shot MMLU。不过对于当前一代的 LLM 来说即使是基础模型也已经相当强大因此通常不需要这样做。加载不同的 MMLU 样本你可以通过 datasets 库直接加载 MMLU 数据集中的示例可通过 pip install datasets 或 uv add datasets 安装from datasets import load_datasetconfigs get_dataset_config_names(cais/mmlu)dataset load_dataset(cais/mmlu, high_school_mathematics)# Inspect the first example from the test set:example dataset[test][0]print(example)在上面的示例中我们使用了 “high_school_mathematics” 子集如果想获取其他子集的列表可以使用下面的代码from datasets import get_dataset_config_namessubsets get_dataset_config_names(cais/mmlu)print(subsets)接下来我们对提示词进行分词tokenize并将其包装成一个 PyTorch 张量对象作为 LLM 的输入prompt_ids tokenizer.encode(prompt)prompt_fmt torch.tensor(prompt_ids, devicedevice)# Add batch dimension:prompt_fmt prompt_fmt.unsqueeze(0)在完成上述准备工作之后我们定义下面的主评分函数。该函数会生成少量 token此处默认生成 8 个 token并提取模型输出中首次出现的字母 A/B/C/D。代码块 3提取生成的答案字母from reasoning_from_scratch.ch02_ex import ( generate_text_basic_stream_cache)def predict_choice( model, tokenizer, prompt_fmt, max_new_tokens8): pred None for t in generate_text_basic_stream_cache( modelmodel, token_idsprompt_fmt, max_new_tokensmax_new_tokens, eos_token_idtokenizer.eos_token_id, ): answer tokenizer.decode(t.squeeze(0).tolist()) for letter in answer: letter letter.upper() # stop as soon as a letter appears if letter in ABCD: pred letter break if pred: break return pred接下来我们可以使用上面代码块中的函数来检查生成的答案字母方式如下pred1 predict_choice(model, tokenizer, prompt_fmt)print( fGenerated letter: {pred1}\n fCorrect? {pred1 example[answer]})结果如下所示Generated letter: CCorrect? False正如我们所看到的在这个示例中生成的答案是不正确的False。这只是 MMLU 中 high_school_mathematics 子集的 270 个示例之一。下面的截图图 4展示了在整个子集上运行时基础模型和推理模型的整体性能。相关代码可以在 GitHub 上找到。图 4基础模型与推理模型在 MMLU high_school_mathematics 子集上的表现假设每个问题的答案概率是均匀分布的那么一个随机猜测者以相同概率选择 A、B、C 或 D的期望准确率为 25%。因此无论是基础模型还是推理模型在这里的表现都并不算好。多项选择答案格式需要注意的是本节为了说明问题实现的是一种简化版本的多项选择评估方式即直接将模型预测的答案字母与正确答案进行比较。在实际应用中更常见的是一些变体方法例如基于对数概率log-probability的评分方式即衡量模型对每一个候选答案的偏好程度而不仅仅是检查最终选择的字母。我们将在第 4 章中讨论基于概率的评分方法。对于推理模型而言评估还可以包括在将正确答案作为输入提供时模型生成该答案的可能性。图 5其他 MMLU 评分方法的说明与实现已在 GitHub 上分享不过无论我们使用哪一种 MMLU 评分变体这类评估的本质仍然是检查模型是否从预定义的答案选项中做出了选择。像 MMLU 这样的多项选择基准测试的一个局限性在于它们只衡量 LLM 在预定义选项中进行选择的能力。因此除了用来检查模型相较于基础模型遗忘了多少知识之外它们并不太适合用于评估推理能力。同时这类评估也无法反映模型在自由文本写作或真实世界任务中的实用性。尽管如此多项选择基准测试依然是简单且有用的诊断工具。例如一个很高的 MMLU 分数并不一定意味着模型在实际应用中很强但一个很低的分数往往可以揭示潜在的知识缺口。方法二使用验证器检查答案与上一节讨论的多项选择问答相关基于验证的评估方法同样通过准确率指标来量化 LLM 的能力。然而与多项选择基准不同的是验证方法允许 LLM 给出自由形式的答案。随后我们会从模型输出中提取相关的答案部分并使用所谓的验证器verifier将该答案部分与数据集中提供的正确答案进行比较如下图所示。图 6在自由形式问答中使用基于验证的方法评估 LLM。模型生成一个自由形式的答案可能包含多个推理步骤以及一个最终被框出的答案该答案会被提取出来并与数据集中给出的正确答案进行比较当我们将提取出的答案与给定答案进行比较时如上图所示还可以借助外部工具例如代码解释器或类似计算器的工具/软件。这种方法的缺点在于它只能应用于那些容易且理想情况下是确定性地验证的领域例如数学和代码。此外这种方法可能引入额外的复杂性和依赖关系并且可能会将一部分评估负担从模型本身转移到外部工具上。然而由于它允许我们以编程方式生成无限数量的数学题变体并且能够从逐步推理中获益因此它已经成为推理模型评估与开发中的一个基石。我在《从零构建推理模型》这本书中用了整整 35 页系统性地介绍这一主题因此这里我将跳过代码实现。我上周已经提交了该章节。如果你拥有早期访问版本当它上线时你会收到一封邮件并可以阅读。在此之前你可以在 GitHub 上找到逐步讲解的代码【代码】。图 7基于验证的评估方法示例完整内容可在 GitHub 上查看【代码】https://github.com/rasbt/reasoning-from-scratch/blob/main/ch03/01_main-chapter-code/ch03_main.ipynb方法三通过偏好与排行榜比较模型到目前为止我们介绍了两种可以提供易于量化指标例如模型准确率的评估方法。然而上述方法都无法以更整体的方式评估 LLM例如对回答风格的判断。本节将讨论一种基于判断的方法——LLM 排行榜如下图所示。图 8本书所涵盖主题的心智模型重点突出本附录中介绍的基于判断和基于基准的评估方法。在前一节已经介绍了基于基准的方法多项选择、验证器之后这里我们引入基于判断的方法来衡量 LLM 的性能本小节重点关注排行榜这里描述的排行榜方法是一种基于判断的方式模型并非依据准确率或其他固定基准分数进行排名而是依据用户或其他 LLM对模型输出的偏好进行排序。一个广受欢迎的排行榜是LM Arena原 Chatbot Arena用户会对两个由用户选择或匿名的模型生成的回答进行对比并投票选择自己更偏好的一个如下图所示。图 9一个基于判断的排行榜界面示例LM Arena。两个 LLM 接收相同的提示其回答并排展示用户为自己偏好的答案投票这些偏好投票会被汇总并形成一个排行榜根据用户偏好对不同模型进行排序。下图展示的是截至 2025 年 10 月 3 日访问时的 LM Arena 排行榜快照。图 10LM Arena 排行榜截图展示了基于用户在文本任务上的偏好而排名靠前的 LLM在本节的其余部分我们将实现一个简单的排行榜示例。为了构造一个具体示例假设用户在类似图 9 的设置中对不同 LLM 进行提问。下面的列表表示成对投票结果其中第一个模型是胜者votes [ (GPT-5, Claude-3), (GPT-5, Llama-4), (Claude-3, Llama-3), (Llama-4, Llama-3), (Claude-3, Llama-3), (GPT-5, Llama-3),]在上面的列表中每一个元组表示两个模型之间的一次偏好比较格式为胜者败者。因此“GPT-5”“Claude-3”表示用户更偏好 GPT-5 的回答而不是 Claude-3。接下来我们将把这些投票结果转换成一个排行榜。为此我们将使用著名的Elo 评分系统该系统最初是为国际象棋选手排名而设计的。在查看具体代码实现之前先简要说明其工作原理每个模型从一个基础分数开始。之后每进行一次比较并产生一次偏好投票模型的评分就会更新。在 Elo 系统中更新幅度取决于结果的“意外程度”。具体来说如果用户偏好一个当前评分较低的模型而非一个高评分模型那么该模型将获得较大的分数提升从而在排行榜中上升。相反如果它击败的是一个低评分对手分数提升就会较小。如果模型失败则会以类似方式扣除分数。将成对投票转换为排行榜的代码如下所示。代码块 4构建排行榜def elo_ratings(vote_pairs, k_factor32, initial_rating1000): # Initialize all models with the same base rating ratings { model: initial_rating for pair in vote_pairs for model in pair } # Update ratings after each match for winner, loser in vote_pairs: # Expected score for the current winner expected_winner 1.0 / ( 1.0 10 ** ( (ratings[loser] - ratings[winner]) / 400.0 ) ) # k_factor determines sensitivity of updates ratings[winner] ( ratings[winner] k_factor * (1 - expected_winner) ) ratings[loser] ( ratings[loser] k_factor * (0 - (1 - expected_winner)) ) return ratings上述 elo_ratings 函数以投票列表作为输入并生成一个排行榜例如ratings elo_ratings(votes, k_factor32, initial_rating1000)for model in sorted(ratings, keyratings.get, reverseTrue): print(f{model:8s} : {ratings[model]:.1f})最终得到如下排行榜其中分数越高表示模型表现越好GPT-5 : 1043.7Claude-3 : 1015.2Llama-4 : 1000.7Llama-3 : 940.4那么这一过程是如何运作的呢对于每一对比较我们都会使用下面的公式计算胜者的期望得分expected_winner 1 / (1 10 ** ((rating_loser - rating_winner) / 400))这个 expected_winner 表示在当前评分下模型在无平局情形中获胜的预测概率。它决定了评分更新的幅度。首先所有模型的初始评分都是 initial_rating 1000。如果两者评分相同则 expected_winner 0.5表示势均力敌。在这种情况下评分更新如下胜者评分 k_factor × (1 − 0.5) 胜者评分 16败者评分 k_factor × (0 − (1 − 0.5)) 败者评分 − 16如果一个明显的热门模型评分很高获胜则 expected_winner ≈ 1。此时胜者只会获得很小的分数提升败者也只会损失很少胜者评分 32 × (1 − 0.99) 胜者评分 0.32败者评分 32 × (0 − (1 − 0.99)) 败者评分 − 0.32而如果一个冷门模型评分较低获胜则 expected_winner ≈ 0胜者将获得几乎全部的 k_factor 分数而败者将损失近似数量的分数胜者评分 32 × (1 − 0.01) 胜者评分 31.68败者评分 32 × (0 − (1 − 0.01)) 败者评分 − 31.68顺序的重要性Elo 方法会在每一场对比之后立即更新评分因此后续结果建立在已经更新过的评分之上。这意味着即便结果集合相同只要呈现顺序不同最终分数也可能略有差异。这种影响通常较小但在冷门结果出现在早期或晚期时尤其明显。为了减弱顺序效应可以对投票对进行随机打乱多次运行 elo_ratings 函数并对最终评分取平均值。像上述这样的排行榜方法相比静态基准分数能够提供更动态的模型质量视角。然而其结果也可能受到用户群体、提示词选择以及投票偏差的影响。基准和排行榜同样可能被“刷榜”而用户也可能更多基于风格而非正确性来选择答案。此外与自动化基准测试工具相比排行榜无法为新模型变体提供即时反馈因此在模型的主动开发过程中使用起来更为困难。其他排序方法LM Arena 最初使用的正是本节介绍的 Elo 方法但最近已经转向基于Bradley–Terry 模型的统计方法。Bradley–Terry 模型的主要优势在于其统计学基础使得我们可以构建置信区间来表达排名的不确定性。此外与 Elo 不同Bradley–Terry 模型会在整个数据集上进行联合估计从而避免了顺序效应。为了保持评分在一个熟悉的范围内Bradley–Terry 模型通常会被拟合为生成与 Elo 可比的数值。尽管排行榜已不再官方使用 Elo 评分但在 LLM 研究者和实践者中“Elo”这一术语仍被广泛用来指代模型间的比较。相关代码示例可在 GitHub 上找到【代码】。图 11Elo 与 Bradley–Terry 排名的对比源代码可在 GitHub 上获取【代码】方法四使用其他大语言模型对回答进行裁判式评估在早期大语言模型通常使用统计方法和基于启发式规则的方法进行评估其中包括一种名为 BLEU 的指标它是一种粗略衡量生成文本与参考文本匹配程度的方法。这类指标的问题在于它们要求精确的词级匹配无法考虑同义词、措辞变化等情况。如果我们希望从整体上评判一段书面回答文本一个解决方案是使用上一节讨论的相对排序和排行榜方法。然而排行榜的一个缺点在于其基于偏好的比较本身具有主观性因为它依赖于人工反馈以及收集这些反馈所面临的挑战。一种相关的方法是使用另一个大语言模型并结合一个预定义的评分量表即评估准则将待评估模型的回答与参考答案进行比较并依据该量表对回答质量进行判断如图 12 所示。图 12LLM 裁判式评估示例。被评估的模型生成一个答案随后由另一个裁判 LLM 根据评分量表和给定的参考答案对其进行打分在实践中当裁判 LLM 足够强大时这种基于裁判的方法通常效果很好。常见的设置是通过 API 使用领先的专有 LLM例如 GPT-5 API当然也存在一些专门的裁判模型。例如众多案例之一是 Phudge但从本质上看这些专用模型大多只是经过微调的小模型使其评分行为接近专有 GPT 模型。裁判方法之所以效果显著其中一个原因在于评估一个答案通常比生成一个答案更容易。要在 Python 中以编程方式实现图 12 所示的裁判式模型评估我们可以选择在 PyTorch 中加载一个更大的 Qwen3 模型并使用评分量表以及我们希望评估的模型答案对其进行提示。或者我们也可以通过 API 使用其他 LLM例如 ChatGPT API 或 Ollama API。由于我们已经了解了如何在 PyTorch 中加载 Qwen3 模型为了让示例更有意思在本节剩余部分中我们将使用Ollama API在 Python 中实现图 12 所示的裁判式评估。具体来说我们将使用 OpenAI 提供的、参数规模为 200 亿的开源权重模型gpt-oss因为它在能力与效率之间提供了良好的平衡。关于 gpt-oss 的更多信息可以参考我之前的文章《From GPT-2 to gpt-oss: Analyzing the Architectural Advances》。https://magazine.sebastianraschka.com/p/from-gpt-2-to-gpt-oss-analyzing-the4.1 使用 Ollama 实现 LLM-as-a-Judge 方法Ollama 是一款高效的开源应用程序用于在个人电脑上运行大语言模型。它本质上是对开源的 llama.cpp 库的一层封装而 llama.cpp 使用纯 C/C 实现大语言模型以最大化运行效率。需要注意的是Ollama 仅用于使用 LLM 进行文本生成推理并不支持模型的训练或微调。要运行下面的代码请访问 Ollama 官方网站 https://ollama.com 并按照你所使用操作系统的说明完成安装• 对于 macOS 和 Windows 用户打开下载好的 Ollama 应用。如果系统询问是否安装命令行工具请选择“yes”。• 对于 Linux 用户请使用 Ollama 官网提供的安装命令。在实现模型评估代码之前我们首先需要下载 gpt-oss 模型并通过命令行验证 Ollama 是否可以正常工作。请在命令行终端而不是 Python 会话中执行以下命令以尝试运行 200 亿参数规模的 gpt-oss 模型ollama run gpt-oss:20b第一次执行该命令时占用约 14 GB 存储空间的 gpt-oss 200 亿参数模型将被自动下载。输出结果如下所示$ ollama run gpt-oss:20bpulling manifest pulling b112e727c6f1: 100% ▕██████████████████████▏ 13 GB pulling fa6710a93d78: 100% ▕██████████████████████▏ 7.2 KB pulling f60356777647: 100% ▕██████████████████████▏ 11 KB pulling d8ba2f9a17b3: 100% ▕██████████████████████▏ 18 B pulling 55c108d8e936: 100% ▕██████████████████████▏ 489 B verifying sha256 digest writing manifest removing unused layers success替代的 Ollama 模型请注意命令中的 gpt-oss:20b 指的是 200 亿参数规模的 gpt-oss 模型。使用该模型大约需要 13 GB 的内存。如果你的机器内存不足可以尝试使用更小的模型例如通过 ollama run qwen3:4b 运行 40 亿参数规模的 qwen3 模型它只需要大约 4 GB 内存。如果你的计算机性能更强也可以使用更大的 1200 亿参数 gpt-oss 模型只需将 gpt-oss:20b 替换为 gpt-oss:120b。不过需要注意该模型对计算资源的要求要高得多。当模型下载完成后你将看到一个命令行界面可以直接与模型进行交互。例如尝试向模型提问“What is 12?” What is 12?Thinking...User asks: “What is 12?” This is simple: answer 3. Provide explanation? Possibly ask for simplearithmetic. Provide answer: 3....done thinking.1 2 **3**你可以通过输入 /bye 结束 ollama run gpt-oss:20b 会话。在本节剩余部分中我们将使用 Ollama API。该方式要求 Ollama 在后台运行。可以通过以下三种方式之一实现在终端中运行 ollama serve 命令推荐。这会将 Ollama 后端作为服务器运行通常监听在 http://localhost:11434。需要注意的是模型只有在通过 API 调用时才会被加载。类似前面那样运行 ollama run gpt-oss:20b但不要通过 /bye 退出会话。正如前文所述这实际上是在本地 Ollama 服务器之上运行的一个最小封装。使用 Ollama 桌面应用。打开桌面应用会自动运行同一个后端并提供一个图形界面如前面的图 12 所示。图 13两种保持 Ollama 服务器或应用运行的方法以便我们可以在 Python 中通过 Ollama API 使用它Ollama 服务器 IP 地址Ollama 通过在本地启动一个类似服务器的进程来运行。如果你在终端中运行 ollama serve 时遇到错误提示Error: listen tcp 127.0.0.1:11434: bind: address already in use请尝试使用以下命令OLLAMA_HOST127.0.0.1:11435 ollama serve如果该地址仍然被占用可以继续递增端口号直到找到一个可用的地址。下面的代码用于在使用 Ollama 对上一节中生成的测试集回答进行评估之前验证 Ollama 会话是否正在正常运行。代码块 5检查 Ollama 是否正在运行import psutildef check_if_running(process_name): running False for proc in psutil.process_iter([name]): if process_name in proc.info[name]: running True break return runningollama_running check_if_running(ollama)if not ollama_running: raise RuntimeError( Ollama not running. Launch ollama before proceeding. )print(Ollama running:, check_if_running(ollama))请确保执行上述代码后输出显示 Ollama running: True。如果显示为 False请确认 ollama serve 命令或 Ollama 应用正在运行参见图 13。在本文接下来的部分中我们将通过 Python 使用 Ollama REST API与本地运行的 gpt-oss 模型进行交互。下面的 query_model 函数演示了如何使用该 API。代码块 6查询本地 Ollama 模型import jsonimport urllib.requestdef query_model( prompt, modelgpt-oss:20b, # If you used # OLLAMA_HOST127.0.0.1:11435 ollama serve # update the address below urlhttp://localhost:11434/api/chat): # Create the data payload as a dictionary: data { model: model, messages: [ {role: user, content: prompt} ], # Settings required for deterministic responses: options: { seed: 123, temperature: 0, num_ctx: 2048 } } # Convert the dictionary to JSON and encode it to bytes payload json.dumps(data).encode(utf-8) # Create a POST request and add headers request urllib.request.Request( url, datapayload, methodPOST ) request.add_header(Content-Type, application/json) response_data # Send the request and capture the streaming response with urllib.request.urlopen(request) as response: while True: line response.readline().decode(utf-8) if not line: break # Parse each line into JSON response_json json.loads(line) response_data response_json[message][content] return response_data下面是一个使用刚刚实现的 query_model 函数的示例ollama_model gpt-oss:20bresult query_model(What is 12?, ollama_model)print(result)返回结果为 “3”。由于默认设置不同这一结果与直接使用 ollama run 或 Ollama 应用时的输出可能略有差异。借助 query_model 函数我们可以使用包含评分量表的提示词让 gpt-oss 模型作为裁判根据参考答案对目标模型的回答按 1 到 5 分进行评分。我们使用的提示词如下所示代码块 7包含评分量表的提示词模板def rubric_prompt(instruction, reference_answer, model_answer): rubric ( You are a fair judge assistant. You will be given an instruction, a reference answer, and a candidate answer to evaluate, according to the following rubric:\n\n 1: The response fails to address the instruction, providing irrelevant, incorrect, or excessively verbose content.\n 2: The response partially addresses the instruction but contains major errors, omissions, or irrelevant details.\n 3: The response addresses the instruction to some degree but is incomplete, partially correct, or unclear in places.\n 4: The response mostly adheres to the instruction, with only minor errors, omissions, or lack of clarity.\n 5: The response fully adheres to the instruction, providing a clear, accurate, and relevant answer in a concise and efficient manner.\n\n Now here is the instruction, the reference answer, and the response.\n ) prompt ( f{rubric}\n fInstruction:\n{instruction}\n\n fReference Answer:\n{reference_answer}\n\n fAnswer:\n{model_answer}\n\n fEvaluation: ) return prompt其中rubric_prompt 中的 model_answer 代表我们实际要评估的目标模型所生成的回答。为了便于演示这里我们直接硬编码了一个合理的模型回答而不是动态生成。当然你也可以使用本文开头加载的 Qwen3 模型来生成真实的 model_answer。接下来我们生成传递给 Ollama 模型的完整提示词rendered_prompt rubric_prompt( instruction( If all birds can fly, and a penguin is a bird, can a penguin fly? ), reference_answer( Yes, according to the premise that all birds can fly, a penguin can fly. ), model_answer( Yes – under those premises a penguin would be able to fly. ))print(rendered_prompt)其输出如下所示You are a fair judge assistant. You will be given an instruction, areference answer, and a candidate answer to evaluate, according to thefollowing rubric:1: The response fails to address the instruction, providing irrelevant,incorrect, or excessively verbose content.2: The response partially addresses the instruction but contains majorerrors, omissions, or irrelevant details.3: The response addresses the instruction to some degree but isincomplete, partially correct, or unclear in places.4: The response mostly adheres to the instruction, with only minorerrors, omissions, or lack of clarity.5: The response fully adheres to the instruction, providing a clear,accurate, and relevant answer in a concise and efficient manner.Now here is the instruction, the reference answer, and the response.Instruction:If all birds can fly, and a penguin is a bird, can a penguin fly?Reference Answer:Yes, according to the premise that all birds can fly, a penguin canfly.Answer:Yes – under those premises a penguin would be able to fly.Evaluation:提示词以 “Evaluation: ” 结尾会促使模型生成评估结果。下面我们来看 gpt-oss:20b 模型是如何对该回答进行裁判的result query_model(rendered_prompt, ollama_model)print(result)输出结果如下**Score: 5**The candidate answer directly addresses the question, correctly applies the given premises, and concisely states that a penguin would be able to fly. It is accurate, relevant, and clear.正如我们所看到的该回答获得了最高分这是合理的因为它确实是正确的。尽管这只是一个手动演示的简单示例但我们可以将这一思路扩展例如在一个 for 循环中迭代地用评估数据集中的问题去查询目标模型例如前面加载的 Qwen3 模型再通过 gpt-oss 进行评估并计算平均得分。一个使用 gpt-oss 作为裁判、在 MATH-500 数据集上评估 Qwen3 模型的完整脚本可以在 GitHub 上找到。图 14在 MATH-500 数据集前 10 个样本上由 gpt-oss:20b 作为裁判对 Qwen3 0.6 基础模型与推理模型进行评估的对比结果https://github.com/rasbt/reasoning-from-scratch/tree/main/chF/04_llm-judge使用过程奖励模型对中间推理步骤进行评分与符号验证器和 LLM 裁判相关还有一类被称为过程奖励模型Process Reward ModelsPRMs的学习型模型。与裁判模型类似PRM 不仅可以评估最终答案还可以评估推理过程但与通用裁判不同的是它们专注于中间推理步骤。同时与通常只在结果层面进行符号正确性检查的验证器不同PRM 在强化学习训练过程中提供逐步的奖励信号。我们可以将 PRM 视为“步骤级裁判”它们主要用于训练而非纯粹的评估。在实践中PRM 很难在大规模场景下稳定训练。例如DeepSeek R1 并未采用 PRM而是结合了验证器来进行推理训练。与基于偏好的排行榜相比裁判式评估在可扩展性和一致性方面具有优势因为它不依赖于大量人工投票者。从技术上讲也可以用 LLM 裁判来替代排行榜背后的人工偏好评分。然而LLM 裁判同样存在与人工评审类似的弱点结果可能受到模型偏好、提示词设计以及回答风格的影响此外评估效果高度依赖于裁判模型和评分量表的选择其可复现性也不如固定基准测试。结论在本文中我们介绍了四种不同的评估方法多项选择、验证器、排行榜以及 LLM 裁判。我知道这是一篇篇幅较长的文章但希望它能帮助你全面了解当前 LLM 评估的主要方式。像这样从零开始的讲解虽然较为冗长但它有助于我们理解这些方法在底层是如何运作的从而更容易识别其弱点和改进空间。那么你可能会问“评估一个 LLM 的最佳方式是什么”遗憾的是并不存在唯一的最佳方法。正如我们所看到的每种方法都有不同的权衡取舍。简要总结如下多项选择() 在大规模运行时相对快速、成本较低() 标准化程度高论文或模型卡之间具有良好的可复现性(-) 主要衡量基础知识回忆能力(-) 无法反映 LLM 在真实世界中的使用方式验证器() 在存在标准答案的领域中提供标准化、客观的评分() 允许自由形式的回答对最终答案格式有一定约束() 若使用过程验证器或过程奖励模型还可以对中间步骤进行评分(-) 仅适用于可验证领域如数学或代码且构建高质量验证器并不容易(-) 仅基于结果的验证器无法评估推理质量竞技场式排行榜人工成对偏好() 直接回答“人们更偏好哪个模型”这一问题() 允许自由形式回答并隐式考虑风格、帮助性与安全性(-) 对人工而言成本高、耗时长(-) 衡量的是偏好而非正确性(-) 非平稳的人群分布会影响结果稳定性LLM-as-a-Judge() 可在多种任务上扩展() 允许自由形式回答(-) 依赖裁判模型自身的能力可通过模型集成提高鲁棒性(-) 强依赖评分量表的设计虽然我通常不太喜欢雷达图但在这里它确实有助于直观展示这些不同的评估维度如下图所示。图 15雷达图示意强调在评估 LLM 时需要关注多个维度以识别模型的优势与不足例如一个在多项选择基准上表现强劲的模型通常意味着它具备扎实的通用知识如果同时在验证器评估中得分也很高那么它很可能在技术问题上也能给出正确答案。然而如果该模型在 LLM 裁判和排行榜评估中表现较差那么它可能在写作或表达方面存在不足并可能需要一定程度的 RLHF。因此最佳的评估方式往往是多种方法的组合并且最好使用与你自身目标或业务问题直接相关的数据。例如如果你正在构建一个用于法律相关任务的 LLM那么运行 MMLU 等通用基准可以作为快速的合理性检查但最终仍应针对法律领域定制评估。虽然可以从公开基准入手但最终你应当使用自己的专有数据进行测试只有这样才能较为确信模型在训练阶段没有见过这些测试数据。无论如何模型评估都是一个非常重要且庞大的主题。希望本文能够帮助你理解这些主要评估方法的运作方式并在你下次查看或运行模型评估时提供一些有价值的参考。一如既往祝你折腾愉快学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询