OpenAI và cách sử dụng API ChatGPT trong Node.js

8 min read

Trí tuệ nhân tạo (AI) đã và đang cách mạng hóa cách chúng ta tương tác với công nghệ và chatbot. Đây là một trong những ví cụ nổi bật nhất cho xu hướng này. Với nhu cầu ngày càng tăng về các chatbot có thể hiểu ngôn ngữ tự nhiên và đưa ra phản hồi hữu ích, API ChatGPT của OpenAI đã trở thành lựa chọn phổ biến của các nhà phát triển.

Trong bài đăng này, chúng ta sẽ khám phá cách sử dụng API ChatGPT của OpenAI trong Node.js, một ngôn ngữ phụ trợ phổ biến được sử dụng để xây dựng các ứng dụng web.

Chúng ta sẽ thực hiện quy trình này từng bước một, bắt đầu từ việc thiết lập thông tin xác thực API cho đến xây dựng một chatbot có thể hiểu và trả lời các try vấn của người dùng bằng ngôn ngữ tự nhiên.

Tạo dự án Node.js mới

Hãy bắt đầu bằng cách tạo sự án mới:

$ mkdir node-chatgpt-api
$ cd node-chatgpt-api

Bên trong thư mục dự án này, hãy tạo một tệp pack.json mới bằng cách sử dụng lệnh npm theo cách sau:

$ npm init -y

Tiếp theo chúng ta cần thêm hai packages:

  • openai: Thư viện OpenAI Node.js cung cấp quyền truy cập thuận tiện vào API OpenAI từ các ứng dụng Node.js.
  • readline-sync: Cung cấp các chức năng đồng bộ để đọc dữ liệu đầu vào của người dùng từ dòng lệnh.
$ npm i openai readline-sync

Cuối cùng, hãy thêm packages dotenv vào dự án:

$ npm i dotenv --save

Bằng cách sử dụng packages dotenv, chúng tôi sẽ có thể quản lý các biến môi trường trong tệp .env trong dự án của mình.

Truy xuất OpenAI API Key

Để có thể sử dụng API của OpenAI từ bên trong ứng dụng Node.js, trước tiên chúng ta cần truy xuất khóa API từ dashboard OpenAI.

Để lấy API key, bạn cần có tài khoản người dùng tại https://openai.com/ và truy cập vào phần API keys trong dashboard OpenAI để tạo API key mới.

openai

Key này là bí mật và không được chia sử với bất kì ai khác. Sau này chúng ta sẽ cần sử dụng key này khi triển khai chương trình Node.js để truy cập API của OpenAI.

Hãy gán khóa API này cho một biến môi trường trong ứng dụng Node.js của chúng ta. Tạo một tập tin mới:

touch .env

Bên trong tập tin .env, hãy tạo biến OPENAI_API_KEY và gán giá trị cho key của bạn:

OPENAI_API_KEY="YOUR OPEN AI API KEY"

Triển khai ứng dụng Node.js tích hợp OpenAI

Tạo một file mới chatGPT.js và thêm đoạn code sau:

const OpenAI = require("openai");
const readlineSync = require("readline-sync");
require("dotenv").config();

(async () => {
    const openai = new OpenAI({
        apiKey: process.env.OPENAI_API_KEY
    });

    const history = [];

    while (true) {
        const user_input = readlineSync.question("Your input: ");

        const messages = [];
        for (const [input_text, completion_text] of history) {
            messages.push({ role: "user", content: input_text });
            messages.push({ role: "assistant", content: completion_text });
        }

        messages.push({ role: "user", content: user_input });

        try {
            const completion = await openai.chat.completions.create({
                model: "gpt-3.5-turbo",
                messages: messages,
            });
            const completion_text = completion.choices[0].message.content;
            console.log(completion_text);

            history.push([user_input, completion_text]);

            const user_input_again = readlineSync.question(
                "\nWould you like to continue the conversation? (Y/N)"
            );
            if (user_input_again.toUpperCase() === "N") {
                return;
            } else if (user_input_again.toUpperCase() !== "Y") {
                console.log("Invalid input. Please enter 'Y' or 'N'.");
                return;
            }
        } catch (error) {
            if (error.response) {
                console.log(error.response.status);
                console.log(error.response.data);
            } else {
                console.log(error.message);
            }
        }
    }
})();

