from transformers import AutoTokenizer, AutoModel
class ChatglmModel:
def __init__(self, plm = 'THUDM/chatglm-6b') -> None:
self.tokenizer = AutoTokenizer.from_pretrained(plm, trust_remote_code=True)
self.model = AutoModel.from_pretrained(plm, trust_remote_code=True).float()
self.model = self.model.eval()
def generate(self, text, temperature=0.8, system = "", top_p=0.8):
if len(system) > 0:
text = system + '\n\n' + text
response, history = self.model.chat(self.tokenizer, text, history=[], top_p=top_p, temperature=temperature, max_length= 4096)
return response
def __init__(self, plm = 'THUDM/chatglm-6b') -> None:
:定义了类的初始化方法【它接受一个参数 plm
,默认值为 'THUDM/chatglm-6b'
。这个参数指定了预训练语言模型的名称】。self.tokenizer = AutoTokenizer.from_pretrained(plm, trust_remote_code=True)
:使用指定的预训练模型初始化一个 AutoTokenizer
对象,用于将文本转换为模型可以理解的格式。self.model = AutoModel.from_pretrained(plm, trust_remote_code=True).float()
:使用指定的预训练模型初始化一个 AutoModel 对象
,并将其转换为浮点数格式。- 注释掉的
#half().cuda()
是用于将模型转换为半精度并移动到 GPU
上,但在这里被注释掉了。 self.model = self.model.eval()
:将模型设置为评估模式,这意味着在生成文本时不会进行梯度计算。def generate(self, text, temperature=0.8, system = "", top_p=0.8):
:定义了一个名为 generate
的方法,用于生成文本。【text
:要生成响应的输入文本。temperature
:控制生成文本的随机性的参数。system
:系统消息,可以用于在生成文本之前设置上下文。top_p
:核采样(nucleus sampling
)的参数,用于控制生成文本的多样性。】if len(system) > 0:
:如果 system
参数不为空,则将其添加到输入文本的前面。response, history = self.model.chat(self.tokenizer, text, history=[], top_p=top_p, temperature=temperature, max_length= 4096)
:调用模型的 chat
方法来生成响应。这个方法接受 tokenizer
、输入文本、历史记录、top_p
、temperature
和最大长度作为参数。return response
:返回生成的响应。