Alphawrite SDK API 文档
版本 1.0.0 · 2026-09-23 · 零依赖 JS/TypeScript SDK,覆盖微信小程序、浏览器与 Node 18+
接口概览
| 项 | 说明 |
|---|---|
| Base URL | https://model.alphawrite.cn/v1 |
| 鉴权 | 请求头 Authorization: Bearer <apiKey> |
| SDK 方法 | models() / chat() / responses() / messages() |
| 底层协议 | OpenAI 兼容(chat、responses)+ Anthropic 兼容(messages) |
| 流式 | 四个方法都可流式,用回调逐片接收 |
可用模型
| 模型 | 定位 | 输入价 | 输出价 |
|---|---|---|---|
qwen3.8-max | 旗舰,复杂推理 | ¥12 | ¥36 |
qwen3.7-max | 旗舰上一代 | ¥12 | ¥36 |
qwen3-max | 均衡 | ¥2.5 | ¥10 |
qwen3.5-plus | 通用 | ¥0.8 | ¥4.8 |
qwen3.8-flash | 快且便宜,适合大批量 | ¥0.8 | ¥2.7 |
qwen3-coder-plus | 代码 | ¥4 | ¥16 |
qwen3-vl-plus | 视觉,看图 / OCR | ¥1 | ¥10 |
价格单位:元 / 百万 Token。实际可用模型以 models() 返回为准。
安装
npm install https://sdk.alphawrite.cn/download/alphawrite-sdk-1.0.0.tgz
也可以用单文件版,适合浏览器 <script> 或微信小程序:
<script src="https://sdk.alphawrite.cn/v1/alphawrite-sdk-1.0.0.global.js"></script>
<script>
const { Alphawrite } = window.AlphawriteSDK
</script>
初始化
import { Alphawrite } from 'alphawrite-sdk'
const client = new Alphawrite({
apiKey: process.env.ALPHAWRITE_KEY,
baseURL: 'https://model.alphawrite.cn/v1',
timeout: 120000,
mode: 'server'
})
AlphawriteOptions
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
apiKey | string | 是 | API Key。小程序/浏览器请传短期 Token |
baseURL | string | 否 | 默认 https://model.alphawrite.cn/v1 |
timeout | number | 否 | 单次请求超时(毫秒),默认 120000 |
mode | 'server' | 'client' | 否 | 默认 server。client 会打印安全提醒 |
fetch | typeof fetch | 否 | 自定义请求实现,会覆盖自动检测 |
quiet | boolean | 否 | 关闭安全提醒,默认 false |
models()
列出当前 Key 可用的模型。
const models = await client.models()
// [{ id: 'qwen3.8-flash', object: 'model', ownedBy: 'ali' }, ...]
| 返回 | 类型 | 说明 |
|---|---|---|
ModelInfo[] | array | 每项含 id、object、可选 ownedBy |
chat(options)
OpenAI 风格对话接口,对应 POST /v1/chat/completions。
const r = await client.chat({
model: 'qwen3.8-flash',
messages: [
{ role: 'system', content: '你是一个税务助手' },
{ role: 'user', content: '帮我看看这家企业的风险点' }
],
maxTokens: 512,
temperature: 0.7
})
console.log(r.content, r.usage)
ChatOptions
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 模型 ID |
messages | ChatMessage[] | 是 | role 为 system / user / assistant |
stream | boolean | 否 | 设为 true 时必须提供 onDelta |
onDelta | (text: string) => void | 否 | 正文分片回调 |
onReasoning | (text: string) => void | 否 | 思维链分片回调(不计入 content) |
maxTokens | number | 否 | 最大输出 Token 数 |
temperature | number | 否 | 采样温度 |
topP | number | 否 | 核采样 |
stop | string | string[] | 否 | 停止词 |
ChatResult
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 本次请求 ID |
model | string | 实际使用的模型 |
content | string | 回答正文。流式时等于所有分片拼接结果 |
finishReason | string | null | 结束原因,如 stop、length |
usage | Usage | null | { promptTokens, completionTokens, totalTokens } |
responses(options)
OpenAI Responses 接口,对应 POST /v1/responses。
注意:上游
qwen3-vl-plus 不支持该端点,会返回
Unsupported model。看图请用 chat()。
const r = await client.responses({ model: 'qwen3.8-flash', input: '总结这段文字' })
console.log(r.content, r.status)
| ResponsesOptions | 类型 | 说明 |
|---|---|---|
model | string | 模型 ID |
input | string | 输入文本 |
instructions | string | 系统指令,可选 |
maxOutputTokens | number | 最大输出 Token |
stream / onDelta / onReasoning | — | 同 chat() |
| ResponsesResult | 类型 | 说明 |
|---|---|---|
id / model | string | 请求 ID 与模型 |
content | string | 输出文本 |
status | string | null | 如 completed |
usage | Usage | null | Token 用量 |
messages(options)
Anthropic Messages 格式,对应 POST /v1/messages,供 Claude Code 这类客户端使用。
const r = await client.messages({
model: 'qwen3.8-flash',
system: '你是一个税务助手',
messages: [{ role: 'user', content: '回答两个字:好的' }],
maxTokens: 256
})
console.log(r.content)
坑:
maxTokens 给小了(例如 32)会被思维链占满,
content 会是空字符串而 stopReason 仍为正常值。建议给 200 以上。
| MessagesOptions | 类型 | 说明 |
|---|---|---|
model | string | 模型 ID |
messages | ChatMessage[] | 消息列表 |
maxTokens | number | 默认 1024 |
system | string | 系统提示 |
stream / onDelta / onReasoning | — | 同 chat() |
| MessagesResult | 类型 | 说明 |
|---|---|---|
id / model | string | 请求 ID 与模型 |
content | string | 回答正文 |
stopReason | string | null | 如 end_turn |
inputTokens / outputTokens | number | null | Token 用量 |
流式输出
四个方法都支持流式。SDK 内部按 \n\n 切分 SSE 事件,并处理跨分片的 UTF-8 半字符,接入方不需要自己解析。
let text = ''
const r = await client.chat({
model: 'qwen3.8-flash',
messages: [{ role: 'user', content: '从 1 数到 5' }],
maxTokens: 256,
stream: true,
onDelta: (chunk) => { text += chunk }, // 正文
onReasoning: (chunk) => {} // 思维链,可选
})
// 保证一致:拼接结果 === 返回的 content
console.log(text === r.content) // true
微信小程序
小程序没有 EventSource,SDK 自动切换到 wx.request + enableChunked。使用方式完全一致,不需要改代码。
错误处理
所有错误都是 AlphawriteError。
| 属性 | 类型 | 说明 |
|---|---|---|
message | string | 服务端返回的可读信息 |
status | number | HTTP 状态码;网络层失败为 0 |
code | string? | 业务错误码,如 InvalidParameter |
body | string? | 响应原文(已截断),便于排查 |
isAuthError | boolean | 401 / 403 |
isRateLimited | boolean | 429 |
import { AlphawriteError } from 'alphawrite-sdk'
try {
await client.chat({ model: 'qwen3.8-flash', messages: [{ role: 'user', content: 'hi' }] })
} catch (e) {
if (e instanceof AlphawriteError && e.isAuthError) {
// Key 无效或无权访问该分组
}
}
运行环境
| 环境 | 传输实现 | 流式 |
|---|---|---|
| Node.js 18+ | fetch | ReadableStream |
| 浏览器 | fetch | ReadableStream |
| 微信小程序 | wx.request | enableChunked + onChunkReceived |
环境自动检测:存在 wx.request 时走小程序适配器,否则走 fetch。也可以用 fetch 参数自定义。
安全建议
长期 API Key 绝不能写进小程序或浏览器代码。
代码、请求头、运行时参数都能被提取,混淆只能增加成本、不能保密。
小程序 / 浏览器
↓ 短期 Token(你们的后端签发,可限额度、限模型、可撤销)
你们的业务后端
↓ 长期 API Key(存在服务端环境变量)
model.alphawrite.cn/v1
SDK 用 mode 区分两种场景:server(默认)不做提醒;client 会在初始化时提示不要在前端使用长期密钥。
已知限制
qwen3-vl-plus不支持/v1/responses,请用chat()。- 图片输入要求边长大于 10 像素,否则上游返回
InvalidParameter。 - Anthropic 格式的
maxTokens建议 200 以上,否则可能被思维链占满。 - 模型定价与可用模型以
models()返回和实际账单为准。