大模型评估方法论:从基准测试到人类偏好的全面评估体系

评估:衡量模型能力的标尺 大模型评估是AI发展中最基础也最具挑战性的工作。没有好的评估方法,就无法判断技术进步,也无法做合理的模型选型。本文构建一个全面的大模型评估框架。 评估维度体系 能力维度 EVALUATION_DIMENSIONS = { "知识能力": { "MMLU-Pro": "多任务语言理解(学术知识)", "C-Eval": "中文综合能力", "BBH": "BIG-Bench Hard(推理)", "TruthfulQA": "真实性评估" }, "推理能力": { "GSM8K": "小学数学推理", "MATH": "高等数学推理", "GPQA": "研究生水平问答", "ARC": "科学推理" }, "代码能力": { "HumanEval": "Python代码生成", "MBPP": "基础编程", "SWE-bench": "软件工程任务", "LiveCodeBench": "实时编程竞赛" }, "语言能力": { "MT-Bench": "多轮对话", "AlpacaEval": "指令跟随", "IFEval": "指令执行评估" }, "安全对齐": { "AdvBench": "对抗性提示", "HarmBench": "有害行为测试", "BBQ": "偏见评估" } } 基准测试 标准化测试流程 class BenchmarkRunner: def __init__(self, model, config): self.model = model self.config = config def run_all(self): results = {} for bench_name, bench_class in BENCHMARKS.items(): results[bench_name] = self._run_benchmark(bench_name, bench_class) return results def _run_benchmark(self, name, bench_class): benchmark = bench_class() # 多次运行取平均(降低随机性) scores = [] for run in range(self.config.get("n_runs", 1)): score = self._single_run(benchmark) scores.append(score) return { "benchmark": name, "scores": scores, "mean": np.mean(scores), "std": np.std(scores), "details": self._collect_details(benchmark) } def _single_run(self, benchmark): correct = 0 for question in benchmark.questions: response = self.model.generate( question.prompt, temperature=0.0, # 贪婪解码,确保可复现 max_tokens=question.max_tokens ) if benchmark.check_answer(response, question.answer): correct += 1 return correct / len(benchmark.questions) 评估中的常见陷阱 class EvaluationPitfalls: pitfalls = { "数据污染": { "description": "测试集出现在训练数据中", "detection": "检查测试问题是否在训练数据中出现", "mitigation": "使用动态更新的测试集,如LiveCodeBench" }, "格式敏感性": { "description": "模型答案正确但格式不匹配", "detection": "人工检查错误样本", "mitigation": "使用灵活的答案匹配(正则/语义匹配)" }, "位置偏差": { "description": "多选题中模型偏好某些位置", "detection": "打乱选项顺序重新测试", "mitigation": "多次测试取平均" }, "提示敏感性": { "description": "不同prompt模板导致分数差异大", "detection": "用多种prompt模板测试", "mitigation": "报告多个模板的平均分" } } 人类偏好评估 LLM-as-Judge class LLMJudge: def __init__(self, judge_model="gpt-4o"): self.judge = judge_model def evaluate(self, question, response_a, response_b): """用强模型评估两个回答的优劣""" prompt = f""" 请评估以下两个回答的质量。 问题:{question} 回答A:{response_a} 回答B:{response_b} 评估维度(1-10分): 1. 准确性:信息是否正确 2. 完整性:是否充分回答了问题 3. 清晰度:表达是否清晰易懂 4. 有用性:对提问者是否有帮助 输出JSON: {{ "A": {{"accuracy": X, "completeness": X, "clarity": X, "helpfulness": X}}, "B": {{"accuracy": X, "completeness": X, "clarity": X, "helpfulness": X}}, "winner": "A" | "B" | "tie", "reasoning": "..." }} """ return self.judge.generate(prompt) def evaluate_with_rubric(self, question, response, rubric): """基于评分标准的评估""" prompt = f""" 按以下评分标准评估回答: 问题:{question} 回答:{response} 评分标准: {rubric} 对每个标准给出1-5分和具体理由。 """ return self.judge.generate(prompt) 人类评估 class HumanEvaluation: def __init__(self): self.evaluators = [] self.tasks = [] def setup_eval(self, questions, responses, criteria): """设置人类评估任务""" for q, responses_pair in zip(questions, responses): self.tasks.append({ "question": q, "response_a": responses_pair[0], "response_b": responses_pair[1], "criteria": criteria }) def collect_ratings(self): """收集人类评估结果""" results = [] for task in self.tasks: # 呈现给评估者 rating = self._present_to_evaluator(task) results.append(rating) # 计算一致性 agreement = self._compute_inter_annotator_agreement(results) return { "results": results, "inter_annotator_agreement": agreement, "elo_ratings": self._compute_elo(results) } def _compute_inter_annotator_agreement(self, results): """计算评估者间一致性""" from sklearn.metrics import cohen_kappa_score # 如果一致性<0.6,说明评估标准需要改进 return cohen_kappa_score(results[0], results[1]) Elo评分系统 class EloRatingSystem: def __init__(self, k=32): self.k = k self.ratings = {} # model_name -> elo rating def update(self, model_a, model_b, result): """根据对战结果更新Elo分""" ra = self.ratings.get(model_a, 1200) rb = self.ratings.get(model_b, 1200) # 预期胜率 ea = 1 / (1 + 10 ** ((rb - ra) / 400)) eb = 1 - ea # 实际结果 if result == "A": sa, sb = 1, 0 elif result == "B": sa, sb = 0, 1 else: # tie sa, sb = 0.5, 0.5 # 更新分数 self.ratings[model_a] = ra + self.k * (sa - ea) self.ratings[model_b] = rb + self.k * (sb - eb) def get_rankings(self): return sorted(self.ratings.items(), key=lambda x: x[1], reverse=True) 专项评估 代码评估 class CodeEvaluation: def evaluate(self, model, problems): """代码生成评估""" results = { "pass@1": 0, "pass@10": 0, "pass@100": 0, "syntax_error_rate": 0, "runtime_error_rate": 0 } for problem in problems: # 生成多个解决方案 solutions = [model.generate(problem.prompt) for _ in range(100)] # 逐个测试 passed = 0 for solution in solutions: result = self._run_tests(solution, problem.test_cases) if result["passed"]: passed += 1 elif result["error_type"] == "syntax": results["syntax_error_rate"] += 1 elif result["error_type"] == "runtime": results["runtime_error_rate"] += 1 # pass@k results["pass@1"] += passed > 0 results["pass@10"] += passed > 10 results["pass@100"] += passed > 0 # 归一化 n = len(problems) for k in ["pass@1", "pass@10", "pass@100"]: results[k] /= n for k in ["syntax_error_rate", "runtime_error_rate"]: results[k] /= (n * 100) return results 安全评估 class SafetyEvaluation: def __init__(self): self.attack_prompts = self._load_attack_prompts() def evaluate(self, model): """安全评估""" results = { "jailbreak_success": 0, "harmful_content_generated": 0, "bias_detected": 0, "pii_leaked": 0 } # 越狱测试 for attack in self.attack_prompts["jailbreak"]: response = model.generate(attack["prompt"]) if self._is_jailbreak_successful(response, attack["target"]): results["jailbreak_success"] += 1 # 有害内容测试 for prompt in self.attack_prompts["harmful"]: response = model.generate(prompt) if self._is_harmful(response): results["harmful_content_generated"] += 1 # 偏见测试 for prompt in self.attack_prompts["bias"]: response = model.generate(prompt) bias_score = self._measure_bias(response) if bias_score > 0.5: results["bias_detected"] += 1 total = len(self.attack_prompts["jailbreak"]) for k in results: results[k] = {"count": results[k], "rate": results[k] / total} return results 评估报告生成 class EvaluationReportGenerator: def generate(self, model_name, results): """生成综合评估报告""" return f""" # {model_name} 评估报告 ## 综合评分 - 知识能力: {results['knowledge']['mean']:.1f}/100 - 推理能力: {results['reasoning']['mean']:.1f}/100 - 代码能力: {results['coding']['pass@1']*100:.1f}% - 对话能力: {results['dialogue']['elo']:.0f} Elo - 安全性: {results['safety']['safe_rate']*100:.1f}% ## 详细分析 ### 优势 {self._format_strengths(results)} ### 弱项 {self._format_weaknesses(results)} ### 与其他模型对比 {self._format_comparison(model_name, results)} ### 数据污染检查 {self._contamination_report(results)} ## 结论 {self._conclusion(results)} """ 结语 大模型评估是一个持续演进的领域。随着模型能力提升,旧的基准被攻克,新的更难的基准被提出。没有单一的评估方法能全面衡量模型能力——知识、推理、代码、安全、对齐需要不同的评估方法。最重要的是:评估的目的不是排名,而是理解模型的能力边界,指导合理使用。 ...

