from transformers import AutoTokenizer, AutoModel import torch import os # 设置代理环境变量 os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890" os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890" # 选择一个预训练模型和对应的tokenizer model_name = "THUDM/chatglm2-6b-int4" tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) model = AutoModel.from_pretrained(model_name, trust_remote_code=True) if tokenizer is None or model is None: raise ValueError("Failed to load tokenizer or model.") # 设置模型运行的设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) while True: input_text = input("请输入您的问题:") answer = model.generate(tokenizer, input_text) print(f"答案是:{answer}")
时间: 2024-04-22 07:28:00 浏览: 331
感谢提供代码,现在我可以更好地理解问题了。
在你的代码中,你对预训练模型使用了 `model.generate()` 方法,这是正确的方法来生成对话回复。但是,在调用 `model.generate()` 时,你传递了 `tokenizer` 作为参数,这是不正确的。
`model.generate()` 方法接受一个输入序列的张量作为参数,而不是一个 tokenizer 对象。所以你需要先将输入文本编码为张量,然后再将其传递给 `model.generate()` 方法。
以下是修正后的代码:
```python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import os
# 设置代理环境变量
os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890"
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890"
# 选择一个预训练模型和对应的tokenizer
model_name = "THUDM/chatglm2-6b-int4"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
if tokenizer is None or model is None:
raise ValueError("Failed to load tokenizer or model.")
# 设置模型运行的设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
while True:
input_text = input("请输入您的问题:")
input_ids = tokenizer.encode(input_text, return_tensors='pt').to(device)
outputs = model.generate(input_ids)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(f"答案是:{generated_text}")
```
在修正后的代码中,我们首先使用 `tokenizer.encode()` 将输入文本编码为张量,然后使用 `model.generate()` 生成对话回复的张量。最后,我们使用 `tokenizer.decode()` 将生成的张量解码为可读文本。
请注意,`AutoModel` 类被替换为 `AutoModelForCausalLM` 类,因为 chatglm2-6b-int4 模型被定义为一个语言模型(Language Model)。
阅读全文