蓝耘智能路由+ RPA 处理30条数据:同一个脚本,自动切换模型

0 阅读14分钟

在这里插入图片描述

前言

我平时刷知乎热榜的时候,经常有一个困扰:热榜上30个问题,难度差别太大了。

有的问题很简单,比如“太阳系的8颗行星在地球上用肉眼能看到几颗”,一句话就能说清楚。有的问题很复杂,比如“国安部通报境外组织借医疗检测非法采血样”,涉及生物安全、法律、国际关系多个维度,需要深度分析。

如果都用同一个模型处理,要么是杀鸡用牛刀——简单问题用了太贵的模型;要么是小马拉大车——复杂问题用便宜模型答不到位。

蓝耘的智能路由刚好解决这个问题。它可以根据任务难度自动匹配模型,不需要我在代码里写一堆 if/else 判断。这篇文章记录了完整的实测过程:30条知乎热榜问题,同一个脚本,看蓝耘怎么自动调度模型。

如果你也在做批量文本处理,或者手头有大量异构任务需要跑模型,这套方案可以直接复用。

一、什么是智能路由

先解释一下概念。

平时调用大模型 API,你需要指定具体用哪个模型——比如 model=deepseek-v3.2 或者 model=glm-5.1。每次都要自己判断:这个问题该用便宜的还是贵的?

智能路由的逻辑是:你不需要指定模型,只需要创建一个路由任务,配置好模型池(比如同时放轻量模型、均衡模型、强推理模型),然后调用时填路由 ID 就行。平台会自动分析任务复杂度,从模型池里挑最合适的那个来执行。

这就好比你去餐厅吃饭,不用自己研究菜单,只需要告诉服务员“我想吃清淡点的”,他会帮你推荐。蓝耘的智能路由提供的策略包括:效果优先(全部走最强模型)、成本优先(简单任务走轻量模型)、平衡模式(动态权衡)。

二、为什么需要智能路由

在动手之前,先想清楚一个问题:为什么不直接用最贵的模型?

答案很简单:成本和质量之间需要平衡。

我算过一笔账。如果用最强的推理模型处理所有30条知乎热榜问题,每条任务消耗的Token和费用大概是现在的3到5倍。但实际上,30条问题里有超过一半是简单问题——像“太阳系的8颗行星肉眼能看到几颗”这种,用轻量模型完全够用,没必要上旗舰模型。

智能路由解决的就是这个问题。它把“判断该用哪个模型”这件事从代码里抽出来,交给平台去做。我只需要在代码里填一个路由 ID,具体用哪个模型由平台决定。

更重要的是,路由策略可以在平台侧随时调整。今天觉得质量不够,换一个更激进的模型池;明天觉得成本太高,把轻量模型的比例调大。所有调整都在控制台完成,不需要改一行代码。

这就是“把模型切换交给平台”的核心价值。

在这里插入图片描述

三、准备工作

在这里插入图片描述

3.1 注册并获取 API Key

官网:https://maas.lanyun.net/

在这里插入图片描述

在左侧导航栏找到「API管理」→「密钥管理」,点击「创建 API Key」。系统会生成一串密钥,复制保存好,这是后续所有操作的唯一凭证。

在这里插入图片描述

蓝耘元生代 MaaS 提供 OpenAI 兼容入口,Base URL 为 https://maas-api.lanyun.net/v1。这意味着所有调用代码和调用 OpenAI 完全一致,只需要把 base_url 换成蓝耘的地址。

然后去「模型广场」确认要用模型的调用路径。这次实验我主要用到 MiniMax-M2.5 和 Qwen3.7-Plus 两个模型,但具体哪条任务走哪个模型,由智能路由自动决定。

3.2 安装 Python 依赖

pip install openai pandas

3.3 用影刀 RPA 采集知乎热榜

这次实验的数据来源是知乎热榜,用影刀 RPA 采集,不需要写爬虫代码。

