self-llm 的 MiniCPM5-1B 如何启用 XML 风格工具调用与 vLLM tool-call-parser
【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型(MLLM)教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm
如果你已经在用 vLLM 部署MiniCPM5-1B,希望模型在收到带tools的对话请求时能输出工具调用,并且让客户端直接拿到 OpenAI 兼容的tool_calls字段,而不是自己去解析原始文本,那么需要做的就是:启动 vLLM 服务时加上--tool-call-parser minicpm5。MiniCPM5-1B原生以 XML 风格输出工具调用(形如<function ... </function>),vLLM 较新版本内置的minicpm5解析器负责把这种输出转换成tool_calls。本文基于 self-llm 仓库中 01-MiniCPM5-1B-vLLM 部署调用 的实测流程整理,覆盖从环境准备到发起工具调用请求的完整路径。
文档实测基础环境为 ubuntu 22.04、python 3.12、NVIDIA 驱动 580.105.08、RTX 4090 D(24G)、torch 2.11.0+cu128、vllm 0.23.0。默认你已配置好 PyTorch(CUDA)环境,如未配置需先自行安装。
准备:安装依赖并下载模型
依赖安装命令(文档同时给出清华 PyPI 镜像源配置):
python -m pip install --upgrade pip pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install modelscope pip install "transformers>=5.6" pip install "vllm>=0.21" pip install openai其中vllm>=0.21是文档给出的安装版本要求;vLLM 文档同时说明“较新版本支持minicpm5解析器”,其实测环境使用的 vllm 为 0.23.0。
如果 vLLM 启动时报ModuleNotFoundError: No module named 'flash_attn.ops',文档给出的原因是环境里装了flash-attn-4(会留下一个空的flash_attn命名空间包),而 vLLM 的 rotary 模块检测到flash_attn后会尝试导入其.ops子模块。解决办法是卸载该包并删除残留的空目录——注意下面第二条命令会删除 site-packages 下的flash_attn目录,仅适用于确认它是由错误安装的flash-attn-4留下的空目录的情况;删除后 vLLM 会自动回退到自带实现:
pip uninstall flash-attn-4 rm -rf $(python -c "import site;print(site.getsitepackages()[0])")/flash_attn模型下载使用 modelscope 的snapshot_download。新建model_download.py:
# model_download.py from modelscope import snapshot_download model_dir = snapshot_download('OpenBMB/MiniCPM5-1B', cache_dir='/root/autodl-tmp') print(f"模型下载完成,保存路径为:{model_dir}")执行python model_download.py。cache_dir需改成你自己的模型下载路径;本文后续命令以文档中的/root/autodl-tmp/OpenBMB/MiniCPM5-1B为模型路径,如你的路径不同请相应替换。
启动 vLLM 服务:加 --tool-call-parser minicpm5
文档给出的基础启动命令为:
vllm serve /root/autodl-tmp/OpenBMB/MiniCPM5-1B \ --served-model-name MiniCPM5-1B \ --max-model-len 4096 \ --gpu-memory-utilization 0.6 \ --trust-remote-code \ --host 0.0.0.0 --port 8000常用参数(来自文档说明):
--host/--port:服务地址与端口--model:模型路径(本例写在serve后面作为位置参数)--served-model-name:服务对外的模型名称--max-model-len:最大上下文长度,1B 模型在 24G 显存上可设4096或更大--gpu-memory-utilization:显存占用比例,1B 模型很小,0.6 即可--trust-remote-code:信任远程代码
启用工具调用时,在命令中追加--tool-call-parser minicpm5,即:
vllm serve /root/autodl-tmp/OpenBMB/MiniCPM5-1B \ --served-model-name MiniCPM5-1B \ --max-model-len 4096 \ --gpu-memory-utilization 0.6 \ --trust-remote-code \ --host 0.0.0.0 --port 8000 \ --tool-call-parser minicpm5验证服务启动成功
vLLM 启动日志中,模型架构被识别为LlamaForCausalLM(这是 MiniCPM5-1B 的标准架构,无需自定义算子)。出现Application startup complete.即说明服务成功启动。文档实测启动日志节选(示例输出):
(APIServer) INFO [model.py:611] Resolved architecture: LlamaForCausalLM (EngineCore) INFO [core.py:113] Initializing a V1 LLM engine (v0.23.0) ... (EngineCore) INFO [default_loader.py:397] Loading weights took 0.52 seconds (EngineCore) INFO [model_runner.py:319] Model loading took 2.09 GiB and 2.14 seconds (APIServer) INFO: Application startup complete.首次启动会触发torch.compile编译(约 19s),编译结果会缓存,后续启动更快。
再确认模型已注册:
curl http://localhost:8000/v1/models文档实测返回值(示例输出):
{ "object": "list", "data": [ { "id": "MiniCPM5-1B", "object": "model", "owned_by": "vllm", "root": "/root/autodl-tmp/OpenBMB/MiniCPM5-1B", "max_model_len": 4096 } ] }返回中id为MiniCPM5-1B、max_model_len为 4096,即与启动参数一致。
发起工具调用请求并观察 tool_calls
vLLM 服务兼容 OpenAI API 协议。下面这段带tools的请求示例取自同目录的 02-MiniCPM5-1B-SGLang 部署调用(同一模型、同一 OpenAI 兼容接口,base_url指向本机 8000 端口,对 vLLM 服务同样适用):
from openai import OpenAI client = OpenAI(api_key="EMPTY", base_url="http://localhost:8000/v1") tools = [{ "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的天气", "parameters": { "type": "object", "properties": {"city": {"type": "string", "description": "城市名"}}, "required": ["city"], }, }, }] response = client.chat.completions.create( model="MiniCPM5-1B", messages=[{"role": "user", "content": "北京今天天气怎么样?"}], tools=tools, ) print(response.choices[0].message.tool_calls)判断方式按文档对解析器职责的描述:minicpm5解析器的作用就是把模型输出的 XML 风格<function ... </function>转换为 OpenAI 兼容的tool_calls。因此请求里传入tools后,观察返回的message.tool_calls是否出现get_weather的调用结构,即可确认解析链路生效。文档没有给出 vLLM 下tool_calls的实测返回示例,请勿假定固定输出。
另外,vLLM 文档提到MiniCPM5-1B内置think模板,可通过extra_body={"chat_template_kwargs": {"enable_thinking": False}}按请求级别关闭思考模式(文档推荐非思考模式参数为temperature=0.7, top_p=0.95)。若发现content开头先输出一段think ... /think再给回答,这是该模型后训练形成的习惯,属文档记录的已知现象。
限制与边界说明
- 后端选择:SGLang 部署文档中引用了官方提示——工具调用场景下SGLang 是推荐后端,其内置
minicpm5解析器同样把 XML 风格输出转换为tool_calls,参数写法为--tool-call-parser minicpm5(或--tool-call-parser auto)。vLLM 侧文档的表述是“较新版本支持minicpm5解析器”,具体用法指向 MiniCPM 官方 cookbook。两条路径都可行,选型上文档明确把 SGLang 列为推荐。 - 版本前提:
minicpm5解析器依赖较新版本的 vLLM。文档依赖要求为vllm>=0.21,实测环境为 0.23.0;如果你的 vLLM 版本启动时不识别--tool-call-parser minicpm5,说明版本不在支持范围内,需要先升级 vLLM 或改用 SGLang 路径。 - 本文的启动日志与接口返回均来自文档实测环境(RTX 4090 D 24G、vllm 0.23.0),在你的硬件与版本上数值(加载耗时、KV cache 大小等)会不同,这些日志只用于判断启动流程走到哪一步,不作为固定校验值。
【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型(MLLM)教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考