2026 实战:用 GPT 与 Claude 构建可切换模型的 AI 命令行工具
把报错日志交给 AI 分析,或在终端生成测试思路,通常不需要先开发网页。2026 年构建 GPT 与 Claude 驱动的 CLI 工具,可以从一个支持流式输出、环境变量配置和模型切换的小程序开始,再逐步加入文件读取与团队配置。
先确定工具的输入与边界。第一版只接收命令行文本,返回纯文本答案。例如输入“分析这段报错并列出排查步骤”,随后在终端显示回复。暂时让程序负责问答;文件修改和命令执行应通过独立功能实现,并在执行前展示具体操作,避免把模型生成的文本直接交给 shell。
59API 适合这类原型和日常开发:它提供 GPT、Claude 等模型的按量付费访问,价格定位处于低价中转服务之列,并提供原生官方品质模型,不做降级。其 OpenAI SDK 兼容能力可以让两类模型共用请求代码。例如,以 GPT-6 Astra 和 Claude Sonnet 5.5 做对照测试,再按实际质量与费用选择默认模型。
准备 Node.js 环境与连接配置。使用仍受支持的 Node.js 22 或更新版本,执行以下命令创建项目:
mkdir ai-cli && cd ai-cli && npm init -y && npm install openai
创建 .env 文件,分别填写下面四个变量。59API 的服务地址为 https://api.59api.com;OPENAI_BASE_URL 应填写控制台文档给出的完整 OpenAI 兼容接口地址,是否包含 /v1 以文档为准。模型展示名称与接口标识可能不同,后两项应复制控制台提供的实际模型 ID。
- OPENAI_API_KEY:你的 59API 密钥。
- OPENAI_BASE_URL:完整的兼容接口地址。
- GPT_MODEL:所选 GPT 模型的接口 ID。
- CLAUDE_MODEL:所选 Claude 模型的接口 ID。
将 .env 和 node_modules/ 加入 .gitignore;另建不含密钥的 .env.example,方便团队成员了解配置项。
实现一个最小可运行版本。创建 cli.mjs,将下面这段 JavaScript 保存进去。程序默认使用 GPT,传入 --claude 时切换至 Claude;两者通过相同的兼容接口调用。
import OpenAI from 'openai'; const args = process.argv.slice(2); const useClaude = args[0] === '--claude'; if (useClaude) args.shift(); const prompt = args.join(' ').trim(); const model = process.env[useClaude ? 'CLAUDE_MODEL' : 'GPT_MODEL']; try { if (!prompt || !model || !process.env.OPENAI_API_KEY || !process.env.OPENAI_BASE_URL) throw new Error('请提供问题并检查环境变量'); const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, baseURL: process.env.OPENAI_BASE_URL, timeout: 60000, maxRetries: 0 }); const stream = await client.chat.completions.create({ model, messages: [{ role: 'user', content: prompt }], stream: true }); for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content || ''); process.stdout.write(String.fromCharCode(10)); } catch (error) { console.error('请求失败:', error.message); process.exitCode = 1; }
运行 node --env-file=.env cli.mjs "解释 HTTP 429 并给出排查步骤",即可测试默认模型。再运行 node --env-file=.env cli.mjs --claude "解释 HTTP 429 并给出排查步骤",对比另一模型的输出。示例只处理文本流;工具调用、图片输入和结构化输出需要按各模型支持的能力单独适配。
让终端体验经得起真实使用。正常答案写入 stdout,错误和调试信息写入 stderr,失败时返回非零退出码,这样才能与脚本、重定向配合。接入标准输入时,先判断 stdin 是否来自管道,避免交互运行时一直等待。读取日志前限制文件大小,并移除密钥、访问令牌和不必要的个人信息。
控制费用,从限制上下文开始。每次只发送与任务有关的日志片段,为各模型配置其支持的输出长度参数。记录模型 ID、耗时及接口返回的 token 用量;流式用量字段是否可用,需要实际验证。费用还受输出长度、缓存计价和重试影响,不能只比较每百万输入 token 的价格。
示例关闭了 SDK 自动重试,便于先观察失败原因。正式版本可对限流和暂时性服务错误加入有限次数的指数退避,遵循服务端重试提示;鉴权失败应直接修正配置。流式响应已经输出部分内容后,重新请求可能产生重复答案与额外费用,应让用户明确选择是否重试。
上线前,用同一组短问答、长日志和中文任务测试两种模型,检查超时、无效密钥、空输入及中断请求的表现。若你也使用 Claude Code、Codex 或 Gemini CLI,59API 还支持这些工具接入。可以注册 59API,先用小额预算跑完自己的测试集,再决定默认模型;有团队推广需求时,也可查看其邀请返佣规则。