打开影刀,创建 PC 端机器人,命名「知乎热榜采集」。流程编排如下:

  1. 打开/新建 Excel:打开已有的 Workbook.xlsx,把 Excel 对象保存到 excel_instance
  2. 打开网页:用 Microsoft Edge 打开 https://www.zhihu.com/hot
  3. 批量数据抓取(第一次):在网页中抓取「标题」列,结果保存到 web_data_table
  4. 批量数据抓取(第二次):在网页中抓取「描述」列,结果保存到 web_data_table2
  5. 写入内容至 Excel 工作表:把 web_data_table 写入第 1 行 A 列
  6. 写入内容至 Excel 工作表:把 web_data_table2 写入第 1 行 B 列
  7. 关闭 Excel:保存并关闭 excel_instance
  8. Excel 转 CSV:把 Workbook.xlsx 转换为 CSV 格式,保存到桌面 rpa_data 文件夹

之所以要绕一下,先写 Excel 再转 CSV,是因为如果直接用影刀导出 CSV,桌面会同时出现一个 Excel 文件和一个 CSV 文件,多一个文件看着乱。先写 Excel 再转 CSV,输出目录里就只有一个 zhihu_hot.csv,干净。

在这里插入图片描述

运行流程,采集完成后检查 CSV 文件。如果 CSV 没有表头,在第一行手动加上 title,desc。

在这里插入图片描述

3.4 创建智能路由任务

登录蓝耘控制台,左侧菜单找到「模型服务」→「智能路由」,点击「创建路由」。

在这里插入图片描述

我配置的参数如下:

配置项值
任务名称知乎热榜分级摘要
路由策略平衡模式
模型池通用路由(平台默认包含多个模型)

保存后,复制路由任务 ID。这个 ID 就是后续代码里要填的 ROUTER_ID。

路由策略有三种可选:效果优先(全部走最强模型)、成本优先(简单任务走轻量模型)、平衡模式(动态权衡)。我选了平衡模式,因为这次实验的目的就是验证“平台能不能自动区分任务难度”。 在这里插入图片描述

四、核心代码

新建Python脚本,核心逻辑分四步:读数据 → 判断难度 → 调路由 → 输出结果。

import pandas as pd
import json
import time
from datetime import datetime
from openai import OpenAI

# ===== 配置区 =====
API_KEY = "你的蓝耘API_KEY"
BASE_URL = "https://maas-api.lanyun.net/v1"
ROUTER_ID = "你的任务id"
MAX_TOKENS = 500
# ==================

client = OpenAI(api_key=API_KEY, base_url=BASE_URL)

def classify_difficulty(title, desc):
    """根据关键词给任务打难度标签"""
    text = f"{title} {desc}".lower()
    if any(kw in text for kw in ["是什么", "怎么用", "如何理解", "有哪些"]):
        return "easy"
    elif any(kw in text for kw in ["影响", "背后", "逻辑", "趋势", "未来"]):
        return "hard"
    else:
        return "medium"

def summarize(title, desc, difficulty):
    """调用蓝耘智能路由生成摘要"""
    prompt_map = {
        "easy": f"用一句话回答:{title}。补充:{desc}",
        "medium": f"从多角度分析,给出核心观点和理由:{title}。补充:{desc}",
        "hard": f"结构化深度分析,输出背景、核心矛盾、各方观点、潜在影响:{title}。补充:{desc}"
    }
    start = time.time()
    response = client.chat.completions.create(
        model=ROUTER_ID,
        messages=[{"role": "user", "content": prompt_map[difficulty]}],
        max_tokens=MAX_TOKENS,
        temperature=0.3
    )
    elapsed = int((time.time() - start) * 1000)
    content = response.choices[0].message.content
    model_used = getattr(response, "model", "unknown")
    usage = response.usage
    return content, model_used, elapsed, usage.prompt_tokens, usage.completion_tokens

# 读取数据
df = pd.read_csv("zhihu_hot.csv")

print(f"任务数: {len(df)}; 线路: route:{ROUTER_ID}")
print(f"单次输出上限 {MAX_TOKENS} tokens\n")

results = []
total_prompt = 0
total_completion = 0
success = 0

