文档

API详情

更新时间:

百川

说明

支持的领域 / 任务:aigc

baichuan-13B/baichuan2-7B是由百川智能开发的一个开源的大规模预训练模型。基于Transformer结构,在大约1.2万亿tokens上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威benchmark(C-EVAL/MMLU)上均取得同尺寸最好的效果。

模型概览

模型名

模型简介

baichuan-7b-v1

百川模型,仅支持prompt格式输入

baichuan2-7b-chat-v1

baichuan2-13b-chat-v1

百川模型2-7B对话版/百川模型2-13B对话版,支持message和prompt格式输入

SDK使用

前提条件

文本生成

以下示例展示了调用baichuan模型对一个用户指令进行响应的代码。

说明

需要使用您的API-KEY替换示例中的 YOUR_DASHSCOPE_API_KEY,代码才能正常运行。

设置API-KEY

export DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY

通过message访问

from http import HTTPStatus
import dashscope


def call_with_messages():
    messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
                {'role': 'user', 'content': '介绍下故宫?'}]
    response = dashscope.Generation.call(
        model='baichuan2-7b-chat-v1',
        messages=messages,
        result_format='message',  # set the result to be "message" format.
    )
    if response.status_code == HTTPStatus.OK:
        print(response)
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))


if __name__ == '__main__':
    call_with_messages()
// Copyright (c) Alibaba, Inc. and its affiliates.

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.MessageManager;
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 void usage()
      throws NoApiKeyException, ApiException, InputRequiredException {
    MessageManager msgManager = new MessageManager(10);
    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();
    msgManager.add(systemMsg);
    msgManager.add(userMsg);

    GenerationParam param = GenerationParam.builder()
        .model("baichuan2-7b-chat-v1")
        .messages(msgManager.get())
        .build();
    Generation gen = new Generation();
    GenerationResult result = gen.call(param);
    System.out.println(JsonUtils.toJson(result));
  }

  public static void main(String[] args) {
    try {
      usage();
    } catch (ApiException | NoApiKeyException | InputRequiredException e) {
      System.out.println(e.getMessage());
    }
    System.exit(0);
  }
}

通过prompt访问

from http import HTTPStatus
import dashscope


def call_with_prompt():
    prompt = '介绍下故宫'
    rsp = dashscope.Generation.call(model='baichuan2-7b-chat-v1',
                                    prompt=prompt)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output)
        print(rsp.usage)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


if __name__ == '__main__':
    call_with_prompt()
// Copyright (c) Alibaba, Inc. and its affiliates.

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.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 void usage()
      throws NoApiKeyException, ApiException, InputRequiredException {
    Generation gen = new Generation();
    GenerationParam param = GenerationParam
    .builder()
    .model("baichuan2-7b-chat-v1")
    .prompt("介绍下杭州")
    .build();
    GenerationResult result = gen.call(param);
    System.out.println(JsonUtils.toJson(result));
  }

  public static void main(String[] args){
        try {
          usage();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
          System.out.println(e.getMessage());
        }
        System.exit(0);
  }
}

通过流式访问

from http import HTTPStatus
from dashscope import Generation


def call_with_stream():
    messages = [
        {'role': 'user', 'content': '介绍下故宫?'}]
    responses = Generation.call(
        model='baichuan2-7b-chat-v1',
        messages=messages,
        result_format='message',  # set the result to be "message" format.
        stream=True,
        incremental_output=True  # get streaming output incrementally
    )
    full_content = ''  # with incrementally we need to merge output.
    for response in responses:
        if response.status_code == HTTPStatus.OK:
            full_content = response.output.choices[0]['message']['content']
            print(response)
        else:
            print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
                response.request_id, response.status_code,
                response.code, response.message
            ))
    print('Full response:\n' + full_content)


if __name__ == '__main__':
    call_with_stream()
// Copyright (c) Alibaba, Inc. and its affiliates.

import java.util.Arrays;
import java.util.concurrent.Semaphore;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.aigc.generation.models.QwenParam;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.ResultCallback;
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;

public class Main {
  public static void streamCallWithMessage()
      throws NoApiKeyException, ApiException, InputRequiredException {
    Generation gen = new Generation();
    Message userMsg = Message
    .builder()
    .role(Role.USER.getValue())
    .content("介绍下杭州?")
    .build();
    QwenParam param =
        QwenParam.builder().model("baichuan2-7b-chat-v1").messages(Arrays.asList(userMsg))
            .resultFormat(QwenParam.ResultFormat.MESSAGE)
            .topP(0.8)
            // get streaming output incrementally
            .incrementalOutput(true)
            .build();
    Flowable<GenerationResult> result = gen.streamCall(param);
    StringBuilder fullContent = new StringBuilder();
    result.blockingForEach(message -> {
      fullContent.append(message.getOutput().getChoices().get(0).getMessage().getContent());
      System.out.println(JsonUtils.toJson(message));
    });
    System.out.println("Full content: \n" + fullContent.toString());
  }

