将它封装成一个类,并提供十进制与36进制互转的接口
时间: 2024-02-09 15:08:22 浏览: 140
好的,这里提供一个封装了ChitGPT和十进制与36进制互转接口的类的示例:
```python
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
class ChitGPT:
def __init__(self, model_name):
# 加载预训练模型和tokenizer
self.tokenizer = AutoTokenizer.from_pretrained(model_name)
self.model = AutoModelForCausalLM.from_pretrained(model_name)
# 设置对话的最大长度
self.max_length = 100
def chat(self, user_input):
# 将用户输入编码为模型可接受的格式
input_ids = self.tokenizer.encode(user_input + self.tokenizer.eos_token, return_tensors="pt")
# 使用模型生成回复
chat_output = self.model.generate(
input_ids=input_ids,
max_length=self.max_length,
pad_token_id=self.tokenizer.eos_token_id,
no_repeat_ngram_size=3,
do_sample=True,
top_k=100,
top_p=0.7,
temperature=0.8
)
# 将模型生成的回复解码为可读文本
chat_response = self.tokenizer.decode(chat_output[0], skip_special_tokens=True)
# 返回模型的回复
return chat_response
class BaseConverter:
def __init__(self):
# digits字符串包含了36个字符,分别对应36进制中的每个数字或字母
self.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def to_base_36(self, num):
# 将10进制数字转换为36进制字符串
if num == 0:
return "0"
result = ""
while num > 0:
remainder = num % 36
result = self.digits[remainder] + result
num //= 36
return result
def from_base_36(self, s):
# 将36进制字符串转换为10进制数字
result = 0
for i in range(len(s)):
digit = self.digits.index(s[i])
power = 36 ** (len(s) - i - 1)
result += digit * power
return result
```
在这个类中,我们封装了ChitGPT和BaseConverter两个类,分别用于实现对话和10进制与36进制互转功能。我们可以使用以下代码来测试这个类:
```python
# 创建ChitGPT和BaseConverter实例
chit_gpt = ChitGPT("microsoft/DialoGPT-medium")
base_converter = BaseConverter()
# 测试ChitGPT回复功能
chat_response = chit_gpt.chat("Hi, how are you?")
print("ChitGPT: " + chat_response)
# 测试10进制与36进制互转功能
num = 123456789
base_36 = base_converter.to_base_36(num)
print("Base 36 of %d is %s" % (num, base_36))
new_num = base_converter.from_base_36(base_36)
print("New number from base 36 is %d" % new_num)
```
这个示例中,我们首先创建了ChitGPT和BaseConverter实例,然后分别测试了对话和10进制与36进制互转功能。
阅读全文