数据集:
- Salesforce/xlam-function-calling-60k
语言:
- 英文
许可证: cc-by-nc-4.0
管道标签: 文本生成
库名称: transformers
标签:
- 函数调用
- LLM代理
- 工具使用
- deepseek
- pytorch
额外授权标题: 确认遵守相应许可证以访问仓库
额外授权按钮内容: 同意并访问仓库
额外授权字段:
名: 文本
姓: 文本
国家: 国家
所属机构: 文本
[主页] |
[论文] |
[Discord] |
[数据集] |
[Github]
欢迎来到xLAM模型家族!大型动作模型(LAMs)是先进的大型语言模型,旨在增强决策能力并将用户意图转化为可执行的动作,与世界互动。LAMs自主规划和执行任务以实现特定目标,作为AI代理的大脑。它们有潜力自动化跨多个领域的工作流程,使其在各种应用中具有不可估量的价值。
目录
模型系列
我们提供了一系列不同规模的xLAM模型,以满足各种应用需求,包括针对函数调用和通用代理应用优化的模型:
模型 |
总参数量 |
上下文长度 |
发布日期 |
类别 |
下载模型 |
下载GGUF文件 |
xLAM-7b-r |
7.24B |
32k |
2024年9月5日 |
通用, 函数调用 |
🤗 链接 |
-- |
xLAM-8x7b-r |
46.7B |
32k |
2024年9月5日 |
通用, 函数调用 |
🤗 链接 |
-- |
xLAM-8x22b-r |
141B |
64k |
2024年9月5日 |
通用, 函数调用 |
🤗 链接 |
-- |
xLAM-1b-fc-r |
1.35B |
16k |
2024年7月17日 |
函数调用 |
🤗 链接 |
🤗 链接 |
xLAM-7b-fc-r |
6.91B |
4k |
2024年7月17日 |
函数调用 |
🤗 链接 |
🤗 链接 |
xLAM-v0.1-r |
46.7B |
32k |
2024年3月18日 |
通用, 函数调用 |
🤗 链接 |
-- |
fc
系列的模型针对函数调用能力进行了优化,能够根据输入查询和可用API提供快速、准确且结构化的响应。这些模型基于deepseek-coder模型进行了微调,设计得足够小,可以部署在手机或电脑等个人设备上。
我们还提供了它们的量化GGUF文件,以便高效部署和执行。GGUF是一种文件格式,旨在高效存储和加载大型语言模型,使GGUF成为在资源有限的本地设备上运行AI模型的理想选择,实现离线功能和增强隐私。
更多详情,请查看我们的GitHub和论文。
仓库概述
本仓库专注于我们的小型xLAM-7b-fc-r
模型,该模型针对函数调用进行了优化,可以轻松部署在个人设备上。
函数调用或工具使用是AI代理的关键能力之一。它不仅要求模型理解和生成类人文本,还要求其根据自然语言指令执行功能性API调用。这将LLMs的实用性从简单的对话任务扩展到与各种数字服务和应用程序的动态交互,例如检索天气信息、管理社交媒体平台和处理金融服务。
以下指南将引导您完成xLAM-7b-fc-r
与HuggingFace和vLLM的设置、使用和集成。
我们将首先介绍基础用法,然后逐步讲解示例文件夹中提供的教程和示例脚本。
框架版本
- Transformers 4.41.0
- Pytorch 2.3.0+cu121
- Datasets 2.19.1
- Tokenizers 0.19.1
基准测试结果
我们主要在伯克利函数调用排行榜(BFCL)上测试我们的函数调用模型,该排行榜提供了一个全面的评估框架,用于评估LLMs在各种编程语言和应用领域(如Java、JavaScript和Python)中的函数调用能力。
截至2024年7月18日,在BFCL基准测试中的性能比较。评估参数为temperature=0.001
和top_p=1
我们的xLAM-7b-fc-r
以88.24%的整体准确率在排行榜上排名第三,超越了许多强大的模型。值得注意的是,我们的xLAM-1b-fc-r
模型是排行榜上唯一一个参数量小于2B的小型模型,但仍然达到了78.94%的竞争性整体准确率,超越了GPT3-Turbo和许多更大的模型。
尽管体积小,但这两个模型在各种类别中表现均衡,显示出强大的函数调用能力。
更多详细分析,请参阅我们的论文和GitHub仓库。
使用
Huggingface基础使用
要使用Huggingface的xLAM-7b-fc-r
模型,请先安装transformers
库:
pip install transformers>=4.41.0
我们使用以下示例来说明如何使用我们的模型执行函数调用任务。
请注意,我们的模型与我们提供的提示格式配合最佳。
它允许我们提取类似于ChatGPT的函数调用模式的JSON输出。
import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
torch.random.manual_seed(0)
model_name = "Salesforce/xLAM-7b-fc-r"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", torch_dtype="auto", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_name)
task_instruction = """
您是一位函数组合专家。您将收到一个问题及一组可能的函数。
根据问题,您需要调用一个或多个函数/工具来实现目的。
如果没有可用的函数,请指出并拒绝回答。
如果给定问题缺少函数所需的参数,也请指出。
""".strip()
format_instruction = """
输出必须严格遵循以下JSON格式,且不得包含其他文本。
示例格式如下。请确保参数类型正确。如果不需要函数调用,请将tool_calls设为空列表'[]'。
```
{
"tool_calls": [
{"name": "func_name1", "arguments": {"argument1": "value1", "argument2": "value2"}},
... (根据需要添加更多工具调用)
]
}
```
""".strip()
query = "纽约的天气如何,用华氏度表示?"
get_weather_api = {
"name": "get_weather",
"description": "获取某个位置的当前天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州,例如旧金山、纽约"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "返回的温度单位"
}
},
"required": ["location"]
}
}
search_api = {
"name": "search",
"description": "在互联网上搜索信息",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索查询,例如'AI最新新闻'"
}
},
"required": ["query"]
}
}
openai_format_tools = [get_weather_api, search_api]
def convert_to_xlam_tool(tools):
''''''
if isinstance(tools, dict):
return {
"name": tools["name"],
"description": tools["description"],
"parameters": {k: v for k, v in tools["parameters"].get("properties", {}).items()}
}
elif isinstance(tools, list):
return [convert_to_xlam_tool(tool) for tool in tools]
else:
return tools
def build_prompt(task_instruction: str, format_instruction: str, tools: list, query: str):
prompt = f"[任务指令开始]\n{task_instruction}\n[任务指令结束]\n\n"
prompt += f"[可用工具开始]\n{json.dumps(xlam_format_tools)}\n[可用工具结束]\n\n"
prompt += f"[格式指令开始]\n{format_instruction}\n[格式指令结束]\n\n"
prompt += f"[查询开始]\n{query}\n[查询结束]\n\n"
return prompt
xlam_format_tools = convert_to_xlam_tool(openai_format_tools)
content = build_prompt(task_instruction, format_instruction, xlam_format_tools, query)
messages=[
{ 'role': 'user', 'content': content}
]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_new_tokens=512, do_sample=False, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id)
print(tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True))
然后您应该能看到以下JSON格式的输出字符串:
{"tool_calls": [{"name": "get_weather", "arguments": {"location": "New York", "unit": "fahrenheit"}}]}
我们强烈建议使用我们提供的提示格式和辅助函数,以获得模型的最佳函数调用性能。
vLLM使用
我们提供了示例脚本,用于使用vllm
部署我们的模型并运行推理。首先安装所需的包:
pip install vllm openai argparse jinja