BOSh
文章284
标签434
分类108
315晚会 36氪 80后 ADB AI AI Agent AI PC AI 代理 AI 助手 AI 网关 AI 评测 AI助手 AI处理器 AI大模型 AI安全 AI应用 AI智能体 AI网关 AMD API API 集成 AWS Agent Agentic AI AionUi Android Apple Automation Backup Bash Bosh C++ CDN CEO CI/CD CLI CLI Proxy API CLIProxyAPI COMPUTEX CRM Chrome 插件 Claude Opus 4.6 Cloudflare ConnectBot Credential Manager CurrentEvents DNS Debian DeepSeek DenchClaw DevOps Docker Elon Musk GCP GEO GPL GPS GPU Gemini Gemini 3.1 Pro Ghostty GitHub GitHub Actions Gmail Go Gog Google Google AI Pro Google API Google Gemini Google Photos Google Pixel HKUDS Hardware Hermes Hermes Agent Hexo HidenCloud Hugo IPV6 Intel Jetpack Compose John Turnus Karpathy Kimi-K2.5 Kotlin LINUX LLM LTS LaTeX Linux Markdow Markdown MemU Bot MiniMax Musk NAT64 NIX NODE NVIDIA NVIDIA Build NanoClaw Netcatty Netlify Newsletter Nvidia Open WebUI OpenAI OpenAI 兼容接口 OpenCLI OpenClaw PDF 编译 PicoClaw Pixel Pixel 1 Pixel 12 Prismer Pura90 Python QClaw QQ机器人 Qualcomm RAG RTX Spark Reddit Rust SFTP SSH Skills SoC Subagent SuperCall Syncthing TPU TSMC Telegram Bot Tensor Tensor G7 Tim Cook Ubuntu VLESS VPN VPS Vercel WeChat Web3 WebSSH Windows WorkBuddy X XChat XHTTP X热榜 YouTube ZeroClaw arXiv arch c++ git hugo iMessage iOS n8n nanobot node js ntfs pacman podman zz.ac 东海 两性关系 个人助理 中东 中东冲突 中东局势 中关村论坛 中南大学 中国 中美 乌克兰 习惯养成 云同步 云服务器 亚洲 人性 代理 代金券 以色列 任务管理 伊朗 伊朗危机 伊朗战争 伦理 体育 俄乌战争 俄罗斯 保护主义 信息流 信息管理 停火 健康管理 光通信 免费VPS 免费试用 共和党 关系 养老金 内容工厂 内容生产 内容筛选 军事冲突 军事动态 军民融合 农村 分享 分配 创业 制裁 办公自动化 加密 加密货币 加沙 北斗 北韩 医学生 半导体 华为 博客 博客助手 博客发布 博客部署成功 卫星 原生 JS 反思 反重力 台海局势 台湾 命令 命令行 喷嚏网 国产 国产化 国产替代 国际 国际关系 国际局势 国际新闻 图卦 图说 地缘政治 基础设施 多代理 多模态AI 大学分析 大模型 孙少平 学习 安全 实时监控 家庭助理 家庭服务器 家装设计 工业策略 工作总结 工作效率 工作流编排 工具 工具链 平凡的世界 平台责任 庞氏骗局 开发 开发实录 开源 开源软件 开源项目 张雪峰 微信 心理健康 情感 战争 房地产 手机 技术分享 投资工具 指标看板 提示词工程 播客 收件箱清理 效率 效率工具 教程 教育制度 数据分析 数据投毒 文件管理 文献管理 新能源汽车 新闻汇总 日历聚合 时事 时事总结 显卡 晨报 智能体 智能体生态 朝鲜 架构 架构实践 核协议 核武器 桌面Cowork 模型接入 模型配置 欧洲安全 每日图说 比亚迪 油价 法律 活动运营 浏览器自动化 消息通道 消费者权益 深度学习 渔船 游戏开发 湘雅医院 潘石屹 热点新闻 版本更新 特朗普 生态系统 生活 生活自动化 生物识别 用例 甲骨文云 电池技术 症状追踪 白嫖攻略 白山云 皮皮虾 监管 目标管理 知识库 社交媒体 社会保障 社会公平 社会百态 社会观察 科技 科研助手 笔记 第一财经 算法 算法推荐 纽森 经济 经济观察 经验分享 编程 网关 网络 网络安全 网络摘录 美伊冲突 美伊谈判 美国 美国制裁 美国大选 美国政治 能源安全 脚本 腾讯 腾讯,龙虾,OpenClaw 腾讯云 自动化 自动化创作 自动化协作 自动化提醒 自动化流水线 自动化脚本 自动化运维 自律教练 自由软件 芯片 草榴 行为改变 视频摘要 解锁 计算摄影 记录 许可证 论文写作 论文阅读 语义搜索 语音代理 读书 读书笔记 读后感 谷歌云 财报季 路遥 身份验证 迁移 运维 进化论 远程运维 选车 邀请确认 部署 部署指南 量子计算 销售自动化 阅读感悟 随笔 隐私 霍尔木兹 霍尔木兹海峡 青蛙机 韬定律 项目管理 风险管理 飞书 高中生活 高可用 高考 高考志愿 鸽巢原理 麒麟 麒麟9050 黄仁勋 黎巴嫩 龙虾

