这次的测试主要选取了两个方面:
第一个测试是给 Llama-3-8B 模型添加智能 Function Calling 特性之后,检查模型能否根据用户输入的问题智能选择并调用合适的函数;
第二个测试是给 Llama-3-8B 模型添加代码解释器特性之后,检查模型分解任务,编写代码,以及遇到错误的时候能够正确修改代码解决问题的能力。
测试 Function Calling 的能力
众所周知,Function Calling 特性是用来给大模型提供一组额外的可调用函数,从而帮助大模型补足一些短板。比如扩充模型的数学能力,知识图谱,或者打破训练资料的时限限制等等。
智能调用需要大模型的幻觉比较少,知道什么时候需要调用什么函数,同时也考验了模型的格式化输出能力。
首先为模型添加两个可调用函数,get_current_time()函数将会返回当前的系统时间; get_current_location()函数将会返回当前的位置信息,两个函数比较简单,都无参数信息。
def get_current_time():
"""Get current time."""
current_time = datetime.datetime.now()
formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
return formatted_time
def get_current_location():
"""Get current location information."""
location = geocoder.ip('me')
if location:
return location.address
else:
return "Location information not available."
在 Enable Function Calling 特性之后,让我们通过问题来检查 Llama-3-8B 模型的执行情况如何。
可以看到 Llama-3-8B 模型可以正确的选择要调用的函数,并且能够正确输出调用格式。而且令人惊喜的是,模型还添加了的 Markdown 格式来美化输出格式。
这是未开启 Function Calling 特性的情况,模型无法知道当前时间等信息。
总结:经过测试之后,Llama-3-8B 模型在开启了 Function Calling 特性,正确调用函数的概率是目前开源模型中效果最好的。我之前在很多的模型上也测试过这个任务,通常会遇到以下的错误:
模型完全不知道应该调用函数。
模型的输出格式不对或者参数不对,导致调用函数失败。
经过几轮测试后,模型失去了调用函数的能力。(这项仅有闭源大模型效果较好,其中 GPT4 最好)
在这项任务上我目前最满意的模型有 Llama-3-8B 模型,Phi-3-3B 模型,Qwen-1.5-7B(14B)模型,Baichuan2 模型,Mistral-7B 模型,仅个人观点。
测试代码解释器功能
这次使用我自己编写的代码解释器 keras-llm-interpreter ,和 Llama-3-8B 模型一起测试。整个测试包含三项任务:
多代理的经典任务,让模型绘制 Tesla 和 Apple 今年的股票价格曲线并显示。
让模型画一只粉色的小猪并显示。
让模型读取本地的一个文件,制作成词云图片并显示。
首先,让我们看看第一项任务:模型绘制 Tesla 和 Apple 今年的股票价格曲线并显示
在加载 Llama-3-8B 模型并开启代码解释器 keras-llm-interpreter 之后,布置任务给模型:Please plot Tesla and Apple stock price YTD from 2024.
Llama-3-8B 模型很好的完成了任务,它第一步编写代码从雅虎财经上下载了 TSLA 和 AAPL 的股票数据;第二步使用 plt 绘制了股票价格趋势图型,第三步通过检查结果正确结束了任务。
第二项任务,让模型画一只粉色的小猪并显示
布置任务给模型:Please use Python language to draw an image of a pink pig and display it.
模型分了四步去完成整个任务,第一安装库 pillow ,成功;第二使用 PIL 生成一张画布,成功;第三,尝试在画布上画小猪的眼睛,鼻子和嘴;第四步,保存图片到本地文件 pink_pig.png 。
这个任务中,虽然 Llama-3-8B 模型最终完成了任务,但是有两点做的不好,第一忘记了显示图片,第二画的小猪惨不忍睹...
第三项任务,模型读取本地文件 wordcloud.txt ,制作成词云图片并显示
wordcloud.txt 中是指环王故事内容的一部分,首先还是布置任务给模型:Please create a word cloud image based on the file "D:\wordcloud.txt" and display it.
模型首先编写代码并读取了文件内容,之后在环境中安装了必要的库 wordcloud ,最后编写代码制作词云并显示,可以说效果相当好了。
总结:Llama-3-8B 模型在开启了代码解释器特性,并在收到任务之后,能够按照步骤分解任务内容,并且按照每一步骤编写代码并执行,最后检查任务的输出结果。之前在很多的模型上也测试过这个任务,通常会遇到以下的错误:
模型对代码解释器不认知,仅会回复无法网络搜索或输出图像。
模型不会制定任务,或者制定的任务不对。
模型无法按照正确的格式编写代码,导致任务无法进行。
模型代码质量很差,并且在错误提示给模型之后,模型不知道如何修复错误。
模型遇到错误后不在尝试,直接显示无法完成任务。
在任务完成之后,模型没能正确确认任务成功,导致执行多遍任务。
在这项任务上我目前最满意的离线开源模型就是 Llama-3 模型,它的一次成功率是最高的,当然对于开源模型来说总体的稳定任然不如闭源大模型,仅个人观点。