Tạo chatbot với CHAT GPT sử dụng C#

11/9/2023 4:38 PM | Lập trình

Trong hướng dẫn này, chúng ta sẽ đi sâu vào quá trình xây dựng chatbot bằng ChatGPT và C#. Chúng tôi sẽ đề cập đến mọi thứ, từ thiết lập quyền truy cập API ChatGPT đến triển khai chatbot của bạn. Bắt đầu nào!

Thiết lập quyền truy cập API ChatGPT của bạn

Trước khi bắt đầu xây dựng chatbot, chúng ta cần thiết lập quyền truy cập vào API ChatGPT.

Nếu bạn đã có tài khoản OpenAI, hãy bỏ qua phần này

Để truy cập API ChatGPT, trước tiên bạn cần đăng ký tài khoản với OpenAI. Làm theo các bước sau:

  • Truy cập trang web OpenAI tại https://platform.openai.com/login
  • Điền thông tin cần thiết và tạo tài khoản của bạn.
  • Sau khi tài khoản của bạn được tạo, hãy đăng nhập và điều hướng đến phần API.

Lấy khóa truy cập API

Để sử dụng API ChatGPT trong dự án C#, bạn cần có khóa truy cập API. Dưới đây là cách để có được một:

1. Đăng nhập vào tài khoản OpenAI của bạn.

2. Chuyển đến phần "Xem khóa API".

3. Nhấp vào "Tạo khóa API" và đặt tên thích hợp cho nó.

4. Sao chép khóa API, vì bạn sẽ cần nó sau này.

Khóa API ở trên không cố gắng sử dụng nó, nó không hoạt động.

Giữ khóa API của bạn an toàn, vì khóa này cấp quyền truy cập vào việc sử dụng API ChatGPT của bạn.

Tạo dự án C# cho chatbot ChatGPT của bạn

Bây giờ chúng ta đã thiết lập quyền truy cập API ChatGPT, đã đến lúc tạo một dự án C # mới cho chatbot của chúng ta.

Thiết lập dự án C# mới

Để tạo một dự án C# mới, bạn có thể sử dụng Visual Studio, Visual Studio Code hoặc bất kỳ IDE nào khác hỗ trợ C#. Làm theo các bước sau:

  • Mở IDE ưa thích của bạn và tạo một dự án C # mới.
  • Chọn mẫu "Ứng dụng bảng điều khiển" và cung cấp tên cho dự án của bạn.
  • Nhấp vào "Tạo" để tạo dự án.

Cài đặt các gói cần thiết

Chúng ta sẽ cần cài đặt một số gói NuGet để giúp chúng ta tương tác với API ChatGPT:

  • RestSharp: Một thư viện để thực hiện các yêu cầu HTTP.
  • Newtonsoft.Json: Một thư viện để xử lý dữ liệu JSON.

Để cài đặt các gói này, hãy chạy các lệnh sau trong bảng điều khiển trình quản lý gói của IDE:

Install-Package RestSharp
Install-Package Newtonsoft.Json

Tích hợp API ChatGPT với dự án C# của bạn

Với dự án của chúng tôi được thiết lập, đã đến lúc tích hợp API ChatGPT.

Tạo ứng dụng khách API ChatGPT

Đầu tiên, hãy tạo một lớp C# để tương tác với API ChatGPT. Chúng tôi sẽ gọi nó là . Đây là cấu trúc cơ bản:ChatGPTClient

using System;
using RestSharp;
using Newtonsoft.Json;

public class ChatGPTClient
{
    private readonly string _apiKey;
    private readonly RestClient _client;
    
    // Constructor that takes the API key as a parameter
    public ChatGPTClient(string apiKey)
    {
            _apiKey = apiKey;
            // Initialize the RestClient with the ChatGPT API endpoint
            _client = new RestClient("https://api.openai.com/v1/engines/text-davinci-003/completions");
    }

    // We'll add methods here to interact with the API.
}

