模型概述
模型特點
模型能力
使用案例
🚀 函數調用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 | 鏈接 | 鏈接 | 鏈接 | 鏈接 |



