任意LLM大模型function calling Demo

2024 年 6 月 14 日 星期五(已编辑)
/ ,
294
摘要
根据上次文章的思路写一份在任意大模型实现Function调用的Demo,用Python和Ollama(或OpenAI API兼容的后端)来实现。
这篇文章上次修改于 2024 年 6 月 14 日 星期五,可能部分内容已经不适用,如有疑问可询问作者。

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

任意LLM大模型function calling Demo

根据上次文章的思路来写一份在任意大模型实现Function calling的Demo,将上次的伪代码写成代码。

Requirement

  • Python
  • Ollama(或任意OpenAI API兼容的后端,当然你也可以根据本份demo修改成兼容其他的API)

Demo

repo: https://by.cx/posts/programming/function-calling-demo https://github.com/tusik/any-function-calling/blob/fb8e357b6b6e03befb4570e943ee436cd68f9990/ollama_demo.py#L12

这个Demo还是只是简单的根据用户input来调用函数,如果想要LLM回复的内容更合理的话就需要加入把函数调用结果加入message中再重新获取新的message。

Results

使用llama3:8b、qwen:7b、qwen:2b、百度ERNIE Speed、阿里通义2.5进行测试,测试的大概结果如下:

精度所需显存结果准确性输出结果费用
llama3:8bint8~8G大部分纯json显卡
llama3:8bint4~4G一般文本混合json显卡
qwen:7bint8~7G大部分纯json显卡
qwen:2bint8~2G全是文本显卡
百度ERNIE Speed0文本混合json免费
阿里通义2.50大部分纯json送免费token

目前7b以上的LLM大模型差不多都能处理function calling的这个system prompt,但是7b的显存的需求也稍微有点高,1060 6G跑7b以上的模型2-5token/s,4060 8G基本上就没有瓶颈了。不过还是Mac最好,32G的统一内存理论上能跑24b以下的int8模型完全没问题。

如果就是想要qwen:2b之类的小模型来实现这个功能的话,还是需要fine tune才能正常使用,关于这一部分数据集的话可以去huggingface上找找相关的dataset,有很多新出现的数据集。

Example: https://huggingface.co/datasets/hiyouga/glaive-function-calling-v2-sharegpt

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...