  public static void streamCallWithCallback()
      throws NoApiKeyException, ApiException, InputRequiredException,InterruptedException {
    Generation gen = new Generation();
    Message userMsg = Message
    .builder()
    .role(Role.USER.getValue())
    .content("介绍下杭州?")
    .build();
    QwenParam param = QwenParam
    .builder()
    .model("baichuan2-7b-chat-v1")
    .resultFormat(QwenParam.ResultFormat.MESSAGE)
    .messages(Arrays.asList(userMsg))
    .topP(0.8)
     // get streaming output incrementally
    .incrementalOutput(true)
    .build();
    Semaphore semaphore = new Semaphore(0);
    StringBuilder fullContent = new StringBuilder();
    gen.streamCall(param, new ResultCallback<GenerationResult>() {

      @Override
      public void onEvent(GenerationResult message) {
        fullContent.append(message.getOutput().getChoices().get(0).getMessage().getContent());
        System.out.println(message);
      }
      @Override
      public void onError(Exception err){
        System.out.println(String.format("Exception: %s", err.getMessage()));
        semaphore.release();
      }

      @Override
      public void onComplete(){
        System.out.println("Completed");
        semaphore.release();
      }
      
    });
    semaphore.acquire();
    System.out.println("Full content: \n" + fullContent.toString());
  }
  public static void main(String[] args) {
    try {
      streamCallWithMessage();
    } catch (ApiException | NoApiKeyException | InputRequiredException e) {
      System.out.println(e.getMessage());
    }
    try {
      streamCallWithCallback();
    } catch (ApiException | NoApiKeyException | InputRequiredException | InterruptedException e) {
      System.out.println(e.getMessage());
    }
    System.exit(0);
  }
}

参数配置

参数

类型

默认值

说明

model

string

-

目前支持 baichuan-7b-v1、baichuan2-7b-chat-v1

prompt

string

-

用户当前输入的期望模型执行指令。

stream(可选)

bool

False

是否使用流式输出。当以stream模式输出结果时,接口返回结果为generator,需要通过迭代获取结果,默认每次输出为当前生成的整个序列,最后一次输出为最终全部生成结果,可以通过参数incremental_output为False改变输出模式为非增量输出。

incremental_output(可选)

bool

False

控制流式输出模式,即后面内容会包含已经输出的内容;设置为True,将开启增量输出模式,后面输出不会包含已经输出的内容,您需要自行拼接整体输出,参考流式输出示例代码。

messages

list dict

-

用户输入的内容,dict内主要包含2个key:role和content,其中role支持user、assistant、system,content为对应role的text输入。目前仅baichuan2-7b-chat-v1、baichuan2-13b-chat-v1支持

result_format

string

-

用户返回的内容类型,默认为text,当输入格式为messages时可配置为message。

返回结果

  • 非流式返回结果示例

{
    "status_code": 200,
    "request_id": "dcb8fe29-6b2a-9797-8e35-f81b4aa7b33c",
    "code": "",
    "message": "",
    "output": {
        "text": "介绍下故宫\n故宫又称紫禁城,位于北京中轴线的中心,占地72万平方米。据史料记载,是明朝、清朝两代帝王的皇宫。自明永乐建成以来,至今已有六百多年的历史。 故宫的建筑按照它的布局和使用功能分成六大学堂,即外朝、内廷。 外朝,包括了太和殿、中和殿和保和殿,这便是人们常说的“三大殿” 内廷以乾清宫、交泰殿、坤宁宫后三宫为中心,以及东西六宫和御花园,是皇帝和皇后居住生活之所。 故宫,自明朝以来居住了24位皇帝,成为明清两朝的皇宫,它也是世界上现存规模最大、保存最为完整的木质结构的古建筑之一,是中国的象征。 它的建筑和陈列艺术的价值,也是中华民族的骄傲! 故宫位于北京城的中心,旧称“紫禁城”,是明、清两代的皇宫,也是我国现存最大最完整的古建筑群,共有殿宇8000多间。 故宫始建于公元1406年,1420年基本建成,历时14年,是明成祖朱棣下令所建。故宫的设计者是明太祖朱元璋的孙子、明成祖朱棣,明代著名建筑学家、解剖学家、天文学家提出了“高台建筑”和“立体规划”的设计思想,所以,故宫是中国古代建筑史上的一个伟大创举。"
    },
    "usage": {
        "input_tokens": 5,
        "output_tokens": 470
    }
}
  • 流式返回结果示例

