任意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:8b | int8 | ~8G | 高 | 大部分纯json | 显卡 |
llama3:8b | int4 | ~4G | 一般 | 文本混合json | 显卡 |
qwen:7b | int8 | ~7G | 高 | 大部分纯json | 显卡 |
qwen:2b | int8 | ~2G | 低 | 全是文本 | 显卡 |
百度ERNIE Speed | 0 | 高 | 文本混合json | 免费 | |
阿里通义2.5 | 0 | 高 | 大部分纯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