ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 Instructor 实现 Uncertainty-Routed Chain of Thought:以不确定性路由提升 LLM 结构化推理的置信度

使用 Instructor 实现 Uncertainty-Routed Chain of Thought:以不确定性路由提升 LLM 结构化推理的置信度 使用 Instructor 实现 Uncertainty-Routed Chain of Thought以不确定性路由提升 LLM 结构化推理的置信度【免费下载链接】instructorstructured outputs for llms项目地址: https://gitcode.com/GitHub_Trending/in/instructor导读Uncertainty-Routed Chain of Thought不确定性路由思维链是一种源自 Gemini 论文的自一致性质询增强技术通过并行生成多条思维链、对其多数答案进行投票并仅在一致性达到阈值时才采纳该结果从而显著提升复杂问答场景下的输出可靠性。本文将以 Instructor 项目中的官方实现为骨架逐步拆解其算法原理、完整可运行代码并深入from_provider与create的源码实现帮助你掌握在结构化输出场景下落地这一技术的完整方法。什么是 Uncertainty-Routed Chain of Thought传统的 Chain of Thought思维链prompting 通过引导模型逐步思考来提升推理质量但它只产生一条推理路径模型的单次采样既可能受随机性影响也可能在推理中途走偏。Uncertainty-Routed Chain of Thought 的核心思想是让模型并行生成多条思维链只有当这些链对最终答案达成足够高的一致性时才把多数答案作为最终解输出若一致性不足则说明模型对该问题不确定此时再单独生成一条答案作为兜底。从算法角度看该方法包含三个关键组成部分多链采样对同一个问题生成多条 chain of thought 推理链在 Gemini 论文中通常为 8 或 32 条多数投票统计各条链给出的最终答案取出现频率最高的答案作为候选解阈值路由只有当同意该多数答案的链所占比例高于预设阈值时才采纳多数答案否则触发一次额外的生成作为最终响应。这一思路与 Self-Consistency自一致性 一脉相承区别在于Self-Consistency 无条件地把多数答案当作最终解而 Uncertainty-Routed CoT 额外引入了一个置信度门槛把不确定的场景显式地路由到重新生成的分支上。正如 提示技术总览 中所归纳的两者都属于处理不确定性类别的技术适合决策依赖高置信度输出的任务。算法流程总览Uncertainty-Routed CoT 的完整流程可以概括为以下步骤生成 k 条思维链并行 ↓ 统计各条链的 correct_answer多数投票 ↓ majority_count / k ≥ threshold ├─ 是 → 输出多数答案高置信度路径 └─ 否 → 单独再生成一次输出新答案不确定兜底路径在后续的代码实现中我们将k设为 8、threshold设为 0.6。从源码结构看这套流程完全可以用 Instructor 的异步客户端 Pydantic 响应模型轻松落地无需任何自定义解析逻辑。完整实现基于 Instructor 的 Uncertainty-Routed CoT以下代码来自仓库文档 uncertainty_routed_cot.md它演示了如何在一次生物学选择题场景中应用该技术from pydantic import BaseModel import instructor from textwrap import dedent from typing import Literal import asyncio from collections import Counter client instructor.from_provider(openai/gpt-5-nano, async_clientTrue) class ChainOfThoughtResponse(BaseModel): chain_of_thought: str correct_answer: Literal[A, B, C, D] async def generate_response(query: str, options: dict[str, str]): formatted_options \n.join( [f{key}:{answer} for key, answer in options.items()] ) return await client.create( modelgpt-4o, response_modelChainOfThoughtResponse, messages[ { role: system, content: dedent( f You are a world class AI who excels at answering complex questions. Choose one of the options below that best answers the question you are about to be asked question {query} /question options {formatted_options} /options ), } ], ) async def generate_batch_responses( query: str, options: dict[str, str], num_chains: int ) - list[ChainOfThoughtResponse]: coros [generate_response(query, options) for _ in range(num_chains)] return await asyncio.gather(*coros) if __name__ __main__: question In a population of giraffes, an environmental change occurs that favors individuals that are tallest. As a result, more of the taller individuals are able to obtain nutrients and survive to pass along their genetic information. This is an example of options { A: directional selection, B: stabilizing selection, C: sexual selection, D: disruptive selection, } correct_answer A k 8 threshold 0.6 responses asyncio.run(generate_batch_responses(question, options, k)) votes Counter([response.correct_answer for response in responses]) print(votes) # Counter({A: 8}) majority_vote_element, majority_vote_count votes.most_common(1)[0] print(majority_vote_element, majority_vote_count) # A 8 majority_threshold majority_vote_count / k if majority_threshold threshold: response asyncio.run(generate_response(question, options)) response response.correct_answer else: response majority_vote_element print(response) # A逐段拆解每一行代码背后的设计意图1. 用 Pydantic 模型固化推理结构class ChainOfThoughtResponse(BaseModel): chain_of_thought: str correct_answer: Literal[A, B, C, D]这是整个方案的结构化基石。chain_of_thought字段强制模型先输出完整推理过程correct_answer则用Literal[A, B, C, D]把答案约束在四个选项中。Instructor 会把该 Pydantic 模型编译成工具调用 schema 或 JSON Schema从而保证每条思维链都返回合法且可统计的答案——这正是投票环节能够直接使用Counter的前提。如果答案字段不加以类型约束LLM 可能返回格式各异的自由文本多数投票就会失效。2. 客户端初始化from_provider的异步模式client instructor.from_provider(openai/gpt-5-nano, async_clientTrue)from_provider是 Instructor 的统一客户端工厂。根据源码 instructor/v2/auto_client.py 的实现其第一个参数要求provider/model-name格式的模型字符串如openai/gpt-4、anthropic/claude-3-sonnet函数内部通过model.split(/, 1)解析出提供商与模型名然后路由到对应的提供商实现async_clientTrue则返回AsyncInstructor实例使我们可以用await client.create(...)进行异步调用。其完整签名还支持以下参数参数默认值说明model必填形如provider/model-name的模型标识符async_clientFalse置为True时返回异步客户端本技术必需用于并行采样cacheNone可传入缓存适配器如AutoCache、RedisCache实现透明响应缓存会透传到各 provider 实现modeNone覆盖该 provider 的默认调用模式tool calling / JSON mode 等不传则使用推荐默认值3. 单次思维链生成generate_responsereturn await client.create( modelgpt-4o, response_modelChainOfThoughtResponse, messages[...], )这里通过create完成一次带结构化输出的调用。查看核心客户端实现 instructor/v2/core/client.py 可以看到create统一接收response_model、context、max_retries默认 3 次重试、strict默认True强制严格 schema 校验、token_budget以及透传给底层 provider 的**kwargs最终调用底层 SDK 的create并返回已通过 Pydantic 验证的实例。messages中使用dedent组织系统提示词要求模型作为世界级 AI从选项中选出最佳答案并把题目与选项用question、options标签包裹。这一提示词结构本身不依赖特定格式约定是易读且便于维护的实践。4. 并行采样generate_batch_responsescoros [generate_response(query, options) for _ in range(num_chains)] return await asyncio.gather(*coros)这是实现一次生成 k 条链的关键。列表推导式创建num_chains个协程asyncio.gather并发执行它们使 8 条或 32 条思维链的生成几乎同时完成避免串行调用带来的线性延迟。异步客户端在这里是不可或缺的同步客户端无法并发地发出请求。5. 投票与阈值路由votes Counter([response.correct_answer for response in responses]) majority_vote_element, majority_vote_count votes.most_common(1)[0] majority_threshold majority_vote_count / k if majority_threshold threshold: response asyncio.run(generate_response(question, options)) response response.correct_answer else: response majority_vote_elementCounter对 8 条链的答案计数most_common(1)取出票数最多的答案及其票数majority_vote_count / k计算多数答案的得票比例。当该比例低于threshold本例为 0.6时说明模型内部意见分歧较大、整体置信度不足此时走兜底分支——单独再生成一次并取其答案否则直接采用多数答案。示例中 8 条链全部输出A得票比例 1.0 远超阈值因此直接输出A。6. 关键参数的可调空间参数本例取值作用与调参方向k采样链数8越大越接近真实投票分布但成本线性上升Gemini 论文中取 8 或 32threshold0.6采纳多数答案所需的最小一致性比例越高越保守、触发兜底分支越频繁temperature未显式设置若希望链间存在足够多样性可参考 self_consistency.md 中的做法显式传入如temperature0.5作为**kwargs透传从源码结构看temperature等采样参数通过create的**kwargs直接透传给底层 provider SDK因此无需额外封装即可在generate_response中按需添加。何时使用 Uncertainty-Routed CoT结合仓库 提示技术总览 中的技术地图这一技术最适合以下场景高错误成本决策答案错误代价高昂如医疗、金融、审核类任务需要显式置信度门槛多选题/分类任务答案域可枚举如Literal约束的选项投票统计天然可行已有异步基础设施asyncio.gather的并发收益需要异步客户端支撑适合已经采用异步 I/O 的服务。若你的场景允许无条件信任多数意见可退化为更简单的 Self-Consistency若你想根据各链一致性自适应地决定是否再采样本技术正是从不确定性角度给出的答案。此外你还可以将它与 Memory of Thought 等强调高置信度示例的技术组合使用进一步增强关键场景下的稳定性。参考来源本文基于仓库文档 uncertainty_routed_cot.md 撰写技术背景源自论文Gemini: A Family of Highly Capable Multimodal Models源码依据见 instructor/v2/auto_client.py 与 instructor/v2/core/client.py。相关技术对照可参考 self_consistency.md 与 提示技术总览。【免费下载链接】instructorstructured outputs for llms项目地址: https://gitcode.com/GitHub_Trending/in/instructor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表