跳到主要内容

函数调用

chat.h (https://github.com/ggml-org/llama.cpp/pull/9639) 添加了对 OpenAI风格函数调用 的支持,并应用于以下场景:

  • 当以 --jinja 标志启动时的 llama-server

通过原生和通用处理器的全面支持

所有模型都支持函数调用功能(参见 https://github.com/ggml-org/llama.cpp/pull/9639):

  • 支持的原生工具调用格式:

    • Llama 3.1 / 3.3(包括内置工具支持 - 支持 wolfram_alphaweb_search / brave_searchcode_interpreter 等工具名称),Llama 3.2
    • Functionary v3.1 / v3.2
    • Hermes 2/3, Qwen 2.5
    • Qwen 2.5 Coder(开发中:https://github.com/ggml-org/llama.cpp/pull/12034)
    • Mistral Nemo
    • Firefunction v2
    • Command R7B
    • DeepSeek R1(开发中/似乎不太愿意调用任何工具?)
  • 当模板未被原生格式处理器识别时支持通用工具调用(日志中会显示 Chat format: Generic)。

    • 可使用 --chat-template-file 在适当时覆盖模板(参见下方示例)
    • 通用支持可能消耗更多token,且效率低于模型的原生格式。
显示一些常用模板及其使用的格式处理器
TemplateFormat
Almawave-Velvet-14B.jinjaHermes 2 Pro
AtlaAI-Selene-1-Mini-Llama-3.1-8B.jinjaLlama 3.x
CohereForAI-aya-expanse-8b.jinjaGeneric
CohereForAI-c4ai-command-r-plus-default.jinjaGeneric
CohereForAI-c4ai-command-r-plus-rag.jinjaGeneric
CohereForAI-c4ai-command-r-plus-tool_use.jinjaGeneric
CohereForAI-c4ai-command-r7b-12-2024-default.jinjaCommand R7B (extract reasoning)
CohereForAI-c4ai-command-r7b-12-2024-rag.jinjaCommand R7B (extract reasoning)
CohereForAI-c4ai-command-r7b-12-2024-tool_use.jinjaCommand R7B (extract reasoning)
CohereForAI-c4ai-command-r7b-12-2024.jinjaGeneric
DavieLion-Llama-3.2-1B-SPIN-iter3.jinjaGeneric
Delta-Vector-Rei-12B.jinjaMistral Nemo
EpistemeAI-Mistral-Nemo-Instruct-12B-Philosophy-Math.jinjaMistral Nemo
FlofloB-83k_continued_pretraining_Qwen2.5-0.5B-Instruct_Unsloth_merged_16bit.jinjaHermes 2 Pro
FlofloB-test_continued_pretraining_Phi-3-mini-4k-instruct_Unsloth_merged_16bit.jinjaGeneric
HelpingAI-HAI-SER.jinjaGeneric
HuggingFaceTB-SmolLM2-1.7B-Instruct.jinjaGeneric
HuggingFaceTB-SmolLM2-135M-Instruct.jinjaGeneric
HuggingFaceTB-SmolLM2-360M-Instruct.jinjaGeneric
INSAIT-Institute-BgGPT-Gemma-2-27B-IT-v1.0.jinjaGeneric
Ihor-Text2Graph-R1-Qwen2.5-0.5b.jinjaHermes 2 Pro
Infinigence-Megrez-3B-Instruct.jinjaGeneric
Josephgflowers-TinyLlama_v1.1_math_code-world-test-1.jinjaGeneric
LGAI-EXAONE-EXAONE-3.5-2.4B-Instruct.jinjaGeneric
LGAI-EXAONE-EXAONE-3.5-7.8B-Instruct.jinjaGeneric
LatitudeGames-Wayfarer-12B.jinjaGeneric
Magpie-Align-Llama-3-8B-Magpie-Align-v0.1.jinjaGeneric
Magpie-Align-Llama-3.1-8B-Magpie-Align-v0.1.jinjaGeneric
MaziyarPanahi-calme-3.2-instruct-78b.jinjaGeneric
MiniMaxAI-MiniMax-Text-01.jinjaGeneric
MiniMaxAI-MiniMax-VL-01.jinjaGeneric
NaniDAO-deepseek-r1-qwen-2.5-32B-ablated.jinjaDeepSeek R1 (extract reasoning)
NexaAIDev-Octopus-v2.jinjaGeneric
NousResearch-Hermes-2-Pro-Llama-3-8B-default.jinjaGeneric
NousResearch-Hermes-2-Pro-Llama-3-8B-tool_use.jinjaHermes 2 Pro
NousResearch-Hermes-2-Pro-Mistral-7B-default.jinjaGeneric
NousResearch-Hermes-2-Pro-Mistral-7B-tool_use.jinjaHermes 2 Pro
NousResearch-Hermes-3-Llama-3.1-70B-default.jinjaGeneric
NousResearch-Hermes-3-Llama-3.1-70B-tool_use.jinjaHermes 2 Pro
NovaSky-AI-Sky-T1-32B-Flash.jinjaHermes 2 Pro
NovaSky-AI-Sky-T1-32B-Preview.jinjaHermes 2 Pro
OnlyCheeini-greesychat-turbo.jinjaGeneric
Orenguteng-Llama-3.1-8B-Lexi-Uncensored-V2.jinjaLlama 3.x
OrionStarAI-Orion-14B-Chat.jinjaGeneric
PowerInfer-SmallThinker-3B-Preview.jinjaGeneric
PrimeIntellect-INTELLECT-1-Instruct.jinjaGeneric
Qwen-QVQ-72B-Preview.jinjaGeneric
Qwen-QwQ-32B-Preview.jinjaHermes 2 Pro
Qwen-Qwen1.5-7B-Chat.jinjaGeneric
Qwen-Qwen2-7B-Instruct.jinjaGeneric
Qwen-Qwen2-VL-72B-Instruct.jinjaGeneric
Qwen-Qwen2-VL-7B-Instruct.jinjaGeneric
Qwen-Qwen2.5-0.5B.jinjaHermes 2 Pro
Qwen-Qwen2.5-1.5B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-14B-Instruct-1M.jinjaHermes 2 Pro
Qwen-Qwen2.5-14B.jinjaHermes 2 Pro
Qwen-Qwen2.5-32B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-32B.jinjaHermes 2 Pro
Qwen-Qwen2.5-3B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-72B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-7B-Instruct-1M.jinjaHermes 2 Pro
Qwen-Qwen2.5-7B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-7B.jinjaHermes 2 Pro
Qwen-Qwen2.5-Coder-32B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-Coder-7B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-Math-1.5B.jinjaHermes 2 Pro
Qwen-Qwen2.5-Math-7B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-VL-3B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-VL-72B-Instruct.jinjaHermes 2 Pro
Qwen-Qwen2.5-VL-7B-Instruct.jinjaHermes 2 Pro
RWKV-Red-Team-ARWKV-7B-Preview-0.1.jinjaHermes 2 Pro
SakanaAI-TinySwallow-1.5B-Instruct.jinjaHermes 2 Pro
SakanaAI-TinySwallow-1.5B.jinjaHermes 2 Pro
Sao10K-70B-L3.3-Cirrus-x1.jinjaLlama 3.x
SentientAGI-Dobby-Mini-Leashed-Llama-3.1-8B.jinjaLlama 3.x
SentientAGI-Dobby-Mini-Unhinged-Llama-3.1-8B.jinjaLlama 3.x
Steelskull-L3.3-Damascus-R1.jinjaLlama 3.x
Steelskull-L3.3-MS-Nevoria-70b.jinjaLlama 3.x
Steelskull-L3.3-Nevoria-R1-70b.jinjaLlama 3.x
THUDM-glm-4-9b-chat.jinjaGeneric
THUDM-glm-edge-1.5b-chat.jinjaGeneric
Tarek07-Progenitor-V1.1-LLaMa-70B.jinjaLlama 3.x
TheBloke-FusionNet_34Bx2_MoE-AWQ.jinjaGeneric
TinyLlama-TinyLlama-1.1B-Chat-v1.0.jinjaGeneric
UCLA-AGI-Mistral7B-PairRM-SPPO-Iter3.jinjaGeneric
ValiantLabs-Llama3.1-8B-Enigma.jinjaLlama 3.x
abacusai-Fewshot-Metamath-OrcaVicuna-Mistral.jinjaGeneric
ai21labs-AI21-Jamba-1.5-Large.jinjaGeneric
allenai-Llama-3.1-Tulu-3-405B-SFT.jinjaGeneric
allenai-Llama-3.1-Tulu-3-405B.jinjaGeneric
allenai-Llama-3.1-Tulu-3-8B.jinjaGeneric
arcee-ai-Virtuoso-Lite.jinjaHermes 2 Pro
arcee-ai-Virtuoso-Medium-v2.jinjaHermes 2 Pro
arcee-ai-Virtuoso-Small-v2.jinjaHermes 2 Pro
avemio-GRAG-NEMO-12B-ORPO-HESSIAN-AI.jinjaGeneric
bespokelabs-Bespoke-Stratos-7B.jinjaHermes 2 Pro
bfuzzy1-acheron-m1a-llama.jinjaGeneric
bofenghuang-vigogne-2-70b-chat.jinjaGeneric
bytedance-research-UI-TARS-72B-DPO.jinjaGeneric
bytedance-research-UI-TARS-7B-DPO.jinjaGeneric
bytedance-research-UI-TARS-7B-SFT.jinjaGeneric
carsenk-phi3.5_mini_exp_825_uncensored.jinjaGeneric
cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese.jinjaDeepSeek R1 (extract reasoning)
cyberagent-DeepSeek-R1-Distill-Qwen-32B-Japanese.jinjaDeepSeek R1 (extract reasoning)
databricks-dbrx-instruct.jinjaGeneric
deepseek-ai-DeepSeek-Coder-V2-Instruct.jinjaGeneric
deepseek-ai-DeepSeek-Coder-V2-Lite-Base.jinjaGeneric
deepseek-ai-DeepSeek-Coder-V2-Lite-Instruct.jinjaGeneric
deepseek-ai-DeepSeek-R1-Distill-Llama-70B.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-R1-Distill-Llama-8B.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-R1-Distill-Qwen-1.5B.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-R1-Distill-Qwen-14B.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-R1-Distill-Qwen-32B.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-R1-Distill-Qwen-7B.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-R1-Zero.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-R1.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-V2-Lite.jinjaGeneric
deepseek-ai-DeepSeek-V2.5.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-DeepSeek-V3.jinjaDeepSeek R1 (extract reasoning)
deepseek-ai-deepseek-coder-33b-instruct.jinjaGeneric
deepseek-ai-deepseek-coder-6.7b-instruct.jinjaGeneric
deepseek-ai-deepseek-coder-7b-instruct-v1.5.jinjaGeneric
deepseek-ai-deepseek-llm-67b-chat.jinjaGeneric
deepseek-ai-deepseek-llm-7b-chat.jinjaGeneric
dicta-il-dictalm2.0-instruct.jinjaGeneric
ehristoforu-Falcon3-8B-Franken-Basestruct.jinjaHermes 2 Pro
fireworks-ai-llama-3-firefunction-v2.jinjaFireFunction v2
godlikehhd-alpaca_data_sampled_ifd_new_5200.jinjaHermes 2 Pro
godlikehhd-alpaca_data_score_max_0.7_2600.jinjaHermes 2 Pro
google-gemma-2-27b-it.jinjaGeneric
google-gemma-2-2b-it.jinjaGeneric
google-gemma-2-2b-jpn-it.jinjaGeneric
google-gemma-7b-it.jinjaGeneric
huihui-ai-DeepSeek-R1-Distill-Llama-70B-abliterated.jinjaDeepSeek R1 (extract reasoning)
huihui-ai-DeepSeek-R1-Distill-Llama-8B-abliterated.jinjaDeepSeek R1 (extract reasoning)
huihui-ai-DeepSeek-R1-Distill-Qwen-14B-abliterated-v2.jinjaDeepSeek R1 (extract reasoning)
huihui-ai-DeepSeek-R1-Distill-Qwen-32B-abliterated.jinjaDeepSeek R1 (extract reasoning)
huihui-ai-DeepSeek-R1-Distill-Qwen-7B-abliterated-v2.jinjaDeepSeek R1 (extract reasoning)
huihui-ai-Qwen2.5-14B-Instruct-1M-abliterated.jinjaHermes 2 Pro
ibm-granite-granite-3.1-8b-instruct.jinjaGeneric
indischepartij-MiniCPM-3B-OpenHermes-2.5-v2.jinjaGeneric
inflatebot-MN-12B-Mag-Mell-R1.jinjaGeneric
jinaai-ReaderLM-v2.jinjaGeneric
kms7530-chemeng_qwen-math-7b_24_1_100_1_nonmath.jinjaHermes 2 Pro
knifeayumu-Cydonia-v1.3-Magnum-v4-22B.jinjaMistral Nemo
langgptai-qwen1.5-7b-chat-sa-v0.1.jinjaGeneric
lightblue-DeepSeek-R1-Distill-Qwen-7B-Japanese.jinjaDeepSeek R1 (extract reasoning)
mattshumer-Reflection-Llama-3.1-70B.jinjaGeneric
meetkai-functionary-medium-v3.1.jinjaFunctionary v3.1 Llama 3.1
meetkai-functionary-medium-v3.2.jinjaFunctionary v3.2
meta-llama-Llama-2-7b-chat-hf.jinjaGeneric
meta-llama-Llama-3.1-8B-Instruct.jinjaLlama 3.x
meta-llama-Llama-3.2-11B-Vision-Instruct.jinjaLlama 3.x
meta-llama-Llama-3.2-1B-Instruct.jinjaLlama 3.x
meta-llama-Llama-3.2-3B-Instruct.jinjaLlama 3.x
meta-llama-Llama-3.3-70B-Instruct.jinjaLlama 3.x
meta-llama-Meta-Llama-3-8B-Instruct.jinjaGeneric
meta-llama-Meta-Llama-3.1-8B-Instruct.jinjaLlama 3.x
microsoft-Phi-3-medium-4k-instruct.jinjaGeneric
microsoft-Phi-3-mini-4k-instruct.jinjaGeneric
microsoft-Phi-3-small-8k-instruct.jinjaGeneric
microsoft-Phi-3.5-mini-instruct.jinjaGeneric
microsoft-Phi-3.5-vision-instruct.jinjaGeneric
microsoft-phi-4.jinjaGeneric
migtissera-Tess-3-Mistral-Nemo-12B.jinjaGeneric
ministral-Ministral-3b-instruct.jinjaGeneric
mistralai-Codestral-22B-v0.1.jinjaGeneric
mistralai-Mistral-7B-Instruct-v0.1.jinjaGeneric
mistralai-Mistral-7B-Instruct-v0.2.jinjaGeneric
mistralai-Mistral-7B-Instruct-v0.3.jinjaMistral Nemo
mistralai-Mistral-Large-Instruct-2407.jinjaMistral Nemo
mistralai-Mistral-Large-Instruct-2411.jinjaGeneric
mistralai-Mistral-Nemo-Instruct-2407.jinjaMistral Nemo
mistralai-Mistral-Small-24B-Instruct-2501.jinjaGeneric
mistralai-Mixtral-8x7B-Instruct-v0.1.jinjaGeneric
mkurman-Qwen2.5-14B-DeepSeek-R1-1M.jinjaHermes 2 Pro
mlabonne-AlphaMonarch-7B.jinjaGeneric
mlx-community-Josiefied-Qwen2.5-0.5B-Instruct-abliterated-v1-float32.jinjaHermes 2 Pro
mlx-community-Qwen2.5-VL-7B-Instruct-8bit.jinjaHermes 2 Pro
mobiuslabsgmbh-DeepSeek-R1-ReDistill-Qwen-1.5B-v1.1.jinjaDeepSeek R1 (extract reasoning)
netcat420-MFANNv0.20.jinjaGeneric
netcat420-MFANNv0.24.jinjaGeneric
netease-youdao-Confucius-o1-14B.jinjaHermes 2 Pro
nvidia-AceMath-7B-RM.jinjaHermes 2 Pro
nvidia-Eagle2-1B.jinjaHermes 2 Pro
nvidia-Eagle2-9B.jinjaHermes 2 Pro
nvidia-Llama-3.1-Nemotron-70B-Instruct-HF.jinjaLlama 3.x
onnx-community-DeepSeek-R1-Distill-Qwen-1.5B-ONNX.jinjaDeepSeek R1 (extract reasoning)
open-thoughts-OpenThinker-7B.jinjaHermes 2 Pro
openchat-openchat-3.5-0106.jinjaGeneric
pankajmathur-orca_mini_v6_8b.jinjaGeneric
princeton-nlp-Mistral-7B-Base-SFT-RDPO.jinjaGeneric
princeton-nlp-Mistral-7B-Instruct-DPO.jinjaGeneric
princeton-nlp-Mistral-7B-Instruct-RDPO.jinjaGeneric
prithivMLmods-Bellatrix-Tiny-1.5B-R1.jinjaHermes 2 Pro
prithivMLmods-Bellatrix-Tiny-1B-R1.jinjaLlama 3.x
prithivMLmods-Bellatrix-Tiny-1B-v3.jinjaGeneric

| prithivMLmods-Bellatrix-Tiny-3B-R1.jinja | Llama 3.x | | prithivMLmods-Blaze-14B-xElite.jinja | 通用格式 | | prithivMLmods-Calcium-Opus-14B-Elite2-R1.jinja | Hermes 2 Pro | | prithivMLmods-Calme-Ties-78B.jinja | 通用格式 | | prithivMLmods-Calme-Ties2-78B.jinja | 通用格式 | | prithivMLmods-Calme-Ties3-78B.jinja | 通用格式 | | prithivMLmods-ChemQwen2-vL.jinja | 通用格式 | | prithivMLmods-GWQ2b.jinja | 通用格式 | | prithivMLmods-LatexMind-2B-Codec.jinja | 通用格式 | | prithivMLmods-Llama-3.2-6B-AlgoCode.jinja | Llama 3.x | | prithivMLmods-Megatron-Opus-14B-Exp.jinja | Hermes 2 Pro | | prithivMLmods-Megatron-Opus-14B-Stock.jinja | Hermes 2 Pro | | prithivMLmods-Megatron-Opus-7B-Exp.jinja | Hermes 2 Pro | | prithivMLmods-Omni-Reasoner-Merged.jinja | Hermes 2 Pro | | prithivMLmods-Omni-Reasoner4-Merged.jinja | Hermes 2 Pro | | prithivMLmods-Primal-Opus-14B-Optimus-v1.jinja | Hermes 2 Pro | | prithivMLmods-QwQ-Math-IO-500M.jinja | Hermes 2 Pro | | prithivMLmods-Qwen-7B-Distill-Reasoner.jinja | DeepSeek R1(提取推理过程)| | prithivMLmods-Qwen2.5-1.5B-DeepSeek-R1-Instruct.jinja | Hermes 2 Pro | | prithivMLmods-Qwen2.5-14B-DeepSeek-R1-1M.jinja | Hermes 2 Pro | | prithivMLmods-Qwen2.5-32B-DeepSeek-R1-Instruct.jinja | Hermes 2 Pro | | prithivMLmods-Qwen2.5-7B-DeepSeek-R1-1M.jinja | Hermes 2 Pro | | prithivMLmods-Triangulum-v2-10B.jinja | Hermes 2 Pro | | qingy2024-Falcon3-2x10B-MoE-Instruct.jinja | Hermes 2 Pro | | rubenroy-Zurich-14B-GCv2-5m.jinja | Hermes 2 Pro | | rubenroy-Zurich-7B-GCv2-5m.jinja | Hermes 2 Pro | | silma-ai-SILMA-Kashif-2B-Instruct-v1.0.jinja | 通用格式 | | simplescaling-s1-32B.jinja | Hermes 2 Pro | | sometimesanotion-Lamarck-14B-v0.7.jinja | Hermes 2 Pro | | sonthenguyen-zephyr-sft-bnb-4bit-DPO-mtbr-180steps.jinja | 通用格式 | | sthenno-tempesthenno-icy-0130.jinja | 通用格式 | | sumink-qwft.jinja | Hermes 2 Pro | | teknium-OpenHermes-2.5-Mistral-7B.jinja | 通用格式 | | thirdeyeai-elevate360m.jinja | 通用格式 | | tiiuae-Falcon3-10B-Instruct.jinja | Hermes 2 Pro | | unsloth-DeepSeek-R1-Distill-Llama-8B-unsloth-bnb-4bit.jinja | DeepSeek R1(提取推理过程)| | unsloth-DeepSeek-R1-Distill-Llama-8B.jinja | DeepSeek R1(提取推理过程)| | unsloth-DeepSeek-R1.jinja | DeepSeek R1(提取推理过程)| | unsloth-Mistral-Small-24B-Instruct-2501-unsloth-bnb-4bit.jinja | 通用格式 | | upstage-solar-pro-preview-instruct.jinja | 通用格式 | | whyhow-ai-PatientSeek.jinja | 通用格式 | | xwen-team-Xwen-72B-Chat.jinja | Hermes 2 Pro | | xwen-team-Xwen-7B-Chat.jinja | Hermes 2 Pro |

可通过以下命令生成此表格:

./build/bin/test-chat ../minja/build/tests/*.jinja 2>/dev/null

使用方法 - 需要支持工具调用的 Jinja 模板

首先,使用任意模型启动服务器,但要确保该模型具有支持工具调用的模板:你可以通过检查 http://localhost:8080/props 中的 chat_templatechat_template_tool_use 属性来验证这一点。

以下是一些已知可用的模型(在需要时会覆盖聊天模板):

# 原生支持:

llama-server --jinja -fa -hf bartowski/Qwen2.5-7B-Instruct-GGUF:Q4_K_M
llama-server --jinja -fa -hf bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q6_K_L
llama-server --jinja -fa -hf bartowski/Llama-3.3-70B-Instruct-GGUF:Q4_K_M

# DeepSeek R1 原生支持效果最佳,使用我们的模板覆盖(官方模板存在问题,尽管我们提供了解决方案)

llama-server --jinja -fa -hf bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF:Q6_K_L \
--chat-template-file models/templates/llama-cpp-deepseek-r1.jinja

llama-server --jinja -fa -hf bartowski/DeepSeek-R1-Distill-Qwen-32B-GGUF:Q4_K_M \
--chat-template-file models/templates/llama-cpp-deepseek-r1.jinja

# 这些 GGUF 文件的原生支持需要正确的模板:

llama-server --jinja -fa -hf bartowski/functionary-small-v3.2-GGUF:Q4_K_M
--chat-template-file models/templates/meetkai-functionary-medium-v3.2.jinja

llama-server --jinja -fa -hf bartowski/Hermes-2-Pro-Llama-3-8B-GGUF:Q4_K_M \
--chat-template-file models/templates/NousResearch-Hermes-2-Pro-Llama-3-8B-tool_use.jinja

llama-server --jinja -fa -hf bartowski/Hermes-3-Llama-3.1-8B-GGUF:Q4_K_M \
--chat-template-file models/templates/NousResearch-Hermes-3-Llama-3.1-8B-tool_use.jinja

llama-server --jinja -fa -hf bartowski/firefunction-v2-GGUF -hff firefunction-v2-IQ1_M.gguf \
--chat-template-file models/templates/fireworks-ai-llama-3-firefunction-v2.jinja

llama-server --jinja -fa -hf bartowski/c4ai-command-r7b-12-2024-GGUF:Q6_K_L \
--chat-template-file models/templates/CohereForAI-c4ai-command-r7b-12-2024-tool_use.jinja

# 通用格式支持
llama-server --jinja -fa -hf bartowski/phi-4-GGUF:Q4_0
llama-server --jinja -fa -hf bartowski/gemma-2-2b-it-GGUF:Q8_0
llama-server --jinja -fa -hf bartowski/c4ai-command-r-v01-GGUF:Q2_K

要从原始 HuggingFace 仓库获取官方模板,你可以使用 scripts/get_chat_template.py(参见 models/templates/README.md 中的示例调用)

提示: 如果没有官方的 tool_use Jinja 模板,你可能需要设置 --chat-template chatml 来使用适用于许多模型的默认格式(效果因模型而异!),或者编写自己的模板(例如,我们为 DeepSeek R1 蒸馏版提供了自定义的 llama-cpp-deepseek-r1.jinja

注意: 请注意极端的 KV 量化(例如 -ctk q4_0),它们可能会大幅降低模型的工具调用性能。

在命令行中测试(或使用任何可以使用 OpenAI 兼容 API 后端的库/软件):

curl http://localhost:8080/v1/chat/completions -d '{
"model": "gpt-3.5-turbo",
"tools": [
{
"type":"function",
"function":{
"name":"python",
"description":"在 ipython 解释器中运行代码,并在60秒后返回执行结果。",
"parameters":{
"type":"object",
"properties":{
"code":{
"type":"string",
"description":"要在 ipython 解释器中运行的代码。"
}
},
"required":["code"]
}
}
}
],
"messages": [
{
"role": "user",
"content": "用 Python 打印一条 hello world 消息。"
}
]
}'

curl http://localhost:8080/v1/chat/completions -d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system", "content": "你是一个使用工具/函数的聊天机器人。不要过度思考问题。"},
{"role": "user", "content": "伊斯坦布尔的天气如何?"}
],
"tools": [{
"type":"function",
"function":{
"name":"get_current_weather",
"description":"获取指定位置的当前天气",
"parameters":{
"type":"object",
"properties":{
"location":{
"type":"string",
"description":"城市和国家/州,例如 `San Francisco, CA` 或 `Paris, France`"
}
},
"required":["location"]
}
}
}]
}'
显示输出
{
"choices": [
{
"finish_reason": "tool",
"index": 0,
"message": {
"content": null,
"tool_calls": [
{
"name": "python",
"arguments": "{\"code\":\" \\nprint(\\\"Hello, World!\\\")\"}"
}
],
"role": "assistant"
}
}
],
"created": 1727287211,
"model": "gpt-3.5-turbo",
"object": "chat.completion",
"usage": {
"completion_tokens": 16,
"prompt_tokens": 44,
"total_tokens": 60
},
"id": "chatcmpl-Htbgh9feMmGM0LEH2hmQvwsCxq3c6Ni8"
}