Trong lớp này, chúng ta lưu trữ khóa API và tạo một instance trỏ đến endpoint API ChatGPT.RestClient

Bây giờ chúng ta hãy thêm một phương thức để gửi một message đến API:

// Method to send a message to the ChatGPT API and return the response
        public string SendMessage(string message)
        {
            // Create a new POST request
            var request = new RestRequest("", Method.Post);
            // Set the Content-Type header
            request.AddHeader("Content-Type", "application/json");
            // Set the Authorization header with the API key
            request.AddHeader("Authorization", $"Bearer {_apiKey}");

            // Create the request body with the message and other parameters
            var requestBody = new
            {
                prompt = message,
                max_tokens = 100,
                n = 1,
                stop = (string?)null,
                temperature = 0.7,
            };

            // Add the JSON body to the request
            request.AddJsonBody(JsonConvert.SerializeObject(requestBody));

            // Execute the request and receive the response
            var response = _client.Execute(request);

            // Deserialize the response JSON content
            var jsonResponse = JsonConvert.DeserializeObject<dynamic>(response.Content ?? string.Empty);

            // Extract and return the chatbot's response text
            return jsonResponse?.choices[0]?.text?.ToString()?.Trim() ?? string.Empty;
        }

Phương thức này lấy một thông điệp làm đầu vào, tạo một yêu cầu POST đến API ChatGPT với các tiêu đề và nội dung JSON thích hợp và trả về phản hồi từ API.

Triển khai chatbot logic

Với sự sẵn có của chúng ta, hãy triển khai logic chatbot trong lớp của chúng ta:ChatGPTClientProgram

        class Program
        {
            static void Main(string[] args)
            {
                // Replace with your ChatGPT API key
                string apiKey = "your_api_key_here";
                // Create a ChatGPTClient instance with the API key
                var chatGPTClient = new ChatGPTClient(apiKey);

                // Display a welcome message
                Console.WriteLine("Welcome to the ChatGPT chatbot! Type 'exit' to quit.");

                // Enter a loop to take user input and display chatbot responses
                while (true)
                {
                    // Prompt the user for input
                    Console.ForegroundColor = ConsoleColor.Green; // Set text color to green
                    Console.Write("You: ");
                    Console.ResetColor(); // Reset text color to default
                    string input = Console.ReadLine() ?? string.Empty;

                    // Exit the loop if the user types "exit"
                    if (input.ToLower() == "exit")
                        break;

                    // Send the user's input to the ChatGPT API and receive a response
                    string response = chatGPTClient.SendMessage(input);

                    // Display the chatbot's response
                    Console.ForegroundColor = ConsoleColor.Blue; // Set text color to blue
                    Console.Write("Chatbot: ");
                    Console.ResetColor(); // Reset text color to default
                    Console.WriteLine(response);
                }
            }
        }

Ở đây, chúng ta tạo một instance của khóa API, sau đó nhập một loop lấy đầu vào của người dùng, gửi đến API ChatGPT và in phản hồi của chatbot.ChatGPTClient

Thử nghiệm và nâng cao Chatbot ChatGPT của bạn

Bây giờ chúng ta đã triển khai chatbot của mình, hãy thử nghiệm và nâng cao nó.

Thử nghiệm chatbot của bạn

Để kiểm tra chatbot của bạn, chỉ cần chạy dự án C # của bạn. Bạn sẽ thấy một cửa sổ bảng điều khiển nơi bạn có thể nhập tin nhắn và nhận phản hồi từ chatbot ChatGPT.

Xử lý lỗi và trường hợp cạnh

Điều quan trọng là phải xử lý các lỗi và trường hợp cạnh trong chatbot của bạn. Ví dụ: bạn có thể kiểm tra đầu vào trống, thêm xử lý lỗi cho các yêu cầu API hoặc triển khai thời gian chờ cho các yêu cầu chạy dài.

