モデル概要
モデル特徴
モデル能力
使用事例
🚀 関数呼び出し可能なLlama 2 + Yi + Mistral + Zephyr + Deepseek Coderモデル (バージョン2)
- 関数呼び出し可能なLlamaは、Hugging FaceのLlama 2モデルに関数呼び出し機能を追加したものです。
- モデルは、関数名と引数を含む構造化されたJSON引数で応答します。
✨ 主な機能
最近の更新
- 2023年11月15日 -> 6Bと34B形式のYi 200kコンテキストモデルを追加。
- 2023年11月8日 -> Mistral 7Bの改良版であるZephyr betaを追加(DPOによって実現)。
- 2023年11月6日 -> Deepseek Coder 1.3B、6.7B、33Bを追加。
- 2023年10月11日 -> 関数呼び出し機能付きのMistral 7Bを追加。
- 2023年10月11日 -> 改善されたデータセットで学習された新しいモデルを公開。
v2の改良点
- 構文の短縮:推論には関数の説明のみが必要で、追加の指示は不要です。
- 関数の説明をシステムプロンプトの外に移動。これにより、関数呼び出しの動作がシステムプロンプトの学習方法の影響を受けなくなります。
最新モデル
- 関数呼び出し機能付きの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 = VRAMが8GBしかない場合の最適なモデル(量子化で実行)。 ZephyrはMistral 7Bよりも優れていますが、商用利用のためのオープンライセンスがありません。
📄 ライセンス
関数呼び出し機能付きのLlama-7Bは、Meta Communityライセンスに従ってライセンスされています。
関数呼び出し機能付きのMistral-7B、Llama-13B、Code-llama-34b、Llama-70B、Falcon-180Bは、アクセスの購入が必要です。
- ユーザーごとに商用ライセンスの購入が必要です。
- ライセンスは他のユーザー/エンティティに譲渡できません。
関数呼び出し機能付きのすべてのLlamaモデルの使用は、Metaライセンスの条項に従う必要があります。
YiモデルはYiライセンスの対象であり、2023年11月15日以降は商用利用が許可されています。
ZephrモデルはUltrachatを使用して生成されており、これはOpenAIに依存しています。OpenAIは、競合するモデルのトレーニングに自社のモデルを使用することを許可していません。このため、Zephyrを商用利用できるかどうかは不明です。購入者/ユーザーは自己責任で使用する必要があります。
📦 データセット
このモデルのトレーニングに使用されたデータセットは、Trelis Function Calling Extended Datasetで確認できます。
💻 使用例
推論に関する注意事項
!!! 以下のプロンプト形式を確認し、推論を適切に調整してください !!!
Google Colabでのクイックスタート
このノートブック fLlama_Inference notebook を試してみてください。
テキスト生成推論
このモデルは text-generation-interface と chat-ui で使用できます。
セットアップのためのGitHubリポジトリはこちらです。
llama-2-7b-chat-hf-function-calling-v2 で動作するビデオはこちらです(現在はv2に移行しています)。
サーバー側での関数呼び出しの処理をコーディングする必要があります(使用する関数によって異なります)。
Runpodでのクイックスタート
Runpodでのクイックスタートには、このテンプレート ここ を使用できます。
起動したら、以下のURLにクエリを送信できます。
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オブジェクトの文字列表現である必要があります。
"functionMetadata": {
"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応答以外のテキストが含まれている場合
サンプル関数リスト
{
"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" ] } }
3つの引数を持つ関数呼び出しの例:
{ "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に関する情報
Llama 2は、70億から700億のパラメーター規模の事前学習済みおよび微調整済みの生成型テキストモデルのコレクションです。これは、対話ユースケースに最適化され、Hugging Face Transformersフォーマットに変換された7B微調整済みモデルのリポジトリです。他のモデルへのリンクは、下部のインデックスで見つけることができます。
モデルの詳細
注:このモデルの使用はMetaライセンスによって管理されています。モデルの重みとトークナイザーをダウンロードするには、ウェブサイト にアクセスし、ライセンスに同意してからアクセスを要求してください。
Metaは、Llama 2ファミリーの大規模言語モデル(LLM)を開発し、公開しました。これは、70億から700億のパラメーター規模の事前学習済みおよび微調整済みの生成型テキストモデルのコレクションです。私たちの微調整済みのLLMであるLlama-2-Chatは、対話ユースケースに最適化されています。Llama-2-Chatモデルは、テストしたほとんどのベンチマークでオープンソースのチャットモデルを上回り、有用性と安全性に関する人間の評価では、一部の商用チャットモデルと同等の性能を発揮します。



