微立顶科技

新闻资讯

创新 服务 价值

  ChatGLM3等大模型的调用function calling

发布日期:2024/4/11 9:08:40      浏览量:

ChatGLM3等大模型的调用function calling



我们用function call实现一个查询实时天气的功能,并简单分析一下其实现原理,openai的工具调用原理也一样。

1. 实测效果

输入:帮我查询北京的天气怎么样输出:北京当前的天气情况如下:温度为14℃,体感温度为13℃,湿度为38%,天气状况为晴朗。

2. 运行步骤

chatglm3提供了tools的使用demo,先运行openai_api_demo文件夹下的api_server.py,启动openai格式的API server。
	
cd openai_api_demonohup python api_server.py &
再进入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’

出现这个错误可能是openai包的版本不正确,用以下命令指定安装1.8.0的openai,再重新运行:

	
pip install openai==1.8.0python openai_api_demo.py

3. 原理分析

假设有个这样的需求:
实现一个查询系统,前端一个输入框,让用户用自然语言描写自己想查什么,服务端有根据城市查询天气、根据IP查询地理位置两个方法,服务端要根据用户的描述来确定应该调用哪个方法,传递什么参数,比如用户输入"我想查一下北京的天气",服务端就要调用getWeather("北京")。

如果没有大模型,实现起来会比较困难。使用大模型就比较简单了,我们可以把系统中已有的方法名、方法描述、方法参数、参数类型、还有用户的问题一起告诉大模型,让大模型理解用户的意思,并告诉我们应该调用哪个方法,参数应该传什么,然后我们调用就可以了。交互流程图(重点是2、3、4步):


以上就是function calling的实现原理,理论上如果没有这个特性,通过写prompt也可以实现。

4. 代码解析

简单看一下demo的代码,在tools_using_demo中,tool_register.py定义了两个方法,并通过@register_tool注解获取到方法的描述信息,openai_api_demo.py的run_conversation方法中将用户问题与两个方法的描述信息发给大模型,如果大模型认为需要进行方法调用,那么响应中就会包含function_call字段,其中就有需要调用的方法名和参数,如下:
Function Call Response: {’arguments’: ’{"city_name": "北京"}’, ’name’: ’get_weather’}

根据方法名和参数就可以调用自己写的方法,获取到返回值

Tool Call Response: {’current_condition’: {’temp_C’: ’14’, ’FeelsLikeC’: ’13’, ’humidity’: ’38’, ’weatherDesc’: [{’value’: ’Clear’}], ’observation_time’: ’02:00 PM’}}

为方法的返回值不是自然语言,所以再将方法返回值发给大模型,让大模型总结一下,最后输出方便理解的自然语言。




  业务实施流程

需求调研 →

团队组建和动员 →

数据初始化 →

调试完善 →

解决方案和选型 →

硬件网络部署 →

系统部署试运行 →

系统正式上线 →

合作协议

系统开发/整合

制作文档和员工培训

售后服务

马上咨询: 如果您有业务方面的问题或者需求,欢迎您咨询!我们带来的不仅仅是技术,还有行业经验积累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     联系人:石先生/雷先生