public string SendMessage(string message)
{
    // Check for empty input
    if (string.IsNullOrWhiteSpace(message))
    {
        return "Sorry, I didn't receive any input. Please try again!";
    }

    try
    {
        // The rest of the SendMessage method implementation...
    }
    catch (Exception ex)
    {
        // Handle any exceptions that may occur during the API request
        Console.WriteLine($"Error: {ex.Message}");
        return "Sorry, there was an error processing your request. Please try again later.";
    }
}

Cải thiện trải nghiệm người dùng

Hãy xem xét các mẹo sau để nâng cao khả năng sử dụng chatbot của bạn:

  • Thêm lệnh trợ giúp để cung cấp hướng dẫn sử dụng chatbot.
// Enter a loop to take user input and display chatbot responses
while (true)
{
    // Prompt the user for input
    Console.ForegroundColor = ConsoleColor.Green; // Set text color to green
    Console.Write("You: ");
    Console.ResetColor(); // Reset text color to default
    string input = Console.ReadLine() ?? string.Empty;

    // Exit the loop if the user types "exit"
    if (input.ToLower() == "exit")
        break;
    
    // Display help message if the user types "help"
    if (input.ToLower() == "help")
    {
        Console.WriteLine("Chatbot commands:");
        Console.WriteLine("- Type your message to chat with the bot.");
        Console.WriteLine("- Type 'exit' to quit the chat.");
        continue;
    }

    // Send the user's input to the ChatGPT API and receive a response
    string response = chatGPTClient.SendMessage(input);

    // Display the chatbot's response
    Console.ForegroundColor = ConsoleColor.Blue; // Set text color to blue
    Console.Write("Chatbot: ");
    Console.ResetColor(); // Reset text color to default
    Console.WriteLine(response);
}
  • Triển khai luồng hội thoại tự nhiên hơn bằng cách duy trì ngữ cảnh giữa các thư.
private string _conversationHistory = string.Empty;

public string SendMessage(string message)
{
    // Check for empty input
    if (string.IsNullOrWhiteSpace(message))
    {
        return "Sorry, I didn't receive any input. Please try again!";
    }

    // Update the conversation history with the user's message
    _conversationHistory += $"User: {message}\n";

    // ... (the rest of the SendMessage method remains unchanged)

    // Deserialize the response JSON content
    var jsonResponse = JsonConvert.DeserializeObject<dynamic>(response.Content ?? string.Empty);

    // Extract and return the chatbot's response text
    string chatbotResponse = jsonResponse?.choices[0]?.text?.ToString()?.Trim() ?? string.Empty;

    // Update the conversation history with the chatbot's response
    _conversationHistory += $"Chatbot: {chatbotResponse}\n";

    return chatbotResponse;
}
  • Sử dụng định dạng phong phú hơn hoặc các yếu tố giao diện người dùng để cải thiện khả năng đọc.
// Enter a loop to take user input and display chatbot responses
while (true)
{
    // Prompt the user for input
    Console.ForegroundColor = ConsoleColor.Green; // Set text color to green
    Console.Write("You: ");
    Console.ResetColor(); // Reset text color to default
    string input = Console.ReadLine() ?? string.Empty;

    // ... (handle 'exit' and 'help' commands as before)

    // Send the user's input to the ChatGPT API and receive a response
    string response = chatGPTClient.SendMessage(input);

    // Display the chatbot's response
    Console.ForegroundColor = ConsoleColor.Blue; // Set text color to blue
    Console.Write("Chatbot: ");
    Console.ResetColor(); // Reset text color to default
    Console.WriteLine(response);

    // Add a separator and some line breaks
    Console.WriteLine();
    Console.WriteLine("------------------------------------------------");
    Console.WriteLine();
}

Triển khai chatbot ChatGPT của bạn

Khi bạn hài lòng với chatbot của mình, đã đến lúc triển khai nó.

Tùy chọn triển khai

