DeepSeek-R1-Qwen-32B bpe算法 ,分词器配置 LlamaTokenizerFast

这是一个 DeepSeek 模型的 tokenizer 配置文件(tokenizer_config.json)。让我为你解析其中的关键配置:

bash 复制代码
{
  "add_bos_token": true,
  "add_eos_token": false,
  "bos_token": {
    "__type": "AddedToken",
    "content": "<|begin▁of▁sentence|>",
    "lstrip": false,
    "normalized": true,
    "rstrip": false,
    "single_word": false
  },
  "clean_up_tokenization_spaces": false,
  "eos_token": {
    "__type": "AddedToken",
    "content": "<|end▁of▁sentence|>",
    "lstrip": false,
    "normalized": true,
    "rstrip": false,
    "single_word": false
  },
  "legacy": true,
  "model_max_length": 16384,
  "pad_token": {
    "__type": "AddedToken",
    "content": "<|end▁of▁sentence|>",
    "lstrip": false,
    "normalized": true,
    "rstrip": false,
    "single_word": false
  },
  "sp_model_kwargs": {},
  "unk_token": null,
  "tokenizer_class": "LlamaTokenizerFast",
  "chat_template": "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '</think>' in content %}{% set content = content.split('</think>')[-1] %}{% endif %}{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>'}}{% endif %}"
}

基本信息

属性 值 说明
tokenizer_class LlamaTokenizerFast 基于 Fast Llama Tokenizer
model_max_length 16384 最大上下文长度 16K tokens
legacy true 使用传统模式

特殊 Token

Token 内容 用途
BOS (开始符) <|begin▁of▁sentence|> 序列开始标记
EOS (结束符) <|end▁of▁sentence|> 序列结束标记
PAD (填充符) 与 EOS 相同 填充用,与结束符共用

注意:使用 ▁(下划线)表示 SentencePiece 中的空格标记,这是 SPM 的标准做法。

Chat Template 结构

这个 Jinja2 模板定义了对话格式,支持工具调用(Function Calling):

角色标记

  • User : <|User|>
  • Assistant : <|Assistant|>

工具调用标记

复制代码
<|tool▁calls▁begin|>     # 工具调用开始
<|tool▁call▁begin|>       # 单个工具开始
<|tool▁sep|>              # 分隔符
<|tool▁call▁end|>         # 单个工具结束
<|tool▁calls▁end|>        # 工具调用结束

工具输出标记

复制代码
<|tool▁outputs▁begin|>    # 工具输出开始
<|tool▁output▁begin|>     # 单个输出开始
<|tool▁output▁end|>       # 单个输出结束
<|tool▁outputs▁end|>      # 工具输出结束

对话格式示例

普通对话:

复制代码
<|begin▁of▁sentence|>系统提示<|User|>用户输入<|Assistant|>助手回复<|end▁of▁sentence|>

工具调用:

复制代码
<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>function<|tool▁sep|>工具名
```json
{参数}
```<|tool▁call▁end|><|tool▁calls▁end|><|end▁of�sentence|>

关键特性

  1. 支持工具调用:完整的 function calling 标记体系
  2. 生成控制 :add_generation_prompt 控制是否在末尾添加 <|Assistant|> 提示模型继续生成
  3. 特殊处理 :如果助手回复包含 ⏎(特殊换行符),会取其后的内容
  4. 无 UNK token :unk_token 为 null,遇到未知字符可能有特定处理策略

这是 DeepSeek-V2/V3 或类似模型的典型配置,支持 16K 上下文和原生工具调用能力。

相关推荐
知行产研2 分钟前
紫创智械:工程机械具身智能的「非运输」破局者
人工智能
微订校园外卖系统31 分钟前
校园代取快递系统选型:现成系统与定制开发的技术核对项
大数据·运维·人工智能·外卖系统·本地生活·微订
QXWZ_IA35 分钟前
管道GIS测绘如何实现自动化成图:三种成图方式怎么选
运维·人工智能·安全·自动化
分布式存储与RustFS1 小时前
OpenObserve 的日志别堆本地盘:用 RustFS 当它的对象存储底座
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
严肃小白兔1 小时前
第 04/24 期:深度学习中的损失函数及其数学解释
人工智能·深度学习
无责任此方_修行中1 小时前
「不止技术」AIE 2026 会后感悟
人工智能·后端·ai编程
BYSJMG1 小时前
计算机毕业设计选题推荐:【基于深度学习的车辆损坏严重程度评估方法研究】ResNet50 图像分类
人工智能·深度学习·目标检测·机器学习·计算机视觉·分类·课程设计
在所不辞兄2 小时前
为什么在电池供电场景下,不能采用固定电压频率策略,而需要动态调整以最大化 Race-to-Sleep 收益?
人工智能·深度学习·神经网络·机器学习
jianqiang.xue2 小时前
3倍向量算力:Arm给最小MCU装上本地AI
arm开发·人工智能·单片机
北京迅为2 小时前
案例分享 | RK182X算力卡:多路视频VLM监控,四路画面AI同时看懂,一句人话说清现场
linux·人工智能·嵌入式·rk3588·算力卡·rk182x