2026-07-16 · 4 min · 713 words · 硅基 AGI 探索者

AI Agent评测方法论:构建科学的智能体能力评估体系

为什么Agent评测比模型评测难 评估一个大语言模型可以给一道选择题,评估一个Agent需要给它一个完整任务并观察其行为序列。Agent评测面临三个独特挑战:任务开放性、行为多路径、环境依赖性。 评测维度框架 五维评估模型 我们提出五维Agent评估框架: 任务完成率:能否完成给定任务 路径效率:完成任务用了多少步 工具使用质量:工具调用是否恰当、参数是否正确 错误恢复能力:遇到错误能否自主恢复 自主决策能力:在模糊指令下的判断质量 任务完成率评测 任务分层设计 L1 - 简单任务(1-3步) 例:查询今天的天气 L2 - 中等任务(4-8步) 例:查找北京到上海的机票并比较三个航班的价格 L3 - 复杂任务(9-20步) 例:分析竞品网站并生成包含定价和功能对比的报告 L4 - 开放任务(20+步,目标模糊) 例:帮我规划一个提升产品用户体验的方案 评测协议 class AgentEvaluator: def __init__(self, tasks, criteria): self.tasks = tasks # 分层任务集 self.criteria = criteria # 评分标准 def evaluate(self, agent, n_runs=3): results = {} for level, tasks in self.tasks.items(): level_results = [] for task in tasks: run_results = [] for run in range(n_runs): # 执行任务 trajectory = agent.execute(task) # 评估 score = self._score_task(task, trajectory) run_results.append(score) level_results.append({ "task": task, "scores": run_results, "mean": np.mean(run_results), "std": np.std(run_results) }) results[level] = level_results return results def _score_task(self, task, trajectory): # 任务是否完成 completion = self._check_completion(task, trajectory) # 过程是否正确 process = self._check_process(task, trajectory) # 输出质量 quality = self._check_quality(task, trajectory) return 0.5 * completion + 0.3 * process + 0.2 * quality 通过率基线 基于主流Agent的测试基线(2026年): ...

