切换深色模式
Node.js 示例
本示例使用 Node.js 内置的 fetch 发送非流式聊天请求,无需安装额外依赖。建议使用 Node.js 22 或更新的受支持版本。
准备环境
bash
node --version准备可用令牌,以及支持 Chat Completions 接口的模型 ID。
设置环境变量
以下设置方式适用于 macOS、Linux 的 Bash 或 Zsh。替换占位值,在同一个终端执行后面的脚本:
bash
export NEW_API_BASE_URL='https://api.example.com/v1'
export NEW_API_KEY='your-api-key'
export NEW_API_MODEL='your-model-id'正式服务可以使用部署平台的密钥配置功能注入这些变量。不要将令牌写入公开网页、前端构建变量或代码仓库。
创建脚本
新建 chat.mjs,写入以下代码。.mjs 文件可以直接使用顶层 await:
js
const required = [
'NEW_API_BASE_URL',
'NEW_API_KEY',
'NEW_API_MODEL'
]
const missing = required.filter((name) => !process.env[name])
if (missing.length > 0) {
console.error('请先设置环境变量:' + missing.join(', '))
process.exit(1)
}
const baseURL = process.env.NEW_API_BASE_URL.replace(/\/+$/, '')
try {
const response = await fetch(baseURL + '/chat/completions', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.NEW_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: process.env.NEW_API_MODEL,
messages: [
{ role: 'user', content: '你好,请用一句话介绍自己。' }
],
stream: false
}),
signal: AbortSignal.timeout(60_000)
})
if (!response.ok) {
throw new Error('HTTP ' + response.status + ': ' + await response.text())
}
const result = await response.json()
const content = result.choices?.[0]?.message?.content
if (content) {
console.log(content)
} else {
console.log('响应没有普通文本内容,请检查返回结构:')
console.log(JSON.stringify(result, null, 2))
}
} catch (error) {
console.error('请求失败:', error.message)
process.exitCode = 1
}运行并查看结果
bash
node chat.mjs终端应输出模型回复,随后可以在控制台查看对应的调用记录。
本示例设置了 60 秒客户端超时,不会自动重试。客户端中止等待,不代表服务端一定同步停止处理请求。
集成到自己的应用
在服务端保管令牌
将调用逻辑放在自己的后端服务中,由后端读取令牌、校验用户请求并转发。浏览器只访问自己的业务接口。
控制上下文和请求频率
只发送本次任务需要的消息,避免客户端操作意外产生大量重复请求。收到限流错误时,按照站点规则降低并发或等待后重试。
处理流式返回
本页示例设置了 stream: false,因此可以用 response.json() 解析。
如果改为 stream: true,需要读取响应流并解析 SSE 事件,不能继续将整个响应作为一个 JSON 对象处理。可以先参考 cURL 流式示例观察数据格式。
常见错误
fetch is not defined:检查是否使用了过旧的 Node.js。- 缺少环境变量:确认程序实际运行环境已经注入变量。
401、403、404、429:结合返回错误和错误排查处理。- 超时或网络错误:核对地址、网络和控制台调用记录。