聊聊大模型能识别的特定语言——ChatML


聊聊大模型能识别的特定语言——ChatML

仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接

AI的训练与推理,都是有特定的格式识别,其大概的流程如下:
ChatMarkupLanguage聊天标记语言(简称ChatML)。
ChatML[ 1]是OpenAI发布的对话标记语言。
由于指令注入攻击[ 2]会对大语言模型产生安全隐患,ChatML被设计用于保护大语言模型免于攻击。
为了抵御指令注入攻击,对话被分隔为不同的层级或角色:
系统(system)
助手(assistant)
用户(user)
ChatML明确告诉模型每个文本片段的来源,在人类文本和AI文本之间划清界限。
具体来说,通过ChatML对话标记语言,模型可以识别出指令究竟是源自开发者、用户或是自身。
拆解开来:
实际的输出
请求或是训练的格式有很多种,比如ShareGPT、Alpaca、Text等。如下:
常见的训练数据格式如下:https ://github. com/hiyouga/LLaMA-Factory/tree/main/data[ 3]
以Qwen3-32B[ 4]为例,其是如何解构数据的。
Qwen默认能处理的的输入结构
chat_template结构
vllm中的日志:
日志的内容并没有包含标签内的思考内容。这是因为qwen3的chat_template结构中,处理了思考内容。
vllm-ascend启动Qwen3时,可以指定开启思考模式
但如果在vllm级别开启了思考模式,而在dify上禁用,就无效,依旧会长时间思考。估计是和dify的设计有关系。
手动添加/nothink,禁用思考模式生效
目前的启动参数,没有添加启动思考模式的参数,在dify上启用禁用思考模式是生效的,已验证。
dify的思考模式启用禁用,应该按如下实现:
curlhttp ://localhost:8000/v1/chat/completions[ 5]-H\“Content-Type:application/json\“-d’{
\“model\“:\“Qwen/Qwen3-8B\“,
\“messages\“:[
],
\“temperature\“:0. 7,
\“top_p\“:0. 8,
\“top_k\“:20,
\“max_tokens\“:8192,
\“presence_penalty\“:1. 5,
\“chat_template_kwargs\“:{\“enable_thinking\“:false}
}’
另外思考模式可以控制输出长度,用于节省资源与思考时间,但是dify未实现:
在chat_template的内容中,最后的那里就是指定处理不启动思考模式下的chat模板:
vllm日志输出如下:
token生成的速率是真的低。vllm-ascend的性能没有MindIE好,token的生成没有mindie快,但是显存占用会少一些。正常合适的token速率是在单请求50-100token/s。
【大模型系列篇】Qwen3思考预算及思考模式切换实现原理探索_qwen3如何切换思考模式-CSDN博客[ 6]
【大模型实战篇】对Qwen3提到的thinking和nothinking混合思考模式的讨论_qwen3nothink-CSDN博客[ 7]
QwenChat[ 8]
参考资料

http ://localhost:8000/v1/chat/completions:http ://localhost:8000/v1/chat/completions

QwenChat:https ://chat. qwen.ai/c/81cc62c7-fbda-485c-bd0d-be11c760e661


文章作者: ZejunCao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ZejunCao !
  目录