使用函數(shù)計算部署通義千問大模型實現(xiàn)AI對話
通義千問是阿里云自主研發(fā)的大語言模型,能夠在用戶自然語言輸入的基礎上,通過自然語言理解和語義分析,在不同領域、任務內(nèi)為用戶提供服務和幫助。本文介紹如何通過函數(shù)計算實現(xiàn)基于通義千問的AI對話。
背景信息
通義千問模型接受用戶以文本形式的指令(prompt)以及不定輪次的對話歷史(history)作為輸入,并基于這些信息生成回復作為輸出。在這一過程中,文本將被轉換為語言模型可以處理的Token序列。Token是模型用來表示自然語言文本的基本單位,可以直觀地理解為“字”或“詞”。對于中文文本來說,1個Token通常對應一個漢字;對于英文文本來說,1個Token通常對應3至4個字母或1個單詞。例如,中文文本“你好,我是通義千問”會被轉換成序列['你', '好', ',', '我', '是', '通', '義', '千', '問'],而英文文本"Nice to meet you."則會被轉換成['Nice', ' to', ' meet', ' you', '.']。
由于模型調(diào)用的計算量與Token序列長度相關,輸入或輸出Token數(shù)量越多,模型的計算時間越長,我們將根據(jù)模型輸入和輸出的Token數(shù)量計費。可以從API返回結果的usage
字段中了解到您每次調(diào)用時使用的Token數(shù)量。您也可以使用Token計算器或者調(diào)用Token計算API來預估文本對應的Token數(shù)量。
通義千問支持的模型如下:
旗艦模型 | 通義千問-Max 適合復雜任務,推理能力最強 | 通義千問-Plus 效果、速度、成本均衡 | 通義千問-Turbo 適合簡單任務,速度快、成本低 | Qwen-Long 支持長達千萬字文檔,成本低 |
API調(diào)用模型名 (穩(wěn)定版本) | qwen-max | qwen-plus | qwen-turbo | qwen-long |
最大上下文長度 (Token數(shù)) | 32,768 | 131,072 | 1,000,000 | 10,000,000 |
最低輸入價格 (每千Token) | 0.02元 | 0.0008元 | 0.0003元 | 0.0005元 |
最低輸出價格 (每千Token) | 0.06元 | 0.002元 | 0.0006元 | 0.002元 |
前提條件
獲取API-KEY。登錄百煉控制臺,在右上角單擊 進入我的API-KEY頁面,獲取已有API-KEY或重新創(chuàng)建API-KEY。
步驟一:創(chuàng)建Web函數(shù)
登錄函數(shù)計算控制臺,在左側導航欄,單擊函數(shù),選擇地域,然后單擊創(chuàng)建函數(shù)。
在創(chuàng)建函數(shù)頁面,選擇Web函數(shù),重點設置以下配置項,然后單擊創(chuàng)建。
設置函數(shù)代碼、角色等相關配置。
設置環(huán)境變量。變量
DASHSCOPE_API_KEY
的值為您從百煉控制臺獲取的API-KEY。
步驟二:編寫并部署通義千問AI對話代碼
函數(shù)創(chuàng)建成功后,您可以開始編寫使用通義千問的AI對話代碼。
在函數(shù)詳情頁面,單擊代碼頁簽,在代碼編輯器中編寫代碼。
以下代碼是以Python為例,通過調(diào)用通義千問模型對一個用戶指令進行響應。
通過messages調(diào)用
說明當前示例代碼支持一鍵部署,您可以單擊右側按鈕,然后根據(jù)提示完成一鍵部署。如果您選擇一鍵部署當前應用,則無需再手動執(zhí)行安裝DashScope SDK等操作。start-qwen-api-messages
import dashscope import random from flask import abort from flask import Flask from flask import request from http import HTTPStatus app = Flask(__name__) def call_with_messages(content): messages = [{'role': 'system', 'content': 'You are a helpful assistant.'}, {'role': 'user', 'content': content}] response = dashscope.Generation.call( dashscope.Generation.Models.qwen_turbo, messages=messages, # set the random seed, optional, default to 1234 if not set seed=random.randint(1, 10000), 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 )) return response @app.route("/invoke", methods=['POST', 'GET']) def index(): bytes = request.stream.read() if bytes: payload = str(bytes, encoding='utf-8') print("Request Payload: " + payload) return call_with_messages(payload) else: abort(403) if __name__ == "__main__": app.run(host="0.0.0.0", port=9000)
通過prompt調(diào)用
說明當前示例代碼支持一鍵部署,您可以單擊右側按鈕,然后根據(jù)提示完成一鍵部署。如果您選擇一鍵部署當前應用,則無需再手動執(zhí)行安裝DashScope SDK等操作。start-qwen-api-prompt
import dashscope import random from flask import abort from flask import Flask from flask import request from http import HTTPStatus app = Flask(__name__) def call_with_prompt(prompt): response = dashscope.Generation.call( model=dashscope.Generation.Models.qwen_turbo, prompt=prompt ) # The response status_code is HTTPStatus.OK indicate success, # otherwise indicate request is failed, you can get error code # and message from code and message. if response.status_code == HTTPStatus.OK: print(response.output) # The output text print(response.usage) # The usage information else: print(response.code) # The error code. print(response.message) # The error message. return response @app.route("/invoke", methods=['POST', 'GET']) def index(): bytes = request.stream.read() if bytes: payload = str(bytes, encoding='utf-8') print("Request Payload: " + payload) return call_with_prompt(payload) else: abort(403) if __name__ == "__main__": app.run(host="0.0.0.0", port=9000)
在WebIDE的終端窗口,執(zhí)行
pip3 install dashscope -t .
安裝DashScope SDK,執(zhí)行完成后單擊部署代碼。
步驟三:測試函數(shù)
在函數(shù)詳情頁面,單擊測試頁簽,填寫事件名稱和事件內(nèi)容,然后單擊測試函數(shù),執(zhí)行完成后,可以直接查看執(zhí)行結果。
本文事件內(nèi)容以"如何做西紅柿燉牛腩?"
為例,測試函數(shù)的返回結果如下:
通過messages調(diào)用
{
"code": "",
"message": "",
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "材料:\n牛腩500克、西紅柿2個、大蔥1根、生姜3片、大蒜2瓣、八角1顆、香葉2片、干辣椒4個、料酒1勺、生抽1勺、老抽1勺、白糖1小勺、食鹽適量、清水適量。\n\n做法:\n1. 牛腩切塊,冷水入鍋,加入料酒焯水,撇去浮沫后撈出瀝水備用。\n2. 熱鍋涼油,放入大蔥、姜片、蒜瓣、八角、香葉和干辣椒煸炒出香味。\n3. 加入西紅柿翻炒至軟爛出汁。\n4. 放入牛腩塊繼續(xù)翻炒均勻,加入生抽、老抽和白糖調(diào)味。\n5. 倒入足夠的清水,大火燒開后轉中小火慢燉1小時左右,至牛腩熟透且湯汁濃稠。\n6. 最后加入適量的食鹽調(diào)味即可。",
"role": "assistant"
}
}
],
"finish_reason": null,
"text": null
},
"request_id": "61dbd6b0-810b-9115-ad26-65e9ba93f84d",
"status_code": 200,
"usage": {
"input_tokens": 15,
"output_tokens": 212,
"total_tokens": 227
}
}
通過prompt調(diào)用
{
"code": "",
"message": "",
"output": {
"choices": null,
"finish_reason": "stop",
"text": "\n\n做西紅柿燉牛腩的步驟如下:\n\n所需材料:\n- 牛腩500克\n- 西紅柿3個\n- 姜片適量\n- 大蔥段適量\n- 料酒適量\n- 生抽適量\n- 紅糖適量\n- 八角2顆\n- 桂皮1小塊\n- 食鹽適量\n- 清水適量\n\n步驟:\n\n1. 牛腩切塊,放入開水中焯水,撈出洗凈備用。\n\n2. 熱鍋涼油,加入姜片和大蔥段炒香。\n\n3. 加入牛腩翻煎至兩面微黃。\n\n4. 加入料酒、生抽、紅糖、八角和桂皮繼續(xù)翻煎。\n\n5. 加入足夠的清水,水量要蓋過牛腩,大火燒開后撇去浮沫。\n\n6. 改為中小火慢燉1小時左右,直到牛腩變得軟爛。\n\n7. 在燉煮過程中可以適當調(diào)整味道,如加鹽等。\n\n8. 西紅柿切成塊,放入燉好的牛腩中再煮約10分鐘即可。\n\n9. 出鍋前可撒上一些蔥花點綴。\n\n以上就是做西紅柿燉牛腩的詳細步驟。希望對你有所幫助!"
},
"request_id": "a9a5f430-745d-9f5d-b406-8588978f638b",
"status_code": 200,
"usage": {
"input_tokens": 8,
"output_tokens": 278,
"total_tokens": 286
}
}
測試完成后,如果您暫時不需要使用此應用,請及時刪除應用以及關聯(lián)的其他資源。
相關文檔
通義千問API詳情:通過API使用通義千問。