{"status_code": 200, "request_id": "99bc52af-e64f-9a9f-9f47-6673bc99e828", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "西红柿牛腩是一道", "content_type": "text"}}]}, "usage": {"input_tokens": 12, "output_tokens": 3}}
{"status_code": 200, "request_id": "99bc52af-e64f-9a9f-9f47-6673bc99e828", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "西红柿牛腩是一道美味可口的菜肴,以下是制作西红柿牛肉", "content_type": "text"}}]}, "usage": {"input_tokens": 12, "output_tokens": 11}}
... ... ... ...
... ... ... ...
{"status_code": 200, "request_id": "99bc52af-e64f-9a9f-9f47-6673bc99e828", "code": "", "message": "", "output": {"text": null, "finish_reason": null, "choices": [{"finish_reason": "stop", "message": {"role": "assistant", "content": "西红柿牛腩是一道美味可口的菜肴,以下是制作西红柿牛肉的步骤:\n\n所需材料: \n- 牛腩 500克\n - 大西红柿 4个\n -洋葱 1个 (切碎)\n -大蒜 3瓣 ,切碎\n -生姜 2片\n -盐 适量\n -黑胡椒 少许\n -糖 少量\n -酱油 适当\n -水 足够\n -香菜 若干\n -油 适当的量\n -面粉 适量的量(可选) 用于裹牛肉\n -其他蔬菜(如胡萝卜、土豆等)可根据个人口味添加\n \n步骤如下: \n1. 将牛腩切成3-4厘米见方的块,用面粉或玉米淀粉裹好,备用。\n2. 在锅中加入适量的油,油热后加入洋葱、大蒜和生姜,翻炒至洋葱变透明。 注意不要炒糊。 \n3.加入牛肉块。用中火将牛肉两面煎至微黄色。煎好的牛肉取出备用,锅中油留用。 (如果之前选择不加面粉,此步骤可以直接进行) 如果牛肉比较大块的话,这一步可能需要翻煎几次,确保牛肉熟透。 \n4.在同一个锅中加入切好的西红柿块儿,翻炒均匀,然后加入适量的水,将西红柿煮烂。加入糖和酱油,搅拌均匀。如果西红柿比较酸,可以适当加入一些糖来平衡口感。 \n5.将煎过的牛肉重新加入锅中,转小火慢慢炖煮,直到牛肉变得非常软烂,汤汁变得浓稠。期间可以适时尝味,根据个人口味加盐和黑胡椒粉。 \n6.炖好的西红柿牛楠,撒上切好的香菜,即可出锅。可以搭配米饭或者面食食用。", "content_type": "text"}}]}, "usage": {"input_tokens": 12, "output_tokens": 366}}
  • 返回参数说明

返回参数

类型

说明

status_code

int

200(HTTPStatus.OK)表示请求成功,否则表示请求失败,可以通过code获取错误码,通过message字段获取错误详细信息。

request_Id

string

系统生成的标志本次调用的id。

code

string

表示请求失败,表示错误码,成功忽略。

message

string

失败,表示失败详细信息,成功忽略。

output

dict

调用结果信息,对百川模型,包含输出text。

text

string

模型生成回复。

usage

dict

计量信息,表示本次请求计量数据,当前模型无计量信息,此处为默认值。

input_tokens

int

用户输入文本转换成Token后的长度。

output_tokens

int

模型生成回复转换为Token后的长度。

HTTP调用接口

功能描述

百川模型同时支持 HTTP 接口调用来完成客户的响应,详情如下:

前提条件

提交接口调用

POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation

入参描述

传参方式

字段

类型

必选

描述

示例值

Header

Content-Type

String

请求类型:application/json

application/json

Authorization

String

API-Key,例如:Bearer d1**2a

Bearer d1**2a

X-DashScope-SSE

String

跟Accept: text/event-stream 二选一即可启用SSE响应

enable

Body

model

String

指明需要调用的模型,固定值baichuan-7b-v1 、baichuan2-7b-chat-v1

baichuan-7b-v1

input.prompt

String

是,二中格式选其一

文本内容,支持中英文。

登鹳雀楼->王之涣\n夜雨寄北->

input.messages

List

用户输入的内容,dict内主要包含2个key:role和content,其中role支持user、assistant、system,content为对应role的text输入。目前仅baichuan2-7b-chat-v1支持

[

{"role": "system", "content": "You are a helpful assistant."},

{"role": "user",

"content": "你好,请介绍一下故宫"}

]

parameters.incremental_output

Bool

用于控制流式输出模式,默认False,即后面内容会包含已经输出的内容;设置为True,将开启增量输出模式,后面输出不会包含已经输出的内容,您需要自行拼接整体输出,参考流式输出示例代码。

parameters.result_format

string

用户返回的内容类型,默认为text,当输入格式为messages时可配置为message。

message

出参描述

字段

类型

描述

示例值

output.text

String

本次请求的算法输出内容,result_format为text时的格式。

我建议你去颐和园

