Python基于火山引擎豆包大模型搭建QQ機(jī)器人詳細(xì)教程(2024年最新)
豆包大模型概述
火山引擎官網(wǎng):https://www.volcengine.com/
字節(jié)跳動(dòng)推出的自研大模型。通過(guò)字節(jié)跳動(dòng)內(nèi)部50+業(yè)務(wù)場(chǎng)景實(shí)踐驗(yàn)證,每日千億級(jí)tokens大使用量持續(xù)打磨,提供多模態(tài)能力,以?xún)?yōu)質(zhì)模型效果為企業(yè)打造豐富的業(yè)務(wù)體驗(yàn)。
模型控制臺(tái)
當(dāng)前模型支持類(lèi)目
開(kāi)通模型付費(fèi)
您可以在 開(kāi)通管理 頁(yè)中查看各模型定價(jià)與使用限制,開(kāi)通后使用各模型服務(wù),不同模型的單價(jià)不同。其中,大語(yǔ)言模型費(fèi)用計(jì)算方式:費(fèi)用 = tokens使用量 X 模型 tokens 單價(jià)。
Tokens 定義說(shuō)明: 通常 1 個(gè)中文詞語(yǔ)、英文單詞、數(shù)字、符號(hào)計(jì)為 1 個(gè) token,由于不同模型采用的分詞器不同,同一段文本可能會(huì)分為不同的 tokens 數(shù)量。
安裝 SDK 環(huán)境
安裝火山 python sdk 環(huán)境
pip install volcengine-python-sdk
······ note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for volcengine-python-sdk Running setup.py clean for volcengine-python-sdk Failed to build volcengine-python-sdk ERROR: Could not build wheels for volcengine-python-sdk, which is required to install pyproject.toml-based projects
解決方案
GitHub 地址:https://github.com/volcengine/volcengine-python-sdk
git clone https://github.com/volcengine/volcengine-python-sdk.git
開(kāi)始安裝 volcengine-python-sdk
python setup.py install --user
在 Python 中,setup.py 是一個(gè)常用的腳本文件,用于安裝、分發(fā)和管理 Python 包。這個(gè)文件通常包含setuptools(或distutils)的調(diào)用,用于定義包的各種屬性和設(shè)置。
python setup.py 這部分命令指示Python解釋器運(yùn)行setup.py腳本。 install 這是setup.py的一個(gè)常見(jiàn)命令,用于安裝定義的Python包。 --user 這是一個(gè)選項(xiàng),指示安裝程序?qū)惭b到用戶(hù)的Python庫(kù)目錄中,而不是全局的Python庫(kù)目錄。
配置 API KEY 鑒權(quán)
方案一:API 管理頁(yè)面獲取 API KEY
進(jìn)入 API Key 管理 頁(yè)面,選擇需要的項(xiàng)目,點(diǎn)擊 創(chuàng)建 API Key,即可生成長(zhǎng)效 API Key。all權(quán)限默認(rèn)給予項(xiàng)目下所有模型接入點(diǎn)和智能體訪問(wèn)權(quán)限。地址:https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey
方案二:配置火山引擎 API 的安全憑證
API 訪問(wèn)密鑰(Access Key)是請(qǐng)求火山引擎 API 的安全憑證,包含 Access Key ID和Secret Access Key,請(qǐng)您妥善保管并定期輪換密鑰,不要將密鑰信息共享至公開(kāi)環(huán)境(如上傳GitHub),以保障云資源的安全性。建議您使用最小化授權(quán)的IAM用戶(hù)的密鑰進(jìn)行API訪問(wèn),不建議直接使用主賬號(hào)密鑰或使用權(quán)限過(guò)大的IAM用戶(hù)密鑰。
訪問(wèn)密鑰 Access Key 管理:https://console.volcengine.com/iam/keymanage
方案三:SDK 獲取 API KEY
創(chuàng)建推理接入點(diǎn)地址:https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint?current=1&pageSize=10
推理接入點(diǎn)讀取 ENDPOINT_ID 編號(hào):ep-20240619132122-2hx7z
設(shè)置 AK/SK 作為環(huán)境變量 .env 配置文件
VOLC_ACCESSKEY=YOUR_AK VOLC_SECRETKEY=YOUR_SK ENDPOINT_ID=YOUR_ENDPOINT_ID(例如:ep-20240619132122-2hx7z)
源碼預(yù)覽
from __future__ import print_function import os import volcenginesdkcore import volcenginesdkark from pprint import pprint from volcenginesdkcore.rest import ApiException import dotenv dotenv.load_dotenv(".env") if __name__ == '__main__': configuration = volcenginesdkcore.Configuration() configuration.ak = os.getenv("VOLC_ACCESSKEY") configuration.sk = os.getenv("VOLC_SECRETKEY") configuration.region = "cn-beijing" volcenginesdkcore.Configuration.set_default(configuration) api_instance = volcenginesdkark.ARKApi() get_api_key_request = volcenginesdkark.GetApiKeyRequest( duration_seconds=30 * 24 * 3600, resource_type="endpoint", resource_ids=[os.getenv("ENDPOINT_ID")], ) try: resp = api_instance.get_api_key(get_api_key_request) pprint(resp) except ApiException as e: print("Exception when calling api: %s\n" % e)
運(yùn)行結(jié)果
{'api_key': '······', 'expired_time': 1721395557}
Ark 模型接口
標(biāo)準(zhǔn)請(qǐng)求 standard request
import os from volcenginesdkarkruntime import Ark import dotenv dotenv.load_dotenv(".env") client = Ark() completion = client.chat.completions.create( model=os.getenv("ENDPOINT_ID"), messages=[ {"role": "system", "content": "你是豆包,是由字節(jié)跳動(dòng)開(kāi)發(fā)的 AI 人工智能助手"}, {"role": "user", "content": "常見(jiàn)的十字花科植物有哪些?"}, ], ) print(completion.choices[0].message.content)
流式請(qǐng)求 stream request
在 stream 模式下,基于 SSE (Server-Sent Events) 協(xié)議返回生成內(nèi)容,每次返回結(jié)果為生成的部分內(nèi)容片段。內(nèi)容片段按照生成的先后順序返回,完整的結(jié)果需要調(diào)用者拼接才能得到。如果流式請(qǐng)求開(kāi)始時(shí)就出現(xiàn)錯(cuò)誤(如參數(shù)錯(cuò)誤),HTTP返回非200,方法調(diào)用也會(huì)直接返回錯(cuò)誤。如果流式過(guò)程中出現(xiàn)錯(cuò)誤,HTTP 依然會(huì)返回 200, 錯(cuò)誤信息會(huì)在一個(gè)片段返回。
import os from volcenginesdkarkruntime import Ark import dotenv dotenv.load_dotenv(".env") client = Ark() stream = client.chat.completions.create( model=os.getenv("ENDPOINT_ID"), messages=[ {"role": "system", "content": "你是豆包,是由字節(jié)跳動(dòng)開(kāi)發(fā)的 AI 人工智能助手"}, {"role": "user", "content": "常見(jiàn)的十字花科植物有哪些?"}, ], stream=True ) for chunk in stream: if not chunk.choices: continue print(chunk.choices[0].delta.content, end="")
文檔地址:https://www.volcengine.com/docs/82379/1263512
Prompt 提示詞工程
在自然語(yǔ)言處理(NLP)和對(duì)話(huà)系統(tǒng)中,提示(prompt)通常是指用戶(hù)輸入的文本或問(wèn)題。通過(guò)仔細(xì)設(shè)計(jì)和選擇提示,可以指導(dǎo)模型的生成過(guò)程,使其更符合用戶(hù)的需求。Prompt engineering 是指設(shè)計(jì)和優(yōu)化提示的過(guò)程,以使人工智能模型能夠更好地理解用戶(hù)的意圖和要求,并生成更準(zhǔn)確、有用的響應(yīng)。
Prompt Engineering 主要目標(biāo)
1. 了解如何格式化和設(shè)計(jì)提示使模型效果最佳。
2. 探索不同 prompt 對(duì)模型輸出的影響。
3. 創(chuàng)造出能優(yōu)化模型輸出的提示。
注意:一般業(yè)務(wù)優(yōu)化的過(guò)程,主要包括三個(gè)環(huán)節(jié),prompt 設(shè)計(jì)、prompt 優(yōu)化和 prompt 評(píng)測(cè),如下我們分別分三個(gè)部分來(lái)進(jìn)行介紹。
限制模型輸出格式
最后針對(duì)模型的輸出,可以限制輸出的格式,一方面可以提高可讀性,使結(jié)果更清晰明了。另一方面也可以方便后續(xù)的處理,提高穩(wěn)定性。以提取“病癥”的任務(wù)來(lái)展示下如何去限制模型的輸出格式。要求直接以 json 的格式返回。
請(qǐng)?zhí)崛⒖假Y料中的所有病癥,并且以json格式返回。 回答滿(mǎn)足下面的格式要求: 1、以json的格式返回答案,json只包括一個(gè)key, key="disease",對(duì)應(yīng)的值為列表,存儲(chǔ)參考資料中的病癥。 參考資料: """ 失眠在《內(nèi)經(jīng)》中稱(chēng)為“目不瞑”、“不得眠”、“不得臥”,其原因主要有兩種:一是其他病癥影響,如咳嗽、嘔吐、腹?jié)M等,使人不得安臥;二是氣血陰陽(yáng)失和,使人不能入寐。中醫(yī)常用養(yǎng)心安神的方法治療失眠,既可治標(biāo)、又可治本,還可以避免西藥安眠藥容易成癮的弊端。中醫(yī)認(rèn)為,失眠多因臟腑陰陽(yáng)失調(diào),氣血失和所致。正如《靈樞大惑論》中記載:“衛(wèi)氣不得入于陰,常留于陽(yáng),留于陽(yáng)則氣滿(mǎn);陽(yáng)氣滿(mǎn)則陽(yáng)嬌盛,不得入于陰則陰氣虛,故目不瞑矣。”在臨床上,治療失眠應(yīng)著重調(diào)理臟腑及氣血陰陽(yáng),以“補(bǔ)其不足,瀉其有余,調(diào)其虛實(shí)”,可采取補(bǔ)益心脾、滋陰降火、交通心腎、疏肝養(yǎng)血、益氣鎮(zhèn)驚、活血通絡(luò)等治法,使氣血和暢,陰陽(yáng)平衡,臟腑功能恢復(fù)正常。 """
Prompt 優(yōu)化:模型扮演角色
讓模型扮演一個(gè)具體的角色,模型的輸出會(huì)更符合人類(lèi)的表達(dá)方式,從而更容易被人類(lèi)理解;同時(shí)輸出也會(huì)更加一致。例如,在問(wèn)答系統(tǒng)中,讓模型扮演一個(gè)特定領(lǐng)域的專(zhuān)家可以使其回答更符合該領(lǐng)域的知識(shí)和語(yǔ)言習(xí)慣,從而提高回答的一致性。
比如下面的案例,讓模型分別扮演科學(xué)家和玄幻小說(shuō)家生成一篇文章,文章的主題是:“黑洞是如何形成的”。在科學(xué)家的角度下,模型基于科學(xué)事實(shí)首先解釋了黑洞是什么,然后回答了黑洞的形成過(guò)程;而在玄幻小說(shuō)家的角度下,模型此時(shí)的輸出不再基于科學(xué)事實(shí),而是完全虛構(gòu),并且給人更多神秘的感覺(jué),勾起讀者的興趣。
構(gòu)造分類(lèi)接口
def construct_classification_req(): req = { "model": { "name": "skylark2-pro-4k", # 這里根據(jù)模型不同,設(shè)置不同的 model_name "version": "1.1", # 設(shè)置調(diào)用模型的版本號(hào) }, "parameters": { "max_new_tokens": 1000, # 輸出文本的最大tokens限制 "min_new_tokens": 1, # 輸出文本的最小tokens限制 "temperature": 0.01, # 用于控制生成文本的隨機(jī)性和創(chuàng)造性,Temperature值越大隨機(jī)性越大,取值范圍0~1 "top_p": 0.7, # 用于控制輸出tokens的多樣性,TopP值越大輸出的tokens類(lèi)型越豐富,取值范圍0~1 "top_k": 0, # 選擇預(yù)測(cè)值最大的k個(gè)token進(jìn)行采樣,取值范圍 0-1000,0 表示不生效 "max_prompt_tokens": 3000, # 最大輸入 token 數(shù),如果給出的 prompt 的 token 長(zhǎng)度超過(guò)此限制,取最后 max_prompt_tokens 個(gè) token 輸入模型。 "system_prompt": '', # 系統(tǒng)角色,設(shè)定模型的行為和背景,告知模型需要扮演的角色。 "repetition_penalty": 1.1 # 重復(fù)token輸出的懲罰項(xiàng) }, "query": "中國(guó)的第一個(gè)經(jīng)濟(jì)特區(qū)是?", "labels": ["北京", "珠海", "深圳", "廈門(mén)", "上海"] # 輸出的結(jié)果都在labels的選項(xiàng)內(nèi) } return req
總結(jié)
到此這篇關(guān)于Python基于火山引擎豆包大模型搭建QQ機(jī)器人的文章就介紹到這了,更多相關(guān)Python基于豆包搭建QQ機(jī)器人內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django框架文件上傳與自定義圖片上傳路徑、上傳文件名操作分析
這篇文章主要介紹了Django框架文件上傳與自定義圖片上傳路徑、上傳文件名操作,結(jié)合實(shí)例形式分析了Django框架文件上傳的原理、步驟、實(shí)現(xiàn)方法以及圖片上傳時(shí)自定義上傳路徑、上傳文件名的相關(guān)操作技巧,需要的朋友可以參考下2019-05-05sqlalchemy實(shí)現(xiàn)時(shí)間列自動(dòng)更新教程
這篇文章主要介紹了sqlalchemy實(shí)現(xiàn)時(shí)間列自動(dòng)更新教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09python實(shí)現(xiàn)簡(jiǎn)易聊天對(duì)話(huà)框
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)易聊天對(duì)話(huà)框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Python字節(jié)單位轉(zhuǎn)換實(shí)例
今天小編就為大家分享一篇Python字節(jié)單位轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12對(duì)python中數(shù)組的del,remove,pop區(qū)別詳解
今天小編就為大家分享一篇對(duì)python中數(shù)組的del,remove,pop區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11