ChatGLM3等大模型的調(diào)用function calling
發(fā)布日期:2024/4/11 9:08:40 瀏覽量:
ChatGLM3等大模型的調(diào)用function calling
我們用function call實現(xiàn)一個查詢實時天氣的功能,并簡單分析一下其實現(xiàn)原理,openai的工具調(diào)用原理也一樣。
1. 實測效果
輸入:幫我查詢北京的天氣怎么樣輸出:北京當(dāng)前的天氣情況如下:溫度為14℃,體感溫度為13℃,濕度為38%,天氣狀況為晴朗。2. 運行步驟
chatglm3提供了tools的使用demo,先運行openai_api_demo文件夾下的api_server.py,啟動openai格式的API server。cd openai_api_demonohup python api_server.py &再進(jìn)入tools_using_demo文件夾下的openai_api_demo.py
cd tools_using_demopython openai_api_demo.py運行的時候可能會報錯:
openai.UnprocessableEntityError: Error code: 422 - ... ’msg’: ’Input should be a valid dictionary’
出現(xiàn)這個錯誤可能是openai包的版本不正確,用以下命令指定安裝1.8.0的openai,再重新運行:
pip install openai==1.8.0python openai_api_demo.py
3. 原理分析
假設(shè)有個這樣的需求:實現(xiàn)一個查詢系統(tǒng),前端一個輸入框,讓用戶用自然語言描寫自己想查什么,服務(wù)端有根據(jù)城市查詢天氣、根據(jù)IP查詢地理位置兩個方法,服務(wù)端要根據(jù)用戶的描述來確定應(yīng)該調(diào)用哪個方法,傳遞什么參數(shù),比如用戶輸入"我想查一下北京的天氣",服務(wù)端就要調(diào)用getWeather("北京")。
如果沒有大模型,實現(xiàn)起來會比較困難。使用大模型就比較簡單了,我們可以把系統(tǒng)中已有的方法名、方法描述、方法參數(shù)、參數(shù)類型、還有用戶的問題一起告訴大模型,讓大模型理解用戶的意思,并告訴我們應(yīng)該調(diào)用哪個方法,參數(shù)應(yīng)該傳什么,然后我們調(diào)用就可以了。交互流程圖(重點是2、3、4步):

以上就是function calling的實現(xiàn)原理,理論上如果沒有這個特性,通過寫prompt也可以實現(xiàn)。
4. 代碼解析
簡單看一下demo的代碼,在tools_using_demo中,tool_register.py定義了兩個方法,并通過@register_tool注解獲取到方法的描述信息,openai_api_demo.py的run_conversation方法中將用戶問題與兩個方法的描述信息發(fā)給大模型,如果大模型認(rèn)為需要進(jìn)行方法調(diào)用,那么響應(yīng)中就會包含function_call字段,其中就有需要調(diào)用的方法名和參數(shù),如下:Function Call Response: {’arguments’: ’{"city_name": "北京"}’, ’name’: ’get_weather’}
根據(jù)方法名和參數(shù)就可以調(diào)用自己寫的方法,獲取到返回值
Tool Call Response: {’current_condition’: {’temp_C’: ’14’, ’FeelsLikeC’: ’13’, ’humidity’: ’38’, ’weatherDesc’: [{’value’: ’Clear’}], ’observation_time’: ’02:00 PM’}}
因為方法的返回值不是自然語言,所以再將方法返回值發(fā)給大模型,讓大模型總結(jié)一下,最后輸出方便理解的自然語言。
馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 聯(lián)系人:石先生/雷先生