for idx, row in df.iterrows():
    task_id = f"T{idx+1:02d}"
    title = str(row["title"])[:20]
    difficulty = classify_difficulty(row["title"], row["desc"])

    try:
        summary, model_used, elapsed, pt, ct = summarize(row["title"], row["desc"], difficulty)
        total_prompt += pt
        total_completion += ct
        success += 1
        print(f"[route] {task_id} {title} -> response_model={model_used} {elapsed}ms")
        results.append({
            "id": task_id,
            "title": row["title"],
            "difficulty": difficulty,
            "summary": summary,
            "model_used": model_used,
            "latency_ms": elapsed,
            "prompt_tokens": pt,
            "completion_tokens": ct
        })
    except Exception as e:
        print(f"[route] {task_id} {title} -> ERROR: {e}")
        results.append({"id": task_id, "error": str(e)})

timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
print(f"\n完成: 成功 {success}/{len(df)}, prompt tokens {total_prompt}, completion tokens {total_completion}")
output_file = f"results-{timestamp}.json"
with open(output_file, "w", encoding="utf-8") as f:
    json.dump(results, f, ensure_ascii=False, indent=2)
print(f"结果已写入 {output_file}")

在这里插入图片描述

五、实测结果:30条任务的完整调度记录

运行脚本后,终端逐条输出了30个任务的执行情况。

在这里插入图片描述

以下是完整的运行记录,包含了每条任务的实际响应模型和耗时:

任务ID标题(截取)难度实际响应模型耗时(ms)
T01女网红参加柏林马拉松比赛,却通过骑自行车mediumminimax/minimax-m2.527596
T02国安部通报境外组织借医疗检测非法采血样hardqwen3.7-plus50632
T03西游记里的人参果这么好,为什么妖怪不去抢easyminimax/minimax-m2.515613
T04《艾希:续》众筹突破2000万,制作人直播下跪mediumminimax/minimax-m2.59090
T0530岁女子靠AI婚庆培训年入200万mediumminimax/minimax-m2.513265
T06如何看待台独分子沈伯洋竞选台北市长mediumminimax/minimax-m2.510777
T07乘联分会称2026年1-8月中国占世界汽车份额回落hardqwen3.7-plus9945
T08武侠游戏里「朝廷」永远不参与江湖纷争mediumminimax/minimax-m2.521618
T09为什么感觉在店里喝到的茶叶,总比自己泡的好喝easyminimax/minimax-m2.58760
T10苏超1/4决赛首回合,无锡队3:0徐州队mediumminimax/minimax-m2.519435
T11为什么现在老外纷纷开始给游戏加中文mediumminimax/minimax-m2.516296
T12小学防欺凌信箱开出四个月前的求助信mediumminimax/minimax-m2.518282
T13如何评价《绿灯军团》第八集mediumminimax/minimax-m2.515678
T14你对于2026年诺贝尔生理学或医学奖的预测hardminimax/minimax-m2.524813
T15为何日本的铁轨坚持不和世界统一mediumminimax/minimax-m2.517611
T16在中部-2026演习当中,各国军队都展示了哪些新装备mediumminimax/minimax-m2.515902
T17《哈利波特与死亡圣器》里哈利三人第七年没去学校mediumminimax/minimax-m2.519569
T18《布达佩斯大饭店》中大面积用粉色为什么不觉得土mediumminimax/minimax-m2.515317
T19太阳系的8颗行星,在地球上用肉眼能看到几颗easyminimax/minimax-m2.510039
T20我总感觉昆虫从受到致命伤到完全死亡需要的时间mediumminimax/minimax-m2.510078
T21如何看待张家齐发长文告别综艺《我家那闺女》mediumminimax/minimax-m2.511218
T22都说阅读可以提高语文成绩,那么看网络小说算不算mediumminimax/minimax-m2.516184
T23国庆假期已过半,你是在家休息还是外出赶场easyminimax/minimax-m2.59687
T24为什么计划做得越详尽,反而却越难以开始行动mediumminimax/minimax-m2.58857
T25《原神》中至冬的民用科技是否真的触碰到天理mediumminimax/minimax-m2.514732
T26年内13家酒企相继换帅,数位老将退出行业一线mediumminimax/minimax-m2.510739
T27多位游客分享用AI做旅游攻略的踩坑经历mediumminimax/minimax-m2.513445
T28孩子说周末就要睡个懒觉,不要叫他easyminimax/minimax-m2.512902
T292026中网男单1/4决赛,德约科维奇2-1逆转mediumminimax/minimax-m2.510242
T30欧国联A级联赛第4轮,葡萄牙2比1挪威mediumminimax/minimax-m2.520346