一言

文章归档

别再写 Python 脚本了:用一个 Bash 脚本搞定 LLM API 快速测试

别再写 Python 脚本了:用一个 Bash 脚本搞定 LLM API 快速测试

别再写 Python 脚本了:用一个 Bash 脚本搞定 LLM API 快速测试

做 LLM 开发最烦人的事之一,就是每次面对一个新的 API 接口时,都要花时间去验证它能不能用。不管是 vLLM 部署的私有模型,还是各种第三方转发 API,最基本的需求其实很简单:能不能通?有哪些模型?响应快不快?

很多人的习惯是写个简单的 Python 脚本,安装 openai 库,然后跑一遍。但说实话,为了测个接口而配置虚拟环境、处理依赖冲突,简直是浪费生命。尤其是当你只需要快速确认一下 Base URL 对不对的时候,这种方案太重了。

于是我写了个小工具:apitest.sh。没用 Python,没用任何第三方库,纯 Bash + curl + jq。只要你的电脑能开终端,几秒钟就能把测试跑完。

为什么我坚持用 Bash?

在这个 Python 统治 AI 的时代,用 Bash 写工具看起来像是在开倒车,但实际操作起来,Bash 在这种“一次性探测”任务中简直是神器:

  1. 真正意义上的零依赖curl 是类 Unix 系统的标配。你不需要 pip install,不需要担心 requirements.txt 版本不对。
  2. 启动零延迟:Bash 脚本是瞬时启动的。对比 Python 启动解释器、加载库的时间,这种体感差异在频繁测试时非常明显。
  3. 系统级便捷:把它丢进 /usr/local/bin,它就变成了一个原生的系统命令。在任何目录下输入 apitest 就能开始工作,不需要在文件夹之间跳来跳去。

这个脚本是怎么工作的?

apitest.sh 没搞那些复杂的架构,它只盯着 API 测试最核心的三个环节:

1. 实时模型发现

API 供应商的模型列表变动极其频繁。如果你在脚本里硬编码 gpt-4o,结果对方升级到了 gpt-4o-latest,你就会收到一个莫名其妙的 404 错误。
apitest.sh 直接调用 /models 接口,动态抓取所有可用模型。我把抓到的 ID 和 Name 转换成了一个带编号的列表。你不需要记住那些长得离谱的模型 ID,直接输入 12 就能选。

2. 容错重试逻辑

网络抖动是常态,尤其是当你连接某些不稳定的转发接口时,偶尔出现一个空响应或超时太正常了。
如果每次失败都要重新输入 URL 和 Key,那体验太糟糕。我在代码里加了一个简单的 while 循环:如果 API 没给回复,它会自动重试最多 2 次。这种设计能过滤掉 90% 的瞬时网络问题。

