大模型对话 API
接口概述
对接阿里云百炼大模型服务(OpenAI 兼容协议),支持非流式与 SSE 流式两种返回方式,
可通过 enable_thinking 参数开启深度思考(思考过程),默认为关闭。
接口地址
/api/llm_api.php
对话补全
POST?action=chat
查询模型列表
GET?action=models
参数可通过 JSON Body、POST 表单、GET 查询字符串或 HTTP Header 传递。
请求参数(action=chat)
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
api_key | string | 是 | API 密钥(用户中心获取),本接口仅需密钥即可鉴权 |
action | string | 否 | 操作类型:chat(默认)/ models |
messages | array | 二选一 | 消息数组,格式 [{"role":"user","content":"..."}],支持 system / user / assistant |
prompt | string | 二选一 | 单轮提问文本,等价于一条 role=user 的消息 |
stream | int | 否 | 是否流式输出:0 非流式(默认)/ 1 SSE 流式 |
model | string | 否 | 指定模型,不传则使用平台默认模型(可通过 models 接口查询) |
enable_thinking | int / bool | 否 | 是否开启深度思考:1/true 开启,0/false 或不传为关闭(默认,响应更快)。开启后响应会返回 reasoning_content,会额外生成思考 token,延迟更高,且思考 token 计入输出计费 |
响应示例(非流式)
{
"code": 0,
"message": "success",
"data": {
"model": "qwen3.8-flash",
"content": "你好,我是大语言模型助手……",
"reasoning_content": "用户问好,我应该礼貌回应……",
"usage": {
"prompt_tokens": 68,
"completion_tokens": 78,
"total_tokens": 146,
"completion_tokens_details": {
"reasoning_tokens": 56
}
},
"cost": 0.01,
"cost_detail": {
"cost": 0.01,
"input_tokens": 68,
"output_tokens": 134,
"reasoning_tokens": 56,
"pricing": { "input_price": 0.003, "output_price": 0.006 }
},
"remaining_credits": 9.99
}
}
reasoning_content 仅在请求时传 enable_thinking=1 且模型支持深度思考时返回,否则为 null。
remaining_credits 为本次扣费后的 LLM 余额(单位:元)。
流式响应(stream=1)
传 stream=1 时,接口返回 Content-Type: text/event-stream,
逐块推送 data: {...},最后以 data: [DONE] 结束。
计费在流结束后按上游返回的最终 usage 结算。以下示例为开启了 enable_thinking=1 时的思考片段。
data: {"choices":[{"delta":{"reasoning_content":"用户问好,"}}]}
data: {"choices":[{"delta":{"content":"你好"}}]}
data: {"choices":[{"delta":{"content":"!有什么可以帮你?"}}]}
data: {"usage":{"prompt_tokens":12,"completion_tokens":9,"total_tokens":21}}
data: [DONE]
CURLOPT_WRITEFUNCTION、
Python requests 的 stream=True)逐块处理,不要等待完整响应体。
计费规则
- 按实际 token 计费,公式:
费用 =prompt_tokens / 1000 × 输入单价+(completion_tokens + reasoning_tokens) / 1000 × 输出单价 - 思考 token 计入输出成本:深度思考模型的
reasoning_tokens与正常输出同价 - 单次最低消费 0.01 元(余额按两位小数存储)
- 扣费顺序:优先扣 LLM 余额 → 余额不足时,若用户已开启「账户余额兜底」,自动从账户余额补扣 → 两者都不足则拒绝请求
- 流式调用如果连接失败,不会扣费
模型与单价
单价单位为元 / 1000 token。调用 GET /api/llm_api.php?action=models 可实时获取当前可用模型与单价。
{
"code": 0,
"message": "success",
"data": {
"default_model": "qwen3.8-flash",
"use_account_balance": true,
"models": [
{
"name": "qwen3.8-flash",
"input_price": 0.003,
"output_price": 0.006,
"is_default": true
},
{
"name": "qwen-plus",
"input_price": 0.02,
"output_price": 0.05,
"is_default": false
}
]
}
}
错误码说明
| 错误码 | 说明 |
|---|---|
0 | 成功 |
1001 | 缺少必要参数(api_key / messages / prompt) |
1002 | 参数验证失败(messages 格式错误等) |
1003 | API 密钥无效 |
1004 | LLM 余额不足,请充值后再使用 |
1005 | 大模型调用失败(上游异常 / 网络问题) |
调用示例
PHP(非流式)
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://your-domain/api/llm_api.php",
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 90,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'api_key' => '你的API密钥',
'action' => 'chat',
'messages' => [
['role' => 'user', 'content' => '你好,介绍一下你自己'],
],
'stream' => 0,
], JSON_UNESCAPED_UNICODE),
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if ($res['code'] === 0) {
echo $res['data']['content'];
echo "\n本次费用:¥" . $res['data']['cost'];
echo "\n剩余余额:¥" . $res['data']['remaining_credits'];
}
PHP(流式)
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://your-domain/api/llm_api.php",
CURLOPT_POST => true,
CURLOPT_TIMEOUT => 120,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'api_key' => '你的API密钥',
'action' => 'chat',
'prompt' => '写一段 200 字的产品介绍',
'stream' => 1,
], JSON_UNESCAPED_UNICODE),
CURLOPT_WRITEFUNCTION => function ($ch, $chunk) {
echo $chunk;
flush();
return strlen($chunk);
},
]);
curl_exec($ch);
curl_close($ch);
Python(非流式)
import requests
resp = requests.post("https://your-domain/api/llm_api.php", json={
"api_key": "你的API密钥",
"action": "chat",
"prompt": "你好,介绍一下你自己",
"stream": 0,
}, timeout=90)
result = resp.json()
if result["code"] == 0:
print(result["data"]["content"])
print("本次费用:", result["data"]["cost"], "元")
print("剩余余额:", result["data"]["remaining_credits"], "元")
else:
print("调用失败:", result["message"])
Python(流式)
import json
import requests
resp = requests.post("https://your-domain/api/llm_api.php", json={
"api_key": "你的API密钥",
"action": "chat",
"prompt": "写一段 200 字的产品介绍",
"stream": 1,
}, stream=True, timeout=120)
for line in resp.iter_lines(decode_unicode=True):
if not line or not line.startswith("data: "):
continue
payload = line[6:]
if payload == "[DONE]":
break
obj = json.loads(payload)
delta = obj.get("choices", [{}])[0].get("delta", {})
if delta.get("reasoning_content"):
print(delta["reasoning_content"], end="", flush=True)
if delta.get("content"):
print(delta["content"], end="", flush=True)