跳到内容

聊天模板

指令微调语言模型使用“特殊 token”来指示文本的不同部分,例如系统提示、用户提示、任何图像以及助手的响应。聊天模板是将不同类型的输入组合成一个单一的、机器可读字符串的方式。

使用指令模型时,Outlines 不管理聊天模板 token。您必须自己将聊天模板 token 应用于提示——如果您不在指令微调模型上应用聊天模板,您通常会从模型获得毫无意义的输出。

基础模型不需要聊天模板 token。

您可以在模型的 HuggingFace 仓库或文档中找到聊天模板 token。例如,可以在这里找到 SmolLM2-360M-Instruct 的特殊 token。

然而,手动查找模型的特殊 token 可能很慢,并且特殊 token 因模型而异。如果您更改模型,如果您硬编码了特殊 token,您的提示可能会失效。

如果您需要一个方便的工具来为您应用聊天模板,您应该使用 transformers 库中的 tokenizer

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM2-360M-Instruct")
prompt = tokenizer.apply_chat_template(
    [
        {"role": "system", "content": "You extract information from text."},
        {"role": "user", "content": "What food does the following text describe?"},
    ],
    tokenize=False,
    add_bos=True,
    add_generation_prompt=True,
)

结果如下:

<|im_start|>system
You extract information from text.<|im_end|>
<|im_start|>user
What food does the following text describe?<|im_end|>
<|im_start|>assistant