<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>成本优化 on 超越网</title><link>https://www.chaoyuewang.cn/tags/%E6%88%90%E6%9C%AC%E4%BC%98%E5%8C%96/</link><description>Recent content in 成本优化 on 超越网</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 28 May 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://www.chaoyuewang.cn/tags/%E6%88%90%E6%9C%AC%E4%BC%98%E5%8C%96/index.xml" rel="self" type="application/rss+xml"/><item><title>AI Agent 多模型路由架构：从单一供应商到智能分发</title><link>https://www.chaoyuewang.cn/posts/infra/multi-model-routing-architecture/</link><pubDate>Thu, 28 May 2026 10:00:00 +0800</pubDate><guid>https://www.chaoyuewang.cn/posts/infra/multi-model-routing-architecture/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;2026年Q1，我的AI Agent系统经历了三次重大架构迭代。最初是单一模型驱动，后来发现成本失控和响应不稳定，最终演变成现在的多模型智能路由架构。&lt;/p&gt;
&lt;p&gt;这篇文章记录完整的架构演进过程，以及为什么&amp;quot;智能路由&amp;quot;比&amp;quot;固定模型&amp;quot;更适合生产环境。&lt;/p&gt;
&lt;h2 id="一架构演进历程"&gt;一、架构演进历程&lt;/h2&gt;
&lt;h3 id="11-第一阶段单一模型2025年q1-q2"&gt;1.1 第一阶段：单一模型（2025年Q1-Q2）&lt;/h3&gt;
&lt;p&gt;最初的设计非常简单：所有任务都路由到同一个模型。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;用户请求 → 单一模型 → 响应
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;问题暴露&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;成本不可控：简单任务占用高能力模型资源&lt;/li&gt;
&lt;li&gt;限流风险：供应商API限流时全系统阻塞&lt;/li&gt;
&lt;li&gt;响应延迟：高峰期排队严重&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-第二阶段静态路由2025年q3-q4"&gt;1.2 第二阶段：静态路由（2025年Q3-Q4）&lt;/h3&gt;
&lt;p&gt;根据任务类型手动配置路由规则：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;代码任务 → Model A
文本任务 → Model B
多模态 → Model C
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;改进&lt;/strong&gt;：成本降低约20%，但路由规则僵化，无法适应新场景。&lt;/p&gt;
&lt;h3 id="13-第三阶段智能路由2026年q1至今"&gt;1.3 第三阶段：智能路由（2026年Q1至今）&lt;/h3&gt;
&lt;p&gt;基于任务复杂度、成本、响应时间的动态路由：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;用户请求 → 路由引擎 → 最优模型 → 响应
↓
降级策略（失败时自动切换）
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="二路由引擎设计"&gt;二、路由引擎设计&lt;/h2&gt;
&lt;h3 id="21-任务分类器"&gt;2.1 任务分类器&lt;/h3&gt;
&lt;p&gt;使用轻量级分类器判断任务类型和复杂度：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;判断标准&lt;/th&gt;
&lt;th&gt;权重&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;任务类型&lt;/td&gt;
&lt;td&gt;代码/文本/多模态/数学&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;复杂度&lt;/td&gt;
&lt;td&gt;简单/中等/复杂&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;时效性&lt;/td&gt;
&lt;td&gt;实时/准实时/异步&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;成本敏感&lt;/td&gt;
&lt;td&gt;是/否&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-模型能力矩阵"&gt;2.2 模型能力矩阵&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模型&lt;/th&gt;
&lt;th&gt;代码&lt;/th&gt;
&lt;th&gt;文本&lt;/th&gt;
&lt;th&gt;多模态&lt;/th&gt;
&lt;th&gt;数学&lt;/th&gt;
&lt;th&gt;成本/千token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GLM Coding Lite&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐&lt;/td&gt;
&lt;td&gt;⭐⭐&lt;/td&gt;
&lt;td&gt;¥0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek-V3&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;¥1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SenseNova 6.7&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;¥2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3.5&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;¥5.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-路由决策逻辑"&gt;2.3 路由决策逻辑&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;route_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 1. 分类任务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;task_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;complexity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;assess_complexity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 2. 根据类型选择候选模型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_candidates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 3. 根据复杂度过滤&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;complexity&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;简单&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;filter_by_cost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;complexity&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;复杂&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;filter_by_capability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;min_rating&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 4. 健康检查&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;is_healthy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 5. 选择最优&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;select_optimal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="三降级与容错"&gt;三、降级与容错&lt;/h2&gt;
&lt;h3 id="31-三级降级策略"&gt;3.1 三级降级策略&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;级别&lt;/th&gt;
&lt;th&gt;触发条件&lt;/th&gt;
&lt;th&gt;降级行为&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;L1&lt;/td&gt;
&lt;td&gt;单个模型超时&lt;/td&gt;
&lt;td&gt;切换同类型备选模型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L2&lt;/td&gt;
&lt;td&gt;同类型全部失败&lt;/td&gt;
&lt;td&gt;降级到低成本模型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L3&lt;/td&gt;
&lt;td&gt;所有模型不可用&lt;/td&gt;
&lt;td&gt;返回缓存结果或排队&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="32-熔断机制"&gt;3.2 熔断机制&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;circuit_breaker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;failure_threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 连续失败5次触发熔断&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;reset_timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;60s &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 60秒后尝试恢复&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;half_open_requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 半开状态测试请求数&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-监控指标"&gt;3.3 监控指标&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;成功率&lt;/strong&gt;：目标 &amp;gt; 99.5%&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;平均响应时间&lt;/strong&gt;：目标 &amp;lt; 2s&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;成本/请求&lt;/strong&gt;：目标 &amp;lt; ¥0.05&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;降级频率&lt;/strong&gt;：目标 &amp;lt; 1%/天&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="四成本优化效果"&gt;四、成本优化效果&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指标&lt;/th&gt;
&lt;th&gt;单一模型&lt;/th&gt;
&lt;th&gt;智能路由&lt;/th&gt;
&lt;th&gt;优化幅度&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;月均成本&lt;/td&gt;
&lt;td&gt;¥3,200&lt;/td&gt;
&lt;td&gt;¥1,850&lt;/td&gt;
&lt;td&gt;↓42%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;平均响应时间&lt;/td&gt;
&lt;td&gt;3.2s&lt;/td&gt;
&lt;td&gt;1.8s&lt;/td&gt;
&lt;td&gt;↓44%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;限流事件&lt;/td&gt;
&lt;td&gt;12次/月&lt;/td&gt;
&lt;td&gt;0次/月&lt;/td&gt;
&lt;td&gt;↓100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;任务成功率&lt;/td&gt;
&lt;td&gt;94%&lt;/td&gt;
&lt;td&gt;99.7%&lt;/td&gt;
&lt;td&gt;↑6%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="五实现细节"&gt;五、实现细节&lt;/h2&gt;
&lt;h3 id="51-统一api接口"&gt;5.1 统一API接口&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# config.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;routing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;glm-coding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;deepseek&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;15s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sensenova&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;20s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;claude&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30s&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fallback_order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;glm-coding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;deepseek&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sensenova&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;claude&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="52-健康检查"&gt;5.2 健康检查&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 每30秒检查一次&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s &lt;span class="s2"&gt;&amp;#34;http://model-api/health&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.status&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="53-日志与追踪"&gt;5.3 日志与追踪&lt;/h3&gt;
&lt;p&gt;所有请求记录到日志系统，支持按以下维度分析：&lt;/p&gt;</description><content:encoded><![CDATA[<h2 id="前言">前言</h2>
<p>2026年Q1，我的AI Agent系统经历了三次重大架构迭代。最初是单一模型驱动，后来发现成本失控和响应不稳定，最终演变成现在的多模型智能路由架构。</p>
<p>这篇文章记录完整的架构演进过程，以及为什么&quot;智能路由&quot;比&quot;固定模型&quot;更适合生产环境。</p>
<h2 id="一架构演进历程">一、架构演进历程</h2>
<h3 id="11-第一阶段单一模型2025年q1-q2">1.1 第一阶段：单一模型（2025年Q1-Q2）</h3>
<p>最初的设计非常简单：所有任务都路由到同一个模型。</p>
<pre tabindex="0"><code>用户请求 → 单一模型 → 响应
</code></pre><p><strong>问题暴露</strong>：</p>
<ul>
<li>成本不可控：简单任务占用高能力模型资源</li>
<li>限流风险：供应商API限流时全系统阻塞</li>
<li>响应延迟：高峰期排队严重</li>
</ul>
<h3 id="12-第二阶段静态路由2025年q3-q4">1.2 第二阶段：静态路由（2025年Q3-Q4）</h3>
<p>根据任务类型手动配置路由规则：</p>
<pre tabindex="0"><code>代码任务 → Model A
文本任务 → Model B
多模态 → Model C
</code></pre><p><strong>改进</strong>：成本降低约20%，但路由规则僵化，无法适应新场景。</p>
<h3 id="13-第三阶段智能路由2026年q1至今">1.3 第三阶段：智能路由（2026年Q1至今）</h3>
<p>基于任务复杂度、成本、响应时间的动态路由：</p>
<pre tabindex="0"><code>用户请求 → 路由引擎 → 最优模型 → 响应
                    ↓
              降级策略（失败时自动切换）
</code></pre><h2 id="二路由引擎设计">二、路由引擎设计</h2>
<h3 id="21-任务分类器">2.1 任务分类器</h3>
<p>使用轻量级分类器判断任务类型和复杂度：</p>
<table>
	<thead>
			<tr>
					<th>维度</th>
					<th>判断标准</th>
					<th>权重</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>任务类型</td>
					<td>代码/文本/多模态/数学</td>
					<td>40%</td>
			</tr>
			<tr>
					<td>复杂度</td>
					<td>简单/中等/复杂</td>
					<td>30%</td>
			</tr>
			<tr>
					<td>时效性</td>
					<td>实时/准实时/异步</td>
					<td>20%</td>
			</tr>
			<tr>
					<td>成本敏感</td>
					<td>是/否</td>
					<td>10%</td>
			</tr>
	</tbody>
</table>
<h3 id="22-模型能力矩阵">2.2 模型能力矩阵</h3>
<table>
	<thead>
			<tr>
					<th>模型</th>
					<th>代码</th>
					<th>文本</th>
					<th>多模态</th>
					<th>数学</th>
					<th>成本/千token</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>GLM Coding Lite</td>
					<td>⭐⭐⭐⭐⭐</td>
					<td>⭐⭐⭐</td>
					<td>⭐</td>
					<td>⭐⭐</td>
					<td>¥0.5</td>
			</tr>
			<tr>
					<td>DeepSeek-V3</td>
					<td>⭐⭐⭐⭐⭐</td>
					<td>⭐⭐⭐⭐</td>
					<td>⭐</td>
					<td>⭐⭐⭐⭐⭐</td>
					<td>¥1.0</td>
			</tr>
			<tr>
					<td>SenseNova 6.7</td>
					<td>⭐⭐⭐⭐</td>
					<td>⭐⭐⭐⭐</td>
					<td>⭐⭐⭐⭐⭐</td>
					<td>⭐⭐⭐</td>
					<td>¥2.0</td>
			</tr>
			<tr>
					<td>Claude 3.5</td>
					<td>⭐⭐⭐⭐⭐</td>
					<td>⭐⭐⭐⭐⭐</td>
					<td>⭐⭐</td>
					<td>⭐⭐⭐⭐</td>
					<td>¥5.0</td>
			</tr>
	</tbody>
</table>
<h3 id="23-路由决策逻辑">2.3 路由决策逻辑</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">route_task</span><span class="p">(</span><span class="n">task</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># 1. 分类任务</span>
</span></span><span class="line"><span class="cl">    <span class="n">task_type</span> <span class="o">=</span> <span class="n">classify</span><span class="p">(</span><span class="n">task</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">complexity</span> <span class="o">=</span> <span class="n">assess_complexity</span><span class="p">(</span><span class="n">task</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1"># 2. 根据类型选择候选模型</span>
</span></span><span class="line"><span class="cl">    <span class="n">candidates</span> <span class="o">=</span> <span class="n">get_candidates</span><span class="p">(</span><span class="n">task_type</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1"># 3. 根据复杂度过滤</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">complexity</span> <span class="o">==</span> <span class="s2">&#34;简单&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">candidates</span> <span class="o">=</span> <span class="n">filter_by_cost</span><span class="p">(</span><span class="n">candidates</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">elif</span> <span class="n">complexity</span> <span class="o">==</span> <span class="s2">&#34;复杂&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">candidates</span> <span class="o">=</span> <span class="n">filter_by_capability</span><span class="p">(</span><span class="n">candidates</span><span class="p">,</span> <span class="n">min_rating</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1"># 4. 健康检查</span>
</span></span><span class="line"><span class="cl">    <span class="n">candidates</span> <span class="o">=</span> <span class="p">[</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">candidates</span> <span class="k">if</span> <span class="n">is_healthy</span><span class="p">(</span><span class="n">m</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1"># 5. 选择最优</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">select_optimal</span><span class="p">(</span><span class="n">candidates</span><span class="p">,</span> <span class="n">task</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="三降级与容错">三、降级与容错</h2>
<h3 id="31-三级降级策略">3.1 三级降级策略</h3>
<table>
	<thead>
			<tr>
					<th>级别</th>
					<th>触发条件</th>
					<th>降级行为</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>L1</td>
					<td>单个模型超时</td>
					<td>切换同类型备选模型</td>
			</tr>
			<tr>
					<td>L2</td>
					<td>同类型全部失败</td>
					<td>降级到低成本模型</td>
			</tr>
			<tr>
					<td>L3</td>
					<td>所有模型不可用</td>
					<td>返回缓存结果或排队</td>
			</tr>
	</tbody>
</table>
<h3 id="32-熔断机制">3.2 熔断机制</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">circuit_breaker</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">failure_threshold</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w">        </span><span class="c"># 连续失败5次触发熔断</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">reset_timeout</span><span class="p">:</span><span class="w"> </span><span class="l">60s         </span><span class="w"> </span><span class="c"># 60秒后尝试恢复</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">half_open_requests</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">       </span><span class="c"># 半开状态测试请求数</span><span class="w">
</span></span></span></code></pre></div><h3 id="33-监控指标">3.3 监控指标</h3>
<ul>
<li><strong>成功率</strong>：目标 &gt; 99.5%</li>
<li><strong>平均响应时间</strong>：目标 &lt; 2s</li>
<li><strong>成本/请求</strong>：目标 &lt; ¥0.05</li>
<li><strong>降级频率</strong>：目标 &lt; 1%/天</li>
</ul>
<h2 id="四成本优化效果">四、成本优化效果</h2>
<table>
	<thead>
			<tr>
					<th>指标</th>
					<th>单一模型</th>
					<th>智能路由</th>
					<th>优化幅度</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>月均成本</td>
					<td>¥3,200</td>
					<td>¥1,850</td>
					<td>↓42%</td>
			</tr>
			<tr>
					<td>平均响应时间</td>
					<td>3.2s</td>
					<td>1.8s</td>
					<td>↓44%</td>
			</tr>
			<tr>
					<td>限流事件</td>
					<td>12次/月</td>
					<td>0次/月</td>
					<td>↓100%</td>
			</tr>
			<tr>
					<td>任务成功率</td>
					<td>94%</td>
					<td>99.7%</td>
					<td>↑6%</td>
			</tr>
	</tbody>
</table>
<h2 id="五实现细节">五、实现细节</h2>
<h3 id="51-统一api接口">5.1 统一API接口</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># config.yaml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">routing</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">providers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">glm-coding</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">30</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">10s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">deepseek</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">25</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">15s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">sensenova</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">25</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">20s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">claude</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">20</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">fallback_order</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">glm-coding</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">deepseek</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">sensenova</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">claude</span><span class="w">
</span></span></span></code></pre></div><h3 id="52-健康检查">5.2 健康检查</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 每30秒检查一次</span>
</span></span><span class="line"><span class="cl">curl -s <span class="s2">&#34;http://model-api/health&#34;</span> <span class="p">|</span> jq <span class="s1">&#39;.status&#39;</span>
</span></span></code></pre></div><h3 id="53-日志与追踪">5.3 日志与追踪</h3>
<p>所有请求记录到日志系统，支持按以下维度分析：</p>
<ul>
<li>模型性能对比</li>
<li>路由决策分布</li>
<li>成本趋势分析</li>
<li>错误模式识别</li>
</ul>
<h2 id="六总结">六、总结</h2>
<p>多模型路由架构的核心价值：</p>
<ol>
<li><strong>成本可控</strong>：简单任务用低价模型，复杂任务用高能力模型</li>
<li><strong>稳定性高</strong>：单点故障不影响整体系统</li>
<li><strong>灵活扩展</strong>：新增模型无需修改业务逻辑</li>
<li><strong>数据驱动</strong>：基于真实数据持续优化路由策略</li>
</ol>
<p>如果你也在构建AI Agent系统，我的建议是：<strong>尽早设计路由层</strong>，不要等到成本失控或限流频发时才考虑。</p>
<hr>
<blockquote>
<p><strong>更新日志</strong>：本文基于2026年5月实际架构编写，模型和供应商可能随时间变化，请以实际配置为准。</p>
</blockquote>
]]></content:encoded></item><item><title>多供应商AI服务组合架构：为什么我不用单一API</title><link>https://www.chaoyuewang.cn/posts/infra/multi-provider-ai-architecture/</link><pubDate>Wed, 27 May 2026 13:00:00 +0800</pubDate><guid>https://www.chaoyuewang.cn/posts/infra/multi-provider-ai-architecture/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;过去两年，我经历过三次AI服务供应商切换：从最初的单一供应商依赖，到发现限流和成本问题后的多供应商组合，再到现在的&amp;quot;可编程认知系统&amp;quot;架构。&lt;/p&gt;
&lt;p&gt;这篇文章记录我当前的AI服务组合架构，以及为什么&amp;quot;单一供应商&amp;quot;在长期生产环境中是一个风险点。&lt;/p&gt;
&lt;h2 id="一当前架构概览"&gt;一、当前架构概览&lt;/h2&gt;
&lt;p&gt;我的AI服务组合由四个供应商组成：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;供应商&lt;/th&gt;
&lt;th&gt;模型&lt;/th&gt;
&lt;th&gt;主要用途&lt;/th&gt;
&lt;th&gt;接入方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;智谱AI&lt;/td&gt;
&lt;td&gt;GLM Coding Lite&lt;/td&gt;
&lt;td&gt;代码生成、技术问答&lt;/td&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;多种模型&lt;/td&gt;
&lt;td&gt;文本生成、创意写作&lt;/td&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;DeepSeek-V3&lt;/td&gt;
&lt;td&gt;代码审查、复杂推理&lt;/td&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SenseNova&lt;/td&gt;
&lt;td&gt;6.7 Flash-Lite&lt;/td&gt;
&lt;td&gt;日常协作、多模态&lt;/td&gt;
&lt;td&gt;自定义提供商&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;核心原则&lt;/strong&gt;：没有单一供应商承担超过40%的工作负载。&lt;/p&gt;
&lt;h2 id="二为什么需要多供应商"&gt;二、为什么需要多供应商&lt;/h2&gt;
&lt;h3 id="21-限流风险"&gt;2.1 限流风险&lt;/h3&gt;
&lt;p&gt;2025年Q3，我遇到的第一个限流事件：某供应商在高峰期对API调用实施软限流，返回429错误但不提供明确的重试头信息。当时我的自动化脚本全部阻塞，等待了12分钟才恢复。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;教训&lt;/strong&gt;：单一供应商的限流策略不可控，多供应商可以自动降级。&lt;/p&gt;
&lt;h3 id="22-成本优化"&gt;2.2 成本优化&lt;/h3&gt;
&lt;p&gt;不同供应商的定价策略差异显著：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;简单任务（文本摘要、格式转换）→ 使用低价供应商&lt;/li&gt;
&lt;li&gt;中等复杂度（代码审查、技术文档）→ 使用性价比最优供应商&lt;/li&gt;
&lt;li&gt;高复杂度（架构设计、深度分析）→ 使用高能力供应商&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过任务路由，整体成本比单一使用高能力供应商降低约35%。&lt;/p&gt;
&lt;h3 id="23-能力互补"&gt;2.3 能力互补&lt;/h3&gt;
&lt;p&gt;没有哪个供应商在所有任务上都是最优的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;代码生成&lt;/strong&gt;：GLM Coding Lite 在小型脚本上表现优异&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复杂推理&lt;/strong&gt;：DeepSeek-V3 在多步推理任务上更稳定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;创意写作&lt;/strong&gt;：MiniMax 在中文创意内容上更有表现力&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多模态&lt;/strong&gt;：SenseNova 在图像理解和生成上有独特优势&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三架构实现"&gt;三、架构实现&lt;/h2&gt;
&lt;h3 id="31-统一接入层"&gt;3.1 统一接入层&lt;/h3&gt;
&lt;p&gt;我使用 Hermes Agent 作为统一接入层，配置如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# config.yaml 片段&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;glm-coding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;custom:glm-coding-lite&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;minimax&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;minimax&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;deepseek&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;deepseek&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sensenova&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;custom:sensenova-6.7-flash-lite&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="32-任务路由策略"&gt;3.2 任务路由策略&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;任务类型 → 路由规则
─────────────────────────────────────
代码生成 → glm-coding (优先) → deepseek (降级)
技术问答 → deepseek (优先) → glm-coding (降级)
创意写作 → minimax (优先) → sensenova (降级)
多模态 → sensenova (唯一)
日常协作 → sensenova (优先) → 其他 (降级)
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="33-降级机制"&gt;3.3 降级机制&lt;/h3&gt;
&lt;p&gt;当主供应商不可用时，自动切换到备用供应商：&lt;/p&gt;</description><content:encoded><![CDATA[<h2 id="前言">前言</h2>
<p>过去两年，我经历过三次AI服务供应商切换：从最初的单一供应商依赖，到发现限流和成本问题后的多供应商组合，再到现在的&quot;可编程认知系统&quot;架构。</p>
<p>这篇文章记录我当前的AI服务组合架构，以及为什么&quot;单一供应商&quot;在长期生产环境中是一个风险点。</p>
<h2 id="一当前架构概览">一、当前架构概览</h2>
<p>我的AI服务组合由四个供应商组成：</p>
<table>
	<thead>
			<tr>
					<th>供应商</th>
					<th>模型</th>
					<th>主要用途</th>
					<th>接入方式</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>智谱AI</td>
					<td>GLM Coding Lite</td>
					<td>代码生成、技术问答</td>
					<td>API</td>
			</tr>
			<tr>
					<td>MiniMax</td>
					<td>多种模型</td>
					<td>文本生成、创意写作</td>
					<td>API</td>
			</tr>
			<tr>
					<td>DeepSeek</td>
					<td>DeepSeek-V3</td>
					<td>代码审查、复杂推理</td>
					<td>API</td>
			</tr>
			<tr>
					<td>SenseNova</td>
					<td>6.7 Flash-Lite</td>
					<td>日常协作、多模态</td>
					<td>自定义提供商</td>
			</tr>
	</tbody>
</table>
<p><strong>核心原则</strong>：没有单一供应商承担超过40%的工作负载。</p>
<h2 id="二为什么需要多供应商">二、为什么需要多供应商</h2>
<h3 id="21-限流风险">2.1 限流风险</h3>
<p>2025年Q3，我遇到的第一个限流事件：某供应商在高峰期对API调用实施软限流，返回429错误但不提供明确的重试头信息。当时我的自动化脚本全部阻塞，等待了12分钟才恢复。</p>
<p><strong>教训</strong>：单一供应商的限流策略不可控，多供应商可以自动降级。</p>
<h3 id="22-成本优化">2.2 成本优化</h3>
<p>不同供应商的定价策略差异显著：</p>
<ul>
<li>简单任务（文本摘要、格式转换）→ 使用低价供应商</li>
<li>中等复杂度（代码审查、技术文档）→ 使用性价比最优供应商</li>
<li>高复杂度（架构设计、深度分析）→ 使用高能力供应商</li>
</ul>
<p>通过任务路由，整体成本比单一使用高能力供应商降低约35%。</p>
<h3 id="23-能力互补">2.3 能力互补</h3>
<p>没有哪个供应商在所有任务上都是最优的：</p>
<ul>
<li><strong>代码生成</strong>：GLM Coding Lite 在小型脚本上表现优异</li>
<li><strong>复杂推理</strong>：DeepSeek-V3 在多步推理任务上更稳定</li>
<li><strong>创意写作</strong>：MiniMax 在中文创意内容上更有表现力</li>
<li><strong>多模态</strong>：SenseNova 在图像理解和生成上有独特优势</li>
</ul>
<h2 id="三架构实现">三、架构实现</h2>
<h3 id="31-统一接入层">3.1 统一接入层</h3>
<p>我使用 Hermes Agent 作为统一接入层，配置如下：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># config.yaml 片段</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">providers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">glm-coding</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">provider</span><span class="p">:</span><span class="w"> </span><span class="l">custom:glm-coding-lite</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">30</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">minimax</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">provider</span><span class="p">:</span><span class="w"> </span><span class="l">minimax</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">25</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">deepseek</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">provider</span><span class="p">:</span><span class="w"> </span><span class="l">deepseek</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">25</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">sensenova</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">provider</span><span class="p">:</span><span class="w"> </span><span class="l">custom:sensenova-6.7-flash-lite</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">20</span><span class="w">
</span></span></span></code></pre></div><h3 id="32-任务路由策略">3.2 任务路由策略</h3>
<pre tabindex="0"><code>任务类型 → 路由规则
─────────────────────────────────────
代码生成    → glm-coding (优先) → deepseek (降级)
技术问答    → deepseek (优先) → glm-coding (降级)
创意写作    → minimax (优先) → sensenova (降级)
多模态      → sensenova (唯一)
日常协作    → sensenova (优先) → 其他 (降级)
</code></pre><h3 id="33-降级机制">3.3 降级机制</h3>
<p>当主供应商不可用时，自动切换到备用供应商：</p>
<ol>
<li><strong>检测到错误</strong>（超时、5xx、限流）</li>
<li><strong>记录错误日志</strong>（用于后续分析）</li>
<li><strong>切换备用供应商</strong></li>
<li><strong>通知用户</strong>（仅当所有供应商都不可用时）</li>
</ol>
<h2 id="四代理环境集成">四、代理环境集成</h2>
<p>所有AI API调用都经过 Clash Meta 代理（聚合飞鸟云46节点 + 杜卡迪21节点 = 67节点），确保：</p>
<ul>
<li><strong>网络稳定性</strong>：多节点冗余，单节点故障不影响整体</li>
<li><strong>地理优化</strong>：根据供应商服务器位置选择最优出口节点</li>
<li><strong>合规性</strong>：国内供应商走国内节点，海外供应商走海外节点</li>
</ul>
<h2 id="五成本分析">五、成本分析</h2>
<table>
	<thead>
			<tr>
					<th>项目</th>
					<th>单一供应商</th>
					<th>多供应商组合</th>
					<th>节省</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>月均API调用</td>
					<td>50,000次</td>
					<td>50,000次</td>
					<td>-</td>
			</tr>
			<tr>
					<td>月均成本</td>
					<td>¥1,200</td>
					<td>¥780</td>
					<td>35%</td>
			</tr>
			<tr>
					<td>限流事件</td>
					<td>3次/月</td>
					<td>0次/月</td>
					<td>100%</td>
			</tr>
			<tr>
					<td>平均响应时间</td>
					<td>2.3s</td>
					<td>1.8s</td>
					<td>22%</td>
			</tr>
	</tbody>
</table>
<h2 id="六总结">六、总结</h2>
<p>多供应商AI服务组合的核心价值不是&quot;省钱&quot;，而是<strong>可控性</strong>：</p>
<ol>
<li><strong>限流可控</strong>：一个供应商限流，其他供应商可以承接</li>
<li><strong>成本可控</strong>：根据任务复杂度选择最优供应商</li>
<li><strong>能力可控</strong>：不同任务使用最适合的模型</li>
<li><strong>架构可控</strong>：统一接入层可以灵活调整供应商配置</li>
</ol>
<p>如果你也在构建AI基础设施，我的建议是：<strong>不要把所有鸡蛋放在一个篮子里</strong>，尤其是在生产环境中。</p>
<hr>
<blockquote>
<p><strong>更新日志</strong>：本文基于2026年5月实际架构编写，供应商和模型可能随时间变化，请以实际配置为准。</p>
</blockquote>
]]></content:encoded></item></channel></rss>