3. 极简交互菜单

我给它做了一个简单的菜单界面。你不需要在启动命令里传一堆参数(那样太难记了),而是在运行后根据提示输入信息。这种交互方式让工具变得像一个小程序一样简单。

完整代码实现

这里是 apitest.sh 的全部代码。你可以直接复制,或者直接下载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash

read -p "请输入 Base URL: " base_url
read -p "请输入 API Key: " api_key

base_url=${base_url%/}
models_url="${base_url}/models"
chat_url="${base_url}/chat/completions"

models_id=()
models_name=()

while true; do
echo -e "\n=== API 检测与测试菜单 ==="
echo "1. 获取模型列表"
echo "2. 使用编号进行聊天测试 (带自动重试)"
echo "3. 退出"
read -p "请选择 (1-3): " choice

case $choice in
1)
models_id=(); models_name=()
while IFS= read -r line; do
models_id+=("$(echo "$line" | cut -d'|' -f1)")
models_name+=("$(echo "$line" | cut -d'|' -f2)")
done < <(curl -s -H "Authorization: Bearer $api_key" "$models_url" | jq -r '.data[] | "\(.id)|\(.name // .id)"')
for i in "${!models_id[@]}"; do printf "%d) ID: %-30s | Name: %s\n" "$((i+1))" "${models_id[$i]}" "${models_name[$i]}"; done
;;
2)
if [ ${#models_id[@]} -eq 0 ]; then echo "请先执行选项 1!"; continue; fi
read -p "请输入模型编号: " idx
if [[ "$idx" =~ ^[0-9]+$ ]] && [ "$idx" -ge 1 ] && [ "$idx" -le "${#models_id[@]}" ]; then
selected_model=${models_id[$((idx-1))]}
read -p "请输入消息: " user_content

max_retries=2
attempt=0
success=false

while [ $attempt -le $max_retries ]; do
echo "正在尝试 (第 $((attempt+1)) 次)..."
response=$(curl -s "$chat_url" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $api_key" \
-d "{
\"model\": \"$selected_model\",
\"messages\": [{\"role\": \"user\", \"content\": \"$user_content\"}],
\"max_tokens\": 100
}")

reply=$(echo "$response" | jq -r '.choices[0].message.content // empty')

if [ -n "$reply" ]; then
echo -e "\n模型回复:\n$reply"
success=true
break
else
echo "警告: 未收到有效回复。"
attempt=$((attempt+1))
fi
done

[ "$success" = false ] && echo "错误: 经过多次尝试,依然无法获取回复。"
else
echo "无效编号。"
fi
;;
3) break ;;
*) echo "无效选择。" ;;
esac
done

快速上手指南

第一步:安装 jq

这个脚本唯一依赖的工具是 jq(用来解析 JSON 的神级工具)。如果没装,赶紧装一个:

  • Ubuntu/Debian: sudo apt install jq
  • CentOS/RHEL: sudo dnf install jq
  • macOS: brew install jq

第二步:部署脚本

  1. 保存文件:把代码保存为 apitest
  2. 给权限
    1
    chmod +x apitest
  3. 全局可用(推荐):
    1
    sudo mv apitest /usr/local/bin/apitest

第三步:开始测试

在终端输入 apitest,终端会提示你输入 Base URLAPI Key

  1. 1 看模型列表 $
    ightarrow$ 选 2 输入编号和问题 $
    ightarrow$ 拿结果。

总结

apitest.sh 走的是一条极简路线:不要为了简单的需求去构建复杂的系统。

接下来的计划是给它加几个实用功能:统计首字延迟 (TTFT)、记录响应时间、以及支持从 .env 文件读取配置。

如果你也受够了为简单的接口测试而写冗长代码,试试这个 Bash 脚本,你会发现高效其实可以这么简单。

本文作者:BOSh
本文链接:http://bosh.zz.ac/posts/5039135a.html
版权声明:本文由BoSh发布,部分内容来源于网络。