模型简介
模型特点
模型能力
使用案例
语言:
- 英文 管道标签: 文本生成 推理: 否 标签:
- meta
- pytorch
- llama
- llama-2
- 函数
- 函数调用
- 分片
函数调用Llama 2 + Yi + Mistral + Zephyr + Deepseek Coder模型(版本2)
- 函数调用Llama扩展了Hugging Face的Llama 2模型,使其具备函数调用能力。
- 模型会以结构化JSON格式响应,包含函数名称和参数。
近期更新
- 2023年11月15日 -> 新增Yi 200k上下文模型,包括6B和34B版本。
- 2023年11月8日 -> 新增Zephyr测试版,这是Mistral 7B的改进版本(通过DPO实现)。
- 2023年11月6日 -> 新增Deepseek Coder 1.3B、6.7B和33B。
- 2023年10月11日 -> 新增支持函数调用的Mistral 7B。
- 2023年10月11日 -> 推送新模型,基于改进的基础数据集训练。
版本2的改进
- 简化语法:推理时仅需函数描述,无需额外指令。
- 函数描述移至系统提示之外。避免函数调用行为受系统提示训练方式的影响。
最新模型:
- Yi-6B-200k上下文支持函数调用(基础模型),(PEFT适配器)- 付费,购买链接
- Yi-34B-200k上下文支持函数调用(基础模型),(PEFT适配器),(AWQ),([GGUF - 文件位于基础模型的主分支])- 付费,购买链接
- Deepseek-Coder-1.3B-Instruct支持函数调用(基础模型),(PEFT适配器)- 付费,购买链接
- Llama-7B-chat支持函数调用(基础模型),(PEFT适配器),([GGUF - 文件位于基础模型的主分支])- 免费
- zephyr-7b-beta支持函数调用(基础模型),(PEFT适配器),([GGUF - 文件位于基础模型的主分支])- 付费,购买链接
- Mistral-7B-Instruct-v0.1支持函数调用(基础模型),(PEFT适配器)- 付费,购买链接
- Deepseek-Coder-6.7B-Instruct支持函数调用(基础模型),(PEFT适配器)- 付费,购买链接
- Deepseek-Coder-33B-Instruct支持函数调用(基础模型),(PEFT适配器)- 付费,购买链接
- CodeLlama-34B-Instruct支持函数调用(基础模型),(PEFT适配器)- 付费,购买链接
- Llama-70B-chat支持函数调用(基础模型),(PEFT适配器)- 付费,购买链接
其他模型:
不同模型适用场景
- 更大模型在处理函数调用时表现更好。交叉熵训练损失大约为: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推理笔记本
文本生成推理
可使用text-generation-interface和chat-ui运行本模型
视频演示与llama-2-7b-chat-hf-function-calling-v2配合使用(注意现已升级至v2)
仍需编写服务器端函数调用处理代码(具体取决于所需函数)。
Runpod快速入门
使用此模板快速启动runpod:链接
运行后,可向以下地址发送请求:
https://{您的POD_ID}-8080.proxy.runpod.net
API调用示例:
curl https://{您的POD_ID}-8080.proxy.runpod.net/generate \
-X POST \
-d '{"inputs":"什么是深度学习?","parameters":{"max_new_tokens":20}}' \
-H 'Content-Type: application/json'
或使用/generate_stream进行流式传输。也可编写Python脚本发起请求。更多信息参见text-generation-inferenceGitHub仓库
笔记本电脑运行
运行llama.cpp服务器后,可使用此命令调用服务器(感谢@jdo300):
import requests
import json
# 定义角色和标记
B_FUNC, E_FUNC = "<FUNCTIONS>", "</FUNCTIONS>\n\n"
B_INST, E_INST = "[INST] ", " [/INST]" #Llama风格
# B_INST, E_INST = "\n### 指令:\n", "\n### 响应:\n" #DeepSeek Coder风格
# B_INST, E_INST = "Human: ", " Assistant: " #Yi风格
# 定义函数元数据
function_metadata = {
"function": "search_bing",
"description": "在Bing上搜索网络内容。允许用户在线/互联网/网络上搜索内容。",
"arguments": [
{
"name": "query",
"type": "string",
"description": "搜索查询字符串"
}
]
}
# 定义用户提示
user_prompt = '搜索关于AI的最新新闻。'
# 格式化函数列表和提示
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"
# 定义API端点
url = "http:/localhost:8080/completion"
# 向API服务器发送POST请求
response = requests.post(url, json={"prompt": prompt})
# 打印响应
print(response.json())
语法
提示模板
函数描述必须包裹在函数块中。可将此函数块置于系统消息块之前或之后。
无系统消息示例:
# 定义角色和标记
B_FUNC, E_FUNC = "<FUNCTIONS>", "</FUNCTIONS>\n\n"
B_INST, E_INST = "[INST] ", " [/INST]" #Llama风格
# B_INST, E_INST = "\n### 指令:\n", "\n### 响应:\n" #DeepSeek Coder风格
# B_INST, E_INST = "Human: ", " Assistant: " #Yi风格
functionList = {function_1_metadata}{function_2_metadata}...
user_prompt = '...'
# 格式化提示模板
prompt = f"{B_FUNC}{functionList.strip()}{E_FUNC}{B_INST}{user_prompt.strip()}{E_INST}\n\n"
含系统消息示例:
# 定义角色和标记
B_FUNC, E_FUNC = "<FUNCTIONS>", "</FUNCTIONS>\n\n"
B_INST, E_INST = "[INST] ", " [/INST]" #Llama风格
# B_INST, E_INST = "\n### 指令:\n", "\n### 响应:\n" #DeepSeek Coder风格
# B_INST, E_INST = "Human: ", " Assistant: " #Yi风格
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
# 假设functionList如上定义
system_prompt = '...'
user_prompt = '...'
# 格式化提示模板
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对象的字符串表示,例如:
"functionMetadata": {
"function": "search_bing",
"description": "在Bing上搜索网络内容。允许用户在线/互联网/网络上搜索内容。",
"arguments": [
{
"name": "query",
"type": "string",
"description": "搜索查询字符串"
}
]
}
'''
语言模型应以如下JSON格式响应:
{
"function": "function_name",
"arguments": {
"argument1": "argument_value",
"argument2": "argument_value"
}
}
建议处理以下情况:
- 响应中无JSON对象
- 响应除JSON外还包含文本
示例functionList
{
"function": "search_bing",
"description": "在Bing上搜索网络内容。允许用户在线/互联网/网络上搜索内容。",
"arguments": [
{
"name": "query",
"type": "string",
"description": "搜索查询字符串"
}
]
}
{
"function": "search_arxiv",
"description": "在ArXiv上搜索研究论文。适当使用AND、OR和NOT运算符连接查询词。",
"arguments": [
{
"name": "query",
"type": "string",
"description": "搜索查询字符串"
}
]
}
训练集参数类型
模型针对字符串、数字和数组等参数类型进行了微调。训练集包含0、1、2或3个参数的函数调用。模型越大,对这些类型之外的泛化能力越强。
含数组的函数调用示例:
{ "function": "delete_file", "arguments": { "fileNames": [ "通过感受野分析视角剖析Transformer长度外推", "Luna-线性统一嵌套注意力", "Substack_Inc_2021_2020_GAAP审计财报" ] } }
含三个参数的函数调用示例:
{ "function": "save_chat", "arguments": { "fileName": "风筝讨论", "fileDescription": "关于单线和双线风筝的笔记", "fileContent": "--- **风筝类型** 有单线和双线风筝。双线更容易控制,虽然可能缠线。单线有时用于风筝战斗,断线时需追风筝。---" } }
~
以下是原始Llama 2模型信息...
~
Llama 2
Llama 2是一系列从70亿到700亿参数的预训练和微调生成文本模型集合。本仓库为70亿参数对话优化模型,已转换为Hugging Face Transformers格式。其他模型链接见底部索引。
模型详情
注意:使用本模型需遵守Meta许可协议。下载模型权重和分词器前,请访问官网并接受许可协议。
Meta开发并公开了Llama 2系列大语言模型(LLMs),包含从70亿到700亿参数的预训练和微调生成文本模型。我们的微调LLMs称为Llama-2-Chat,专为对话场景优化。Llama-2-Chat在多数测试基准上优于开源聊天模型,在人类评估的帮助性和安全性方面与ChatGPT和PaLM等流行闭源模型相当。
模型开发者 Meta
变体 Llama 2提供多种参数规模——7B、13B和70B——以及预训练和微调版本。
输入 模型仅接受文本输入。
输出 模型仅生成文本。
模型架构 Llama 2是基于优化Transformer架构的自回归语言模型。调优版本使用监督微调(SFT)和人类反馈强化学习(RLHF)来对齐人类偏好。
||训练数据|参数量|内容长度|GQA|Tokens|LR| |---|---|---|---|---|---