从输出结果看,蓝耘的智能路由在30条任务中实际调度了2个不同的模型:

模型调用次数占比Token消耗总量消费金额
MiniMax-M2.52893.3%17032¥0.11
Qwen3.7-Plus26.7%3600¥0.03

在这里插入图片描述

被路由到 Qwen3.7-Plus 的两条任务是:

  • T02:国安部通报境外组织借医疗检测非法采血样(描述约400字,涉及生物安全、法律、国际关系)
  • T07:乘联分会称2026年1-8月中国占世界汽车份额回落至32%(描述约300字,涉及行业数据、多国对比)

这两条的共同特征是:描述文本长、涉及多维度信息、需要综合推理。路由把这两条判定为复杂任务,分配给了推理能力更强的 Qwen3.7-Plus。其余28条描述相对简短、话题相对集中,路由统一分配给了 MiniMax-M2.5。

整体完成情况:

指标结果
总任务数30
成功30/30(100%)
prompt tokens5759
completion tokens14873
总token20632
估算费用≈0.14元

蓝耘控制台的监控数据也印证了这个结果:

指标数值
模型总量2
调用总数30
token消耗数20632

在这里插入图片描述

六、这个结果说明了什么

智能路由确实在动态调度

30条任务里,28条走了 MiniMax-M2.5,2条走了 Qwen3.7-Plus。路由不是随机分配,而是根据任务描述的长度和复杂度做的判断。T02和T07的描述明显比其他28条长,路由把它们识别为需要更强推理的任务,分配给了不同的模型。

这说明智能路由不是“摆设功能”——它在真实任务里确实做了差异化调度。

统一网关省掉了模型切换的代码

如果用传统的逐模型调用方式,我需要先判断“这条任务该用哪个模型”,然后在代码里写 if/else。但智能路由把这件事交给了平台:代码里只需要填一个 ROUTER_ID,具体用哪个模型由平台决定。

这意味着同一套代码可以适配不同难度的任务,不需要为每个模型写不同的调用逻辑。

七、成本与效率

这次实测30条任务的总消耗:

指标数值
prompt tokens5759
completion tokens14873
总token20632
估算费用≈0.14元

平均每条任务消耗约688个token,花费不到0.5分钱。

按每天处理100条知乎热榜问题计算,一个月总成本约14元。而省下来的是:不需要人工判断每条任务该用哪个模型,不需要在代码里维护多套模型调用逻辑。

在这里插入图片描述

八、为什么选蓝耘

这次实测下来,蓝耘的智能路由在三个点上表现突出:

第一,路由是平台级能力,不是简单的API封装。

很多平台的“多模型支持”只是提供了一个模型列表,你需要自己判断该用哪个。蓝耘的智能路由是在平台层面做了任务分析和模型匹配,用户不需要写任何判断逻辑。

第二,OpenAI兼容格式让迁移零成本。

调用路由的代码和调用普通模型完全一样——client.chat.completions.create(),只需要把 model 字段从具体模型名换成路由ID。整个迁移过程改一行代码。

第三,按量计费,30条任务0.14元。

这个成本意味着我可以随时跑实验、随时调整路由策略,不用担心账单。根据AI Ping的公开评测数据,蓝耘平台上的模型吞吐在同类平台中处于领先水平。

九、总结

这套“RPA采集 → Python脚本调用智能路由 → 结果分析”的链路,解决了一个很实际的问题:不同难度的任务,自动匹配不同的模型。

适用场景很明确:内容分级处理、多模型调度测试、批量任务优化。当你有大量异构任务需要处理时,智能路由可以帮你省掉“手动选择模型”这一步。

当前限制也很清楚:路由的调度策略是平台决定的,用户能控制的是模型池的配置,但具体哪条任务走哪个模型,目前无法手动指定。对于需要精细控制的场景,可能还是需要手动选择模型。但对于大多数批量处理场景来说,这已经够用了。