百川
支持的領域 / 任務: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使用
前提條件
已開通服務并獲得API-KEY:API-KEY的獲取與配置。
已安裝最新版SDK:安裝DashScope 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 接口調用來完成客戶的響應,詳情如下:
前提條件
已開通服務并獲得API-KEY:API-KEY的獲取與配置。
提交接口調用
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通用狀態碼請查閱:返回狀態碼說明