OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  llmrouter:将请求动态路由至最合适模型的智能代理网关

llmrouter:将请求动态路由至最合适模型的智能代理网关

 
  gateway ·  2026-02-05 17:00:43 · 3 次点击  · 0 条评论  

名称: llmrouter
描述: 智能 LLM 代理,根据任务复杂度将请求路由到合适的模型。对简单任务使用更便宜的模型以节省成本。已测试支持 Anthropic、OpenAI、Gemini、Kimi/Moonshot 和 Ollama。
主页: https://github.com/alexrudloff/llmrouter
元数据: {"openclaw":{"emoji":"🔀","homepage":"https://github.com/alexrudloff/llmrouter","os":["darwin","linux"],"requires":{"bins":["python3"],"anyBins":["pip","pip3"]},"primaryEnv":"ANTHROPIC_API_KEY"}}


LLM Router

一个智能代理,它根据传入请求的复杂度进行分类,并将其路由到合适的 LLM 模型。对简单任务使用更便宜/更快的模型,将昂贵模型留给复杂任务。

OpenClaw 协同工作,通过将简单请求路由到较小的模型来减少令牌使用量和 API 成本。

状态: 已测试支持 Anthropic、OpenAI、Google Gemini、Kimi/Moonshot 和 Ollama。

快速开始

先决条件

  1. Python 3.10+ 及 pip
  2. Ollama (可选 - 仅在需要使用本地分类器时)
  3. Anthropic API 密钥 或 Claude Code OAuth 令牌 (或其他提供商的密钥)

设置

# 如果尚未克隆,请克隆仓库
git clone https://github.com/alexrudloff/llmrouter.git
cd llmrouter

# 创建虚拟环境 (现代 Python 版本要求)
python3 -m venv venv
source venv/bin/activate

# 安装依赖
pip install -r requirements.txt

# 拉取分类器模型 (如果使用本地分类)
ollama pull qwen2.5:3b

# 复制并自定义配置
cp config.yaml.example config.yaml
# 编辑 config.yaml,填入你的 API 密钥和模型偏好

验证安装

# 启动服务器
source venv/bin/activate
python server.py

# 在另一个终端中,测试健康检查端点
curl http://localhost:4001/health
# 应返回:{"status": "ok", ...}

启动服务器

python server.py

选项:
- --port PORT - 监听的端口 (默认:4001)
- --host HOST - 绑定的主机 (默认:127.0.0.1)
- --config PATH - 配置文件路径 (默认:config.yaml)
- --log - 启用详细日志记录
- --openclaw - 启用 OpenClaw 兼容性 (在系统提示中重写模型名称)

配置

编辑 config.yaml 以进行自定义:

模型路由

# Anthropic 路由
models:
  super_easy: "anthropic:claude-haiku-4-5-20251001"
  easy: "anthropic:claude-haiku-4-5-20251001"
  medium: "anthropic:claude-sonnet-4-20250514"
  hard: "anthropic:claude-opus-4-20250514"
  super_hard: "anthropic:claude-opus-4-20250514"

# OpenAI 路由
models:
  super_easy: "openai:gpt-4o-mini"
  easy: "openai:gpt-4o-mini"
  medium: "openai:gpt-4o"
  hard: "openai:o3-mini"
  super_hard: "openai:o3"

# Google Gemini 路由
models:
  super_easy: "google:gemini-2.0-flash"
  easy: "google:gemini-2.0-flash"
  medium: "google:gemini-2.0-flash"
  hard: "google:gemini-2.0-flash"
  super_hard: "google:gemini-2.0-flash"

注意: 推理模型会自动检测并使用正确的 API 参数。

分类器

有三种选项用于分类请求复杂度:

本地 (默认) - 免费,需要 Ollama:

classifier:
  provider: "local"
  model: "qwen2.5:3b"

Anthropic - 使用 Haiku,快速且便宜:

classifier:
  provider: "anthropic"
  model: "claude-haiku-4-5-20251001"

OpenAI - 使用 GPT-4o-mini:

classifier:
  provider: "openai"
  model: "gpt-4o-mini"

Google - 使用 Gemini:

classifier:
  provider: "google"
  model: "gemini-2.0-flash"

Kimi - 使用 Moonshot:

classifier:
  provider: "kimi"
  model: "moonshot-v1-8k"

如果你的机器无法运行本地模型,请使用远程 (anthropic/openai/google/kimi) 分类器。

支持的提供商

  • anthropic:claude-* - Anthropic Claude 模型 (已测试)
  • openai:gpt-*, openai:o1-*, openai:o3-* - OpenAI 模型 (已测试)
  • google:gemini-* - Google Gemini 模型 (已测试)
  • kimi:kimi-k2.5, kimi:moonshot-* - Kimi/Moonshot 模型 (已测试)
  • local:model-name - 本地 Ollama 模型 (已测试)

