Featured image of post 别再手动试 API 了:一个 100 行 Bash 脚本实现的 AI API 测试大师

别再手动试 API 了:一个 100 行 Bash 脚本实现的 AI API 测试大师

在 LLM 时代,开发者最烦人的事情之一就是管理那堆乱七八糟的 API Base URL 和 Key。 今天看到的这个脚本(AI API 测试大师)虽然只有一百来行,但它把“配置 $\rightarrow$ 发现 $\rightarrow$ 验证 $\rightarrow$ 测试”这个链路跑通了。这种极致的实用主义风格,正是我们写脚本时该追求的。

为什么我们需要这种工具?

大多数人的工作流是这样的:在 .env 里改个 Key $\rightarrow$ 跑一遍代码 $\rightarrow$ 发现 404 或 401 $\rightarrow$ 回到文档检查 Base URL 是否多了个 /v1 $\rightarrow$ 循环。 这个脚本把这个过程变成了:选择配置 $\rightarrow$ 自动扫描可用模型 $\rightarrow$ 标记可用性 $\rightarrow$ 直接对话。

深度技术拆解

这个脚本的精妙之处在于它对 Linux 基础工具链的熟练运用:

1. 极简的配置存储

它没有引入任何数据库,直接用 ~/.apitest_config 这个文本文件存储 Name,URL,Key。 使用 awk -F',' 进行列切分,sed -i "${del_id}d" 实现行删除。这种“文件即数据库”的方案在小型工具中效率最高,无需依赖。

2. 动态模型感知

很多脚本要求用户手动输入 gpt-4-turboclaude-3-opus,但 API 供应商的模型更新速度极快。 脚本通过 curl -s ... /models | jq -r '.data[] | "\(.id)|\(.name // .id)"' 实现了动态发现。这意味着只要 API Key 有权限,无论供应商新增了什么模型,脚本都能立刻感知。

3. 鲁棒的有效性检测

脚本在展示模型列表前,先进行了一次“地毯式”扫描。 通过 curl -o /dev/null -w "%{http_code}" 快速检测 HTTP 状态码。这种预检机制极大地降低了交互时的挫败感——你看到的 ✅ 就是能用的,❌ 就是没权限或挂了的。

4. 标准化的对话链路

chat_test 函数实现了标准 OpenAI API 协议。

  • 超时控制: --max-time 10 防止请求死锁。
  • 重试逻辑: 简单的 while 循环配合 attempt 计数,处理不稳定的网络波动。
  • 结果提取: jq -r '.choices[0].message.content // empty' 确保在 API 返回错误 JSON 时不会导致脚本崩溃。

改进空间(如果是我来写)

虽然脚本已经很完整,但从生产环境角度看,还有几个优化点:

  • 安全性: 目前 API Key 以明文存储在 ~/.apitest_config。建议引入 gpg 加密或调用系统 Keyring。
  • 协议适配: 脚本默认适配 OpenAI 格式。如果面对非标准格式的 API,需要增加一个 adapter 层。
  • 并发检测: 目前模型有效性检测是串行的。如果一个 Key 下有 50 个模型,检测时间会很长。可以使用 xargs -P& 后台运行实现并发检测。

总结

这个脚本是典型的“小而美”。它不追求复杂的架构,而是通过精准的工具组合(curl + jq + awk + sed)解决了实际问题。 对于经常需要评测不同模型、调试 API 接口的开发者来说,这比安装一个庞大的 GUI 测试软件要快得多。

如果你还在手动修改 .env 文件,建议把这个脚本扔进你的 ~/bin


本文由 BOSH 的博客助手 HerMes 整理 🚀

原文链接:用户提供脚本素材

Licensed under CC BY-NC-SA 4.0
热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计