2026-07-16 · 3 min · 483 words · 硅基 AGI 探索者
向量数据库基准

向量数据库基准2026:存储与检索的极致优化

引言 向量数据库是RAG系统的核心基础设施。2026年,随着嵌入维度的增加(从768维到3072维)和数据规模的扩大(从百万到十亿级),向量数据库的性能变得至关重要。本文将全面对比主流向量数据库。 参评数据库 数据库 类型 部署方式 特点 Milvus 2.5 专用 分布式 最强大,可扩展 Qdrant 1.10 专用 单机/分布式 性能优秀,Rust编写 Chroma 0.6 轻量 嵌入式 开发友好,轻量 Weaviate 1.25 专用 分布式 GraphQL API pgvector 0.7 扩展 PostgreSQL SQL兼容 Pinecone 云服务 SaaS 全托管,零运维 Elasticsearch 8 通用 分布式 全文+向量混合 FAISS 库 进程内 最快,无服务 性能基准 测试设置 数据集:1000万条1024维向量 硬件:A100 80GB + 256GB RAM 索引:HNSW(统一参数) 索引速度 数据库 索引1000万条(s) 吞吐量(条/s) Milvus 320 31250 Qdrant 280 35714 Chroma 850 11764 Weaviate 350 28571 pgvector 1200 8333 FAISS 180 55555 查询延迟 数据库 P50(ms) P95(ms) P99(ms) Milvus 2.1 5.5 8.2 Qdrant 1.8 4.2 6.5 Chroma 8.5 15.2 22.0 Weaviate 3.2 7.8 12.1 pgvector 12.5 25.0 38.0 FAISS 0.8 1.5 2.2 Pinecone 5.0 12.0 18.0 召回率 top-10召回率(与精确搜索对比): ...

2026-07-02 · 3 min · 501 words · 硅基 AGI 探索者
Agent框架基准

Agent框架基准测试2026:谁是最佳智能体框架

引言 Agent框架是构建AI智能体的基础设施。2026年,LangGraph、AutoGen、CrewAI、Semantic Kernel等框架百花齐放,各有特色。本文将通过系统化的基准测试,帮助你选择最适合的Agent框架。 参评框架 框架 厂商 版本 特点 LangGraph LangChain 0.3 图式编排,灵活强大 AutoGen 微软 0.4 多智能体协作 CrewAI CrewAI 0.5 角色扮演,简洁易用 Semantic Kernel 微软 1.0 企业级,C#支持 LlamaIndex Agent LlamaIndex 0.6 数据驱动 PydanticAI Pydantic 0.2 类型安全 OpenAI Swarm OpenAI 0.1 轻量级 功能对比 核心能力 功能 LangGraph AutoGen CrewAI SK LlamaIndex 工具调用 ★★★★★ ★★★★☆ ★★★★☆ ★★★★☆ ★★★★☆ 多Agent ★★★★☆ ★★★★★ ★★★★★ ★★★☆☆ ★★★☆☆ 状态管理 ★★★★★ ★★★☆☆ ★★★☆☆ ★★★★☆ ★★★☆☆ 人机协作 ★★★★★ ★★★★☆ ★★★★☆ ★★★☆☆ ★★☆☆☆ 记忆系统 ★★★★☆ ★★★☆☆ ★★★★☆ ★★★★☆ ★★★★☆ 错误恢复 ★★★★★ ★★★☆☆ ★★★☆☆ ★★★★☆ ★★★☆☆ 可观测性 ★★★★★ ★★★☆☆ ★★★☆☆ ★★★★☆ ★★★★☆ 工具调用测试 # 标准化测试:5种工具调用任务 test_tasks = [ "搜索网页并总结", # 单工具 "搜索+计算+生成报告", # 多工具串联 "从多个API获取数据", # 并行调用 "代码执行+错误修复", # 错误恢复 "复杂决策(需要规划)" # 规划能力 ] 工具调用准确率: ...

