新知榜官方账号
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)
相关工具
相关文章
推荐
视频“用嘴编辑”的时代来了,但钱包顶得住吗?
2025-08-15 17:59
智谱新模型GLM-4.5V全面开源,玩家们有福啦!
2025-08-12 17:56
扎心文案+AI插画=爆款!揭秘8万赞视频的制作全流程
2025-08-12 10:08
GPT-5没你想的那么好,附实测体验~
2025-08-11 11:07
一站式搞定AI绘图+视频,AI短片效率飙升的秘密在这儿!
2025-08-08 09:26
打工人新神器!10款国产AI,让你告别996!
2025-08-08 09:24
豆包视觉推理深度体验,AI也能“边看边想”了!
2025-08-08 09:19
300美元的AI男友来了!马斯克的情感生意从女友做到男友
2025-08-01 17:56
Agent智能体:2025年企业新员工,月薪仅需一度电?
2025-07-30 17:49
国产GLM-4.5把AI价格打到地板价,实测强到离谱!
2025-07-30 09:08