Có nhiều cách để triển khai chatbot C # của bạn, chẳng hạn như:

  • Ứng dụng web: Tạo một ứng dụng web bằng ASP.NET Core và nhúng chatbot vào bên trong nó. Điều này có thể được thực hiện bằng cách tạo điểm cuối API cho các tương tác chatbot và sử dụng JavaScript để xử lý đầu vào của người dùng và hiển thị phản hồi của chatbot trong trình duyệt. Ví dụ về cấu trúc dự án:
  • ChatGPTWebApp: Dự án cốt lõi ASP.NET chính
  • ChatGPTWebApp/Controllers: Chứa bộ điều khiển API cho các tương tác chatbot
  • ChatGPTWebApp/wwwroot: Chứa các tệp HTML, CSS và JavaScript cho giao diện người dùng
  • ChatGPTClient: Các lớp máy khách ChatGPT hiện có
  • Nền tảng nhắn tin: Tích hợp chatbot vào các nền tảng nhắn tin như Slack hoặc Microsoft Teams. Điều này liên quan đến việc tạo một ứng dụng bot trên nền tảng mong muốn, định cấu hình xác thực và xử lý sự kiện cần thiết và kết nối API ChatGPT với logic xử lý tin nhắn của bot.

Cấu trúc dự án ví dụ cho bot Slack:

  • ChatGPTSlackBot: Dự án bot chính
  • ChatGPTSlackBot/Controllers: Chứa bộ điều khiển API để xử lý các sự kiện Slack
  • ChatGPTSlackBot/Services: Chứa các dịch vụ để xử lý các tương tác API Slack
  • ChatGPTClient: Các lớp máy khách ChatGPT hiện có Bạn sẽ cần làm theo tài liệu của nền tảng để tạo và định cấu hình bot của mình, chẳng hạn như tài liệu API của Slack.
  • Ứng dụng máy tính để bàn: Phát triển ứng dụng máy tính để bàn bằng WPF hoặc WinForms. Điều này liên quan đến việc tạo giao diện người dùng đồ họa (GUI) cho chatbot của bạn, xử lý đầu vào của người dùng và hiển thị phản hồi của chatbot. Ví dụ về cấu trúc dự án cho ứng dụng WPF:
  • ChatGPTWPFApp: Dự án WPF chính
  • ChatGPTWPFApp/Views: Chứa các tệp XAML cho GUI
  • ChatGPTWPFApp/ViewModels: Chứa các lớp ViewModel để liên kết dữ liệu
  • ChatGPTClient: Các lớp máy khách ChatGPT hiện có

Chọn một tùy chọn triển khai phù hợp nhất với nhu cầu và đối tượng mục tiêu của bạn.

Tích hợp chatbot vào các ứng dụng hiện có của bạn

Nếu bạn đã có ứng dụng C#, bạn có thể tích hợp chatbot ChatGPT của mình bằng cách thêm lớp và điều chỉnh giao diện người dùng để phù hợp với các tương tác của chatbot.ChatGPTClient

Ví dụ: nếu bạn có một ứng dụng WPF hiện có, bạn có thể làm theo các bước sau:

  • Thêm lớp vào dự án của bạn.ChatGPTClient
  • Tạo UserControl mới cho giao diện chatbot. Điều này có thể bao gồm TextBox để người dùng nhập liệu, Nút để gửi tin nhắn và ListBox hoặc ScrollView để hiển thị cuộc hội thoại.
  • Triển khai ràng buộc dữ liệu cần thiết và xử lý sự kiện trong ViewModel của bạn để gửi đầu vào của người dùng đến API ChatGPT và hiển thị phản hồi của chatbot.
  • Thêm chatbot UserControl vào cửa sổ ứng dụng chính hoặc cấu trúc điều hướng của bạn.

Hãy nhớ điều chỉnh các bước này dựa trên framework hoặc kiến trúc cụ thể của ứng dụng hiện tại của bạn.

Kết luận và khả năng trong tương lai

Chúc mừng! Bạn đã xây dựng một chatbot ChatGPT bằng C#. Chúng tôi đã đề cập đến việc thiết lập quyền truy cập API ChatGPT, tạo dự án C #, tích hợp API, thử nghiệm, nâng cao và triển khai chatbot của bạn.

