文本生成
使用 Chat Completions 生成文本
调用 OpenAI 风格的 Chat Completions 接口,并处理普通响应和 SSE 流。
接口地址:
POST /v1/chat/completions
这个接口适合使用 OpenAI Chat Completions 请求格式的应用。服务只处理鉴权、模型路由和积分扣费;请求交给上游后,响应状态码、响应头、JSON 和 SSE 数据都原样返回。
发送普通请求
先通过 GET /v1/models 获取模型名称,再替换下面的 YOUR_MODEL_NAME:
curl https://api.picccai.cn/v1/chat/completions \
-H "Authorization: Bearer $PICCC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL_NAME",
"messages": [
{"role": "system", "content": "回答要简洁,使用中文。"},
{"role": "user", "content": "给咖啡店写三条雨天促销标题。"}
],
"stream": false
}'
除了 model 会映射为后台配置的上游模型标识,其他请求字段会直接传给上游。temperature、max_tokens、tools 等字段是否可用,以所选模型的上游能力为准。
接收流式响应
设置 stream: true,服务会返回上游的 SSE 数据流:
curl -N https://api.picccai.cn/v1/chat/completions \
-H "Authorization: Bearer $PICCC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL_NAME",
"messages": [
{"role": "user", "content": "写一段 100 字以内的产品介绍。"}
],
"stream": true
}'
Node.js 可以直接读取响应流:
const response = await fetch('https://api.picccai.cn/v1/chat/completions', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.PICCC_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: process.env.PICCC_CHAT_MODEL,
messages: [{ role: 'user', content: '写三条商品标题。' }],
stream: true,
}),
})
if (!response.ok || !response.body) {
throw new Error(`Request failed: ${response.status} ${await response.text()}`)
}
const decoder = new TextDecoder()
for await (const chunk of response.body) {
process.stdout.write(decoder.decode(chunk, { stream: true }))
}
响应格式
开放 API 不会把不同厂商的响应改成统一结构。大多数 Chat Completions 上游会返回 choices 和 usage,但客户端不应假设所有模型字段完全相同。
上游返回错误时,错误状态码和响应正文也会原样返回。排查时同时记录 HTTP 状态码、响应正文和 X-Request-Id。
积分结算
文本请求至少扣除模型配置的最低积分,再按上游返回的输入 token、缓存输入 token 和输出 token 结算。上游请求失败时,预扣积分会退回。
