阿里巴巴網(wǎng)站如何做免費推廣推廣方案設(shè)計
文章目錄
- 前言
- 一、大語言模型
- 1.大模型介紹
- 2.大模型的發(fā)展歷程
- 3.大模型的分類
- a.按內(nèi)容分類
- b.按應(yīng)用分類
- 二、通義千問
- 1.通義千問模型介紹
- a.通義千問模型介紹
- b.應(yīng)用場景
- c.模型概覽
- 2.對話
- a.對話的兩種方式
- 通義千問API的使用
- b.單輪對話
- Vue頁面代碼:
- Django接口代碼
- c.多輪對話
- 3.實時交互功能
- 4.流式響應(yīng)
- 5.異步Asyncio接口
- 6.Function call
前言
????在人工智能的不斷演進中,大模型正成為技術(shù)革新的先鋒。這些模型以其龐大的規(guī)模和深刻的理解力,開啟了智能應(yīng)用的新篇章。本文將精煉地探討大模型的核心概念、發(fā)展歷程,以及它們在多個場景下的實際應(yīng)用。
????我們將重點介紹通義千問,這一前沿的語言模型,它在技術(shù)突破和實際應(yīng)用中展現(xiàn)了卓越的靈活性和廣泛性。從單輪到多輪對話,從實時交互到異步通信,通義千問的應(yīng)用場景廣泛而深遠。
????此外,文章還將討論大模型面對的挑戰(zhàn),例如實時性問題和特定領(lǐng)域知識的處理,并探索Function call技術(shù)如何幫助提升其性能。這不僅是對大模型現(xiàn)有能力的評估,也是對其未來應(yīng)用潛力的展望。
一、大語言模型
1.大模型介紹
????大語言模型(Large Language Model,縮寫LLM),也稱大型語言模型,是一種人工智能模型,旨在理解和生成人類語言。
????通常,大語言模型(LLM)指包含數(shù)百億(或更多)參數(shù)的語言模型,這些模型在大量的文本數(shù)據(jù)上進行訓(xùn)練,例如國外的有GPT-3、GPT-4、PaLM、Galactica和LLaMA等,國內(nèi)的有ChatGLM、文心一言、通義千問、訊飛星火等。
2.大模型的發(fā)展歷程
萌芽期(1950-2005):以 CNN 為代表的傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型階段
- 1956 年,從計算機專家約翰·麥卡錫提出“人工智能”概念開始,AI 發(fā)展由最開始基于小規(guī)模專家知識逐步發(fā)展為基于機器學(xué)習(xí)。
- 1980 年,卷積神經(jīng)網(wǎng)絡(luò)的雛形 CNN 誕生。
- 1998 年,現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu) LeNet-5 誕生,機器學(xué)習(xí)方法由早期基于淺層機器學(xué)習(xí)的模型,變?yōu)榱嘶谏疃葘W(xué)習(xí)的模型,為自然語言生成、計算機視覺等領(lǐng)域的深入研究奠定了基礎(chǔ),對后續(xù)深度學(xué)習(xí)框架的迭代及大模型發(fā)展具有開創(chuàng)性的意義。
探索沉淀期(2006-2019):以 Transformer 為代表的全新神經(jīng)網(wǎng)絡(luò)模型階段
- 2013 年,自然語言處理模型 Word2Vec 誕生,首次提出將單詞轉(zhuǎn)換為向量的“詞向量模型”,以便計算機更好地理解和處理文本數(shù)據(jù)。
- 2014 年,被譽為 21 世紀最強大算法模型之一的 GAN(對抗式生成網(wǎng)絡(luò))誕生,標志著深度學(xué)習(xí)進入了生成模型研究的新階段。
- 2017 年,Google 顛覆性地提出了基于自注意力機制的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)——Transformer 架構(gòu),奠定了大模型預(yù)訓(xùn)練算法架構(gòu)的基礎(chǔ)。
- 2018 年,OpenAI 和 Google 分別發(fā)布了 GPT-1 與 BERT 大模型,意味著預(yù)訓(xùn)練大模型成為自然語言處理領(lǐng)域的主流。在探索期,以 Transformer 為代表的全新神經(jīng)網(wǎng)絡(luò)架構(gòu),奠定了大模型的算法架構(gòu)基礎(chǔ),使大模型技術(shù)的性能得到了顯著提升。
迅猛發(fā)展期(2020-至今):以 GPT 為代表的預(yù)訓(xùn)練大模型階段
- 2020 年,OpenAI 公司推出了GPT-3,模型參數(shù)規(guī)模達到了 1750 億,成為當(dāng)時最大的語言模型,并且在零樣本學(xué)習(xí)任務(wù)上實現(xiàn)了巨大性能提升。隨后,更多策略如基于人類反饋的強化學(xué)習(xí)(RHLF)、代碼預(yù)訓(xùn)練、指令微調(diào)等開始出現(xiàn), 被用于進一步提高推理能力和任務(wù)泛化。
- 2022 年 11 月,搭載了GPT3.5的 ChatGPT橫空出世,憑借逼真的自然語言交互與多場景內(nèi)容生成能力,迅速引爆互聯(lián)網(wǎng)。
- 2023 年 3 月,最新發(fā)布的超大規(guī)模多模態(tài)預(yù)訓(xùn)練大模型——GPT-4,具備了多模態(tài)理解與多類型內(nèi)容生成能力。在迅猛發(fā)展期,大數(shù)據(jù)、大算力和大算法完美結(jié)合,大幅提升了大模型的預(yù)訓(xùn)練和生成能力以及多模態(tài)多場景應(yīng)用能力。如 ChatGPT 的巨大成功,就是在微軟Azure強大的算力以及 wiki 等海量數(shù)據(jù)支持下,在 Transformer 架構(gòu)基礎(chǔ)上,堅持 GPT 模型及人類反饋的強化學(xué)習(xí)(RLHF)進行精調(diào)的策略下取得的。
3.大模型的分類
a.按內(nèi)容分類
- 語言大模型(NLP):是指在自然語言處理(Natural Language Processing,NLP)領(lǐng)域中的一類大模型,通常用于處理文本數(shù)據(jù)和理解自然語言。 這類大模型的主要特點是它們在大規(guī)模語料庫上進行了訓(xùn)練,以學(xué)習(xí)自然語言的各種語法、語義和語境規(guī)則。例如:GPT 系列(OpenAI)、Bard(Google)、文心一言(百度)。
- 視覺大模型(CV):是指在計算機視覺(Computer Vision,CV)領(lǐng)域中使用的大模型,通常用于圖像處理和分析。 這類模型通過在大規(guī)模圖像數(shù)據(jù)上進行訓(xùn)練,可以實現(xiàn)各種視覺任務(wù),如圖像分類、目標檢測、圖像分割、姿態(tài)估計、人臉識別等。例如:VIT 系列(Google)、文心UFO、華為盤古 CV、INTERN(商湯)。
- 多模態(tài)大模型:是指能夠處理多種不同類型數(shù)據(jù)的大模型,例如文本、圖像、音頻等多模態(tài)數(shù)據(jù)。 這類模型結(jié)合了 NLP 和 CV 的能力,以實現(xiàn)對多模態(tài)信息的綜合理解和分析,從而能夠更全面地理解和處理復(fù)雜的數(shù)據(jù)。例如:DingoDB 多模向量數(shù)據(jù)庫(九章云極 DataCanvas)、DALL-E(OpenAI)、悟空畫畫(華為)、midjourney。
b.按應(yīng)用分類
- 通用大模型 L0:是指可以在多個領(lǐng)域和任務(wù)上通用的大模型。 它們利用大算力、使用海量的開放數(shù)據(jù)與具有巨量參數(shù)的深度學(xué)習(xí)算法,在大規(guī)模無標注數(shù)據(jù)上進行訓(xùn)練,以尋找特征并發(fā)現(xiàn)規(guī)律,進而形成可“舉一反三”的強大泛化能力,可在不進行微調(diào)或少量微調(diào)的情況下完成多場景任務(wù),相當(dāng)于 AI 完成了“通識教育”。
- 行業(yè)大模型 L1:是指那些針對特定行業(yè)或領(lǐng)域的大模型。 它們通常使用行業(yè)相關(guān)的數(shù)據(jù)進行預(yù)訓(xùn)練或微調(diào),以提高在該領(lǐng)域的性能和準確度,相當(dāng)于 AI 成為“行業(yè)專家”。
- 垂直大模型 L2:是指那些針對特定任務(wù)或場景的大模型。 它們通常使用任務(wù)相關(guān)的數(shù)據(jù)進行預(yù)訓(xùn)練或微調(diào),以提高在該任務(wù)上的性能和效果。
二、通義千問
1.通義千問模型介紹
a.通義千問模型介紹
????通義千問是由阿里云自主研發(fā)的大語言模型,用于理解和分析用戶輸入的自然語言,在不同領(lǐng)域和任務(wù)為用戶提供服務(wù)和幫助。您可以通過提供盡可能清晰詳細的指令,來獲取符合您預(yù)期的結(jié)果。
b.應(yīng)用場景
通義千問憑借其強大的語言處理能力,為用戶帶來高效、智能的語言服務(wù)體驗,其能力包括但不限于文字創(chuàng)作、翻譯服務(wù)和對話模擬等,具體應(yīng)用場景如下:
- 文字創(chuàng)作:撰寫故事、公文、郵件、劇本和詩歌等。
- 文本處理:潤色文本和提取文本摘要等。
- 編程輔助:編寫和優(yōu)化代碼等。
- 翻譯服務(wù):提供各類語言的翻譯服務(wù),如英語、日語、法語或西班牙語等。
- 對話模擬:扮演不同角色進行交互式對話。
- 數(shù)據(jù)可視化:圖表制作和數(shù)據(jù)呈現(xiàn)等。
c.模型概覽
模型名稱 | 模型簡介 | 模型輸入/輸出限制 |
---|---|---|
qwen-turbo | 通義千問超大規(guī)模語言模型,支持中文、英文等不同語言輸入。 | 模型支持8k tokens上下文,為了保證正常的使用和輸出,API限定用戶輸入為6k tokens。 |
qwen-plus | 通義千問超大規(guī)模語言模型增強版,支持中文、英文等不同語言輸入。 | 模型支持32k tokens上下文,為了保證正常的使用和輸出,API限定用戶輸入為30k tokens。 |
qwen-max | 通義千問千億級別超大規(guī)模語言模型,支持中文、英文等不同語言輸入。隨著模型的升級,qwen-max將滾動更新升級。如果希望使用固定版本,請使用歷史快照版本。當(dāng)前qwen-max模型與qwen-max-0428快照版本等價,均為最新版本的qwen-max模型,也是當(dāng)前通義千問2.5產(chǎn)品版本背后的API模型。 | 模型支持8k tokens上下文,為了保證正常的使用和輸出,API限定用戶輸入為6k tokens。 |
qwen-max-0428 | 通義千問千億級別超大規(guī)模語言模型,支持中文、英文等不同語言輸入。該模型與當(dāng)前的qwen-max版本對齊,為qwen-max的2024年4月28號的歷史快照,預(yù)期維護到下個快照版本發(fā)布時間(待定)后一個月。 | |
qwen-max-0403 | 通義千問千億級別超大規(guī)模語言模型,支持中文、英文等不同語言輸入。該模型為qwen-max的2024年4月3號的歷史快照穩(wěn)定版本,預(yù)期維護到下個快照版本發(fā)布時間(待定)后一個月。 | |
qwen-max-0107 | 通義千問千億級別超大規(guī)模語言模型,支持中文、英文等不同語言輸入。該模型為qwen-max的2024年1月7號的歷史快照穩(wěn)定版本,僅推薦特定需求客戶訪問。 | |
qwen-max-longcontext | 通義千問千億級別超大規(guī)模語言模型,支持中文、英文等不同語言輸入。 | 模型支持30k tokens上下文,為了保證正常的使用和輸出,API限定用戶輸入為28k tokens。 |
2.對話
a.對話的兩種方式
可以通過兩種方式來調(diào)用模型:通過messages
調(diào)用或通過prompt
調(diào)用。如果有多輪對話的需求,更推薦通過messages
調(diào)用
通義千問API的使用
步驟流程:
1.去阿里云 DashScope 模型服務(wù)靈積 創(chuàng)建API-KEY
https://dashscope.console.aliyun.com/apiKey
2.在 DashScope 模型服務(wù)靈積/模型廣場 選擇通義千問模型 - 快速開始
https://dashscope.console.aliyun.com/model
3.進入后,有通義千問API詳細且完整的使用文檔
PS:測試API前記得安裝DashScope SDK
,通過環(huán)境變量配置API-KEY
b.單輪對話
????單輪對話是指用戶提出一個問題或請求,系統(tǒng)立即給出回答或響應(yīng),不涉及后續(xù)的多輪追問或討論。 這種形式常見于搜索引擎查詢、聊天機器人等場景。它的優(yōu)勢在于高效和便捷,能夠快速提供信息或答案。然而,單輪對話可能無法完全理解復(fù)雜的用戶需求或提供深入的解答。因此,在實際應(yīng)用中,單輪對話常與其他交互方式結(jié)合使用,以提高服務(wù)的全面性和準確性。
Vue頁面代碼:
<template><div><el-form :inline="true" :model="formInline" class="demo-form-inline"><el-form-item label="問題"><el-input v-model="formInline.askmes" placeholder="請輸入問題"></el-input></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查詢</el-button></el-form-item>
</el-form><div>{{mes}}</div></div>
</template><script>
export default {data() {return {formInline: {askmes:'',},mes:''}},methods: {onSubmit() {console.log('submit!');this.$axios.post('tongyi/',{"question":this.formInline.askmes}).then(res=>{this.mes = res.data.mes})}}}
</script><style></style>
Django接口代碼
import random
from http import HTTPStatus
from dashscope import Generation # 建議dashscope SDK 的版本 >= 1.14.0class TongyiView(APIView):def post(self,request):question = request.data.get('question')messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},{'role': 'user', 'content': question}]response = Generation.call(model="qwen-turbo",messages=messages,# 設(shè)置隨機數(shù)種子seed,如果沒有設(shè)置,則隨機數(shù)種子默認為1234seed=random.randint(1, 10000),# 將輸出設(shè)置為"message"格式result_format='message')if response.status_code == HTTPStatus.OK:print(response)print(response['output']['choices'][0]['message']['content'])resmes= response['output']['choices'][0]['message']['content']# response = json.loads(response.message)# resmes = response['output']['choices']['message']['content']else:print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (response.request_id, response.status_code,response.code, response.message))resmes = response.messagereturn Response({"code":200,'mes':resmes})
c.多輪對話
比于單輪對話,多輪對話可以參考歷史聊天信息,更符合日常交流的場景。但由于調(diào)用時會引入歷史聊天信息,使用的token量會增多。
實現(xiàn)流程分析:
- 1.設(shè)計問題,定義角色role為user
- 2.獲取響應(yīng)解析,判斷
- 3.如果成功將assistant的回復(fù)添加到messages列表中
- 4.如果響應(yīng)失敗,將最后一條user message從messages列表里刪除,確保user/assistant消息交替出現(xiàn)
- 5.將新一輪的user問題添加到messages列表中
- 6.進行第二輪模型的響應(yīng)
from http import HTTPStatus
from dashscope import Generationdef multi_round():messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},{'role': 'user', 'content': '如何做西紅柿燉牛腩?'}]response = Generation.call(model="qwen-turbo",messages=messages,# 將輸出設(shè)置為"message"格式result_format='message')if response.status_code == HTTPStatus.OK:print(response)# 將assistant的回復(fù)添加到messages列表中messages.append({'role': response.output.choices[0]['message']['role'],'content': response.output.choices[0]['message']['content']})else:print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (response.request_id, response.status_code,response.code, response.message))# 如果響應(yīng)失敗,將最后一條user message從messages列表里刪除,確保user/assistant消息交替出現(xiàn)messages = messages[:-1]# 將新一輪的user問題添加到messages列表中messages.append({'role': 'user', 'content': '不放糖可以嗎?'})# 進行第二輪模型的響應(yīng)response = Generation.call(model="qwen-turbo",messages=messages,result_format='message', # 將輸出設(shè)置為"message"格式)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__':multi_round()
3.實時交互功能
實現(xiàn)流程分析
- 1.導(dǎo)入 Generation類
- 2.封裝對話應(yīng)用的模型和消息
- 3.定義消息messages
- 4.定義對話的輪數(shù)
- 5.輸入問題,創(chuàng)建角色為role
- 6.獲取結(jié)果響應(yīng),把結(jié)果添加到messages中
from dashscope import Generationdef get_response(messages):response = Generation.call(model="qwen-turbo",messages=messages,# 將輸出設(shè)置為"message"格式result_format='message')return responsemessages = [{'role': 'system', 'content': 'You are a helpful assistant.'}]# 您可以自定義設(shè)置對話輪數(shù),當(dāng)前為3
for i in range(3):user_input = input("請輸入:")messages.append({'role': 'user', 'content': user_input})assistant_output = get_response(messages).output.choices[0]['message']['content']messages.append({'role': 'assistant', 'content': assistant_output})print(f'用戶輸入:{user_input}')print(f'模型輸出:{assistant_output}')print('\n')
4.流式響應(yīng)
????大模型并不是一次性生成最終結(jié)果,而是逐步地生成中間結(jié)果,最終結(jié)果由中間結(jié)果拼接而成。非流式輸出方式等待模型生成結(jié)束后再將生成的中間結(jié)果拼接后返回,而流式輸出可以實時地將中間結(jié)果返回,您可以在模型進行輸出的同時進行閱讀,減少等待模型回復(fù)的時間。使用流式輸出需要您進行一些配置,DashScope Python SDK中需要設(shè)置stream為True,DashScope Java SDK中需要使用streamCall接口調(diào)用。
流式輸出的流程和正常的一樣,在響應(yīng)中指定 stream=True, # 設(shè)置輸出方式為流式輸出
from http import HTTPStatus
from dashscope import Generationdef call_with_stream():messages = [{'role': 'user', 'content': '如何做西紅柿燉牛腩?'}]responses = Generation.call(model="qwen-turbo",messages=messages,result_format='message', # 設(shè)置輸出為'message'格式stream=True, # 設(shè)置輸出方式為流式輸出incremental_output=True # 增量式流式輸出)for response in responses:if response.status_code == HTTPStatus.OK:print(response.output.choices[0]['message']['content'], end='')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_stream()
5.異步Asyncio接口
如果使用Dashscope Python SDK,可以使用asyncio調(diào)用實現(xiàn)并發(fā),提高程序的效率。(Dashscope Python SDK版本需要不低于 1.19.0)
import asyncio
from http import HTTPStatus
import platformfrom dashscope import Generation
from dashscope.aigc.generation import AioGenerationasync def async_dashscope_sample():response = await AioGeneration.call("qwen-turbo",prompt='今天天氣好嗎?')if response.status_code == HTTPStatus.OK:print('Result is: %s' % response.output)else:print('Failed request_id: %s, status_code: %s, code: %s, message:%s' %(response.request_id, response.status_code, response.code,response.message))async def async_dashscope_stream_sample():responses = await AioGeneration.call(model="qwen-turbo",prompt='今天天氣好嗎?',stream=True)# responses是async迭代器,需要用async for循環(huán)來遍歷async for response in responses:print(response)async def main():response = await async_dashscope_sample()print(response)await async_dashscope_stream_sample()
if __name__ == '__main__':# 如果當(dāng)前操作系統(tǒng)為Windows,則使用WindowsSelectorEventLoopPolicy作為事件循環(huán)策略if platform.system() == 'Windows':asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())loop = asyncio.new_event_loop()asyncio.set_event_loop(loop)asyncio.run(main(), debug=False)
6.Function call
????大模型在面對實時性問題、私域知識型問題或數(shù)學(xué)計算等問題時可能效果不佳。您可以使用function call功能,通過調(diào)用外部工具來提升模型的輸出效果。您可以在調(diào)用大模型時,通過tools參數(shù)傳入工具的名稱、描述、入?yún)⒌刃畔?。大模型在收到提示詞以及工具信息后,會判斷是否需要使用工具:
- 如果不需要使用工具,大模型不會返回tool_calls參數(shù),您的程序可以直接返回大模型的回答。
- 如果需要使用工具,大模型會返回一個包含tool_calls字段的信息,您的程序可以根據(jù)此信息判斷需要調(diào)用工具。您的程序需要解析tool_calls信息中包含的工具函數(shù)名和入?yún)?#xff0c;并將入?yún)⑤斎氲焦ぞ吆瘮?shù)來得到工具調(diào)用的結(jié)果。
格式配置
{"name": "$工具名","role": "tool","content": "$工具輸出"
}
流程分析:
- 1.定義工具列表,模型在選擇使用哪個工具時會參考工具的name和description
- 2.工具1 獲取當(dāng)前時刻的時間
- 3.工具2 獲取指定城市的天氣
- 4.查詢天氣時需要提供位置,因此參數(shù)設(shè)置為location
- 5.模擬天氣查詢工具。返回結(jié)果示例:“北京今天是晴天。”
- 6.查詢當(dāng)前時間的工具。返回結(jié)果示例:“當(dāng)前時間:2024-04-15 17:15:18?!?/li>
- 7.封裝模型響應(yīng)函數(shù)
from dashscope import Generation
from datetime import datetime
import random
import json# 定義工具列表,模型在選擇使用哪個工具時會參考工具的name和description
tools = [# 工具1 獲取當(dāng)前時刻的時間{"type": "function","function": {"name": "get_current_time","description": "當(dāng)你想知道現(xiàn)在的時間時非常有用。","parameters": {} # 因為獲取當(dāng)前時間無需輸入?yún)?shù),因此parameters為空字典}}, # 工具2 獲取指定城市的天氣{"type": "function","function": {"name": "get_current_weather","description": "當(dāng)你想查詢指定城市的天氣時非常有用。","parameters": { # 查詢天氣時需要提供位置,因此參數(shù)設(shè)置為location"type": "object","properties": {"location": {"type": "string","description": "城市或縣區(qū),比如北京市、杭州市、余杭區(qū)等。"}}},"required": ["location"]}}
]# 模擬天氣查詢工具。返回結(jié)果示例:“北京今天是晴天?!?/span>
def get_current_weather(location):return f"{location}今天是晴天。 "# 查詢當(dāng)前時間的工具。返回結(jié)果示例:“當(dāng)前時間:2024-04-15 17:15:18?!?/span>
def get_current_time():# 獲取當(dāng)前日期和時間current_datetime = datetime.now()# 格式化當(dāng)前日期和時間formatted_time = current_datetime.strftime('%Y-%m-%d %H:%M:%S')# 返回格式化后的當(dāng)前時間return f"當(dāng)前時間:{formatted_time}。"# 封裝模型響應(yīng)函數(shù)
def get_response(messages):response = Generation.call(model='qwen-max',messages=messages,tools=tools,seed=random.randint(1, 10000), # 設(shè)置隨機數(shù)種子seed,如果沒有設(shè)置,則隨機數(shù)種子默認為1234result_format='message' # 將輸出設(shè)置為message形式)return responsedef call_with_messages():print('\n')messages = [{"content": input('請輸入:'), # 提問示例:"現(xiàn)在幾點了?" "一個小時后幾點" "北京天氣如何?""role": "user"}]# 模型的第一輪調(diào)用first_response = get_response(messages)assistant_output = first_response.output.choices[0].messageprint(f"\n大模型第一輪輸出信息:{first_response}\n")messages.append(assistant_output)if 'tool_calls' not in assistant_output: # 如果模型判斷無需調(diào)用工具,則將assistant的回復(fù)直接打印出來,無需進行模型的第二輪調(diào)用print(f"最終答案:{assistant_output.content}")return# 如果模型選擇的工具是get_current_weatherelif assistant_output.tool_calls[0]['function']['name'] == 'get_current_weather':tool_info = {"name": "get_current_weather", "role":"tool"}location = json.loads(assistant_output.tool_calls[0]['function']['arguments'])['properties']['location']tool_info['content'] = get_current_weather(location)# 如果模型選擇的工具是get_current_timeelif assistant_output.tool_calls[0]['function']['name'] == 'get_current_time':tool_info = {"name": "get_current_time", "role":"tool"}tool_info['content'] = get_current_time()print(f"工具輸出信息:{tool_info['content']}\n")messages.append(tool_info)# 模型的第二輪調(diào)用,對工具的輸出進行總結(jié)second_response = get_response(messages)print(f"大模型第二輪輸出信息:{second_response}\n")print(f"最終答案:{second_response.output.choices[0].message['content']}")if __name__ == '__main__':call_with_messages()
上面示例代碼中天氣工具返回結(jié)果是固定的,可以使用高德地圖提供的接口進行完善天氣工具的代碼完善。很簡單~ 感興趣的友友們可以自己完善一下~
- 高德天氣查詢接口文檔如下:https://lbs.amap.com/api/webservice/guide/api/weatherinfo