InternLM/lmdeploy项目中的自定义对话模板详解

InternLM/lmdeploy项目中的自定义对话模板详解

lmdeploy LMDeploy is a toolkit for compressing, deploying, and serving LLMs. lmdeploy 项目地址: https://gitcode.com/gh_mirrors/lm/lmdeploy

什么是对话模板

在大型语言模型(LLM)应用中,对话模板(Dialogue Template)是指定模型如何组织和格式化对话历史的结构化方式。它定义了系统消息、用户输入、助手响应等各个部分在对话中的排列方式以及特殊标记的使用。

InternLM/lmdeploy项目提供了灵活的对话模板定制功能,让开发者可以根据需求调整模型对话的格式和行为。

查看内置对话模板

在开始自定义之前,我们可以先查看lmdeploy内置的对话模板。通过命令行工具可以列出所有可用模板:

lmdeploy list

这将显示项目预定义的各种对话模板名称,如"internlm"、"vicuna"等。

自定义对话模板的两种方法

方法一:通过JSON配置文件

这是最简单快捷的自定义方式,适合大多数场景。我们创建一个JSON文件来定义模板:

{
    "model_name": "my_custom_template",
    "system": "<|im_start|>system\n",
    "meta_instruction": "你是一个专业的AI助手",
    "eosys": "<|im_end|>\n",
    "user": "<|im_start|>user\n",
    "eoh": "<|im_end|>\n",
    "assistant": "<|im_start|>assistant\n",
    "eoa": "<|im_end|>",
    "separator": "\n",
    "capability": "chat",
    "stop_words": ["<|im_end|>"]
}

关键字段说明:

  • model_name: 必填,可以是内置模板名称(覆盖原有模板)或新名称(创建新模板)
  • system: 系统消息前缀
  • meta_instruction: 系统提示词
  • user/eoh: 用户输入的前缀和后缀
  • assistant/eoa: 助手回复的前缀和后缀
  • stop_words: 停止词列表,用于控制生成终止

使用此模板的两种方式:

  1. 命令行方式:
lmdeploy serve api_server internlm/internlm2_5-7b-chat --chat-template my_template.json
  1. Python API方式:
from lmdeploy import ChatTemplateConfig, serve
serve('internlm/internlm2_5-7b-chat',
      chat_template_config=ChatTemplateConfig.from_json('my_template.json'))

方法二:通过Python类继承

对于需要更复杂控制的场景,可以继承BaseChatTemplate类创建自定义模板:

from lmdeploy.model import MODELS, BaseChatTemplate

@MODELS.register_module(name='my_advanced_template')
class MyChatTemplate(BaseChatTemplate):
    """高级自定义对话模板"""
    
    def __init__(self,
                 system='[SYSTEM]',
                 meta_instruction='你是一个专家级AI',
                 user='[USER]',
                 assistant='[ASSISTANT]',
                 eosys='\n',
                 eoh='\n',
                 eoa='\n',
                 separator='\n',
                 stop_words=['[END]']):
        super().__init__(system=system,
                         meta_instruction=meta_instruction,
                         eosys=eosys,
                         user=user,
                         eoh=eoh,
                         assistant=assistant,
                         eoa=eoa,
                         separator=separator,
                         stop_words=stop_words)

使用自定义类:

from lmdeploy import ChatTemplateConfig, pipeline

messages = [{'role': 'user', 'content': '你好'}]
pipe = pipeline('internlm/internlm2_5-7b-chat',
                chat_template_config=ChatTemplateConfig('my_advanced_template'))
for response in pipe.stream_infer(messages):
    print(response.text, end='')

模板调试技巧

  1. 设置日志级别为INFO可以查看模板应用效果
  2. 模板中的特殊标记(如<|im_end|>)需要与模型训练时使用的标记一致
  3. 确保停止词(stop_words)设置正确,避免生成不完整

最佳实践建议

  1. 对于简单调整,优先使用JSON配置文件方式
  2. 需要复杂逻辑(如动态生成系统提示)时使用Python类方式
  3. 保持模板风格与模型训练时一致
  4. 测试不同模板对生成质量的影响
  5. 记录使用的模板配置以便复现结果

通过灵活使用lmdeploy的对话模板功能,开发者可以更好地控制模型对话行为,适应各种应用场景需求。

lmdeploy LMDeploy is a toolkit for compressing, deploying, and serving LLMs. lmdeploy 项目地址: https://gitcode.com/gh_mirrors/lm/lmdeploy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯爽妲Honey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值