新知榜官方账号
2023-09-19 03:32:28
本文将介绍如何使用Python和预训练的GPT模型创建一个简单的AI聊天助手。首先,我们需要安装HuggingFaceTransformers库和GPT2模型。然后,我们可以使用这些工具来加载预训练的模型和分词器,以及训练我们的聊天助手。
我们还需要一个知识库来存储问题和答案。在本文中,我们将使用一个CSV文件作为我们的知识库。我们还将实现一个搜索知识库的函数,以便我们的聊天助手可以回答用户的问题。
最后,我们将实现一个简单的聊天循环,以便用户可以与我们的聊天助手交互。
import torch
from transformers import GPT2Tokenizer, GPT2Model, GPT2LMHeadModel
from transformers import AdamW, get_linear_schedule_with_warmup
import pandas as pd
import os
#设置设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
#获取预训练模型和分词器
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
model.to(device)
#加载知识库
if not os.path.exists("knowledge_base.csv"):
print("知识库不存在,请创建知识库文件")
else:
knowledge_base = pd.read_csv("knowledge_base.csv", header=None)
knowledge_base.columns = ["question", "answer"]
#生成回应函数
def chatbot(user_input):
#对用户输入进行分词
input_ids = torch.tensor(tokenizer.encode(user_input, return_tensors="pt")).unsqueeze(0).to(device)
#生成回应
outputs = model.generate(input_ids,
max_length=100,
do_sample=True,
top_k=50,
top_p=0.95,
temperature=0.7,
num_return_sequences=1,
num_beams=2,
diversity_penalty=0.5,
repetition_penalty=1.2,
length_penalty=1.0,
#保留知识库的问答对
knowledge_max_length=100,
knowledge_base=knowledge_base)
#从输出中选择最可能的回应
output = outputs[0]
selected_tokens = torch.argmax(output, axis=1).squeeze().tolist()
selected_tokens = tokenizer.convert_ids_to_tokens(selected_tokens, skip_special_tokens=True)
response = tokenizer.convert_tokens_to_string(selected_tokens)
return response
#搜索知识库函数
def search_knowledge_base(question):
if knowledge_base.empty:
return "知识库为空,无法回答您的问题。"
question_tokens = tokenizer.encode(question, return_tensors="pt")
question_tokens = question_tokens.unsqueeze(0)
question_tokens = question_tokens.to(device)
for i in range(len(knowledge_base)):
knowledge_tokens = question_tokens.repeat(len(knowledge_base), 1, 1)
knowledge_tokens[:, :1] = torch.tensor(knowledge_base.values[:, i]).to(device)
similarity_scores = model(knowledge_tokens, labels=None, output_hidden_states=False).logits
max_similarity_score = torch.max(similarity_scores).item()
if max_similarity_score > 0.5:
return knowledge_base.iloc[i].answer
return "抱歉,我无法回答您的问题。"
#聊天循环
while True:
user_input = input("您:")
if user_input.lower() == "quit":
break
response = chatbot(user_input)
print("AI:", response)
if "知识库" in user_input.lower():
question = "".join(user_input.split("知识库")[1:]).strip()
if question:
answer = search_knowledge_base(question)
print("AI(知识库):", answer)
相关工具
相关文章
推荐
亲测真香!这6个AI工具让工作效率翻倍,同事追着问链接
2025-06-17 16:21
FLUX.1 Kontext 一出,AI生图领域 “地震” 了!
2025-06-06 15:38
用Deepseek写AI绘图提示词,像呼吸一样简单!
2025-02-19 16:12
你以为AI绘画是黑科技?其实早成了“路边摊生意”!
2025-02-19 10:15
Flux爆火,全网最全面最详细的Flux使用教程!
2025-02-18 14:19
用AI如何创作音乐,实战教学来啦!
2025-02-17 17:23
MidJourney让你秒变绘画大神,从零开始画哪吒!
2025-02-17 14:56
AI应用新境界:让人工智能成为你的得力助手
2025-02-14 15:45
AI短片革命:当创作遇上智能,人人都能成为导演
2025-02-14 14:53
AI狂潮下的人类职场:是失业危机还是进化契机?
2025-02-13 16:53