适用场景
已有 Node.js 服务需要增加一次最小的 AI 文本请求,同时希望避免引入第三方 SDK。本文使用 Node.js 20+ 原生 fetch,向 Ahri 发送非流式 Chat Completions 请求,并设置 30 秒超时。当前示例只覆盖普通文本聊天,不能据此推断流式响应、Responses、图片、文件或工具调用已完成验证。
前置条件
- Node.js 20 或更高版本;建议先在 Node.js 24.14.0 环境中检查。
- 一个可用的 Ahri API 密钥,并通过
AHRI_API_KEY环境变量提供。 - 服务器能够访问
https://ahriapi.com。
操作步骤
新建文件
ahri-check.mjs,复制下面的完整代码。代码使用AbortController在 30 秒后取消请求,不把密钥写入文件。const apiKey = process.env.AHRI_API_KEY; if (!apiKey) { console.error('缺少 AHRI_API_KEY'); process.exitCode = 1; } else { const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), 30_000); try { const response = await fetch('https://ahriapi.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}` }, body: JSON.stringify({ model: 'gpt-6.1-sol', messages: [ { role: 'user', content: 'Reply with only AHRI_OK' } ] }), signal: controller.signal }); const responseText = await response.text(); let data; try { data = JSON.parse(responseText); } catch { throw new Error(`HTTP ${response.status}:响应不是有效 JSON`); } if (response.status !== 200) { throw new Error(`HTTP ${response.status}`); } const content = data?.choices?.[0]?.message?.content; if (typeof content !== 'string' || content.trim() !== 'AHRI_OK') { throw new Error('响应未通过 AHRI_OK 校验'); } console.log(content.trim()); } catch (error) { if (error?.name === 'AbortError') { console.error('请求超过 30 秒,已超时'); } else { console.error(`请求失败:${error.message}`); } process.exitCode = 1; } finally { clearTimeout(timeout); } }在 Linux 或 macOS 中设置密钥并运行:
export AHRI_API_KEY='你的 Ahri API 密钥' node ahri-check.mjs在 Windows PowerShell 中设置当前会话的密钥并运行:
$env:AHRI_API_KEY = '你的 Ahri API 密钥' node .\ahri-check.mjs检查终端输出。代码会同时校验 HTTP 状态、响应字段和返回文本;只有内容严格等于
AHRI_OK时才输出成功结果。
成功标准与排查
成功标准是 HTTP 响应状态为 200,响应中存在 choices[0].message.content,并且终端显示 AHRI_OK。HTTP 4xx 或 5xx 时,程序会打印状态码和响应正文;先确认密钥没有空格、环境变量名称准确,且请求地址和模型名称保持示例中的值。
- 提示缺少 AHRI_API_KEY:说明变量没有注入当前终端。PowerShell 和 Linux/macOS 的设置命令只对当前会话生效,重新打开终端后需要再次设置。
- 请求超时:检查网络、代理和防火墙是否允许访问
ahriapi.com。超时只表示本次请求在 30 秒内没有完成,不会自动重试。 - 返回未授权或模型错误:检查
Authorization: Bearer格式、密钥状态以及gpt-6.1-sol是否仍对当前账户可用。
来源与边界
Node.js 官方文档说明,Node.js 提供浏览器兼容的全局 fetch,并可配合 AbortController 控制基于 Promise 的请求。Ahri 的地址、鉴权头、模型、请求字段和响应路径来自服务端于 2026-10-05 提供的真实联调记录,范围仅为非流式文本聊天。本文没有验证第三方 SDK、流式传输、Responses、图片、文件或工具调用。