Code Node.js này xác định một chatbot tương tác sử dụng API OpenAI ChatGPT (mô hình gpt-3.5-turbo) để tạo phản hồi cho thông tin đầu vào của người dùng. Bây giờ chúng ta sẽ cùng nhau phân tích từng thành phần trong đoạn code trên.

1. Nhập các phụ thuộc:

const OpenAI = require("openai");
const readlineSync = require("readline-sync");
require("dotenv").config();
  • Gói `readline-sync` được sử dụng để nhắc người dùng nhập liệu.
  • Các lớp `OpenAI ` được nhập từ gói `openai`, được sử dụng để kết nối và sử dụng API OpenAI.
  • Gói `dotenv` được sử dụng để tải các biến môi trường từ tệp `.env.`

2. Chức năng không đồng bộ:

(async () => {
  // Code here
})();

Toàn bộ code được gói bên trong hàm không đồng bộ được gọi ngay lập tức, cho phép sử dụng await bên trong function

3. Thiết lập cấu hình API

const openai = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY
});

  • Một thể hiện `OpenAIđược tạo bằng API key lấy ra từ trong biên môi trường OPENAI_API_KEY

4. Lịch sử trò chuyện

const history = [];

Một array trống được tạo để lưu trữ lịch sử trò chuyện, dùng để cung cấp ngữ cảnh cho mô hình AI nhằm tạo phản hồi.

5. Chat Loop

while (true) {
  // Code here
}

Vòng lặp while được sử dụng để liên tục nhắc người dùng nhập dữ liệu và tạo phản hồi cho đến khi người dùng quyết định kết thúc cuộc trò chuyện.

6. User input:

const user_input = readlineSync.question("Your input: ");

Gói `readlineSyncđược sử dụng để nhắc người dùng nhập dữ liệu, được lưu trữ trong biến `user_input`.

7. Lịch sử trò chuyện theo ngữ cảnh:

const messages = [];
for (const [input_text, completion_text] of history) {
  messages.push({ role: "user", content: input_text });
  messages.push({ role: "assistant", content: completion_text });
}
messages.push({ role: "user", content: user_input });
  • Vòng lặp for được sử dụng để duyệt qua lịch sử trò chuyện và tạo danh sách tin nhắn theo định dạng mà API OpenAI ChatGPT mong đợi.
  • Mỗi tin nhắn bao gồm một role (“user” hoặc “assistant”) và content (nội dung của tin nhắn) .
  • user_input hiện tại được thêm vào cuối mảng messages.

8. AI Model:

const completion = await openai.chat.completions.create({
      model: "gpt-3.5-turbo",
      messages: messages,
});

  • Phương thức openai.chat.completions.create được sử dụng để tạo phản hồi từ API OpenAI.
  • model: chỉ định mô hình AI nào sẽ sử dụng để tạo phản hồi.
  • messages: cung cấp ngữ cảnh để mô hình AI tạo ra phản hồi.
  • Bạn có thể tìm hiểu thêm một số thành phần request body khi tạo completion tại đây

9. Phản hồi từ AI Model

const completion_text = completion.choices[0].message.content;
console.log(completion_text);
  • Phản hồi do mô hình AI tạo ra được trích xuất từ ​​đối tượng completion và được lưu trữ trong biến completion_text.
  • Phản hồi sau đó được in ra console.

10. Cập nhật lịch sử cuộc trò chuyện

history.push([user_input, completion_text]);

user_input hiện tại và phản hồi do mô hình AI tạo ra (completion_text) được thêm vào cuối mảng history.