复杂度级别

级别 用例 默认模型
super_easy 问候、确认 Haiku
easy 简单问答、提醒 Haiku
medium 编码、邮件、研究 Sonnet
hard 复杂推理、调试 Opus
super_hard 系统架构、证明 Opus

自定义分类

编辑 ROUTES.md 以调整消息分类方式。分类器读取此文件中的表格来确定复杂度级别。

API 使用

路由器暴露了一个 OpenAI 兼容的 API:

curl http://localhost:4001/v1/chat/completions \
  -H "Authorization: Bearer $ANTHROPIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llm-router",
    "messages": [{"role": "user", "content": "你好!"}]
  }'

测试分类

python classifier.py "写一个 Python 排序函数"
# 输出:medium

python classifier.py --test
# 运行测试套件

作为 macOS 服务运行

创建 ~/Library/LaunchAgents/com.llmrouter.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.llmrouter</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/llmrouter/venv/bin/python</string>
        <string>/path/to/llmrouter/server.py</string>
        <string>--openclaw</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>WorkingDirectory</key>
    <string>/path/to/llmrouter</string>
    <key>StandardOutPath</key>
    <string>/path/to/llmrouter/logs/stdout.log</string>
    <key>StandardErrorPath</key>
    <string>/path/to/llmrouter/logs/stderr.log</string>
</dict>
</plist>

重要:/path/to/llmrouter 替换为你的实际安装路径。必须使用 venv 中的 python,而非系统 python。

# 创建日志目录
mkdir -p ~/path/to/llmrouter/logs

# 加载服务
launchctl load ~/Library/LaunchAgents/com.llmrouter.plist

# 验证是否正在运行
curl http://localhost:4001/health

# 停止/重启
launchctl unload ~/Library/LaunchAgents/com.llmrouter.plist
launchctl load ~/Library/LaunchAgents/com.llmrouter.plist

OpenClaw 配置

~/.openclaw/openclaw.json 中将路由器添加为提供商:

{
  "models": {
    "providers": {
      "localrouter": {
        "baseUrl": "http://localhost:4001/v1",
        "apiKey": "via-router",
        "api": "openai-completions",
        "models": [
          {
            "id": "llm-router",
            "name": "LLM Router (按复杂度自动路由)",
            "reasoning": false,
            "input": ["text", "image"],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 200000,
            "maxTokens": 8192
          }
        ]
      }
    }
  }
}

注意: 成本设置为 0,因为实际成本取决于路由器选择哪个模型。路由器会记录每个请求由哪个模型处理。

设置为默认模型 (可选)

要将路由器默认用于所有代理,请添加:

{
  "agents": {
    "defaults": {
      "model": {
        "primary": "localrouter/llm-router"
      }
    }
  }
}

与 OAuth 令牌一起使用

如果你的 config.yaml 使用了来自 OpenClaw ~/.openclaw/auth-profiles.json 的 Anthropic OAuth 令牌,路由器会自动处理 Claude Code 身份标头。

OpenClaw 兼容模式 (必需)

如果与 OpenClaw 一起使用,必须使用 --openclaw 标志启动服务器:

python server.py --openclaw

此标志启用 OpenClaw 所需的兼容性功能:
- 重写响应中的模型名称,以便 OpenClaw 显示实际使用的模型
- 处理工具名称和 ID 重映射,以实现正确的工具调用路由

没有此标志,在使用路由器与 OpenClaw 时可能会遇到错误。

常见任务

  • 检查服务器状态curl http://localhost:4001/health
  • 查看当前配置cat config.yaml
  • 测试分类python classifier.py "你的消息"
  • 运行分类测试python classifier.py --test
  • 重启服务器:停止并再次运行 python server.py
  • 查看日志 (如果作为服务运行):tail -f logs/stdout.log

故障排除

"externally-managed-environment" 错误

Python 3.11+ 需要虚拟环境。创建一个:

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

端口 4001 上出现 "Connection refused"

服务器未运行。启动它:

source venv/bin/activate && python server.py

分类返回错误的复杂度

编辑 ROUTES.md 以调整分类规则。分类器读取此文件以确定复杂度级别。

Ollama 错误 / "model not found"

确保 Ollama 正在运行且模型已拉取:

ollama serve  # 如果未运行,启动 Ollama
ollama pull qwen2.5:3b

OAuth 令牌不工作

确保 config.yaml 中的令牌以 sk-ant-oat 开头。路由器会自动检测 OAuth 令牌并添加必需的身份标头。

LaunchAgent 未启动

检查日志并确保路径是绝对路径:

cat ~/Library/LaunchAgents/com.llmrouter.plist  # 验证路径
cat /path/to/llmrouter/logs/stderr.log  # 检查错误
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor