Chia sẻ mã nguồn Chatbot sử dụng GPT-3 trên Python

GPT-3 là một mô hình học máy phát triển bởi OpenAI, có thể được sử dụng trong Python thông qua API của OpenAI. Mã Python Chatbot sử dụng gpt-3 có chức năng lưu lại lịch sử chat bên dưới mình đã chạy thử và chưa thấy phát sinh lỗi các bạn quan tâm có thể copy về chạy thử.

Bước chuẩn bị

  • Bạn cần có một API key hợp lệ từ OpenAI thông qua tài khoản Chatgpt
  • Tải Python: Trước tiên, bạn cần tải phiên bản Python phù hợp cho Windows từ trang chính thức của Python (https://www.python.org/downloads/). Hãy chọn phiên bản mới nhất và tải xuống bản cài đặt cho Windows.
  • Cài đặt Python: Chạy tệp tải về và tuân theo hướng dẫn để cài đặt Python. Khi được hỏi, hãy đảm bảo bạn chọn tùy chọn “Add Python to PATH” để có thể sử dụng Python từ bất kỳ thư mục nào trên hệ thống.
  • Trình soạn thảo mã: Để viết và chạy mã Python, bạn cần một trình soạn thảo mã. Có nhiều trình soạn thảo mã Python khác nhau cho Windows, nhưng hai trong số phổ biến nhất là Visual Studio Code và PyCharm. Bạn có thể tải và cài đặt một trong các trình soạn thảo này hoặc sử dụng trình soạn thảo mã mặc định của Windows, như Notepad.

Chatbot sử dụng gpt-3 có chức năng lưu lại lịch sử chat

Chương trình bao gồm 2 tập tin là chatbot.py và chat_history.json (để chatbot tự ghi lịch sử trò chuyện vào)

Nội dung mã chatbot.py

import openai
import time
import json

# Thiết lập khóa API của OpenAI
openai.api_key = "nhap-api-key-cua-ban"

# Hàm lưu lịch sử chat vào file JSON
def save_to_json(data, filename="chat_history.json"):
    try:
        with open(filename, 'r', encoding="utf-8") as file:
            content = file.read()
            if not content:  # Nếu file trống
                chat_history = []
            else:
                chat_history = json.loads(content)  # Sử dụng json.loads
    except (FileNotFoundError, json.JSONDecodeError):  # Xử lý trường hợp file không tồn tại hoặc lỗi JSON
        chat_history = []

    chat_history.append(data)
    
    with open(filename, 'w', encoding="utf-8") as file:
        json.dump(chat_history, file, indent=4, ensure_ascii=False)

def answer_question(question):
    messages = [
        {"role": "system", "content": "là AI trợ lý của bạn"},
        {"role": "user", "content": question},
    ]
    
    # Gọi API của OpenAI để trả lời câu hỏi
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        temperature=0,
        max_tokens=3500,
        top_p=0.5,
        frequency_penalty=0.5,
        presence_penalty=0.5
    )
    
    answer = response.choices[0]['message']['content']
    messages.append({"role": "ai", "content": answer})
    
    # Lưu lịch sử chat
    save_to_json(messages)

    return answer

# Lặp lại việc nhập câu hỏi từ người dùng
while True:
    user_input = input("Người dùng: ")
    if user_input == 'q':
        break
    else:
        # In thông báo "AI: Đang suy nghĩ..." trên cùng một dòng
        print("\nAI: Đang suy nghĩ...", end='\r')
        
        # Giả định đang xử lý câu hỏi trong 1 giây
        time.sleep(1)
        
        # Có câu trả lời, ghi đè lên thông báo 
        answer = answer_question(user_input)
        print("AI: " + answer + "       \n")  # Lưu ý dấu cách ở cuối