返回

Hugging Face Transformers 对话机器人构建:弃用 Conversational 管道后的新方案

python

Hugging Face Transformers:弃用“conversational”管道后的对话机器人构建

Hugging Face Transformers 库的 conversational 管道已被弃用,这使得依赖它的对话机器人应用需要进行调整。本文将探讨如何使用最新版本的 Transformers 库构建对话机器人,并提供可行的替代方案及代码示例。

问题conversational 管道失效

旧版本的 Transformers 提供了 conversational 管道,用于构建对话机器人。然而,该管道现已被弃用,导致使用该管道的代码抛出 KeyError 异常,提示找不到 conversational 任务。

解决方案:迁移至 text-generation 管道

推荐的替代方案是使用 text-generation 管道,并结合合理的提示工程技术来管理对话历史。这种方法更加灵活,并能更好地控制模型的生成行为。

操作步骤:

  1. 安装 Transformers 库: 确保已安装最新版本的 Transformers 和 Tokenizers 库。

    pip install transformers tokenizers
    
  2. 加载模型和分词器: 选择一个适合对话任务的预训练模型和对应的分词器。

    from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
    
    model_name = "microsoft/DialoGPT-medium" #  选择一个对话模型,例如 DialoGPT
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(model_name)
    
    text_generation_pipeline = pipeline("text-generation", model=model, tokenizer=tokenizer)
    
  3. 构建对话历史提示: 将对话历史组织成一个字符串,作为模型的输入提示。

    chat_history = [
        {"role": "system", "content": "你是一个智能聊天机器人"},
        {"role": "user", "content": "法国的首都是什么?"},
    ]
    
    prompt = ""
    for turn in chat_history:
        prompt += f"{turn['role']}: {turn['content']}\n"
    prompt += "bot:" #  引导模型生成机器人的回复
    
    print(prompt)
    
  4. 生成回复: 使用 text-generation 管道生成机器人的回复。

    response = text_generation_pipeline(prompt, max_length=200, do_sample=True)
    bot_reply = response[0]["generated_text"][len(prompt):].strip()
    print(bot_reply)
    
    # 将机器人回复添加到对话历史
    chat_history.append({"role": "bot", "content": bot_reply})
    

安全建议:

  • 输入验证: 对用户输入进行验证和过滤,防止恶意输入。
  • 长度限制: 设置 max_length 参数限制生成文本的长度,避免无限循环或生成过长的回复。
  • 内容审核: 对模型生成的回复进行审核,防止生成不当内容。

其他模型选择:

除了 DialoGPT 之外,还可以选择其他适合对话任务的模型,例如 BlenderBot, GODEL 等。不同的模型具有不同的特性和性能,选择合适的模型取决于具体的应用场景。

通过以上步骤,可以成功地将使用已弃用 conversational 管道的代码迁移到新的 text-generation 管道。这种方法更具灵活性,并为更精细的对话管理提供了更多可能性。记住根据具体需求选择合适的模型,并始终关注安全性和内容审核,以确保构建负责任的对话机器人应用。