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

Operit 动态思考选项 Provider 能力映射:从供应商规则生成到请求参数写入的完整链路

发布时间:2026/9/27 10:49:59

资讯中心
01
ARTICLE

Operit 动态思考选项 Provider 能力映射:从供应商规则生成到请求参数写入的完整链路

Operit 动态思考选项 Provider 能力映射:从供应商规则生成到请求参数写入的完整链路
AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆【免费下载链接】OperitThe most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent项目地址https://gitcode.com/gh_mirrors/op/Operit点击查看免费下载导读本篇技术指南聚焦 Operit 在“动态思考选项”改造中的核心机制——Provider 能力映射。旧实现把所有模型的思考强度压成 1 到 5 五个固定整数档位无法表达各供应商真实、异构的思考参数新实现改为由当前模型配置中的思考规则驱动规则通过match匹配模型、声明control/parameterLabel/enable/disable/options最终由请求层把选中动作写入对应协议参数。读完本文你将掌握规则的数据结构、匹配优先级、内置规则如何随供应商写入模型配置、请求阶段如何解析并应用规则以及无效选项为何会让请求直接失败。系列文档入口见 dynamic_thinking_options_20260824/index.md模型选项模型见 01-model-options.md设置与 UI 见 02-settings-and-ui.md。一、设计动机供应商名不再是运行时全局能力集合在旧实现中思考档位是运行时全局状态所有模型被压成 15 五个整数滑块档位保存在ApiPreferences的全局状态中Provider 按供应商名查找固定能力集合。这种做法的根本问题是把供应商等同于能力——同一个供应商的不同模型如 Gemini 2.5 与其它 Gemini 型号、Anthropic 的 claude-3 旧型号与新型号在思考参数上截然不同全局五档契约无法承载这种差异。新实现的核心原则是思考参数由当前模型配置中的规则生成不再把供应商名视为运行时全局能力集合。这意味着思考能力完全跟随模型配置走新建配置或切换供应商时收集目录会筛出对应供应商的规则并写入模型配置请求阶段只读取当前模型配置中的规则不再读取收集目录也不再把档位保存在全局ApiPreferences中。二、规则的数据结构control、parameterLabel、enable、disable、options每条思考规则是一个 JSON 对象声明了五个关键字段请求层依据它们决定如何写入参数。从源码 ModelThinkingConfigDefaultsCollect.kt 中DEFAULT_JSON第 8398 行可以看到规则的完整形态其解析结构在 ThinkingQualityMapping.kt 的ThinkingConfigurationRule.fromJson第 180208 行中体现。字段含义取值示例id规则唯一标识openai-chat-reasoning-effort、gemini-25-thinking-budgetproviders规则适用的供应商集合写入配置后被移除[OPENAI, OPENAI_GENERIC]match模型匹配特征见第三节{modelRegex: [(?:^|/)(?:o[1-9]|gpt-[5-9]|gpt-oss|codex)]}control控件类型levels多档滑块、toggle_only仅开关、unsupported不支持parameterLabel参数标签用于展示reasoning_effort、thinkingBudget、thinking.typeenable/disable开启/关闭思考时写入的动作数组path value{path: thinking.type, value: enabled}options选项数组每项含id、label、path、value{id: high, label: high, path: reasoning_effort, value: high}required可选思考是否强制开启Gemini thinkingLevel、xAI Grok 等为trueendpointSuffix可选端点后缀匹配位于 match 内或规则顶层DeepSeek/responses端点与普通端点区分control在解析时映射为枚举ThinkingQualityControl { LEVELS, TOGGLE_ONLY, UNSUPPORTED }ThinkingQualityMapping.kt。toggle_only规则没有options只依赖enable/disable动作levels规则则通过选项 id 找到对应档位值。每个选项同时携带显示文本、线路值wire value和请求路径——展示给用户的是label写进请求的是pathvalue二者解耦使得显示低/中/高与线路传 low/high可以自由组合。在解析阶段ThinkingModelMatcher第 212263 行会把match中的各类匹配特征统一收集规则还支持enable/disable动作数组、disabledValue推导从 disable 动作中自动提取与parameterLabel同路径的字符串值作为关闭值。三、match 匹配特征前缀、包含项、正则、首段与末段规则通过match对象对模型名做模式匹配匹配特征是ThinkingModelMatcherThinkingQualityMapping.kt中定义的八种匹配特征说明内置规则示例modelPrefix模型名以指定前缀开头gemini-2.5匹配 Gemini 2.5 系列modelContains模型名包含指定子串grok匹配 xAI 全系、glm-5.3/glm-5-3匹配智谱新模型modelSuffix模型名以指定后缀结尾—modelRegex正则匹配模型名(?:^|/)(?:o[1-9]|gpt-[5-9]|gpt-oss|codex)匹配 OpenAI 推理模型firstSegment模型路径按/切分首段精确匹配OpenCode 规则中的google、anthropic、openai、xai、zhipu等lastSegmentPrefix末段以指定前缀开头deepseek-v4、gemini-、claude-、glm-、hunyuan-lastSegmentContains末段包含指定子串glmlastSegmentRegex正则匹配末段—匹配实现第 222238 行会先把模型名小写化、按/切分成段再对所有特征做 OR 判断所有特征都为空时视为通配规则匹配任意模型。这种首段 末段的分段匹配特别适合 OpenRouter、SiliconFlow、OpenCode 这类托管多厂商模型的网关模型名形如google/gemini-2.5-pro、deepseek-ai/deepseek-v4-xxx首段识别供应商、末段识别具体家族比整串正则更直观也更稳。此外规则还支持endpointSuffix端点后缀匹配第 149167 行例如 DeepSeek 分别定义了/responses端点和普通端点两条规则前者写reasoning.effort后者写reasoning_effort因为两条线路的协议字段完全不同。匹配优先级规则数组顺序即优先级规则数组顺序就是匹配优先级界面明确提示按从上到下判断首条命中的启用规则立即生效后续规则不再评估。对应实现见ThinkingQualityMappingRegistry.resolve第 6577 行——用parseRules过滤出enabled true的规则后firstOrNull { it.matches(...) }命中即返回没有任何规则命中时回退为ThinkingQualityMapping.unsupported()control UNSUPPORTED请求层不会写入任何思考参数。解析时的endpointMatches会对端点做去 query、去 fragment、去尾部斜杠、小写化的归一化处理。四、内置规则写入模型配置forProvider 筛选机制规则不是硬编码在 Provider 内部的而是通过收集目录 ModelThinkingConfigDefaultsCollect.kt 提供内置默认集在新建配置或切换供应商时写入模型配置forProvider(providerTypeId)第 400420 行把传入的供应商类型 id 大写化后遍历DEFAULT_JSON中的全部规则筛选出providers或providerTypeIds包含该供应商的规则剥离 providers/providerTypeIds 字段后生成该供应商专属的规则数组返回。请求阶段则只从当前模型配置读取规则不再读取收集目录——收集目录只负责播种默认规则模型配置才是唯一事实来源这一点在 02-settings-and-ui.md 中有明确说明。设置页对规则的维护方式是弹窗表单模型配置页新增思考配置块与模型参数同级外层默认收起展开后只展示每条配置的模型匹配、请求路径和控件摘要点击单条预览进入对应配置的紧凑弹窗写入动作和滑块档位在弹窗内继续折叠。每条规则预览项提供上移/下移操作调整后的顺序随规则配置自动保存从而控制首条命中优先级。模型配置 DataStore 保存thinking_option_idWeb API 使用同名字符串字段见 WebChatModels.kt 中的SerialName(thinking_option_id)声明。滑块直接以当前配置规则解析出的选项数量设置 stops 和 labels切换模型后由当前映射重新计算可用位置。五、各供应商默认规则一份规则表看懂全部能力内置默认集DEFAULT_JSON覆盖了当前接入的全部供应商每条默认规则对应上文第三节的匹配特征形成一张完整的供应商 × 模型家族 → 思考参数能力表供应商 / 协议默认规则要点写出的请求参数OpenAI Chat / 通用推理模型o1-o9、gpt-5、gpt-oss、codex走reasoning_effort五档low/medium/high/xhigh/maxgpt-3/4、chatgpt-等非推理模型标记为unsupportedOpenAI 兼容协议兜底同样写reasoning_effortreasoning_effortOpenAI Responses / Codex写reasoning.effort五档并伴随enable动作reasoning.summary auto、include [reasoning.encrypted_content]关闭时reasoning.effort nonereasoning.effort及伴随字段Gemini 2.5匹配modelPrefix: [gemini-2.5]使用thinkingBudget五档1024/4096/8192/16384/32768开启时generationConfig.thinkingConfig.includeThoughts true关闭时thinkingBudget 0generationConfig.thinkingConfig.thinkingBudget其它 Gemini匹配gemini-3正则使用thinkingLevel四档MINIMAL/LOW/MEDIUM/HIGH且required true强制思考generationConfig.thinkingConfig.thinkingLevelAnthropic 旧型号匹配modelPrefix: [claude-3]使用预算thinking.budget_tokens四档1024/4096/8192/16384thinking.budget_tokensAnthropic 新型号使用adaptive thinking与 effort开启时thinking.type adaptive、thinking.display summarized档位写output_config.effortlow/medium/highoutput_config.effortDeepSeek普通端点写reasoning_effort三档low/high/max开启/关闭联动thinking.type enabled/disabled/responses端点改用reasoning.effort三档reasoning_effort/reasoning.effortOpenRouter / Nous默认示例写reasoning.max_tokens五档1024/8192/16384/32768/65536关闭时reasoning.enabled falsereasoning.max_tokensOpenCode按模型路径首段识别家族google/*→thinkingLevelthinkingConfig.includeThoughtsanthropic/minimax首段 claude-/minimax-末段 → adaptive thinking output_config.effortzhipu/zai-org/thudm首段 glm末段 →reasoning_effortopenai/azure/xai首段 gpt-/grok-/codex→ Responses 协议reasoning.effort兜底走 Chat 协议reasoning_effort按家族区分智谱 GLMglm-5.3/glm-5-3→reasoning_effort三档且requiredglm-5.x-6正则 → high/max 两档glm-4.5→ 仅开关thinking.typereasoning_effort/thinking.typeKimi / MiMo / 豆包均为仅开关toggle_onlythinking.type enabled/disabledthinking.type通义 Qwen3qwen3正则匹配仅开关enable_thinkingenable_thinkingSiliconFlowdeepseek-ai/deepseek-v4*→reasoning_efforthigh/maxrequiredzai-org/tencentglm-/hunyuan-→enable_thinking开关其余 →thinking_budget五档reasoning_effort/enable_thinking/thinking_budgetxAI GrokmodelContains: [grok]reasoning_effort四档low/medium/high/xhighrequiredreasoning_effortNVIDIAgpt-oss/nemotron→reasoning_effort三档其余模板走chat_template_kwargs.enable_thinking开关reasoning_effort/chat_template_kwargs.enable_thinking本地模板MNN / llama.cpp仅开关enable_thinkingenable_thinking智谱、Kimi、MiMo、豆包、SiliconFlow、NVIDIA 和本地模板能力都通过同一套规则结构表达——没有为任何供应商单独写死分支差异全部收敛为 JSON 规则数据。六、请求阶段应用解析规则 → 写入 JSON 路径请求阶段的入口是ThinkingConfigurationApplier.applyThinkingQualityMapping.kt它接收providerTypeId、modelName、apiEndpoint、当前模型配置的thinkingConfigurations、enableThinking开关和optionId选项 id 属于当前模型配置绝不读取全局偏好执行三步解析并匹配规则调用ThinkingQualityMappingRegistry.resolve得到当前模型的ThinkingQualityMapping若control UNSUPPORTED直接返回不写入任何参数。应用模式动作thinkingEnabled enableThinking || mapping.reasoningRequired按开关状态执行enabledActions或disabledActions即规则的enable/disable数组通过applyAction逐条写入。applyAction第 339344 行支持点分路径写入putJsonPath自动创建中间 JSON 对象且默认overwrite false——如果路径已存在则不覆盖避免破坏请求中已有的同名参数。应用档位动作仅当思考开启且control LEVELS时通过optionFor(optionId)找到选中选项并写入其actionspath value。无效选项 id 直接失败绝不静默关键的安全设计optionFor(optionId)找不到选项时第 310311 行会抛出IllegalArgumentException($providerTypeId option is not supported: $optionId)请求直接失败。这样用户选择了一个不存在的档位时系统宁可报错也不会静默改变其选择——避免看起来选了 high 实际发的是 low这类隐蔽的语义漂移。参数回显为模型参数modelParameters第 317337 行把规则应用后的请求 JSON 回显为可展示的ModelParameter列表字符串、整数、浮点、布尔和对象分别映射为对应类型的参数thinkingConfig在 Gemini 协议下归类为ParameterCategory.GENERATION第 466493 行。这让模型参数页能直接展示当前思考配置产生的实际请求字段。各 Provider 请求层都会把enableThinking与规则结果一起传给底层实现例如 GeminiProvider.kt 中的GeminiThinkingConfig第 5181 行依据mapping.optionFor(optionId)的 wire value 类型构造thinkingLevel或thinkingBudget并写入generationConfig.thinkingConfigClaudeProvider.kt、DeepseekProvider.kt等在enableThinking开关分支中同样联动规则动作。七、本地 llama.cppenableThinking 进入 chat template本地推理链路llama.cpp / MNN不经过 HTTP 协议而是把思考开关透传给本地 chat template规则mnn-llama-template-thinking-toggle声明parameterLabel enable_thinkingenable/disable分别写enable_thinking true/false。请求层把enableThinking传入 llama.cpp chat template 的enable_thinking输入字段由模板在本地拼装 prompt 时决定是否注入思考段。这样本地模型与云端模型共用同一套规则表达无需为本地链路单独维护档位逻辑——本地思考只有开关toggle_only符合 llama.cpp 模板的实际能力边界。八、小结与自检清单Provider 能力映射的完整闭环是播种新建配置/切换供应商时ModelThinkingConfigDefaultsCollect.forProvider从内置默认集筛出对应规则写入模型配置维护设置页弹窗表单展示/编辑规则顺序即匹配优先级支持上下移与自动保存匹配请求阶段ThinkingQualityMappingRegistry.resolve按 provider 模型名 端点后缀首条命中规则应用ThinkingConfigurationApplier.apply按 enable/disable 动作与选中 option 的 pathvalue 写入请求 JSON无效选项 id 直接抛错回显规则产物转为ModelParameter供模型参数页展示Android 与 WebChat 共用thinking_option_id字符串字段。排查思考参数问题时可按此顺序核对当前模型配置里是否存在该供应商的规则 → 规则顺序是否让错误规则先行命中 →match特征是否覆盖该模型名注意首段/末段按/切分→control类型是否符合预期 → 选中 option 的 id 是否存在于 options 列表 → enable/disable 动作的 path 是否与协议文档一致尤其注意 DeepSeek 的/responses与普通端点、Gemini 的thinkingBudget与thinkingLevel之分。关键参考文件能力映射规则默认集ModelThinkingConfigDefaultsCollect.kt规则解析、匹配与应用核心ThinkingQualityMapping.ktGemini 思考配置构造GeminiProvider.ktWebChat 协议字段WebChatModels.kt系列文档01-model-options.md · 02-settings-and-ui.md赞分享AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆【免费下载链接】OperitThe most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent项目地址https://gitcode.com/gh_mirrors/op/Operit点击查看免费下载相关推荐Operit 动态思考选项基于 Provider 真实能力的思考强度映射、配置持久化与请求序列化实战Operit 动态思考选项基于 Provider 真实能力的思考强度映射、配置持久化与请求序列化实战 导读 本篇技术指南围绕 OperitAndroid 平AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆GUI 自动化Operit 动态思考选项模型从固定五档整数到 Provider 级字符串选项的架构演进Operit 动态思考选项模型从固定五档整数到 Provider 级字符串选项的架构演进 Operit 在思考强度Thinking Quality控制上完AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆GUI 自动化Spring MVC HandlerMapping 源码剖析从 HTTP 请求到 HandlerExecutionChain 的完整映射链路Spring MVC HandlerMapping 源码剖析从 HTTP 请求到 HandlerExecutionChain 的完整映射链路 本文基于本仓库的文档教程知识库上一篇7个技巧彻底掌握Plain Craft Launcher 2重新定义Minecraft游戏管理体验下一篇7大创意应用方案开源中文字体如何彻底改变你的设计工作流创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

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

03
WHY YAOTU

想打造同款高转化官网?

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

◈

场景化定制

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

◐

营销型架构

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

▲

全周期服务

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

免费获取你的建站方案

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