
1. OpenClaw 不是“黑盒”而是可拆解的 Token 流水线你有没有遇到过这样的情况刚给 OpenClaw 配好模型 API跑一个简单的金融研报摘要任务控制台就跳出API error: claudes response exceeded the 32000 output token maximum或者在批量处理 50 份 PDF 合同时账单里赫然显示当月 Token 消耗比上月暴涨 3.7 倍——而实际业务量只增加了 12%这不是模型在“偷懒”更不是你在“乱用”而是 OpenClaw 的默认行为模式像一辆出厂未调校的赛车引擎强劲但油门响应迟滞、换挡逻辑僵硬、空转损耗巨大。OpenClaw 的本质是一个面向多模态大模型调用的中间件调度器它不生成内容却深度参与每一次 Token 的诞生与流转。它的核心工作流是接收用户请求 → 解析输入文本/文件/图像→ 拆解为模型可理解的 prompt 结构 → 注入系统指令system prompt、上下文context、历史对话history→ 调用目标模型 API如 Claude、Qwen、GLM→ 接收原始响应 → 进行后处理格式清洗、敏感词过滤、结构化提取→ 返回结果。整个链条中Token 并非均匀消耗而是在几个关键节点呈指数级堆积比如未经裁剪的原始 PDF 提取文本动辄数万字符比如为保证“严谨性”而硬塞进 2000 字的冗长 system prompt比如 history 机制未设上限导致第 10 次交互时前 9 轮对话全被重复携带……这些都不是 Bug而是 OpenClaw 在“通用性”优先设计哲学下的默认路径。我第一次部署 OpenClaw 做信贷合同风险点识别时就栽在这条默认路径上。一份 8 页的 PDF 合同经 OCR 和文本提取后变成 42,681 字符的纯文本OpenClaw 默认将其整段喂给模型并附加了 1,842 字符的风控规则说明和 3,210 字符的历史问答记录。最终单次调用消耗 38,520 tokens其中仅 2,100 tokens 用于生成真正需要的风险结论。换句话说超过 94% 的 Token 花在了“搬运”和“陪跑”上而非“思考”本身。后来我们把这称为“Token 搬运工陷阱”——OpenClaw 很擅长搬运但没人告诉它哪些东西该扔、哪些该精简、哪些根本不用搬。这正是性能调优的起点降本不是压缩模型能力而是让 OpenClaw 成为一个精明的“物流调度员”而不是一个不管不顾的“人肉快递员”。它需要知道什么信息是核心燃料必须带什么是冗余包装可裁剪什么是无效载荷该丢弃。接下来的所有操作都围绕这个认知展开。你不需要改模型权重也不需要重写底层推理代码只需要重新配置 OpenClaw 的“神经反射弧”——调整它对输入的感知阈值、对 prompt 的组装逻辑、对响应的解析粒度。这就像给一台精密仪器重新校准传感器成本几乎为零效果却立竿见影。提示OpenClaw 的 Token 消耗80% 由输入侧input tokens决定仅 20% 由输出侧output tokens决定。这意味着所有优化动作应优先聚焦于“如何让更少的文字承载更多的语义”而非纠结于“怎么让模型少说几个字”。2. 输入侧瘦身从“全文照搬”到“语义切片”的三阶压缩法绝大多数 OpenClaw 的高 Token 消耗根源在于输入文本的“肥胖症”。一份合同、一份财报、一段会议录音转录稿原始文本动辄数万字但模型真正需要的往往只是其中散落的几十个关键字段、几处矛盾条款、或某个特定问题的答案。OpenClaw 默认的“全文喂入”策略等于让一个博士生通读整本《资本论》来回答“马克思在哪一章定义了剩余价值”——效率极低且成本惊人。我们的三阶压缩法就是把这个过程拆解为可控制、可验证、可复用的标准化步骤。2.1 第一阶结构化预筛Pre-Filtering这是成本最低、见效最快的一步发生在 OpenClaw 接收到原始文件后的毫秒级内。核心思想是用轻量级规则引擎在模型介入前就剔除 70% 以上的无意义文本。以 PDF 合同为例我们部署了一个基于正则与关键词的预筛模块页眉页脚清除匹配^第\s*\d\s*页.*$、^\s*©.*\d{4}.*$等模式删除所有页眉页脚行重复条款过滤识别并合并连续出现的“双方确认”、“本协议一式两份”等模板化段落仅保留首次出现非关键章节跳过对“附件”、“签署页”、“目录”等章节标题进行标记后续处理中直接忽略其内容数字与符号净化将¥1,234,567.89统一简化为1234567.89将2023年12月31日简化为2023-12-31减少字符数的同时提升模型识别精度。实测效果一份 42,681 字符的原始合同文本经此阶段后缩减至 12,843 字符直接削减 70% 的输入长度且关键条款一个不少。这个过程由 OpenClaw 内置的pre_filter_rules.yaml配置驱动无需任何 Python 代码只需修改 YAML 文件中的正则表达式和开关项。我们甚至为不同业务线金融、法律、HR维护了独立的规则集切换只需一行配置。2.2 第二阶语义锚点定位Semantic Anchoring预筛解决了“量”的问题但没解决“质”的问题。一份合同里可能有 5 处提到“违约金”但只有第 3 条第 2 款的表述才是最终执行依据。第二阶的目标是让 OpenClaw 学会“精准抓取”而非“地毯搜索”。我们采用“锚点窗口”的双层定位策略锚点Anchor定义业务强相关的关键词组合如[违约, 责任, 赔偿, 损失]或更精确的第[零一二三四五六七八九十\d]条.*?违约.*?责任窗口Window为每个锚点匹配结果划定前后 N 字符的上下文范围。N 值非固定而是动态计算N min(150, max(50, len(anchor_match) * 2))。即锚点越长上下文越宽但绝不超 150 字确保聚焦。这个逻辑通过 OpenClaw 的semantic_extractor.py插件实现。它并非简单地re.findall()而是先用 spaCy 对文本做依存句法分析识别出“违约”一词的主语通常是“乙方”、宾语通常是“甲方”、修饰状语如“无故”、“擅自”再将这些语义单元连同其上下文一并提取。一次典型提取结果如下锚点匹配: 乙方无故单方面解除本合同的应向甲方支付相当于合同总金额20%的违约金 提取窗口 (142 字符): 第三条 合同解除\n3.2 乙方无故单方面解除本合同的应向甲方支付相当于合同总金额20%的违约金。甲方有权从应付乙方款项中直接扣除。相比原始文本这段提取内容仅占 0.33%却承载了 100% 的决策所需语义。更重要的是它把模型的注意力从“找违约金在哪”升级为“分析这个违约金条款是否合理”这才是 AI 应该干的活。2.3 第三阶Prompt 智能组装Dynamic Prompt Assembly前两阶产出的是“干净的原材料”第三阶则是“如何高效下指令”。OpenClaw 默认的 prompt 组装是静态的system_prompt context history user_input。这在简单问答中尚可但在专业场景中等于让厨师每次炒菜都先把整本《中华食谱》背一遍。我们改为“按需加载”的动态组装Context上下文不再整段注入而是根据当前用户 query 的意图标签intent tag从知识库中检索最相关的 3 条规则。例如 query 含“提前还款”则只加载loan_repayment_rules.md中关于“提前还款手续费”的 2 条条款History历史启用history_ttlTime-To-Live机制。每轮对话附带一个时间戳OpenClaw 自动丢弃超过ttl_seconds: 3005 分钟的旧 history且单次最多携带 2 轮而非默认的全部User Input用户输入对提取出的语义片段进行二次精炼。例如将上例中的 142 字符窗口压缩为“违约情形乙方无故单方解约违约金合同总额20%扣款方式甲方直接扣除。”这套逻辑由 OpenClaw 的prompt_assembler.js控制它是一个轻量级 JS 引擎运行在 Node.js 环境中启动开销小于 5ms。我们为不同业务场景如“合同审查”、“财报分析”、“客服话术生成”预置了不同的assembler_config.json切换场景即切换 prompt 组装策略。最终一份原本需 38,520 tokens 的请求经三阶压缩后输入 tokens 降至 2,840降幅达 92.6%且模型输出质量未降反升——因为它的“大脑”不再被海量噪音淹没。注意第三阶的prompt_assembler.js必须与 OpenClaw 的v2.5版本配合使用。低于此版本需手动 patchcore/prompt_builder.py我们已将 patch 补丁打包在openclaw-tuning-kit仓库的patches/目录下一行命令即可应用curl -sL https://git.io/openclaw-patch-v25 | bash。3. 模型层干预QMD 协议与 Token 预估的闭环控制当输入侧压缩做到极致瓶颈就会自然上移到模型调用层。OpenClaw 默认采用标准的 RESTful API 调用模型这带来两个隐性成本一是网络往返延迟RTT不可控二是模型返回的usage字段含prompt_tokens和completion_tokens只能事后统计无法事前干预。这意味着即使你知道这次请求大概率会超限也无力在发送前叫停。QMDQuery Model Directive协议正是为解决这一痛点而生——它不是一个新模型而是 OpenClaw 与模型服务之间的一套“事前协商”机制。3.1 QMD 协议的核心原理从“盲发”到“询价”传统调用流程是线性的OpenClaw → 模型 API → 等待响应 → 解析 usage。QMD 将其重构为一个带反馈的闭环询价请求Quote RequestOpenClaw 在构造完最终 prompt 后不直接发送而是先向模型服务的/v1/qmd/quote端点发送一个轻量请求仅包含model_name、prompt_text已压缩后的文本和max_tokens_hint期望的最大输出长度预估响应Quote Response模型服务需支持 QMD基于其内部 tokenizer 和轻量预测模型快速返回一个 JSON{ estimated_prompt_tokens: 2840, estimated_completion_tokens: 1250, estimated_total_tokens: 4090, confidence_score: 0.98, warning: prompt contains 3 potential ambiguity points; consider adding clarifying context }决策与执行Decision DispatchOpenClaw 根据estimated_total_tokens与预设的token_budget如 5000对比。若4090 5000则进入标准调用流程若接近阈值如4800 5000 * 0.95则触发budget_alert事件可选择a) 自动追加澄清指令如“请用不超过 200 字总结”b) 切换至更经济的模型如从claude-3-opus切至claude-3-haikuc) 拒绝请求并返回422 Unprocessable Entity及详细原因。这个机制的关键在于它把“Token 预估”从一个黑箱统计变成了一个可编程、可干预的业务逻辑。我们在线上环境部署 QMD 后token exchange failed类错误下降了 99.2%因为绝大多数潜在超限请求在发送前就被拦截并优雅降级。3.2 实现 QMDOpenClaw 侧的三步改造QMD 协议的落地不依赖模型服务商OpenClaw 侧即可完成 80% 的工作。我们以对接阿里云百炼平台为例说明具体改造第一步启用 QMD 模式开关在config.yaml中添加model_provider: aliyun_bailian: qmd_enabled: true qmd_endpoint: https://dashscope.aliyuncs.com/v1/qmd/quote token_budget: 5000 fallback_model: qwen-max # 当主模型超限时的备选第二步编写 QMD 适配器Adapter创建adapters/qmd_aliyun.py核心逻辑是将 OpenClaw 的prompt_text进行 Base64 编码避免特殊字符干扰构造标准 QMD 请求体包含model,input,parameters.max_tokens设置超时为500msQMD 询价必须快否则拖慢整体 RTT解析响应提取estimated_total_tokens并与token_budget比较。第三步集成预算决策引擎Budget Engine在core/budget_engine.py中定义决策树def decide_action(est_tokens, budget): if est_tokens budget * 0.8: return proceed # 安全直接调用 elif est_tokens budget * 0.95: return clarify # 风险追加指令 else: return fallback # 高危切换模型或拒绝当decide_action返回clarify时OpenClaw 会自动在 prompt 开头插入一行【指令】请严格控制在 150 字以内作答仅输出结论不要解释。。这一行仅增加 22 tokens却能将平均输出长度从 420 字压至 138 字completion_tokens下降 67%。这套 QMD 改造我们已在生产环境稳定运行 4 个月。数据显示单次请求的平均prompt_tokens为 2,840与前文三阶压缩一致completion_tokens从均值 3,120 降至 1,040总 tokens 消耗从 5,960 稳定在 3,880降幅 34.9%。结合输入侧的 92.6% 降幅综合效果正是标题所言的“降低 90%”。提示QMD 的最大价值不在于省了多少 tokens而在于它赋予了 OpenClaw “成本意识”。当一个请求的成本可以被实时量化业务方就能做出真正的 ROI 决策——比如为“高管薪酬分析”这类高价值任务分配 8000 tokens 预算而为“日报摘要”这类常规任务锁定 1500 tokens 上限。4. 输出侧治理从“原样返回”到“结构化蒸馏”的精准交付输入瘦身与模型干预解决了“进来的少”但若“出去的多”依然会造成浪费。OpenClaw 默认的输出处理是将模型返回的原始 JSON含content,usage,id,created等字段不做任何加工直接透传给下游。这看似“透明”实则埋下两大隐患一是下游应用如前端页面、BI 工具不得不自己解析content字段增加了耦合二是模型常在content中夹带大量解释性文字、分隔符、甚至调试信息如// 以下是根据您提供的合同条款分析...这些对业务毫无价值却计入completion_tokens并被存储。我们的输出侧治理核心是“结构化蒸馏”——将模型的“思考过程”与“最终答案”彻底分离只交付业务真正需要的“纯净晶体”。4.1 蒸馏协议Distillation Protocol的设计我们定义了一套轻量级的蒸馏指令语法嵌入在 system prompt 的末尾作为对模型的明确约束【蒸馏指令】 - 请将最终结论严格封装在 answer/answer XML 标签内 - 所有推理过程、背景说明、不确定性提示必须放在 reasoning/reasoning 标签内 - 若结论为结构化数据如列表、表格请用 Markdown 格式置于 answer 标签内 - 严禁在 answer 标签外输出任何与结论相关的信息 - 若无法确定请在 answer 中输出 NULL。这个指令看似简单却经过了 27 轮 A/B 测试才最终确定。早期我们尝试过 JSON Schema、YAML、甚至自定义 DSL但发现模型对 XML 标签的遵循率最高98.7%且answer和reasoning的语义边界清晰极少混淆。更重要的是XML 标签本身极短answer仅 9 字符远低于 JSON keyconclusion:12 字符或 YAML keyconclusion:10 字符进一步节省 tokens。4.2 OpenClaw 的蒸馏解析器Distiller有了蒸馏指令还需一个可靠的解析器。我们在 OpenClaw 的post_processor.py中新增了Distiller类其工作流程如下标签提取使用re.search(ranswer(.*?)/answer, raw_content, re.DOTALL)提取answer内容。re.DOTALL确保能跨行匹配安全校验检查提取内容是否为空、是否包含未闭合标签、是否含有明显 HTML/JS 代码防 XSS格式归一化若answer内为 Markdown 表格调用markdown-it库将其转换为标准 CSV 字符串便于下游数据库导入元数据注入在最终返回的 JSON 中添加distilled_at: timestamp、reasoning_length: len(reasoning_text)等字段供监控与审计。这个解析器的妙处在于它完全解耦了模型的“自由发挥”与业务的“确定性需求”。模型可以在reasoning里天马行空地论证只要answer是干净的业务系统就拿到了确定性结果。我们曾用同一份合同让 Claude-3-Haiku 和 Qwen-2-72B 同时运行两者reasoning长度相差 3.2 倍但answer内容完全一致且解析耗时均小于 8ms。4.3 蒸馏带来的连锁降本效应蒸馏不仅是输出格式的改变它触发了一系列连锁的降本效应存储成本下降原始模型响应平均 4,200 字符蒸馏后answer平均仅 320 字符reasoning平均 1,850 字符。我们将reasoning设为ttl1h的临时缓存Redis仅answer永久存入 PostgreSQL。单次请求的持久化存储量下降 92%网络带宽节省下游服务如前端只需拉取answer部分API 响应体大小从均值 4.1KB 降至 0.33KBCDN 流量成本下降 92%下游处理加速BI 工具解析一个answer的 CSV 表格比解析完整 JSON 快 17 倍报表生成延迟从 2.3s 降至 0.14sToken 二次压缩最关键的是reasoning部分虽被模型生成但因其不进入下游业务流我们可在 OpenClaw 日志中将其log_level: debug不计入任何计费 tokens。这相当于为模型的“思考”开辟了一条免费通道。在金融风控场景中我们要求模型对每份合同输出“风险等级高/中/低”、“核心风险点最多3条”、“建议措施最多2条”。蒸馏前模型常输出 800 字的分析报告蒸馏后answer稳定在 120 字左右的结构化 JSON{ risk_level: 高, key_risks: [乙方单方解约违约金比例过高20%, 甲方免责条款过于宽泛, 争议解决地约定不明], recommendations: [协商将违约金比例下调至10%, 明确争议解决地为上海仲裁委员会] }这 120 字就是业务系统真正需要的全部。其余 680 字的“思考”已通过蒸馏协议被精准地隔离、归档、并从成本核算中剔除。注意蒸馏协议的成功高度依赖模型对指令的遵循度。我们实测发现Claude-3 系列、Qwen-2 系列、GLM-4 系列的遵循率均 98%而部分开源小模型如 Phi-3仅为 62%。因此务必在model_provider配置中为蒸馏场景指定高遵循率模型切勿混用。5. 全链路监控与成本仪表盘让每一 token 都可追溯、可归因所有优化手段若缺乏可观测性终将沦为“黑箱玄学”。我们为 OpenClaw 部署了一套全链路 Token 成本监控体系其核心不是“看总量”而是“看流向”——精确到每一次请求、每一个环节、每一类业务让成本归因变得像查快递物流一样清晰。5.1 四层埋点从网络到业务的穿透式追踪我们在 OpenClaw 的关键路径上植入了四层埋点形成完整的数据血缘L1 网络层在http_client.py的send_request()方法入口记录request_id、model_endpoint、raw_prompt_length、start_timeL2 输入层在pre_filter.py和semantic_extractor.py执行后记录filtered_length、extracted_chunks_count、anchor_matchesL3 模型层在qmd_adapter.py的get_quote()和dispatch_call()后记录qmd_estimated_tokens、actual_prompt_tokens、actual_completion_tokens、model_usedL4 输出层在distiller.py的parse_answer()后记录distilled_length、reasoning_length、business_intent从 query 中提取的业务标签如contract_review、earnings_analysis。所有埋点数据统一格式为 OpenTelemetry 的Span通过 Jaeger Agent 发送至中央收集器。一个典型的 Span 链路如下图所示此处为文字描述非 Mermaid 图表Span: request_idabc123 ├─ L1: http_client.send_request - modelclaude-3-haiku, raw_len42681, ts1712345678.123 ├─ L2: pre_filter.run - filtered_len12843, ts1712345678.125 ├─ L2: semantic_extractor.run - extracted3 chunks, ts1712345678.128 ├─ L3: qmd_adapter.get_quote - est_tokens3880, ts1712345678.132 ├─ L3: qmd_adapter.dispatch_call - actual_prompt2840, comp1040, ts1712345678.145 └─ L4: distiller.parse_answer - distilled_len120, reasoning_len1850, intentcontract_review, ts1712345678.148这个链路能在 1 秒内完成从请求发起到所有埋点数据入库的全过程。我们用它构建了两个核心看板。5.2 成本热力图Cost Heatmap一眼锁定“吞金兽”这是一个二维矩阵看板X 轴是business_intent业务意图Y 轴是model_used所用模型单元格内显示该组合的平均单次请求 tokens 消耗与该组合占总消耗的比例。例如business_intent \ model_usedclaude-3-haikuqwen-maxglm-4contract_review2,840 (32%)4,120 (18%)3,650 (15%)earnings_analysis3,210 (12%)5,890 (25%)4,320 (10%)customer_service1,050 (8%)1,870 (5%)1,420 (3%)这张图的价值在于它瞬间暴露了问题earnings_analysis用qwen-max的平均消耗高达 5,890 tokens且占总消耗的 25%是名副其实的“吞金兽”。点击该单元格可下钻查看其 L2/L3/L4 的详细埋点数据发现其raw_prompt_length平均达 68,200 字符因财报 PDF 更大且qmd_estimated_tokens与actual_prompt_tokens偏差较大±15%说明预筛规则对该业务不够精准。于是我们针对性地为earnings_analysis意图优化了 PDF 表格 OCR 的后处理规则将raw_prompt_length从 68,200 压至 21,500单次消耗直降 42%。5.3 Token 归因分析Token Attribution谁该为这 1000 tokens 负责这是最精细的分析维度。我们开发了一个 CLI 工具openclaw-cost-attrib输入一个request_id它能输出该请求的 tokens 消耗构成饼图此处为文字描述Request ID: abc123 Total Tokens: 3,880 ├─ Input Side (2,840 tokens, 73.2%) │ ├─ Raw PDF Text: 42,681 chars → 2,100 tokens (54.1%) │ ├─ Pre-Filtering Savings: -1,200 tokens (30.9%) │ └─ Semantic Extraction: 240 tokens (6.2%) ├─ Model Overhead (1,040 tokens, 26.8%) │ ├─ System Prompt: 320 tokens (8.2%) │ ├─ History Context: 180 tokens (4.6%) │ └─ Output Generation: 540 tokens (13.9%) └─ Output Side (0 tokens, 0%) └─ Distillation Overhead: -22 tokens (negligible)这个归因让我们能精准问责Raw PDF Text贡献了 54.1% 的 tokens说明 OCR 引擎或 PDF 解析库是优化重点System Prompt占 8.2%提示我们检查system_prompt.md是否有冗余内容。更重要的是它证明了所有优化手段的效果——Pre-Filtering Savings的 -1,200 tokens是实实在在从账单上抹去的。这套监控体系上线后我们团队的优化节奏从“凭经验猜测”变为“数据驱动决策”。每周一晨会我们只看一张图Cost Heatmap的周环比变化。哪个单元格变红增长 5%哪个业务线的负责人就要带着归因分析来汇报。三个月下来整体 Token 消耗曲线持续下行且再未出现单日突增的异常峰。提示全链路监控的数据采集本身会产生微小开销约 0.3% 的额外 tokens。我们通过将埋点日志的采样率设为10%高流量时段和100%低流量时段并在jaeger-collector中配置sampling.strategies实现了监控精度与性能开销的完美平衡。具体配置已在openclaw-tuning-kit/docs/monitoring.md中详述。6. 本地化部署与离线推理QMD 协议的终极形态当所有云端优化手段都已用尽还有一条终极降本路径让 OpenClaw 的核心逻辑尽可能靠近数据源甚至完全脱离公网。这并非要你放弃大模型而是将 OpenClaw 从一个“云端调用代理”转变为一个“本地智能网关”。其技术核心是将 QMD 协议的“询价”能力下沉到本地运行的轻量级模型上实现真正的“离线预估、在线决策”。6.1 为什么需要本地 QMD云端的三大软肋我们曾以为只要把 OpenClaw 部署在阿里云 VPC 内就足够安全高效。但线上压测暴露了三个无法回避的软肋软肋一网络抖动放大。一次qmd/quote请求理想 RTT 是 50ms但公网波动下15% 的请求 RTT 300ms。当 OpenClaw 每秒处理 200 个请求时这 15% 的延迟会像滚雪球一样拖垮整个队列导致 P99 延迟从 120ms 暴涨至 2.3s软肋二厂商锁定加深。所有 QMD 询价都指向百炼的/v1/qmd/quote一旦百炼服务升级或变更接口OpenClaw 就得同步发版敏捷性荡然无存软肋三敏感数据外泄。金融客户的合同原文在询价阶段就已发送至百炼服务器。尽管有合规承诺但“数据不出域”是很多客户不可妥协的红线。本地 QMD就是为斩断这三根软肋而生。它的理念是用一个 500MB 的小型模型承担 95% 的 Token 预估工作只将最终确认的、精简后的请求发送给云端大模型。6.2 本地 QMD 模型TinyTokenizer 的选型与训练我们没有从头训练而是基于 Hugging Face 的bert-base-chinese进行蒸馏与微调产出openclaw-tinytokenizer模型。其设计哲学是“够用就好”输入仅接受 UTF-8 编码的文本字符串最大长度 8192 字符覆盖 99.9% 的业务场景输出一个浮点数代表预估的total_tokens精度要求 ±5%训练数据我们爬取了 12 万条真实的 OpenClaw 请求日志已脱敏每条日志包含raw_prompt和对应的actual_total_tokens。用bert-base-chinese的tokenize()方法计算其len(tokenized_input)作为监督信号微调目标最小化预估值与真实值的 MAEMean Absolute Error。经过 3 个 epochMAE 稳定在 32.7 tokens对于平均 3,880 tokens 的请求误差率仅为 0.84%。这个模型体积仅 482MB可在 8GB 内存的群晖 NAS 或普通笔记本上以onnxruntime加速运行单次预估耗时 15msCPU远低于云端 QMD 的 50ms 基线。6.3 OpenClaw 的本地 QMD 集成无缝切换的双模架构集成本地 QMD无需改动 OpenClaw 的核心逻辑只需在config.yaml中启用hybrid_qmd模式model_provider: aliyun_bailian: qmd