2026-07-02 · 2 min · 412 words · 硅基 AGI 探索者
LLM评估管线

LLM评估管线搭建

评估是LLM迭代的指南针 没有评估就没有优化。LLM评估管线是模型迭代的基础设施——它告诉你新版本是变好了还是变差了,哪些能力提升了哪些下降了。 评估维度 EVAL_DIMENSIONS = { "knowledge": ["MMLU", "C-Eval", "CMMLU"], # 知识问答 "reasoning": ["GSM8K", "MATH", "BBH"], # 推理能力 "coding": ["HumanEval", "MBPP", "CodeContests"], # 代码生成 "instruction_following": ["IFEval", "MT-Bench"], # 指令跟随 "safety": ["ToxiGen", "TruthfulQA"], # 安全性 "multilingual": ["MGSM", "XNLI"], # 多语言 } 自动化评估管线 class EvalPipeline: def __init__(self, model, benchmarks): self.model = model self.benchmarks = benchmarks async def run_all(self): results = {} for name, benchmark in self.benchmarks.items(): results[name] = await self.run_benchmark(name, benchmark) report = self.generate_report(results) return report async def run_benchmark(self, name, benchmark): scores = [] for sample in benchmark.samples: response = await self.model.generate(sample["input"]) score = benchmark.evaluate(response, sample["expected"]) scores.append(score) return { "benchmark": name, "score": sum(scores) / len(scores), "n_samples": len(scores), "details": scores, } LLM-as-Judge评估 class LLMJudge: def __init__(self, judge_model): self.judge = judge_model async def evaluate(self, question, response, reference=None, criteria=None): prompt = f"""请评估以下回答的质量。 问题:{question} 回答:{response} {'参考答案:' + reference if reference else ''} 评估标准:{criteria or '准确性、完整性、清晰度'} 请给出1-10分的评分和理由。 输出JSON格式:{{"score": 8, "reason": "...", "breakdown": {{"accuracy": 8, "completeness": 7, "clarity": 9}}}}""" result = await self.judge.generate(prompt) return json.loads(result) async def compare(self, question, response_a, response_b): """对比两个回答""" prompt = f"""比较以下两个回答的优劣。 问题:{question} 回答A:{response_a} 回答B:{response_b} 输出JSON:{{"winner": "A"或"B"或"tie", "reason": "..."}}""" result = await self.judge.generate(prompt) return json.loads(result) 回归测试 class RegressionTester: def __init__(self, baseline_results): self.baseline = baseline_results async def check_regression(self, new_results, threshold=0.02): """检查是否有性能回归""" regressions = [] for benchmark, new_score in new_results.items(): if benchmark in self.baseline: old_score = self.baseline[benchmark] delta = new_score["score"] - old_score["score"] if delta < -threshold: regressions.append({ "benchmark": benchmark, "old": old_score["score"], "new": new_score["score"], "delta": delta, }) return regressions 评估报告 def generate_eval_report(results, baseline=None): """生成评估报告""" report = "# LLM评估报告\n\n" report += f"日期:{datetime.now().strftime('%Y-%m-%d')}\n\n" report += "## 评估结果\n\n" report += "| 基准测试 | 得分 | 基线 | 变化 |\n" report += "|---------|------|------|------|\n" for name, result in results.items(): score = f"{result['score']:.4f}" if baseline and name in baseline: base = baseline[name]["score"] delta = result["score"] - base delta_str = f"{'🟢' if delta >= 0 else '🔴'} {delta:+.4f}" else: base = "-" delta_str = "-" report += f"| {name} | {score} | {base:.4f} | {delta_str} |\n" if baseline: regressions = [r for r in results if baseline.get(r, {}).get("score", 0) - results[r]["score"] > 0.02] if regressions: report += f"\n## ⚠️ 检测到回归\n\n" for r in regressions: report += f"- **{r}**: {baseline[r]['score']:.4f} → {results[r]['score']:.4f}\n" return report 结语 LLM评估管线是模型迭代的质量把关者。自动化基准测试提供客观指标,LLM-as-Judge提供主观评估,回归测试防止质量倒退。建立定期评估机制,确保每次模型更新都有数据支撑。 加入讨论 这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。 ...

2026-07-02 · 2 min · 366 words · 硅基 AGI 探索者
LLM评估框架

LLM评估框架2026:如何科学衡量模型能力

引言 “我的模型到底好不好?“这是每个AI应用开发者都会面临的问题。基准测试分数高不等于实际效果好,通用基准可能不反映你的特定任务。2026年,LLM评估已经从简单的"看分数"进化到系统化的评估框架。本文将全面解析2026年的LLM评估方法。 评估的核心问题 问题一:评估什么 LLM的能力是多维度的,不能只用一个分数衡量: 知识理解:世界知识、专业知识 推理能力:逻辑推理、数学推理、因果推理 语言生成:流畅性、连贯性、创造性 指令跟随:格式遵守、约束遵循 安全性:拒绝有害请求、避免偏见 效率:推理速度、成本 问题二:怎么评估 静态基准:固定测试集(MMLU、GSM8K等) 动态评估:实时变化测试集(防数据污染) 人工评估:人类专家评估 模型评估:用强模型评估弱模型 实际应用评估:A/B测试、用户反馈 问题三:评估谁 通用能力:模型的基础能力 领域特定能力:在特定领域(医疗、法律等)的表现 任务特定能力:在特定任务上的效果 主流评估基准 知识与理解 基准 说明 评测维度 2026最高分 MMLU-Pro 57学科多任务理解 知识广度 91.3% (GPT-5) CMMLU 中文多任务理解 中文知识 89.7% (GLM-5) C-Eval 2026 中文综合评估 中文综合 92.1% (GLM-5) BBH BigBench Hard 复杂理解 88.5% (GPT-5) 推理能力 基准 说明 评测维度 2026最高分 GPQA Diamond 研究生科学推理 深度推理 82.3% (o3) GSM8K 小学数学推理 数学推理 96.8% (o3) MATH-500 高级数学竞赛 数学推理 96.8% (o3) ARC 科学推理 科学推理 96.2% (GPT-5) 代码能力 基准 说明 评测维度 2026最高分 HumanEval Python代码生成 代码生成 94.2% (GPT-5) SWE-Bench Verified 软件工程 工程能力 71.2% (GPT-5) MultiPL-E 多语言编程 多语言 89.3% (GPT-5) LiveCodeBench 实时编程竞赛 竞赛编程 72.5% (Claude 4) 安全性与对齐 基准 说明 评测维度 TruthfulQA 事实准确性 幻觉率 ToxiGen 毒性检测 安全性 BBQ 偏见检测 公平性 HarmBench 有害内容 安全拒绝率 Agent能力 基准 说明 评测维度 AgentBench Agent综合能力 工具调用、规划 WebArena 网页操作 实际任务 ToolBench 工具调用 API调用准确性 GAIA 通用AI助手 多步骤任务 评估框架设计 框架一:多维评估矩阵 class LLMEvaluationFramework: def __init__(self): self.dimensions = { "knowledge": ["MMLU-Pro", "CMMLU", "C-Eval"], "reasoning": ["GPQA", "GSM8K", "MATH"], "code": ["HumanEval", "SWE-Bench", "MultiPL-E"], "safety": ["TruthfulQA", "ToxiGen", "BBQ"], "agent": ["AgentBench", "WebArena"], "chinese": ["C-Eval", "CMMLU"] } def evaluate(self, model, dimensions=None): dimensions = dimensions or self.dimensions.keys() results = {} for dim in dimensions: benchmarks = self.dimensions[dim] results[dim] = {} for benchmark in benchmarks: score = run_benchmark(model, benchmark) results[dim][benchmark] = score return results def visualize(self, results): """ 生成雷达图,展示各维度能力 """ # ... 可视化代码 框架二:分层评估 第1层:通用能力评估 ├── 知识理解(MMLU-Pro) ├── 推理能力(GPQA, GSM8K) ├── 代码能力(HumanEval) └── 安全性(TruthfulQA) 第2层:领域能力评估 ├── 法律(LegalBench) ├── 医疗(MedQA) ├── 金融(FinBench) └── 教育(EduBench) 第3层:任务能力评估 ├── RAG效果评估 ├── 对话质量评估 ├── 摘要质量评估 └── 翻译质量评估 第4层:实际应用评估 ├── 用户满意度 ├── 任务完成率 ├── 响应延迟 └── 成本效率 框架三:对比评估 def comparative_evaluation(models, benchmarks): """ 对比评估多个模型 """ results = {} for model in models: results[model] = {} for benchmark in benchmarks: results[model][benchmark] = run_benchmark(model, benchmark) # 生成对比报告 report = generate_comparison_report(results) return report 评估中的常见陷阱 陷阱一:数据污染 训练数据中包含了测试集,导致分数虚高: ...

2026-07-02 · 3 min · 436 words · 硅基 AGI 探索者
LLM基准对比

2026年7月LLM基准对比:谁是真正的王者

引言 2026年过半,大语言模型的竞争格局发生了显著变化。从OpenAI的GPT-5系列到Anthropic的Claude 4,从Google的Gemini 2.5到国产的GLM-5、DeepSeek-V4,各家厂商在推理能力、多模态理解、长上下文处理等方面都取得了突破性进展。本文将基于最新公开的基准测试数据,对当前主流LLM进行全面对比。 测试模型清单 本次对比涵盖以下模型: 模型 厂商 版本 参数规模 GPT-5 OpenAI 2026.06 未公开 Claude 4 Opus Anthropic 2026.05 未公开 Gemini 2.5 Ultra Google 2026.04 未公开 GLM-5 智谱AI 2026.06 未公开 DeepSeek-V4 DeepSeek 2026.05 671B(MoE) Llama 4 405B Meta 2026.03 405B Qwen 3 235B 阿里通义 2026.04 235B 核心基准对比 MMLU-Pro 2026 MMLU-Pro作为升级版多任务理解基准,覆盖57个学科领域,考察模型的深层知识理解能力。 GPT-5: 91.3% — 居首位,在哲学、法学等人文领域优势明显 Claude 4 Opus: 89.7% — 在数学和物理上表现出色 Gemini 2.5 Ultra: 88.9% — 跨学科综合能力均衡 GLM-5: 86.2% — 中文相关学科表现突出 DeepSeek-V4: 85.8% — 推理类题目正确率高 Qwen 3 235B: 84.5% — 工程类学科表现亮眼 Llama 4 405B: 82.1% — 开源模型中最佳 GPQA Diamond GPQA Diamond考察研究生级别的科学推理能力,是衡量模型深度推理的重要指标。 ...

2026-07-02 · 2 min · 308 words · 硅基 AGI 探索者
大模型评估方法论

大模型评估方法论:如何科学地评测一个LLM

引言 2026年,大模型评估已经成为一门独立的学科。随着模型能力的提升,传统的评估方法越来越难以区分模型间的细微差异。如何科学、全面、客观地评估一个大模型,是开发者和企业选型的关键前提。本文将系统介绍大模型评估的方法论,从基准选择到实际测试,提供一套可操作的评估框架。 评估框架 四层评估体系 层级 评估内容 方法 适用阶段 L1: 标准基准 通用能力 公开基准测试 初步筛选 L2: 领域基准 专业能力 领域特定测试 深入评估 L3: 真实任务 实用能力 模拟真实场景 最终验证 L4: 人工评估 主观质量 专家盲评 质量把关 评估原则 多维度覆盖:不依赖单一基准 防数据污染:使用最新/私有测试集 控制变量:统一prompt、温度、采样参数 统计显著性:多次运行取平均 人机对齐:基准分数与人类判断对齐 L1: 标准基准 核心基准选择 基准 测试能力 难度 区分度 推荐 MMLU-Pro 专业知识 中 中 ✅ 必测 GPQA Diamond 推理 高 高 ✅ 必测 BBH 综合推理 中 中 ✅ 推荐 HumanEval+ 代码生成 中 低 ⚠️ 参考用 SWE-Bench Pro 工程能力 极高 高 ✅ 必测 IFEval 指令遵循 中 高 ✅ 必测 TruthfulQA 事实性 中 中 ✅ 推荐 MATH-500 数学 高 中 ⚠️ 参考用 基准选择的常见误区 误区1:只看MMLU ...

2026-06-30 · 3 min · 544 words · 硅基 AGI 探索者
Agent性能基准测试:吞吐、延迟、并发全评测

Agent性能基准测试:吞吐、延迟、并发全评测

引言 Agent系统的性能基准测试比传统Web应用复杂得多——响应延迟不仅取决于基础设施,还受LLM推理速度、工具调用延迟、Prompt长度等多重因素影响。没有经过充分基准测试的Agent系统,就像没有经过碰撞测试的自动驾驶汽车——上路后迟早会出事。 2026年,Agent性能测试已形成标准化的方法论。本文系统介绍如何对Agent系统进行全面、准确的性能基准测试。 性能测试维度 Agent性能测试矩阵 │ ├── 吞吐量测试 (Throughput) │ ├── 最大QPS │ ├── 可持续QPS │ └── QPS vs 延迟曲线 │ ├── 延迟测试 (Latency) │ ├── P50/P90/P99延迟 │ ├── 各阶段延迟分解 │ └── 长尾延迟分析 │ ├── 并发测试 (Concurrency) │ ├── 最大并发会话数 │ ├── 并发下质量保持 │ └── 资源竞争分析 │ └── 压力测试 (Stress) ├── 极限负载 ├── 故障恢复时间 └── 降级策略验证 测试环境搭建 # docker-compose-benchmark.yml version: '3.8' services: load-generator: image: agent/benchmark:latest environment: - TARGET_URL=http://agent-service:8080 - CONCURRENT_USERS=100 - TEST_DURATION=300s depends_on: - agent-service - llm-mock agent-service: image: agent/service:latest deploy: resources: limits: cpus: '4' memory: 8G llm-mock: image: agent/llm-mock:latest environment: - MOCK_LATENCY_MS=500 # 模拟LLM延迟 - MOCK_ERROR_RATE=0.01 prometheus: image: prom/prometheus:latest grafana: image: grafana/grafana:latest 吞吐量测试 import asyncio import time import statistics from dataclasses import dataclass @dataclass class BenchmarkConfig: """基准测试配置""" target_qps: int duration_seconds: int concurrent_requests: int test_cases: list warmup_seconds: int = 30 @dataclass class BenchmarkResult: """基准测试结果""" total_requests: int successful_requests: int failed_requests: int avg_latency_ms: float p50_latency_ms: float p90_latency_ms: float p99_latency_ms: float min_latency_ms: float max_latency_ms: float qps: float error_rate: float tokens_per_second: float class ThroughputBenchmark: """吞吐量基准测试""" async def run(self, config: BenchmarkConfig) -> BenchmarkResult: """运行吞吐量测试""" # 预热 await self._warmup(config.warmup_seconds) # 主测试 latencies = [] successes = 0 failures = 0 total_tokens = 0 start_time = time.monotonic() end_time = start_time + config.duration_seconds # 创建并发请求 tasks = [] for i in range(config.concurrent_requests): task = asyncio.create_task( self._request_worker( config, end_time, latencies, lambda s: nonlocal(successes) or successes++, lambda f: nonlocal(failures) or failures++, lambda t: nonlocal(total_tokens) or total_tokens += t ) ) tasks.append(task) # 等待完成 await asyncio.gather(*tasks) actual_duration = time.monotonic() - start_time # 计算结果 sorted_latencies = sorted(latencies) return BenchmarkResult( total_requests=len(latencies), successful_requests=successes, failed_requests=failures, avg_latency_ms=statistics.mean(latencies), p50_latency_ms=self._percentile(sorted_latencies, 0.5), p90_latency_ms=self._percentile(sorted_latencies, 0.9), p99_latency_ms=self._percentile(sorted_latencies, 0.99), min_latency_ms=min(latencies), max_latency_ms=max(latencies), qps=len(latencies) / actual_duration, error_rate=failures / len(latencies) if latencies else 0, tokens_per_second=total_tokens / actual_duration ) async def _request_worker( self, config: BenchmarkConfig, end_time: float, latencies: list, on_success: callable, on_failure: callable, on_tokens: callable ): """请求工作线程""" while time.monotonic() < end_time: test_case = random.choice(config.test_cases) start = time.monotonic() try: response = await self.client.request(test_case["input"]) latency = (time.monotonic() - start) * 1000 latencies.append(latency) on_success() if "usage" in response: on_tokens(response["usage"]["total_tokens"]) except Exception as e: latencies.append(30000) # 超时记录为30s on_failure() 延迟分解测试 class LatencyBreakdownBenchmark: """延迟分解测试""" async def measure_latency_breakdown( self, session_id: str, user_input: str ) -> dict: """测量各阶段延迟""" breakdown = { "total_ms": 0, "stages": {} } # 使用链路追踪获取各阶段延迟 trace = await self.tracer.get_trace_for_session(session_id) if trace: for span in trace.spans: stage_name = span.operation_name duration_ms = span.duration_ms breakdown["stages"][stage_name] = { "duration_ms": duration_ms, "percentage": 0, # 稍后计算 "service": span.process.service_name, } # 计算百分比 total = sum(s["duration_ms"] for s in breakdown["stages"].values()) breakdown["total_ms"] = total for stage in breakdown["stages"].values(): stage["percentage"] = stage["duration_ms"] / total if total > 0 else 0 return breakdown def print_breakdown(self, breakdown: dict): """打印延迟分解""" print(f"\n{'='*60}") print(f"Total Latency: {breakdown['total_ms']:.1f}ms") print(f"{'='*60}") print(f"{'Stage':<30} {'Latency(ms)':<15} {'Percentage':<10}") print(f"{'-'*60}") for stage_name, data in sorted( breakdown["stages"].items(), key=lambda x: x[1]["duration_ms"], reverse=True ): print( f"{stage_name:<30} " f"{data['duration_ms']:<15.1f} " f"{data['percentage']*100:<10.1f}%" ) 并发压力测试 class ConcurrencyBenchmark: """并发压力测试""" async def run_concurrency_test( self, max_concurrent: int, step: int = 10, hold_seconds: int = 60 ) -> dict: """逐步增加并发数,测试系统极限""" results = [] for concurrent in range(step, max_concurrent + 1, step): print(f"\nTesting with {concurrent} concurrent users...") config = BenchmarkConfig( target_qps=concurrent * 2, # 每人2 QPS duration_seconds=hold_seconds, concurrent_requests=concurrent, test_cases=self._get_test_cases() ) result = await self.benchmark.run(config) results.append({ "concurrent_users": concurrent, "qps": result.qps, "avg_latency_ms": result.avg_latency_ms, "p99_latency_ms": result.p99_latency_ms, "error_rate": result.error_rate, "tokens_per_second": result.tokens_per_second, }) # 如果错误率超过5%,停止测试 if result.error_rate > 0.05: print(f"Stopping: error rate {result.error_rate:.1%} > 5%") break return { "test_results": results, "max_sustainable_concurrent": self._find_max_sustainable(results), "performance_curve": self._generate_curve(results), } def _find_max_sustainable(self, results: list) -> int: """找到可持续的最大并发数""" for r in results: if r["error_rate"] > 0.01 or r["p99_latency_ms"] > 5000: return r["concurrent_users"] - 10 return results[-1]["concurrent_users"] if results else 0 测试结果解读 class BenchmarkReport: """基准测试报告生成器""" def generate_report(self, results: dict) -> str: """生成测试报告""" report = f""" # Agent性能基准测试报告 ## 测试概述 - 测试时间: {results["test_time"]} - 测试版本: {results["version"]} - 测试环境: {results["environment"]} ## 核心指标 ### 吞吐量 - 最大QPS: {results["max_qps"]} - 可持续QPS: {results["sustainable_qps"]} - QPS vs 并发曲线: [见图表] ### 延迟 - P50延迟: {results["p50_latency_ms"]}ms - P90延迟: {results["p90_latency_ms"]}ms - P99延迟: {results["p99_latency_ms"]}ms - 平均延迟: {results["avg_latency_ms"]}ms ### 并发 - 最大并发会话: {results["max_concurrent"]} - 并发下平均质量评分: {results["quality_at_max_concurrent"]} ### 资源消耗 - 单请求平均Token消耗: {results["avg_tokens"]} - GPU利用率: {results["gpu_utilization"]} - CPU利用率: {results["cpu_utilization"]} ## 延迟分解 {self._format_latency_breakdown(results["latency_breakdown"])} ## 瓶颈分析 {results["bottleneck_analysis"]} ## 优化建议 {results["optimization_recommendations"]} """ return report 持续基准测试 # .github/workflows/benchmark.yml name: Performance Benchmark on: push: branches: [main] pull_request: branches: [main] jobs: benchmark: runs-on: self-hosted # 需要稳定的硬件 steps: - uses: actions/checkout@v3 - name: Run Benchmark run: | docker-compose -f docker-compose-benchmark.yml up --abort-on-container-exit - name: Compare with Baseline run: | python scripts/compare_benchmark.py \ --current results.json \ --baseline baseline.json \ --threshold 0.1 # 允许10%回归 - name: Upload Results if: always() uses: actions/upload-artifact@v3 with: name: benchmark-results path: results/ 总结 Agent性能基准测试需要从吞吐量、延迟、并发、压力四个维度全面评估。延迟分解测试能够精准定位性能瓶颈——是LLM推理慢、工具调用慢还是向量检索慢。持续基准测试确保每次代码变更都不会引起性能回归。 ...

2026-06-30 · 4 min · 736 words · 硅基 AGI 探索者
代码大模型2026排行

代码大模型2026排行:SWE-Bench Pro时代

引言 2026年,代码大模型的评测标准发生了根本性变化。传统的HumanEval等基准已无法区分顶级模型,SWE-Bench Pro成为新的黄金标准。SWE-Bench Pro包含500+真实企业级软件工程任务,要求模型理解大型代码库、修复复杂bug、实现跨文件功能。本文将以SWE-Bench Pro为核心,全面对比2026年主流代码大模型。 基准体系 SWE-Bench Pro详解 SWE-Bench Pro的评测维度: 维度 占比 说明 Bug修复 30% 真实GitHub issue修复 功能实现 25% 根据需求实现新功能 重构 15% 代码重构和优化 测试编写 10% 单元测试和集成测试 文档更新 10% API文档和注释 依赖管理 10% 版本升级和兼容性 涉及的语言分布:Python(35%)、JavaScript/TypeScript(25%)、Java(15%)、Go(10%)、Rust(8%)、C++(7%)。 其他代码基准 基准 测试内容 难度 区分度 SWE-Bench Pro 真实工程任务 极高 高 HumanEval+ 函数级代码生成 中 低 MBPP+ 基础编程 低 低 MultiPL-E 多语言生成 中 中 LiveCodeBench 竞赛编程 高 中 CodeXGLUE 代码理解 中 中 2026年代码模型排行榜 闭源模型排行 排名 模型 SWE-Bench Pro HumanEval+ LiveCodeBench 综合分 1 Claude Opus 4.1 47.6% 94.3% 78.5% 73.5 2 GPT-5.5 44.2% 95.1% 82.3% 73.9 3 Gemini 3.5 Pro 32.1% 92.8% 71.2% 65.4 4 DeepSeek V4 38.5% 91.5% 68.8% 66.3 5 Qwen3.5 Max 35.8% 89.5% 65.3% 63.5 6 GLM-5-Plus 36.2% 90.5% 62.5% 63.1 7 Mistral Large 3 28.5% 83.1% 55.2% 55.6 关键发现:GPT-5.5在综合分上略高于Claude Opus 4.1,但在SWE-Bench Pro上落后3.4个百分点。这说明GPT-5.5在算法和竞赛编程上更强,而Claude在真实工程任务上更胜一筹。 ...

2026-06-30 · 3 min · 580 words · 硅基 AGI 探索者
鲁ICP备2026018361号