整合优化上述代码
时间: 2023-11-13 12:16:18 浏览: 71
好的,让我来优化一下你的代码。
首先,我们可以将获取用户输入和对话生成的代码封装成一个函数:
```python
def generate_response(user_input, model):
input_ids = tokenizer.encode(user_input, return_tensors='pt')
chat_history_ids = model.generate(
input_ids,
max_length=1000,
pad_token_id=tokenizer.eos_token_id,
no_repeat_ngram_size=3,
do_sample=True,
top_k=10,
top_p=0.7,
temperature=0.8
)
response = tokenizer.decode(chat_history_ids[:, input_ids.shape[-1]:][0], skip_special_tokens=True)
return response
```
这个函数将用户输入和模型作为参数,返回一个回复。
然后我们可以将对话的逻辑封装成一个循环:
```python
model = GPT2LMHeadModel.from_pretrained('CSDN-ChitGPT')
print("ChitGPT: 你好,我是 ChitGPT,很高兴能和你聊天!")
while True:
# 获取用户输入
user_input = input("User: ")
# 生成回复
response = generate_response(user_input, model)
# 输出回复
print("ChitGPT:", response)
```
这个循环将一直运行,直到用户输入 `quit`。
完整代码如下所示:
```python
from transformers import GPT2LMHeadModel, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('CSDN-ChitGPT')
def generate_response(user_input, model):
input_ids = tokenizer.encode(user_input, return_tensors='pt')
chat_history_ids = model.generate(
input_ids,
max_length=1000,
pad_token_id=tokenizer.eos_token_id,
no_repeat_ngram_size=3,
do_sample=True,
top_k=10,
top_p=0.7,
temperature=0.8
)
response = tokenizer.decode(chat_history_ids[:, input_ids.shape[-1]:][0], skip_special_tokens=True)
return response
print("ChitGPT: 你好,我是 ChitGPT,很高兴能和你聊天!")
while True:
# 获取用户输入
user_input = input("User: ")
if user_input.lower() == 'quit':
break
# 生成回复
response = generate_response(user_input, model)
# 输出回复
print("ChitGPT:", response)
```
希望这样的优化可以帮到你!
阅读全文