AI 技术 · 开发实践

Node.js 原生 fetch 调用 Ahri API:超时、鉴权与响应校验

面向 Node.js 服务端开发者的最小可运行教程:用原生 fetch 和 AbortController 调用 Ahri API,安全读取环境变量,处理 HTTP 错误,并严格校验返回内容。

适用场景

已有 Node.js 服务需要增加一次最小的 AI 文本请求,同时希望避免引入第三方 SDK。本文使用 Node.js 20+ 原生 fetch,向 Ahri 发送非流式 Chat Completions 请求,并设置 30 秒超时。当前示例只覆盖普通文本聊天,不能据此推断流式响应、Responses、图片、文件或工具调用已完成验证。

前置条件

操作步骤

  1. 新建文件 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);
      }
    }
  2. 在 Linux 或 macOS 中设置密钥并运行:

    export AHRI_API_KEY='你的 Ahri API 密钥'
    node ahri-check.mjs
  3. 在 Windows PowerShell 中设置当前会话的密钥并运行:

    $env:AHRI_API_KEY = '你的 Ahri API 密钥'
    node .\ahri-check.mjs
  4. 检查终端输出。代码会同时校验 HTTP 状态、响应字段和返回文本;只有内容严格等于 AHRI_OK 时才输出成功结果。

成功标准与排查

成功标准是 HTTP 响应状态为 200,响应中存在 choices[0].message.content,并且终端显示 AHRI_OK。HTTP 4xx 或 5xx 时,程序会打印状态码和响应正文;先确认密钥没有空格、环境变量名称准确,且请求地址和模型名称保持示例中的值。

来源与边界

Node.js 官方文档说明,Node.js 提供浏览器兼容的全局 fetch,并可配合 AbortController 控制基于 Promise 的请求。Ahri 的地址、鉴权头、模型、请求字段和响应路径来自服务端于 2026-10-05 提供的真实联调记录,范围仅为非流式文本聊天。本文没有验证第三方 SDK、流式传输、Responses、图片、文件或工具调用。

来源:Node.js Global objects:fetch

想把这套调用方式接入自己的项目?

先看 Ahri API 官方接入指南,确认当前地址、模型和服务条款,再按本文的通用步骤落地。

查看官方接入指南 ↗ · 访问 Ahri API 中转站 ↗

参考资料与边界

本文面向开发实践,参数和能力范围以引用来源及 Ahri API 官方信息为准;不要把示例密钥写进代码或日志。