Tin tức khác

  • Remote SQL Server. Cách mở port 1433 để kết nối với sqlserver từ xa.

    Remote SQL Server. Cách mở port 1433 để kết nối với sqlserver từ xa.

    Hiện nay nhiều người có xây dựng cơ sở dữ liệu trên server và kết nối tới để làm việc cho tiện. Nên mình chia sẻ bài viết này cho người mới nhé.

  • Sự khác nhau giữa Application, Virtual Direction và Site. Cách tạo 1 Virtual Direction.

    Sự khác nhau giữa Application, Virtual Direction và Site. Cách tạo 1 Virtual Direction.

    Trong IIS, bạn có thể tạo các trang web, ứng dụng và thư mục ảo để chia sẻ thông tin với người dùng qua Internet, mạng nội bộ hoặc mạng phụ. Mặc dù các khái niệm này đã tồn tại trong các phiên bản trước của IIS, một số thay đổi trong IIS 7 trở lên ảnh hưởng đến định nghĩa và chức năng của các khái niệm này. Quan trọng nhất, các trang web, ứng dụng và thư mục ảo giờ đây hoạt động cùng nhau theo mối quan hệ phân cấp như những khối xây dựng cơ bản để lưu trữ nội dung trực tuyến và cung cấp dịch vụ trực tuyến.

  • Design pattern là gì? Tại sao nên sử dụng Design pattern?

    Design pattern là gì? Tại sao nên sử dụng Design pattern?

    Design pattern là các giải pháp tổng thể đã được tối ưu hóa, được tái sử dụng cho các vấn đề phổ biến trong thiết kế phần mềm mà chúng ta thường gặp phải hàng ngày. Đây là tập các giải pháp đã được suy nghĩ, đã giải quyết trong tình huống cụ thể.

  • CDN là gì? Khi nào thì cần xài CDN cho website

    CDN là gì? Khi nào thì cần xài CDN cho website

    Thuật ngữ CDN có thể bạn sẽ bắt gặp khá nhiều bài viết trên thachpham.com, hoặc khi bạn cần một người có kinh nghiệm tư vấn giải pháp tiết kiệm băng thông máy chủ và tăng tốc độ website đều sẽ được nghe tư vấn là sử dụng CDN. Vậy CDN chính xác là cái gì, có bao nhiêu loại CDN, và website của bạn có thích hợp để sử dụng CDN không thì bài này sẽ cung cấp cho bạn các thông tin cần thiết đó.

  • Giao thức HTTP và HTTPS là gì? Tại sao nên sử dụng HTTPS?

    Giao thức HTTP và HTTPS là gì? Tại sao nên sử dụng HTTPS?

    Môi trường internet phát triển, kéo theo tội phạm mạng tăng cao, vì thế cần có những chuẩn bảo mật web cao hơn. Đó là lí do giao thức HTTPS dần thay thế hoàn toàn HTTP. Vậy, giao thức HTTPS là gì? HTTP và HTTPS khác nhau như thế nào? Và tại sao các website nên dùng HTTPS thay vì HTTP? Bài viết này sẽ giúp bạn giải đáp tất cả những thắc mắc đó.

  • Tích hợp zalo vào website.

    Tích hợp zalo vào website.

    Nếu bạn là một người có website bán hàng thì việc liên hệ thuận lợi nhanh cho khách hàng luôn là ưu tiên hàng đầu. Cũng chính vì lí dó này mình đã tìm hiểu sau khi chèn cho website của mình. Thấy hay nên chia sẻ cho mọi người có nhu cầu.

  • Cách dựng 1 website bằng iis.

    Cách dựng 1 website bằng iis.

    Có rất nhiều bạn làm web nhưng lại không biết cách build 1 site trên iis. Nên hôm nay mình sẽ chia sẻ các bước đơn giản để có thể dễ dàng tạo được 1 trang web bằng iis trên  server windows.