logo
0
0
WeChat Login
添加 Token 批量消耗

Token 批量消耗器

一个功能强大的 Shell 脚本,用于批量调用大模型 API 进行 Token 消耗测试,支持智能限流和多线程并发。

✨ 特性

  • 🚀 双模式运行:自动检测限流配置,智能切换单线程/多线程模式
  • 🎯 精确限流:支持 QPS、RPM、TPM 三种限流策略
  • 🔄 多模型支持:自动获取并选择可用模型
  • 📊 实时统计:显示请求进度、Token 消耗、响应时间
  • 📝 详细报告:自动生成执行报告
  • 🎨 彩色输出:清晰美观的终端显示

📋 系统要求

  • 操作系统:Linux / macOS
  • 依赖工具
    • curl - 发送 HTTP 请求
    • jq - 解析 JSON 响应
    • bc - 数学计算
    • openssl - 生成随机内容(可选)

🔧 安装

1. 下载脚本

# 创建脚本文件 cat > token.sh << 'EOF' # 将脚本内容粘贴到这里 EOF # 添加执行权限 chmod +x token.sh

2. 安装依赖

Ubuntu/Debian:

sudo apt-get update sudo apt-get install -y curl jq bc openssl

CentOS/RHEL:

sudo yum install -y curl jq bc openssl

macOS:

brew install curl jq bc openssl

🚀 使用方法

基础用法

./token.sh

交互式配置示例

示例 1:无限流模式(多线程)

API端点: https://api.openai.com/v1 API密钥: sk-xxxxxxxxxxxxx 限流配置(直接回车跳过) QPS限制 (每秒请求数,如: 20): [直接回车] RPM限制 (每分钟请求数,如: 500000): [直接回车] TPM限制 (每分钟Token数,如: 500000): [直接回车] 无限流模式,可使用多线程加速 线程数 (默认5): 10 总请求数 (默认100): 500 内容长度/字符 (默认200): 300

示例 2:有限流模式(单线程)

API端点: https://api.deepseek.com API密钥: sk-xxxxxxxxxxxxx 限流配置(直接回车跳过) QPS限制 (每秒请求数,如: 20): 2 RPM限制 (每分钟请求数,如: 500000): 20 TPM限制 (每分钟Token数,如: 500000): 500000 检测到限流配置,将使用单线程模式 限流参数: QPS: 2 请求/秒 RPM: 20 请求/分钟 TPM: 500000 token/分钟 总请求数 (默认100): 100 内容长度/字符 (默认200): 500

📊 输出示例

实时输出

[INFO] 依赖检查通过 [STEP] 获取模型列表 可用模型: 1. gpt-3.5-turbo 2. gpt-4 3. claude-3-opus 选择模型 (编号): 1 [STEP] 开始执行... [10:27:15] 请求 #1 成功 | Token: 242 | 耗时: 501ms | 累计: 242 token [10:27:16] 请求 #2 成功 | Token: 238 | 耗时: 489ms | 累计: 480 token [10:27:17] 请求 #3 成功 | Token: 245 | 耗时: 512ms | 累计: 725 token ════════════════════════════════════════ [STEP] 执行完成 ════════════════════════════════════════ 总请求: 100 成功: 98 失败: 2 成功率: 98.00% 总Token: 24500 平均Token/请求: 250 总耗时: 125秒 实际QPS: 0.80 ════════════════════════════════════════

⚙️ 配置说明

限流参数

参数说明示例适用场景
QPS每秒请求数限制20API 有每秒请求限制
RPM每分钟请求数限制500000API 有每分钟请求限制
TPM每分钟 Token 数限制500000API 有每分钟 Token 消耗限制

模式选择

脚本会根据是否配置限流自动选择运行模式:

模式触发条件线程数适用场景
限流模式设置了任何限流参数1(单线程)需要精确控制请求频率
无限流模式未设置任何限流参数用户自定义不限流,追求最高速度

💡 使用场景

1. API 压力测试

# 无限流模式,100并发,1000请求 线程数: 100 总请求数: 1000 内容长度: 100

2. Token 消耗测试(有限流)

# 模拟真实场景,QPS=10 QPS: 10 总请求数: 1000 内容长度: 500

3. 配额测试

# 测试 TPM 限制 TPM: 100000 总请求数: 500 内容长度: 500 # 每个请求约消耗 500/4+100=225 token

🎯 工作原理

限流模式(单线程)

  1. 使用令牌桶算法控制 QPS
  2. 记录每分钟请求数和 Token 数控制 RPM/TPM
  3. 达到限制时自动等待
  4. 确保不超限

无限流模式(多线程)

  1. 启动 N 个并发线程
  2. 每个线程独立发送请求
  3. 无任何限流控制
  4. 追求最大吞吐量

📈 性能建议

限流模式

  • QPS < 10:适合大多数 API
  • RPM < 1000:适合免费套餐
  • TPM < 100000:轻量使用

无限流模式

  • 线程数 = 10-50:适合普通服务器
  • 线程数 = 50-200:适合高性能服务器
  • 线程数 > 200:可能导致连接数过多

🐛 故障排查

问题 1:提示 "缺少依赖"

解决:安装缺失的工具

# Ubuntu/Debian sudo apt-get install curl jq bc # macOS brew install curl jq bc

问题 2:获取模型列表失败

可能原因

  • API 端点错误
  • API 密钥无效
  • 网络连接问题

解决

# 测试 API 连接 curl -X GET "你的API端点/models" \ -H "Authorization: Bearer 你的密钥"

问题 3:所有请求都失败

可能原因

  • API 密钥权限不足
  • 模型名称错误
  • 达到限流上限

解决:检查 API 响应中的错误信息

📝 脚本文件说明

脚本执行后会自动生成:

results_20231201_120000/ ├── results.txt # 详细请求记录 └── report_*.txt # 统计报告

🔒 安全提示

  1. API 密钥安全

    • 不要在公共场所分享脚本
    • 使用后清理历史记录
    • 考虑使用环境变量
  2. 资源消耗

    • 大量请求会产生 Token 费用
    • 注意 API 配额限制
    • 建议先用小数量测试

📄 许可证

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request

📧 联系方式

如有问题,请通过 Issue 反馈