使用 GitHub Actions 构建多模型 LLM 自动化基准测试系统
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
在大型语言模型 (LLM) 飞速发展的今天,开发者面临着一个核心挑战:Token 效率。在构建实时信号分析工具(如用于股票市场监控、IoT 传感器跟踪或区块链事件索引的工具)时,将原始时间序列数据直接输入 LLM 可能会导致极其昂贵的成本。你选择的序列化格式直接影响你的运营成本。为了解决这个问题,我们构建了一个自动化的、多供应商基准测试系统,通过 n1n.ai 评估 OpenAI、Anthropic 和 DeepSeek 等主流供应商的数据格式表现。
核心挑战:冗余数据的代价
时间序列数据在结构上非常简单:由时间戳和数值组成。然而,行业标准的序列化格式 JSON 在这种场景下显得异常臃肿。在 JSON 对象数组中,键名(如 "timestamp"、"price")在每一个数据点都会重复出现。在 LLM 的世界里,每一个字符都会计入 Token 总数。对于使用 n1n.ai 提供的高性能模型的开发者来说,减少这种重复不仅是技术优化,更是显著的成本节约手段。
我们发现,虽然 CSV 比 JSON 好,但它仍然包含冗余信息。为了挑战效率极限,我们开发了 TSLN (Time-Series Lean Notation)。这种格式利用了时间规律性和增量编码 (Delta Encoding),在数据进入 API 端点之前对其进行压缩。但为了证明 TSLN 的优越性,我们需要一个健壮、可重复且透明的基准测试系统。
架构设计:GitOps 流水线
我们的基准测试系统采用“一劳永逸”的设计。它每两周运行一次,测试四种数据格式在四个主要 LLM 供应商上的表现,并将结果直接发布到实时仪表板。该架构依赖于三个核心支柱:
- 执行层:GitHub Actions 负责调度和环境配置。
- 逻辑层:基于 Python 的运行器,通过 n1n.ai 接口与 LLM API 交互(通过聚合平台确保稳定性)。
- 展示层:Next.js 前端,从仓库中获取静态 JSON 结果。
测试的数据格式
我们对比了四种不同的序列化策略:
- JSON:基准格式,完整的对象表示法。
- CSV:带有标题行的逗号分隔值。
- TOON (Token-Oriented Object Notation):一种旨在减少空格 Token 的管道分隔格式。
- TSLN (Time-Series Lean Notation):我们自定义的紧凑格式,使用单一基准时间戳和间隔。
Python 基准测试运行器的实现
系统的核心是一个 Python 脚本,它生成样本数据并根据 GPT-4o mini、Claude 3.5 Sonnet 和 DeepSeek-V3 等模型的真实定价估算成本。以下是 TSLN 格式与 JSON 基准格式的生成逻辑对比:
import json
def generate_benchmark_data(format_name: str, count: int = 100):
if format_name == "json":
# 传统的 JSON 格式,键名不断重复
return json.dumps([
{"timestamp": f"2024-01-01T09:{str(i).zfill(2)}:00Z", "value": 150.0 + i}
for i in range(count)
])
elif format_name == "tsln":
# 基准时间 | 间隔(秒) | 数值序列
values = [str(150.0 + i) for i in range(count)]
return "t:2024-01-01T09:00:00Z|i:60|v:" + ",".join(values)
Token 成本计算逻辑
不同供应商的 Token 算法逻辑各异。OpenAI 使用 tiktoken,而 Anthropic 有其专有逻辑。为了提供公平的对比,我们使用了一种标准化的启发式方法(约 4 个字符对应 1 个 Token),并应用了最新的定价层。对于寻求最具竞争力价格的开发者,n1n.ai 提供了一个统一的网关,可以实时对比这些成本。
def run_single_benchmark(provider: str, model: str, format_name: str, data: str):
input_tokens = len(data) / 4 # 启发式估算用于对比
# 市场现行价格 (每 100 万 Token 的美元价格)
pricing = {
"openai": 0.15, # gpt-4o-mini
"anthropic": 0.80, # claude-3-haiku
"deepseek": 0.14, # deepseek-v3
"google": 0.075 # gemini-1.5-flash
}
cost = (input_tokens / 1_000_000) * pricing.get(provider, 1.0)
return {
"provider": provider,
"format": format_name,
"cost_per_100k": cost * 100
}
使用 GitHub Actions 实现自动化
为了确保我们的基准测试随着模型更新(如从 GPT-4 转向 OpenAI o3,或 DeepSeek-V2 升级到 V3)而保持即时性,我们使用了 GitHub Actions 工作流。该工作流不仅运行代码,还将结果作为静态 JSON 文件提交回仓库。这种 “GitOps” 方法消除了对数据库的需求,降低了系统复杂度。
name: LLM 基准测试定时任务
on:
schedule:
- cron: '0 0 */14 * 0' # 每两周运行一次
workflow_dispatch: # 允许手动触发
jobs:
run-benchmarks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 配置 Python 环境
uses: actions/setup-python@v5
with: { python-version: '3.11' }
- name: 执行测试脚本
env:
N1N_API_KEY: ${{ secrets.N1N_API_KEY }}
run: python benchmark/run_full_benchmark.py
- name: 自动提交结果
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "GitHub Actions"
git add public/data/benchmark-results.json
git commit -m "自动更新基准测试结果"
git push
前端可视化:React + Recharts
前端基于 Next.js 和 Recharts 构建。由于数据以静态 JSON 形式存储在 public 文件夹中,网站加载速度极快,且可以托管在 Railway 或 Vercel 等平台上,无需任何后端开销。通过 fetch API 即可轻松获取数据:
useEffect(() => {
// 从 GitHub Actions 生成的静态 JSON 中加载数据
fetch('/data/benchmark-results.json')
.then((res) => res.json())
.then(setData)
}, [])
根据 2026 年 1 月的最新测试数据,不同格式的效率差异令人震惊:
| 格式 | 平均 Token 数 | 10万数据点成本 | 相比 JSON 节省 |
|---|---|---|---|
| JSON | 1,397 | $0.0404 | 基准 (Baseline) |
| CSV | 698 | $0.0202 | 50.0% |
| TSLN | 177 | $0.0052 | 87.3% ✨ |
专家建议:Token 化与数字处理
开发者常犯的一个错误是假设所有数字的 Token 化开销是相同的。在许多 LLM 分词器中,单个数字占用 1 个 Token,但多位数字可能会被意外拆分。通过使用 TSLN,我们减少了总字符数,从而在统计学上降低了“Token 碎片化”的概率。当你通过 n1n.ai 访问不同模型时,你可以针对不同供应商测试这些格式,观察哪种分词器对你的特定数据分布处理得最高效。
总结
构建多供应商基准测试系统不仅是为了寻找最便宜的模型,更是为了优化你与模型对话的方式。通过 GitHub Actions 实现自动化,并利用 n1n.ai 这样的统一 API 聚合平台,你可以在不增加预算的情况下,维持一个高性能的 RAG 或信号分析系统。
在 n1n.ai 获取免费 API 密钥。