模型简介
模型特点
模型能力
使用案例
🚀 函数调用Llama 2 + Yi + Mistral + Zephyr + Deepseek Coder模型(版本2)
- 支持函数调用的Llama扩展了Hugging Face的Llama 2模型,使其具备函数调用能力。
- 模型会返回一个包含函数名和参数的结构化JSON参数。
🌟 最新更新
- 2023年11月15日 -> 新增6B和34B形式的Yi 200k上下文模型。
- 2023年11月8日 -> 新增Zephyr beta,这是Mistral 7B的改进版本(通过DPO实现)。
- 2023年11月6日 -> 新增Deepseek Coder 1.3B、6.7B和33B。
- 2023年10月11日 -> 新增支持函数调用的Mistral 7B。
- 2023年10月11日 -> 推送新模型,在改进的基础数据集上进行训练。
💡 v2版本的改进
- 简化语法:推理时仅需函数描述,无需额外添加指令。
- 函数描述分离:将函数描述移至系统提示之外,避免函数调用行为受系统提示训练方式对模型的影响。
📦 最新模型
- 支持函数调用的Yi-6B-200k上下文模型:
- 支持函数调用的Yi-34B-200k上下文模型:
- 支持函数调用的Deepseek-Coder-1.3B-Instruct模型:
- 支持函数调用的Llama-7B-chat模型:
- 支持函数调用的zephyr-7b-beta模型:
- 支持函数调用的Mistral-7B-Instruct-v0.1模型:
- 支持函数调用的Deepseek-Coder-6.7B-Instruct模型:
- 支持函数调用的Deepseek-Coder-33B-Instruct模型:
- 支持函数调用的CodeLlama-34B-Instruct模型:
- 支持函数调用的Llama-70B-chat模型:
📦 其他模型
🤔 如何选择合适的模型?
- 模型规模:较大的模型在处理函数调用时表现更好。7B模型的交叉熵训练损失约为0.5,13B模型约为0.4,70B模型约为0.3。这些绝对数值本身意义不大,但相对值可以反映模型的相对性能。
- 函数描述:提供清晰的函数描述,包括参数是否必需以及默认值。
- 后处理:确保对语言模型的响应进行后处理,检查用户是否提供了所有必要信息。如果没有,提示用户提供更多信息(例如他们的姓名、订单号等)。
🎥 查看性能视频概述
点击此处查看性能视频概述。
💡 基于2023年11月模型的简短提示
- DeepSeek Coder(所有规模):最佳编码模型。
- Yi 34B:最适合长上下文处理。
- Llama 70B:整体性能最强的模型(4k上下文)。
- Mistral 7B:如果只有8GB显存,这是最佳模型(可使用量化运行)。
- Zephyr:性能优于Mistral 7B,但未获得商业使用的开放许可。
📄 许可证
- 支持函数调用的Llama-7B模型:根据Meta社区许可证进行许可。
- 支持函数调用的Mistral-7B、Llama-13B、Code-llama-34b、Llama-70B和Falcon-180B模型:需要购买访问权限。
- 每个用户需要单独购买商业许可证。
- 许可证不可转让给其他用户/实体。
所有支持函数调用的Llama模型的使用还需遵守Meta许可证中的条款。
- Yi模型:遵循Yi许可证,自2023年11月15日起允许商业使用。
- Zephr模型:使用Ultrachat生成,依赖于OpenAI。OpenAI不允许使用其模型训练竞争性模型,因此Zephyr是否可用于商业用途尚不明确。购买者/使用者需自行承担风险。
📊 数据集
用于训练此模型的数据集可在Trelis函数调用扩展数据集中找到。
💻 推理
⚠️ 重要提示
请务必检查以下提示格式,并相应地调整推理过程!
在Google Colab中快速开始
尝试使用这个笔记本 fLlama_Inference笔记本。
文本生成推理
你可以使用 text-generation-interface 和 chat-ui 来使用此模型。
🛠️ 设置的GitHub仓库
点击此处查看设置的GitHub仓库。
🎥 查看运行视频
点击此处查看使用 llama-2-7b-chat-hf-function-calling-v2 运行的视频(注意:我们现在已更新到v2版本)。
💡 注意事项
你仍然需要编写服务器端代码来处理函数调用(这显然取决于你要使用的函数)。
🚀 Runpod快速启动
使用此模板在Runpod上快速启动:点击此处。
启动并运行后,你可以向以下地址进行查询:
https://{YOUR_POD_ID}-8080.proxy.runpod.net
然后,你可以按如下方式向API进行查询:
curl https://{YOUR_POD_ID}-8080.proxy.runpod.net/generate \
-X POST \
-d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":20}}' \
-H 'Content-Type: application/json'
或者使用 /generate_stream
进行流式传输。你也可以编写Python脚本并使用Python进行请求。更多信息请参考 text-generation-inference GitHub仓库。
💻 在本地笔记本电脑上运行
点击此处查看在本地笔记本电脑上运行的视频和Jupyter笔记本。
运行llama.cpp服务器后,你可以使用以下命令调用服务器(感谢@jdo300):
import requests
import json
# Define the roles and markers
B_FUNC, E_FUNC = "<FUNCTIONS>", "</FUNCTIONS>\n\n"
B_INST, E_INST = "[INST] ", " [/INST]" #Llama style
# B_INST, E_INST = "\n### Instruction:\n", "\n### Response:\n" #DeepSeek Coder Style
# B_INST, E_INST = "Human: ", " Assistant: " #Yi Style
# Define the function metadata
function_metadata = {
"function": "search_bing",
"description": "Search the web for content on Bing. This allows users to search online/the internet/the web for content.",
"arguments": [
{
"name": "query",
"type": "string",
"description": "The search query string"
}
]
}
# Define the user prompt
user_prompt = 'Search for the latest news on AI.'
# Format the function list and prompt
function_list = json.dumps(function_metadata, indent=4)
prompt = f"{B_FUNC}{function_list.strip()}{E_FUNC}{B_INST}{user_prompt.strip()}{E_INST}\n\n"
# Define the API endpoint
url = "http:/localhost:8080/completion"
# Send the POST request to the API server
response = requests.post(url, json={"prompt": prompt})
# Print the response
print(response.json())
📝 语法
提示模板
函数描述必须包含在函数块中。你可以将此函数块放在系统消息块之前或之后。
示例:无系统消息
# Define the roles and markers
B_FUNC, E_FUNC = "<FUNCTIONS>", "</FUNCTIONS>\n\n"
B_INST, E_INST = "[INST] ", " [/INST]" #Llama style
# B_INST, E_INST = "\n### Instruction:\n", "\n### Response:\n" #DeepSeek Coder Style
# B_INST, E_INST = "Human: ", " Assistant: " #Yi Style
functionList = {function_1_metadata}{function_2_metadata}...
user_prompt = '...'
# Format your prompt template
prompt = f"{B_FUNC}{functionList.strip()}{E_FUNC}{B_INST}{user_prompt.strip()}{E_INST}\n\n"
示例:有系统消息
# Define the roles and markers
B_FUNC, E_FUNC = "<FUNCTIONS>", "</FUNCTIONS>\n\n"
B_INST, E_INST = "[INST] ", " [/INST]" #Llama style
# B_INST, E_INST = "\n### Instruction:\n", "\n### Response:\n" #DeepSeek Coder Style
# B_INST, E_INST = "Human: ", " Assistant: " #Yi Style
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
# assuming functionList is defined as above
system_prompt = '...'
user_prompt = '...'
# Format your prompt template
prompt = f"{B_FUNC}{functionList.strip()}{E_FUNC}{B_INST}{B_SYS}{system_prompt.strip()}{E_SYS}{user_prompt.strip()}{E_INST}\n\n"
注意事项
函数块应放在序列的最开始,即在 B_INST
之前。
函数元数据模板
functionMetadata
应该是一个JSON对象的字符串表示,如下所示:
{
"function": "search_bing",
"description": "Search the web for content on Bing. This allows users to search online/the internet/the web for content.",
"arguments": [
{
"name": "query",
"type": "string",
"description": "The search query string"
}
]
}
模型的响应应该是一个格式化的JSON对象,如下所示:
{
"function": "function_name",
"arguments": {
"argument1": "argument_value",
"argument2": "argument_value"
}
}
建议处理的情况
- 无JSON对象:响应中没有JSON对象。
- 额外文本:响应中除了JSON响应还包含文本。
示例函数列表
{
"function": "search_bing",
"description": "Search the web for content on Bing. This allows users to search online/the internet/the web for content.",
"arguments": [
{
"name": "query",
"type": "string",
"description": "The search query string"
}
]
}
{
"function": "search_arxiv",
"description": "Search for research papers on ArXiv. Make use of AND, OR and NOT operators as appropriate to join terms within the query.",
"arguments": [
{
"name": "query",
"type": "string",
"description": "The search query string"
}
]
}
训练集参数类型
模型在包括字符串、数字和数组的参数类型上进行了微调。训练集包括0、1、2或3个参数的函数调用。模型规模越大,对这些类型之外的泛化能力越好。
数组参数的函数调用示例
{ "function": "delete_file", "arguments": { "fileNames": [ "Dissecting Transformer Length Extrapolation via The Lens of Receptive Field Analysis", "Luna- Linear Unified Nested Attention", "Substack_Inc_2021_2020_GAAP_Audited_Financials" ] } }
三个参数的函数调用示例
{ "function": "save_chat", "arguments": { "fileName": "KiteDiscussion", "fileDescription": "Notes on one and two stringed kites", "fileContent": "--- **Types of Kite** There are one and two string kites. The two string ones are easier to control, although you can get the cords tangled. The one-stringed ones are sometimes used for kite fights, and you lose the kite and have to run after it if the string breaks. ---" } }
🦙 Llama 2模型信息
模型详情
注意:使用此模型需遵守Meta许可证。要下载模型权重和分词器,请访问网站,接受我们的许可证后再在此处请求访问。
Meta开发并公开发布了Llama 2系列大语言模型(LLM),这是一系列预训练和微调的生成式文本模型,参数规模从70亿到700亿不等。我们的微调LLM,即Llama-2-Chat,针对对话用例进行了优化。在我们测试的大多数基准测试中,Llama-2-Chat模型的性能优于开源聊天模型,在我们的人工评估中,其在有用性和安全性方面与一些流行的闭源模型(如ChatGPT和PaLM)相当。
属性 | 详情 |
---|---|
模型开发者 | Meta |
模型变体 | Llama 2有多种参数规模——7B、13B和70B——以及预训练和微调变体。 |
输入 | 模型仅接受文本输入。 |
输出 | 模型仅生成文本。 |
模型架构 | Llama 2是一种自回归语言模型,使用优化的Transformer架构。微调版本使用监督微调(SFT)和基于人类反馈的强化学习(RLHF)来符合人类对有用性和安全性的偏好。 |
模型 | 训练数据 | 参数 | 内容长度 | GQA | 令牌 | 学习率 |
---|---|---|---|---|---|---|
Llama 2 | 公开可用在线数据的新组合 | 7B | 4k | ❌ | 2.0T | 3.0 x 10-4 |
Llama 2 | 公开可用在线数据的新组合 | 13B | 4k | ❌ | 2.0T | 3.0 x 10-4 |
Llama 2 | 公开可用在线数据的新组合 | 70B | 4k | ✅ | 2.0T | 1.5 x 10-4 |
Llama 2系列模型。令牌计数仅指预训练数据。所有模型均使用400万令牌的全局批量大小进行训练。较大的模型——70B——使用分组查询注意力(GQA)以提高推理可扩展性。
属性 | 详情 |
---|---|
模型日期 | Llama 2于2023年1月至2023年7月期间进行训练。 |
状态 | 这是一个在离线数据集上训练的静态模型。随着我们根据社区反馈改进模型安全性,未来将发布微调模型的新版本。 |
许可证 | 可在此处获取自定义商业许可证。 |
研究论文 | "Llama-2: Open Foundation and Fine-tuned Chat Models" |
预期用途
- 预期用例:Llama 2旨在用于英语的商业和研究用途。微调模型适用于类似助手的聊天,而预训练模型可用于各种自然语言生成任务。
- 超出范围的用途:以任何违反适用法律法规(包括贸易合规法律)的方式使用。使用英语以外的语言。以Llama 2的可接受使用政策和许可协议禁止的任何其他方式使用。
硬件和软件
- 训练因素:我们使用自定义训练库、Meta的研究超级集群和生产集群进行预训练。微调、注释和评估也在第三方云计算上进行。
- 碳足迹:预训练在A100 - 80GB类型的硬件上累计使用了330万个GPU小时的计算资源(TDP为350 - 400W)。估计总排放量为539 tCO2eq,其中100%由Meta的可持续发展计划进行了抵消。
模型 | 时间(GPU小时) | 功耗(W) | 碳排放(tCO2eq) |
---|---|---|---|
Llama 2 7B | 184320 | 400 | 31.22 |
Llama 2 13B | 368640 | 400 | 62.44 |
Llama 2 70B | 1720320 | 400 | 291.42 |
总计 | 3311616 | 539.00 |
预训练期间的CO2排放。时间:每个模型训练所需的总GPU时间。功耗:所用GPU设备的每个GPU的峰值功率容量,根据功率使用效率进行调整。100%的排放直接由Meta的可持续发展计划进行抵消,并且由于我们公开发布了这些模型,其他人无需承担预训练成本。
训练数据
- 概述:Llama 2在来自公开可用来源的2万亿个令牌数据上进行了预训练。微调数据包括公开可用的指令数据集,以及超过100万个新的人工注释示例。预训练和微调数据集均不包括Meta用户数据。
- 数据新鲜度:预训练数据的截止日期为2022年9月,但一些微调数据更新至2023年7月。
评估结果
在本节中,我们报告了Llama 1和Llama 2模型在标准学术基准测试中的结果。对于所有评估,我们使用内部评估库。
模型 | 规模 | 代码 | 常识推理 | 世界知识 | 阅读理解 | 数学 | MMLU | BBH | AGI评估 |
---|---|---|---|---|---|---|---|---|---|
Llama 1 | 7B | 14.1 | 60.8 | 46.2 | 58.5 | 6.95 | 35.1 | 30.3 | 23.9 |
Llama 1 | 13B | 18.9 | 66.1 | 52.6 | 62.3 | 10.9 | 46.9 | 37.0 | 33.9 |
Llama 1 | 33B | 26.0 | 70.0 | 58.4 | 67.6 | 21.4 | 57.8 | 39.8 | 41.7 |
Llama 1 | 65B | 30.7 | 70.7 | 60.5 | 68.6 | 30.8 | 63.4 | 43.5 | 47.6 |
Llama 2 | 7B | 16.8 | 63.9 | 48.9 | 61.3 | 14.6 | 45.3 | 32.6 | 29.3 |
Llama 2 | 13B | 24.5 | 66.9 | 55.4 | 65.8 | 28.7 | 54.8 | 39.4 | 39.1 |
Llama 2 | 70B | 37.5 | 71.9 | 63.6 | 69.4 | 35.2 | 68.9 | 51.2 | 54.2 |
分组学术基准测试的总体性能。代码:我们报告模型在HumanEval和MBPP上的平均pass@1分数。常识推理:我们报告PIQA、SIQA、HellaSwag、WinoGrande、ARC easy和challenge、OpenBookQA和CommonsenseQA的平均值。我们报告CommonSenseQA的7-shot结果和其他所有基准测试的0-shot结果。世界知识:我们评估模型在NaturalQuestions和TriviaQA上的5-shot性能并报告平均值。阅读理解:对于阅读理解,我们报告模型在SQuAD、QuAC和BoolQ上的0-shot平均值。数学:我们报告GSM8K(8-shot)和MATH(4-shot)基准测试的top 1平均值。
模型 | 规模 | TruthfulQA | Toxigen |
---|---|---|---|
Llama 1 | 7B | 27.42 | 23.00 |
Llama 1 | 13B | 41.74 | 23.08 |
Llama 1 | 33B | 44.19 | 22.57 |
Llama 1 | 65B | 48.71 | 21.77 |
Llama 2 | 7B | 33.29 | 21.25 |
Llama 2 | 13B | 41.86 | 26.10 |
Llama 2 | 70B | 50.18 | 24.60 |
预训练大语言模型在自动安全基准测试中的评估。对于TruthfulQA,我们报告既真实又有信息价值的生成结果的百分比(越高越好)。对于ToxiGen,我们报告有毒生成结果的百分比(越低越好)。
模型 | 规模 | TruthfulQA | Toxigen |
---|---|---|---|
Llama-2-Chat | 7B | 57.04 | 0.00 |
Llama-2-Chat | 13B | 62.18 | 0.00 |
Llama-2-Chat | 70B | 64.14 | 0.01 |
微调大语言模型在不同安全数据集上的评估。与上述指标定义相同。
伦理考虑和局限性
Llama 2是一项新技术,使用时存在风险。到目前为止进行的测试均使用英语,且无法涵盖所有场景。因此,与所有大语言模型一样,无法提前预测Llama 2的潜在输出,并且在某些情况下,模型可能会对用户提示产生不准确、有偏见或其他令人反感的响应。因此,在部署Llama 2的任何应用程序之前,开发人员应针对其特定应用对模型进行安全测试和调整。
查看负责任使用指南
请查看负责任使用指南。
报告问题
请通过以下方式之一报告模型的任何软件“漏洞”或其他问题:
- 报告模型问题:github.com/facebookresearch/llama
- 报告模型生成的问题内容:developers.facebook.com/llama_output_feedback
- 报告漏洞和安全问题:facebook.com/whitehat/info
Llama模型索引
模型 | Llama2 | Llama2-hf | Llama2-chat | Llama2-chat-hf |
---|---|---|---|---|
7B | 链接 | 链接 | 链接 | 链接 |
13B | 链接 | 链接 | 链接 | 链接 |
70B | 链接 | 链接 | 链接 | 链接 |



