模型简介
模型特点
模型能力
使用案例
数据集:
- Salesforce/xlam-function-calling-60k 语言:
- en 许可证: cc-by-nc-4.0 任务标签: 文本生成 库名称: transformers 标签:
- 函数调用
- LLM智能体
- 工具使用
- deepseek
- pytorch 额外授权标题: 确认遵守相应许可证以访问仓库 额外授权按钮内容: 同意并访问仓库 额外授权字段: 名: 文本 姓: 文本 国家: 国家 所属机构: 文本
[主页] | [APIGen论文] | [ActionStudio论文] | [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是一种文件格式,旨在高效存储和加载大型语言模型,特别适合在资源有限的本地设备上运行AI模型,实现离线功能和增强隐私保护。
仓库概述
本仓库专注于我们的小型xLAM-1b-fc-r
模型,该模型针对函数调用进行了优化,可轻松部署在个人设备上。

函数调用(或工具使用)是AI智能体的关键能力之一。它不仅要求模型理解和生成类人文本,还需要根据自然语言指令执行功能性API调用。这将LLMs的实用性从简单的对话任务扩展到与各种数字服务和应用的动态交互,如获取天气信息、管理社交媒体平台和处理金融服务。
以下指南将引导您完成xLAM-1b-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和许多更大的模型。
尽管体积小,这两款模型在各类别中均表现出均衡的性能,展示了其强大的函数调用能力。
使用方法
Huggingface基础用法
要使用Huggingface的xLAM-1b-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-1b-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]
# 辅助函数:将OpenAI格式工具转换为更简洁的xLAM格式
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)
# tokenizer.eos_token_id是</s>标记的ID
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 jinja2
示例脚本位于examples文件夹中。
1. 测试提示模板
要使用聊天模板构建提示并输出适用于各种测试用例的格式化提示,请运行:
python test_prompt_template.py --model
2. 通过手动服务端点测试xLAM模型
a. 使用vLLM服务模型:
python -m vllm.entrypoints.openai.api_server --model Salesforce/xLAM-1b-fc-r --served-model-name xlam-1b-fc-r --dtype bfloat16 --port 8001
b. 运行测试脚本:
python test_xlam_model_with_endpoint.py --model_name xlam-1b-fc-r --port 8001 [选项]
选项:
--temperature
: 默认0.3--top_p
: 默认1.0--max_tokens
: 默认512
此测试脚本提供了一个处理程序实现,可轻松应用于您的自定义函数调用应用。
3. 直接使用vLLM库测试xLAM模型
要直接使用vLLM库测试xLAM模型,请运行:
python test_xlam_model_with_vllm.py --model Salesforce/xLAM-1b-fc-r [选项]
选项与端点测试相同。此测试脚本同样提供了处理程序实现,可轻松应用于您的自定义函数调用应用。
自定义
这些示例设计灵活,可轻松集成到您自己的项目中。您可以根据具体需求和应用场景自由修改脚本。您可以在每个脚本中调整测试查询或API定义,以测试不同场景或模型能力。
其他自定义提示:
- 根据GPU容量调整服务模型时的
--dtype
参数。 - 参考vLLM文档获取更详细的配置选项。
- 查看
demo.ipynb
文件了解整个工作流程的全面描述,包括如何执行API。
这些资源为将xLAM模型集成到您的应用中提供了坚实的基础,支持定制化和高效部署。
许可证
xLAM-1b-fc-r
根据CC-BY-NC-4.0许可证分发,附加条款详见Deepseek许可证。
伦理考量
本版本仅用于支持学术论文的研究目的。我们的模型、数据集和代码并非针对所有下游用途专门设计或评估。我们强烈建议用户在部署此模型前评估并解决与准确性、安全性和公平性相关的潜在问题。我们鼓励用户考虑AI的常见局限性,遵守适用法律,并在选择用例时采用最佳实践,特别是对于错误或滥用可能严重影响人们生活、权利或安全的高风险场景。有关用例的进一步指导,请参阅我们的AUP和AI AUP。
引用
如果您觉得本仓库有帮助,请引用我们的论文:
@article{zhang2024xlam,
title={xlam: A family of large action models to empower ai agent systems},
author={Zhang, Jianguo and Lan, Tian and Zhu, Ming and Liu, Zuxin and Hoang, Thai and Kokane, Shirley and Yao, Weiran and Tan, Juntao and Prabhakar, Akshara and Chen, Haolin and others},
journal={arXiv preprint arXiv:2409.03215},
year={2024}
}
@article{liu2024apigen,
title={APIGen: Automated Pipeline for Generating Verifiable and Diverse Function-Calling Datasets},
author={Liu, Zuxin and Hoang, Thai and Zhang, Jianguo and Zhu, Ming and Lan, Tian and Kokane, Shirley and Tan, Juntao and Yao, Weiran and Liu, Zhiwei and Feng, Yihao and others},
journal={arXiv preprint arXiv:2406.18518},
year={2024}
@article{zhang2025actionstudio,
title={ActionStudio: A Lightweight Framework for Data and Training of Action Models},
author={Zhang, Jianguo and Hoang, Thai and Zhu, Ming and Liu, Zuxin and Wang, Shiyu and Awalgaonkar, Tulika and Prabhakar, Akshara and Chen, Haolin and Yao, Weiran and Liu, Zhiwei and others},
journal={arXiv preprint arXiv:2503.22673},
year={2025}
}


