当前的大模型流行趋势,正从提供文本聊天的简单聊天机器人转向能够使用工具来执行任务的AI代理。这些AI代理的关键组件是调用和执行外部API、工具和函数的能力,通常称为“工具调用”或“函数调用”。AI代理使用大语言模型(LLMs)作为推理引擎,以决定何时及如何调用工具来完成任务或检索更多信息, 并因此可以利用外部的实时数据和系统来帮助工作。根据我们的经验,使用现有的开放权重的LLMs(如阿里的Qwen或微软的Phi-3)进行工具调用在代理框架(agent framework)中表现不佳,无法满足精确执行任务的要求。
尽管OpenAI、Anthropic、Cohere、Google和Alibaba等主要云LLM提供商已经提供了函数调用功能,但在开放权重模型中,这一功能仍未得到充分发展。因此,LLM的应用开发者不得不依赖不稳定的prompt engineering(提示词工程)。基于此,我们决定进一步训练这些模型。
Rubra v0.1引入了对顶级开放权重大语言模型的工具调用,包括:
-
Alibaba Qwen2 7B Instruct
-
Meta Llama3 8B
-
Meta Llama3 70B
-
Google Gemma 1.1 2B
-
Mistral 7B Instruct v0.3
-
Mistral 7B Instruct v0.2
-
Microsoft Phi Mini 128k Instruct
这些模型中,Qwen2(通义千问)对中文和英文都有着良好支持, 而其余模型主要支持英文。
此外,我们扩展了流行的推理库vLLM和llama.cpp,让部署运行Rubra模型足够简单,并支持OpenAI格式工具调用。
我们如何训练Rubra模型
开发LLMs通常涉及两个主要步骤:
-
预训练:在此步骤中,模型使用广泛多样的数据进行训练,以建立坚实的知识基础。
-
后训练:又可以分为- 监督微调:通过特定的指令和示例来细化模型的知识,以提高其在各种任务中的理解和表现。 对齐:使用从人类反馈中强化学习(RLHF)和直接偏好优化(DPO)等技术,根据人类偏好数据对模型的反馈进行对齐和优化,使其更加准确、有用和安全。
在Rubra v0.1中,我们进一步对指令调优(Instruct)模型进行了后训练。我们选择了一种新颖的方法来避免全量微调和LoRA训练的常见问题,特别是灾难性遗忘(Catastrophic Forgetting)和过拟合(over-fitting)。这是通过块扩展(block expansion)实现的,将额外的层(layer)交错加入现有网络结构中,仅对这些新层进行进一步训练。这种方法保留了原始参数的完整性,同时仅更新新层,从而防止过拟合并减轻模型已有技能的灾难性遗忘。随后,我们采用DPO来使模型更贴近目标结果,提高其适应性而不牺牲已训练的能力。
为了验证我们后训练方法的有效性,我们严格地在各种基准测试中验证了这些模型。这些基准测试评估了我们Rubra模型的增强能力和总体表现,以及其他函数调用模型的表现,结果可以在此处查看。结果显示,Rubra模型能够进行复杂工具调用和其他AI代理所需的任务,而专门针对函数调用进行微调的模型(如gorilla-openfunctions和NexusRaven)在复杂函数调用和相关基准测试中表现不佳,可能是由于过拟合和灾难性遗忘所致。
基准测试结果表明,善于推理,逻辑更强的模型也往往在复杂的代理函数调用任务中表现出色。
基准测试
模型 | 工具调用 | MMLU (5-shot) | GPQA (0-shot) | GSM-8K (8-shot, CoT) | MATH (4-shot, CoT) | MT-bench |
---|---|---|---|---|---|---|
Rubra Llama-3 70B Instruct | 97.85% | 75.90 | 33.93 | 82.26 | 34.24 | 8.36 |
Rubra Llama-3 8B Instruct | 89.28% | 64.39 | 31.70 | 68.99 | 23.76 | 8.03 |
Rubra Qwen2-7B-Instruct | 85.71% | 68.88 | 30.36 | 75.82 | 28.72 | 8.08 |
Rubra Mistral 7B Instruct v0.3 | 73.57% | 59.12 | 29.91 | 43.29 | 11.14 | 7.69 |
Rubra Phi-3 Mini 128k Instruct | 70.00% | 67.87 | 29.69 | 79.45 | 30.80 | 8.21 |
Rubra Mistral 7B Instruct v0.2 | 69.28% | 58.90 | 29.91 | 34.12 | 8.36 | 7.36 |
Rubra Gemma-1.1 2B Instruct | 45.00% | 38.85 | 24.55 | 6.14 | 2.38 | 5.75 |
基准测试结果表明,Rubra模型成功减轻了微调模型中常见的灾难性遗忘。让我们通过比较Rubra Llama-3 8B和未经Rubra增强的Llama-3 8B在MT Bench上的表现来进一步分析: MT Bench使用GPT-4来评估大语言模型进行连贯、信息丰富和引人入胜对话的能力, 并可以进行两个模型的直接对比PK:
模型 | 工具调用能力(OpenAI格式) | 胜 | 败 | 平 | 胜率 | 败率 | 调整后的胜率 |
---|---|---|---|---|---|---|---|
Llama-3 8B Instruct | 0% | 41 | 42 | 77 | 0.25625 | 0.2625 | 0.496875 |
Rubra Enhanced Llama-3 8B Instruct | 89.28% | 42 | 41 | 77 | 0.2625 | 0.25625 | 0.503125 |
这两个模型的表现几乎相同,Rubra增强模型甚至略有优势。此外,Rubra增强模型在函数调用能力上显著提高,这与我们在不牺牲整体性能的情况下增强此特定能力的目标一致。
我们训练的每个模型都有类似的对比,可以在文档中的模型部分找到。
结论
Rubra v0.1通过引入强大的工具调用能力解决了当前开放权重LLMs领域中的一个关键问题。这一改进确保了开发人员不再需要依赖不稳定的提示工程,而是可以利用更结构化和一致的方法来执行任务。
通过将我们的模型与vLLM和llama.cpp等流行的推理库集成,我们提供了对OpenAI格式工具调用的无缝支持。这种兼容性不仅简化了开发过程,还扩展了Rubra模型的潜在应用。
探索并利用Rubra模型的功能:您可以直接在Huggingface Spaces中试用它们——免费且无需登录。我们期待看到您使用这些工具与Rubra模型进行进一步创新!
模型链接:
我们的模型都在modelscope(魔搭平台)上发布:
当然您也可以在huggingface上找到它们, 比如https://huggingface.co/rubra-ai/Qwen2-7B-Instruct-GGUF--目前在huggingface上rubra系列模型总计已经超过了10万下载量!
github链接: https://github.com/rubra-ai/rubra