11. Tiếp tục cuộc trò chuyện hoặc dừng lại

const user_input_again = readlineSync.question(
  "\nWould you like to continue the conversation? (Y/N)"
);
if (user_input_again.toUpperCase() === "N") {
  return;
} else if (user_input_again.toUpperCase() !== "Y") {
  console.log("Invalid input. Please enter 'Y' or 'N'.");
  return;
}
  • Người dùng được nhắc tiếp tục hoặc kết thúc cuộc trò chuyện.
  • Phương thức readlineSync.question được sử dụng để đọc dữ liệu đầu vào của người dùng.
  • Nếu người dùng nhập “N”, câu lệnh return sẽ thoát khỏi vòng lặp while và kết thúc chương trình.
  • Nếu người dùng nhập bất cứ thứ gì khác ngoài “Y” hoặc “N”, một thông báo lỗi được in ra bảng điều khiển và chương trình kết thúc.

12. Xử lý lỗi

} catch (error) {
  if (error.response) {
    console.log(error.response.status);
    console.log(error.response.data);
  } else {
    console.log(error.message);
  }
}
  • Nếu xảy ra lỗi trong quá trình yêu cầu API, khối catch sẽ được thực thi.
  • Nếu lỗi có thuộc tính response, mã trạng thái HTTP và dữ liệu phản hồi sẽ được in ra console.
  • Nếu không, thông báo lỗi sẽ được in ra console

Chạy ứng dụng

Thực thi chương trình bạn có thể thực hiện lệnh sau:

$ node chatGPT.js

Bạn nhập vào thông tin đầu tiên

Bắt đầu bằng câu hỏi đầu tiên của bạn và tiếp tục hay dừng lại.

Sau mỗi câu trả lời, bạn sẽ được hỏi liệu cuộc trò chuyện có nên tiếp tục không. Nếu muốn tiếp tục, bạn cần nhập “Y”. Sau đó, bạn sẽ được yêu cầu cung cấp thông tin input tiếp theo.

Vì mô hình gpt-3.5-turbo cũng có thể tính đến lịch sử của cuộc trò chuyện nên bạn có thể đặt các câu hỏi tiếp theo dựa trên bố cảnh của cuộc trò chuyện diễn ra trước đó.

Kết luận

API ChatGPT của OpenAI là một công cụ cực kỳ mạnh mẽ để xây dựng chatbot thông minh có thể hiểu và phản hồi ngôn ngữ tự nhiên. Với sự trợ giúp của Node.js, các nhà phát triển có thể dễ dàng tích hợp API này vào các ứng dụng web của họ và cung cấp cho người dùng những trải nghiệm đặc biệt.

Trong bài đăng này, tôi đã hướng dẫn quy trình thiết lập, thông tin xác thực API, tạo ra chatbot và thử nghiệm nó trong thời gian thực. Bằng cách làm theo các bước này bạn có thể tại chatbot của riêng mình để có thể tương tác với người dùng và cung cấp cho họ những phải hồi được cá nhân hóa.

Với sự phát triển không ngừng cuẩ AI, chúng ta có thể mong đợi chatbot có thể tinh vi và hiệu quả hơn nữa trong những năm tới. Bằng cách tìm hiểu sử dụng APT chatGPT của openAI trong Node.js bạn đang chuẩn bị cho mình sự thành công trong tương lại của các chatbot được hỗ trợ bởi AI.

Avatar photo

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc comment trong lập trình

Trong lập trình, code không chỉ là một tập hợp các câu lệnh để máy tính thực thi, mà còn là một hình thức...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc xử lý lỗi (Error Handling)

Trong quá trình phát triển phần mềm, việc xử lý lỗi không chỉ là một phần quan trọng mà còn ảnh hưởng trực tiếp...
Avatar photo Dat Tran Thanh
4 min read

One Reply to “OpenAI và cách sử dụng API ChatGPT trong Node.js”

Leave a Reply

Your email address will not be published. Required fields are marked *