output.choices.message

List

本次请求的算法输出内容,result_format为message时的格式。

"message": {

"role": "assistant",

"content_type": "text",

"content": "故宫,位于... ... 宫殿和建筑。"}

output.choices.finish_reason 或者

output.finish_reason

String

有三种情况:正在生成时为null,生成结束时如果由于停止token导致则为stop,生成结束时如果因为生成长度过长导致则为length。

stop

request_id

String

本次请求的系统唯一码。

7574ee8f-38a3-4b1e-9280-

11c33ab46e51

usage.output_tokens

Integer

本次请求算法输出内容的 token 数目,目前仅baichuan2-7b-chat-v1和baichuan2-13b-chat-v1支持。

104

usage.input_tokens

Integer

本次请求用户输入内容的 token 数目,目前仅baichuan2-7b-chat-v1和baichuan2-13b-chat-v1支持。

41

请求示例(SSE关闭)

以下示例展示通过CURL命令来调用baichuan2-7b-chat-v1模型的脚本。

说明

需要使用您的API-KEY替换示例中的 your-dashscope-api-key ,代码才能正常运行。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer <YOUR-DASHSCOPE-API-KEY>' \
--header 'Content-Type: application/json' \
--data '{
    "model": "baichuan2-13b-chat-v1",
    "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_type": "text",
                    "content": "故宫,位于中国北京市中心,是中国明清两代的皇家宫殿,也是世界上现存规模最大、保存最为完整的木质结构古建筑之一。故宫始建于明成祖永乐四年(1406年),历时15年建成。它是明朝和清朝两代皇帝的皇家居所,共有24位皇帝在此居住和执政。\n\n故宫占地面积72万平方米,建筑面积约10万平方米。它共有宫殿建筑990多座,房屋8960间。整个建筑群按照南北中轴线布局,分为外朝和内廷两部分。外朝天子殿、中和殿和保和殿组成,是皇帝举行盛大典礼和处理政务的地方;内庭包括乾清宫、坤宁宫和储秀宫等,为皇帝和皇后居住的地方,同时也是皇帝处理日常政务的场所。此外,故宫还有御花园、东西六宫等众多宫殿和建筑。"
                }
            }
        ]
    },
    "usage": {
        "output_tokens": 180,
        "input_tokens": 11
    },
    "request_id": "3719bbfa-0ab8-997d-9207-21355f7320b3"
}

请求示例(SSE开启)

以下示例展示通过CURL命令来调用baichuan2-7b-chat-v1模型的脚本。

说明

需要使用您的API-KEY替换示例中的 your-dashscope-api-key ,代码才能正常运行。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Authorization: Bearer <YOUR-DASHSCOPE-API-KEY>' \
--header 'Content-Type: application/json' \
--header 'X-DashScope-SSE: enable' \
--data '{
    "model": "baichuan2-13b-chat-v1",
    "input":{
        "messages":[      
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "你好,请介绍一下故宫"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'

响应示例(SSE开启)

id:1
event:result
data:{"output":{"finish_reason":"null","text":"\n "},"usage":{"output_tokens":3,"input_tokens":15},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}

id:2
event:result
data:{"output":{"finish_reason":"null","text":"\n 故宫(The Forbidden City)"},"usage":{"output_tokens":12,"input_tokens":15},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}

... ... ... ...
... ... ... ...

id:25
event:result
data:{"output":{"finish_reason":"stop","text":"\n 故宫(The Forbidden City)是中国明清两代的皇宫,位于北京市中心,是世界上最大、保存最为完整的木质结构古建筑之一。故宫于明成祖永乐四年(1406年)开始建设,历经14年方告完成,共有9800余间房屋、300多座建筑。故宫以其丰富的文化遗产、精美的建筑艺术和悠久的历史而闻名于世界。\n\n故宫是中国古代宫殿建筑之精华,其建筑风格、布局严谨、精美、华丽,色彩斑斓,富丽堂皇。故宫也是世界上保存最完整、规模最宏大的古代木质结构建筑群之一,其建筑精美、色彩斑斓,富有变化和层次感,堪称中国古代建筑艺术的杰作。\n\n除此之外,故宫还有众多珍贵的文物和艺术品,包括古代瓷器、书画、玉器、金银器等,是中国和世界文化遗产的重要代表之一。"},"usage":{"output_tokens":190,"input_tokens":12},"request_id":"1117fb64-5dd9-9df0-a5ca-d7ee0e97032d"}
}

异常响应示例

在访问请求出错的情况下,输出的结果中会通过 code 和 message 指明出错原因。

{
    "code":"InvalidApiKey",
    "message":"Invalid API-key provided.",
    "request_id":"fb53c4ec-1c12-4fc4-a580-cdb7c3261fc1"
}

状态码说明

DashScope通用状态码请查阅:返回状态码说明