目前百炼平台提供的ChatGLM模型服务主要包含ChatGLM2和ChatGLM3模型,均是由智谱AI出品的大语言模型。
模型概览
模型名称 | 上下文长度 | 最大输入 | 输入成本 | 输出成本 | 免费额度 |
(Token数) | (每千Token) | ||||
chatglm3-6b | 7500 | 7500 | 目前仅供免费体验。 免费额度用完后不可调用,敬请关注后续动态。 | 100万Token 有效期:百炼开通后180天内 | |
chatglm-6b-v2 | 6500 | 6500 | 0.006元 | 0.006元 | 100万Token(需申请) 有效期:百炼开通后180天内 |
开始使用
前提条件
您需要已获取API Key并配置API Key到环境变量。如果通过SDK调用,还需要安装DashScope SDK。
SDK调用
简单示例
# coding=utf-8
from dashscope import Generation
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'}]
gen = Generation()
response = gen.call(
'chatglm-6b-v2',
messages=messages,
result_format='message',
)
print(response)
import java.util.Arrays;
import java.lang.System;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
public class Main {
public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
Generation gen = new Generation();
Message systemMsg = Message.builder()
.role(Role.SYSTEM.getValue())
.content("You are a helpful assistant.")
.build();
Message userMsg = Message.builder()
.role(Role.USER.getValue())
.content("你是谁?")
.build();
GenerationParam param = GenerationParam.builder()
// 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("chatglm-6b-v2")
.messages(Arrays.asList(systemMsg, userMsg))
.resultFormat(GenerationParam.ResultFormat.MESSAGE)
.build();
return gen.call(param);
}
public static void main(String[] args) {
try {
GenerationResult result = callWithMessage();
System.out.println(JsonUtils.toJson(result));
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
// 使用日志框架记录异常信息
System.err.println("An error occurred while calling the generation service: " + e.getMessage());
}
System.exit(0);
}
}
流式输出
# coding=utf-8
import os
import dashscope
messages = [
{'role':'system','content':'you are a helpful assistant'},
{'role': 'user','content': '你是谁?'}
]
responses = dashscope.Generation.call(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="chatglm-6b-v2",
messages=messages,
result_format='message',
stream=True,
incremental_output=True
)
for response in responses:
print(response)
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import io.reactivex.Flowable;
import java.lang.System;
public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static void handleGenerationResult(GenerationResult message) {
System.out.println(JsonUtils.toJson(message));
}
public static void streamCallWithMessage(Generation gen, Message userMsg)
throws NoApiKeyException, ApiException, InputRequiredException {
GenerationParam param = buildGenerationParam(userMsg);
Flowable<GenerationResult> result = gen.streamCall(param);
result.blockingForEach(message -> handleGenerationResult(message));
}
private static GenerationParam buildGenerationParam(Message userMsg) {
return GenerationParam.builder()
// 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("chatglm-6b-v2")
.messages(Arrays.asList(userMsg))
.resultFormat(GenerationParam.ResultFormat.MESSAGE)
.incrementalOutput(true)
.build();
}
public static void main(String[] args) {
try {
Generation gen = new Generation();
Message userMsg = Message.builder().role(Role.USER.getValue()).content("你是谁?").build();
streamCallWithMessage(gen, userMsg);
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
logger.error("An exception occurred: {}", e.getMessage());
}
System.exit(0);
}
}
参数配置
参数 | 类型 | 默认值 | 说明 |
model | string | - | chatglm-6b-v2/chatglm3-6b。 |
stream(可选) | boolean | False | 是否使用流式输出。当以stream模式输出结果时,接口返回结果为generator,需要通过迭代获取结果,默认每次输出为当前生成的整个序列,最后一次输出为最终全部生成结果,可以通过参数incremental_output为False改变输出模式为非增量输出。 |
incremental_output(可选) | boolean | False | 控制流式输出模式,即后面内容会包含已经输出的内容;设置为True,将开启增量输出模式,后面输出不会包含已经输出的内容,您需要自行拼接整体输出,参考流式输出示例代码。 |
messages | array | - | 用户输入的内容,dict内主要包含2个key:role和content,其中role支持user、assistant、system,content为对应role的text输入。目前仅chatglm3-6b支持。 |
result_format | string | - | 用户返回的内容类型,默认为text,当输入格式为messages时可配置为message。 |
返回结果
非流式返回结果示例
{
"status_code": 200,
"request_id": "605c2d0c-614a-9725-9a18-720b7579e0f3",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "我是一个名为 ChatGLM2-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。"
}
}
]
},
"usage": {
"input_tokens": 27,
"output_tokens": 52,
"total_tokens": 79
}
}
流式返回结果示例
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "我"}}]}, "usage": {"input_tokens": 26, "output_tokens": 1, "total_tokens": 27}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "是一个"}}]}, "usage": {"input_tokens": 26, "output_tokens": 1, "total_tokens": 27}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "名为"}}]}, "usage": {"input_tokens": 26, "output_tokens": 1, "total_tokens": 27}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "ChatGLM2-"}}]}, "usage": {"input_tokens": 26, "output_tokens": 5, "total_tokens": 31}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "6B 的人工智能助手,是基于"}}]}, "usage": {"input_tokens": 26, "output_tokens": 8, "total_tokens": 34}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "清华大学 KEG 实验室和智谱"}}]}, "usage": {"input_tokens": 26, "output_tokens": 8, "total_tokens": 34}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "AI 公司于 2023"}}]}, "usage": {"input_tokens": 26, "output_tokens": 8, "total_tokens": 34}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "年共同训练的语言模型开发的。我的"}}]}, "usage": {"input_tokens": 26, "output_tokens": 8, "total_tokens": 34}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "任务是针对用户的问题和要求提供适当的"}}]}, "usage": {"input_tokens": 26, "output_tokens": 8, "total_tokens": 34}}
{"status_code": 200, "request_id": "6efdf980-2d20-92f1-9c4f-b59081d38ada", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "stop", "message": {"role": "assistant", "content": "答复和支持。"}}]}, "usage": {"input_tokens": 26, "output_tokens": 4, "total_tokens": 30}}
返回参数说明
返回参数 | 类型 | 说明 |
status_code | int | 200(HTTPStatus.OK)表示请求成功,否则表示请求失败,可以通过code获取错误码,通过message字段获取错误详细信息。 |
request_Id | string | 系统生成的标志本次调用的id。 |
code | string | 表示请求失败,表示错误码,成功忽略。 |
message | string | 失败,表示失败详细信息,成功忽略。 |
output | dict | 调用结果信息,对于千问模型,包含输出text。 |
usage | dict | 计量信息,表示本次请求计量数据。 |
text | dict | 模型生成回复以及历史对话信息,response为本次输出,history为历史对话列表。 |
input_tokens | int | 用户输入文本转换成Token后的长度,目前都是0,不支持统计。 |
output_tokens | int | 模型生成回复转换为Token后的长度,目前都是0,不支持统计。 |
HTTP调用接口
提交接口调用
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
入参描述
传参方式 | 字段 | 类型 | 必选 | 描述 | 示例值 |
Header | Content-Type | String | 是 | 请求类型:application/json | application/json |
Accept | String | 否 | */*,选择text/event-stream则会开启 SSE 响应,默认无设置 | text/event-stream | |
Authorization | String | 是 | API-Key,例如:Bearer d1**2a | Bearer d1**2a | |
X-DashScope-WorkSpace | String | 否 | 指明本次调用需要使用的workspace;需要注意的是,对于子账号Apikey调用,此参数为必选项,子账号必须归属于某个workspace才能调用;对于主账号Apikey此项为可选项,添加则使用对应的workspace身份,不添加则使用主账号身份。 | ws_QTggmeAxxxxx | |
X-DashScope-SSE | String | 否 | 跟Accept: text/event-stream二选一即可启用SSE响应 | enable | |
Body | model | String | 是 | 指明需要调用的模型 | chatglm3-6b |
input.prompt | String | 是 | 文本内容,支持中英文。 | 你好 | |
input.history | List | 否 | 用户与模型的对话历史。 | [] | |
input.messages | List Dict | 是 | 用户多轮对话信息输入。 | [ { "role": "user", "content": "你好" }] | |
parameters.incremental_output | Bool | 否 | 用于控制流式输出模式,默认False,即后面内容会包含已经输出的内容;设置为True,将开启增量输出模式,后面输出不会包含已经输出的内容,您需要自行拼接整体输出,参考流式输出示例代码。 | ||
parameters.result_formatt | String | 否 | "text"表示旧版本的text "message"表示兼容openai的message | "text" |
出参描述
字段 | 类型 | 描述 | 示例值 |
output | object | 本次请求的算法输出内容。 | / |
usage | object | 本次请求使用的token。 | / |
request_id | string | 本次请求的系统唯一码 | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
请求示例(SSE关闭)
以下示例展示通过CURL命令来调用 chatglm模型(SSE 关闭)。
curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "chatglm-6b-v2",
"input":{
"messages":[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你是谁?"
}
]
},
"parameters": {
"result_format": "message"
}
}'
响应示例(SSE关闭)
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "我是一个名为 ChatGLM2-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。"
}
}
]
},
"usage": {
"total_tokens": 79,
"output_tokens": 52,
"input_tokens": 27
},
"request_id": "8e6a94bf-c489-99b4-a1b0-feae231b80d9"
}
请求示例(SSE开启)
以下示例展示通过CURL命令来调用 chatglm模型(SSE 关闭)。
curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "chatglm-6b-v2",
"input":{
"messages":[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你是谁?"
}
]
},
"parameters": {
"result_format": "message",
"incremental_output":true
}
}'
响应示例(SSE开启)
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"我","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":28,"input_tokens":27,"output_tokens":1},"request_id":"80df94f0-333d-9b89-bdbf-9d5e11590428"}
id:2
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"是一个","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":28,"input_tokens":27,"output_tokens":1},"request_id":"80df94f0-333d-9b89-bdbf-9d5e11590428"}
... ... ... ...
... ... ... ...
id:9
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"任务是针对用户的问题和要求提供适当的","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":35,"input_tokens":27,"output_tokens":8},"request_id":"80df94f0-333d-9b89-bdbf-9d5e11590428"}
id:10
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"答复和支持。","role":"assistant"},"finish_reason":"stop"}]},"usage":{"total_tokens":31,"input_tokens":27,"output_tokens":4},"request_id":"80df94f0-333d-9b89-bdbf-9d5e11590428"}
异常响应示例
在访问请求出错的情况下,输出结果中会通过 code 和 message 指明出错原因。
{
"code":"InvalidApiKey",
"message":"Invalid API-key provided.",
"request_id":"fb53c4ec-1c12-4fc4-a580-cdb7c3261fc1"
}
状态码说明
大语言模型服务平台通用状态码请查阅:错误码