尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

OpenCompass 思维链(CoT)评测指南:从 Zero/Few-Shot CoT 到 Self-Consistency 与 Tree-of-Thoughts

发布时间:2026/9/28 2:56:46

资讯中心
01
ARTICLE

OpenCompass 思维链(CoT)评测指南:从 Zero/Few-Shot CoT 到 Self-Consistency 与 Tree-of-Thoughts

OpenCompass 思维链(CoT)评测指南:从 Zero/Few-Shot CoT 到 Self-Consistency 与 Tree-of-Thoughts
模型评测人工智能大模型AI 评测【免费下载链接】opencompassOpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.项目地址https://gitcode.com/gh_mirrors/op/opencompass点击查看免费下载本指南聚焦 OpenCompass 中思维链Chain of Thought, CoT相关评测能力的配置与原理。OpenCompass 在PromptTemplate与各类 Inferencer 层面原生支持 Zero-Shot CoT、Few-Shot CoT、Self-ConsistencySC与 Tree-of-ThoughtsToT四种方法覆盖数学推理、关系推理等复杂任务的评测需求。读完本文你将掌握每种方法的最小配置示例、关键参数语义并能基于源码理解其底层采样、投票与搜索机制进而为自定义数据集接入相应推理策略。背景为什么评测需要 CoT在推理过程中CoT思维链是帮助 LLM 处理复杂问题的有效手段典型场景包括数学问题求解与关系推理。OpenCompass 支持多种类型的 CoT 方法既可以通过PromptTemplate模板改造快速实现 Zero-Shot / Few-Shot CoT也可以通过替换 Inferencer 实现需要多轮采样与后处理的 Self-Consistency 和 Tree-of-Thoughts。下文分别介绍这四类方法在评测配置中的落地方式。1. Zero-Shot CoT在 PromptTemplate 中追加一句提示Zero-Shot CoT 不需要任何示例只需在数据集配置的PromptTemplate模板末尾追加Lets think step by step即可引导模型逐步推理。示例如下qa_infer_cfg dict( prompt_templatedict( typePromptTemplate, templateAnswer the question:\nQ: {question}?\nLets think step by step:\n ), retrieverdict(typeZeroRetriever) )其中template字段中的{question}会被替换为reader_cfg中声明的输入列内容retrieverdict(typeZeroRetriever)表示不进行上下文检索zero-shot直接基于模板构造生成型提示。该配置作用于infer_cfg的prompt_template部分评测时模型将先输出推理过程再给出答案后续可由对应的后处理器pred_postprocessor从生成文本中抽取最终答案。2. Few-Shot CoT把带推理过程的示例写进模板Few-Shot CoT 让模型更易遵循指令并给出更可靠的答案。做法是把问题 逐步推理 答案的完整示例写进PromptTemplate。下面是一个 one-shot 配置示例源自 gsm8k 官方示例 的模板结构qa_infer_cfg dict( prompt_templatedict( typePromptTemplate, template Question: Marks basketball team scores 25 2 pointers, 8 3 pointers and 10 free throws. Their opponents score double the 2 pointers but half the 3 pointers and free throws. Whats the total number of points scored by both teams added together? Lets think step by step Answer: Marks team scores 25 2 pointers, meaning they scored 25*2 50 points in 2 pointers. His team also scores 6 3 pointers, meaning they scored 8*3 24 points in 3 pointers They scored 10 free throws, and free throws count as one point so they scored 10*110 points in free throws. All together his team scored 502410 84 points Marks opponents scored double his teams number of 2 pointers, meaning they scored 50*2100 points in 2 pointers. His opponents scored half his teams number of 3 pointers, meaning they scored 24/2 12 points in 3 pointers. They also scored half Marks teams points in free throws, meaning they scored 10/25 points in free throws. All together Marks opponents scored 100125117 points The total score for the game is both teams scores added together, so it is 84117201 points The answer is 201 Question: {question}\nLets think step by step:\n{answer} ), retrieverdict(typeZeroRetriever) )需要说明的是模板中示例的数量one-shot、few-shot 的多条示例与推理质量直接相关{answer}是生成占位符模型在提示末尾生成的内容即最终评测样本。仓库中的 gsm8k_gen_a3e34a.py 即采用了含多道带完整推理步骤的 few-shot 模板4 道示例 1 道待测问题来构造生成型评测。3. Self-Consistency多次采样 多数投票Self-ConsistencySC方法由论文《Self-Consistency Improves Chain of Thought Reasoning in Language Models》arXiv:2203.11171提出对同一问题采样多条推理路径再对生成的答案进行多数投票从而提升推理任务的准确率。该方法的代价是推理阶段更耗时、更消耗资源因为需要多次生成并投票。OpenCompass 中只需把GenInferencer替换为SCInferencer并设置相应参数# 完整配置见 opencompass/configs/datasets/gsm8k/gsm8k_gen_a3e34a.py gsm8k_infer_cfg dict( inferencerdict( typeSCInferencer, # 将 GenInferencer 替换为 SCInferencer generation_kwargsdict(do_sampleTrue, temperature0.7, top_k40), # 设置采样参数以确保模型输出多样化目前仅对 HuggingFace 加载的模型生效 infer_typeSC, sc_sizeSAMPLE_SIZE ) ) gsm8k_eval_cfg dict(sc_sizeSAMPLE_SIZE)注意OpenCompass 默认使用 argmax 方式采样下一个 token。因此如果不显式指定采样参数模型每次推理结果将完全一致多轮采样评测将失去意义。SAMPLE_SIZE即 Self-Consistency 的推理路径条数取值越大通常性能越高。但不同推理任务存在边际收益递减部分任务在路径数增加到一定阈值后继续增加带来的提升有限。因此需要针对具体任务实验调参寻找最合适的路径数量。3.1 源码级原理SCInferencer 如何工作SCInferencer的实现位于 icl_sc_inferencer.py构造参数sc_size默认 1表示采样次数infer_type用于标注 CoT 推理类型generation_kwargs透传给model.generate()在inference()中模型对每个 prompt 循环self.sc_size次调用generate_from_template将sc_size组结果收集为sc_results再通过sc_prediction list(map(list, zip(*sc_results)))把同一样本的多次生成归组为列表见 icl_sc_inferencer.py输出的每个样本prediction是该问题sc_size条推理结果的列表后续由带投票逻辑的评测器/汇总器完成多数投票中间结果通过tmp_output_json_filename.json断点保存中断后可从已保存进度恢复见 icl_sc_inferencer.py。实际使用中sc_size需要同时在infer_cfg与eval_cfg中声明如 gsm8k_gen_a3e34a.py 中inferencer内sc_size20、eval_cfg内同样sc_size20保证推理采样条数与后续投票统计口径一致。评测端例如 gsm8k.py 中的Gsm8kEvaluator通过is_equal对最终答案做数值容差比较允许浮点误差 1e-6计算accuracy。3.2 调参建议generation_kwargs必须设置do_sampleTrue并配合较高temperature如 0.7与top_k如 40否则默认 argmax 采样会使sc_size次生成完全相同投票退化为单次生成sc_size从 20 起步gsm8k 官方配置即 20在小规模评测集上先验证收益曲线再决定是否放大该方案目前仅对从 HuggingFace 加载的模型保证采样效果与 ToT 的限制一致API 模型场景需自行确认其采样参数是否生效。4. Tree-of-Thoughts多路径探索 自评估 搜索与只考虑单一推理路径的传统 CoT 不同Tree-of-ThoughtsToT允许模型同时探索多条不同的推理路径通过自我评估判断推理过程并在必要时执行 lookahead前瞻或 backtracking回溯从而做出全局选择。整个过程分为四个阶段1. Thought Decomposition思维分解根据问题性质将问题拆解为多个中间步骤每一步可以是一个短语、一个方程或一个写作计划取决于问题形态。2. Thought Generation思维生成假设解决问题需要 k 步有两种生成推理内容的方式独立采样independent sampling对每个状态模型从 CoT 提示中独立抽取 k 条推理内容不依赖其他推理内容顺序生成sequential generation依次使用提示引导推理内容生成每条推理内容可能依赖前一条。3. Heuristic Evaluation启发式评估用启发式方法评估每条生成的推理内容对问题求解的贡献。这种自评估基于模型的自我反馈通过设计提示让模型对多条生成结果打分。4. Search Algorithm Selection搜索算法选择根据生成与评估推理内容的方式选择合适的搜索算法例如广度优先搜索BFS或深度优先搜索DFS系统性地遍历思维树执行前瞻与回溯。4.1 OpenCompass 中的 ToT 配置在 OpenCompass 中需要按需设置 ToT 参数。以下为官方论文arXiv:2305.10601中 24 点游戏Game of 24的示例配置。目前 ToT 推理仅支持 HuggingFace 模型# 完整配置见 opencompass/configs/datasets/game24/game24_gen_52a460.py from opencompass.datasets import (Game24Dataset, game24_postprocess, Game24Evaluator, Game24PromptWrapper) generation_kwargs dict(temperature0.7) game24_infer_cfg dict( prompt_templatedict( typePromptTemplate, template{input}), # 直接透传输入内容因为分步提示需要在 task_wrapper 中指定 retrieverdict(typeZeroRetriever), inferencerdict(typeToTInferencer, # 将 GenInferencer 替换为 ToTInferencer generation_kwargsgeneration_kwargs, method_generatepropose, # 推理内容生成方式独立采样(sample) 或 顺序生成(propose) method_evaluatevalue, # 推理内容评估方式投票(vote) 或 打分(value) method_selectgreedy, # 推理内容选择方式贪心(greedy) 或 随机(sample) n_evaluate_sample3, n_select_sample5, task_wrapperdict(typeGame24PromptWrapper) # 该 Wrapper 类包含各步骤提示及生成、评估推理内容的方法需按任务定制 ))各参数含义如下参数可选值说明method_generatesample/propose推理内容生成方式独立采样多条思维或顺序提出候选下一步method_evaluatevalue/vote推理内容评估方式逐状态打分或多状态合并投票method_selectgreedy/sample每步保留候选的方式取分值最高的或按分值概率随机抽取n_evaluate_sampleint每个状态被评估的次数评估采样数n_select_sampleint每步保留的状态数即 ToT 论文 ToT BFS 算法中的 btask_wrapperdict封装各阶段提示与生成/评估方法的 Wrapper 类需按任务定制说明仓库实际配置中的prompt_wrapper参数名与本文档的task_wrapper指同一概念在 game24_gen_52a460.py 中通过prompt_wrapperdict(typeGame24PromptWrapper)传入ToTInferencer内部以TOT_WRAPPER.build(prompt_wrapper)完成构建见 icl_tot_inferencer.py 与注册表 registry.py。4.2 源码级原理ToTInferencer 的四步循环ToTInferencer继承自GenInferencer核心算法在tot_solve()见 icl_tot_inferencer.py中实现对每一步迭代执行生成 → 评估 → 选择生成若method_generate sample调用get_samples()用n_generate_sample的 beam 数采样多条完整思维若为propose调用get_proposals()让模型提出若干下一步候选icl_tot_inferencer.py评估若method_evaluate vote调用get_votes()让模型对全部候选投票若为value调用get_values()逐个打分value 输出经value_outputs_unwrap映射为数值见 game24.py其中impossible0.001、likely1、sure20选择若method_select greedy按分值降序保留前n_select_sample个候选若为sample按分值归一化后的概率随机抽取n_select_sample个icl_tot_inferencer.py循环直到 wrapper 定义的steps步数完成Game24 为 4 步返回最终候选集合由评测器从候选答案中判定是否得到 24。以 24 点为例Game24PromptWrapper 内置了standard_prompt5-shot 直接求解、cot_prompt5-shot 分步求解、propose_prompt1-shot 提出下一步、value_prompt/value_last_step_prompt评估打分等多套提示模板并通过value_cache缓存评估结果避免重复调用Game24Evaluator使用 sympy 化简表达式验证结果是否等于 24 且数字集合与题目一致见 game24.py。4.3 在自定义数据集上使用 ToT若要在自定义数据集上使用 ToT 方法需要在opencompass/datasets/YourDataConfig.py文件中做额外配置定义YourDataPromptWrapper类。该类负责 ToT 框架内的思维生成与启发式评估环节。对于与 24 点类似的推理任务可参考 opencompass/datasets/game24.py 中的实现核心包括定义steps最大推理步数与各阶段提示模板standard / cot / propose / value实现propose_prompt_wrap、value_prompt_wrap等包装方法把当前状态如剩余数字拼接到对应提示上实现value_outputs_unwrap将模型打分文本sure / likely / impossible映射为数值供选择阶段排序或抽样使用定义与 wrapper 配套的postprocess与 Evaluator用于从最终输出中抽取答案并验证正确性。小结按评测目标选择 CoT 方法方法核心改动适用场景资源开销Zero-Shot CoT仅改PromptTemplate模板快速验证模型基础推理能力低Few-Shot CoT模板内嵌带推理的示例引导模型遵循指令、提升稳定性低Self-ConsistencyGenInferencer→SCInferencer设置sc_size与采样参数追求更高推理准确率可容忍多轮采样中多次生成 投票Tree-of-ThoughtsGenInferencer→ToTInferencer 任务 Wrapper需要多路径探索、回溯的复杂推理如 24 点高多步生成 评估相关参考资料可进一步阅读 PromptTemplate 文档 与 prompt 总览SC 完整配置见 gsm8k_gen_a3e34a.pyToT 完整配置见 game24_gen_52a460.py。赞分享模型评测人工智能大模型AI 评测【免费下载链接】opencompassOpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.项目地址https://gitcode.com/gh_mirrors/op/opencompass点击查看免费下载相关推荐3大维度彻底掌握eSpeak NG从零开始构建你的多语言语音合成系统终极指南3大维度彻底掌握eSpeak NG从零开始构建你的多语言语音合成系统终极指南 你是否曾为语音合成系统的笨重、昂贵和语言支持有限而苦恼想象一下你正在开发一个语音音频state-threads与SRS集成案例构建高并发流媒体服务器的最佳实践state threads与SRS集成案例构建高并发流媒体服务器的最佳实践 在当今互联网时代流媒体服务的需求呈爆发式增长构建高性能、高并发的流媒体服务器成网络与通信基础架构Tree of Thoughts核心算法解析BFS搜索与思维生成评估机制Tree of Thoughts核心算法解析BFS搜索与思维生成评估机制 Tree of ThoughtsToT是大语言模型推理领域的突破性算法它通过构人工智能大模型提示工程上一篇tQuery 类名与数据操作像 jQuery 一样管理 3D 对象下一篇Claude Code UI的WebSocket通信机制深度解析构建实时AI代码交互的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。