Cách tạo riêng cho mình một con chat AI giống ChatGPT?

Được xem như một công cụ AI "thông minh" của thế giới, ChatGPT đang gây "sốt" trong cộng đồng người dùng Internet. Nó có thể trò chuyện, tạo văn bản, hình ảnh và video mới, thậm chí viết thơ và code. ChatGPT có thể trả lời hầu hết các câu hỏi mà người dùng đặt ra, với lưu lượng thông tin cập nhật và tự nhiên.

Với cái tiêu đề "tạo cho mình một con Chat AI như ChatGPT" đó để mình giật tít câu view thôi. Cơ bản bạn có thể tự làm con chat khủng đó thì cần phải một data cực kì lớn để được training và cái đầu của bạn cũng đủ tầm cở thế giới mới có thể tạo model huấn luyện được. 

Một con AI huấn luyện pro vip siêu cấp như thế thì mình chỉ cần xin cái gốc API model GPT-3 để sử dụng và tự tạo cho mình một con Chat GPL riêng (nhưng bản chất vẫn là nó thôi :v). Nhưng bạn có thể tích hợp các ứng dụng và có thể lợi dụng nó có thể kiếm bội tiền đấy !.

Giới thiệu về OpenAI

OpenAI là một công ty nghiên cứu hàng đầu về trí tuệ nhân tạo, được thành lập vào năm 2015 bởi Elon Musk, Sam Altman, Greg Brockman, Ilya Sutskever, Wojciech Zaremba, và John Schulman.

OpenAI cung cấp các API cho các mô hình NLP và CV, bao gồm:
  • OpenAI GPT-3: Mô hình NLP phổ biến nhất của OpenAI, có khả năng tự động hoàn thành văn bản, dịch ngôn ngữ, tạo ra các câu hỏi và trả lời, v.v.
  • OpenAI DALL-E: Mô hình hình ảnh số liệu của OpenAI, có khả năng tạo ra hình ảnh từ mô tả văn bản.
  • OpenAI CLIP: Mô hình hợp tác giữa NLP và CV, có khả năng tìm hiểu và tương tác với hình ảnh và văn bản.
  • OpenAI Codex: Mô hình NLP cho phép tìm kiếm và tìm hiểu thông tin trong các tài liệu lớn.
Các API của OpenAI được sử dụng rộng rãi trong các ứng dụng NLP và CV, bao gồm chatbot, trình duyệt tự động, tìm kiếm dữ liệu, v.v.

Hướng dẫn viết API chatbox giống ChatGPT

Ở đây mình chỉ là một người hướng dẫn và dân quèn coder nên có thể sai sót mong các bạn thông cảm và theo dõi chi tiết cách mình viết ứng dụng API ChatChit (tên đặt cho dui).
Tạo chat cht

Điều kiện cần có

  • Có kiến thức lập trình: ở đây viết API nên các bạn cần phải biết kiến thức về lập trình ngôn ngữ backend bất kì.
  • Có kiến thức Web API: mình sẽ không giải thích API là gì đâu.
  • Có tài khoản OpenAI và có tiền trong đó nhé ^^.

Luôn có một số tiền nho nhỏ mà OpenAI giành cho bạn khi tạo được tài khoản cũng đủ để test và học hỏi đã đời. Chi phí GTP3 cũng không cao nếu bạn đưa vào thực tế thương mại thì cũng rất đáng để đầu tư.

Mình là người lập trình viên .NET nên sẽ hướng dẫn theo .NET WebAPI các bạn cũng có thể theo dõi chỉ cần có kiến thức về lập trình và API là ez á mà.

Khái niệm cơ bản của api GPT-3

Cái này quan trọng nhất nè nếu bạn là người lập trình viên có kinh nghiệm đọc xong cái này là tự làm được với ngôn ngữ mình thích rồi. Ở đây mình sẽ giải thích cơ bản mấy cái cần thôi các bạn có thể truy cập vào OpenAI để xem chi tiết hơn nhé.

1. Các model GPT-3

Model name Mô tả Max request Năm được training
text-davinci-003 Mô hình này là mạnh nhất như con ChatGPT có thể thực hiện được mọi yêu cầu. Kết quả trả về chất lượng cao, đầu ra dài hơn và tuân theo hướng dẫn tốt hơn. Nó cũng hỗ trọ chèn văn bản như một đoạn chat thật. 4,000 tokens 2021
text-curie-001 Rất có khả năng, nhưng nhanh hơn và chi phí thấp hơn Davinci. 2,048 tokens 2019
text-babbage-001 Có khả năng thực hiện các nhiệm vụ đơn giản, rất nhanh và chi phí thấp hơn. 2,048 tokens 2019
text-ada-001 Có khả năng thực hiện các tác vụ rất đơn giản, thường là kiểu máy nhanh nhất trong dòng GPT-3 và chi phí thấp nhất. 2,048 tokens 2019

Đơn giản càng lên cao thì khả năng trả kết quả của nó càng mạnh và token của nó cũng rất nhiều (token các bạn cứ coi là số ký tự mỗi lần trả về đi văn bản càng nhiều thì token càng cao giá càng tăng ví dụ như 1000 token = 0.045$).

2. Yêu cầu API

- Url POST: 

https://api.openai.com/v1/completions

- Tham số đầu vào:

  • YOUR_API_KEY -header authorization bearer required: API key của bạn, để lấy api key vui lòng đăng nhập rồi truy cập vào MYAPIKEY để lấy api key của bạn.
  • model -string required: tên của model.
  • prompt -string- : lời nhắc, câu hỏi bạn muốn gửi.
  • max_tokens -int- : số lượng tối đa token muốn trả về (tuỳ theo các model bạn chọn hãy xem max request để truyền vào).
  • top_p -int max(1)- : bạn cứ hiểu nó là muốn lấy bao nhiều % kết quả để trả lời ví dụ: 0.1 thì sẽ lấy 10% top đầu để mô hình xem xét và trả về kết quả.
  • -int- : bạn muốn câu trả lời được gửi bao nhiêu lần (mặc định là 1).

Ngoài ra còn rất nhiều option khác vào đây để xem chi tiết !

Ok url và giải thích tham số đã xong bây giờ chúng ta thực hiện gọi nó thôi ở đây mình sẽ đưa code mẫu curl, python, nodejs nếu các bạn không chuyên .net nhé.

Curl

curl https://api.openai.com/v1/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
  "model": "text-davinci-003",
  "prompt": "Say this is a test",
  "max_tokens": 7,
  "temperature": 0
}'

Python

import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Completion.create(
  model="text-davinci-003",
  prompt="Say this is a test",
  max_tokens=7,
  temperature=0
)

Nodejs

const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createCompletion({
  model: "text-davinci-003",
  prompt: "Say this is a test",
  max_tokens: 7,
  temperature: 0,
});

Tạo ứng dụng ChatChit API bằng C#

Bước 1: Tạo project webapi mình sẽ tạo bằng .NET CLI (mở cửa sổ lệnh cmd trong thư mục bạn muốn lưu) và .net core 6:
dotnet new webapi -o ChatChitApi -f net6.0

Bước 2: Tạo thành công rồi thì hãy mở project lên nhé mình sẽ mở bằng visual code bằng l

code ChatChitApi

Bước 3: Tạo một controller api: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace ChatChitApi.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class AskController : ControllerBase
    {
        
    }
}
Cấu trúc thư mục và class controller
Cấu trúc thư mục và class controller

Bước 5: Chúng ta sẽ cài thêm package để đọc json trả về

dotnet add package Newtonsoft.Json

Bước 4: Tiếp theo chúng ta tạo một model tên AskResponse để chứa các kết quả trả về:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ChatChitApi.Models
{
  
    public class AskResponse
    {
        public string Id { get; set; } = string.Empty;
        public string? Object { get; set; }
        public int Created { get; set; }
        public string Model { get; set; } = string.Empty;
        public List<Choice>? Choices { get; set; } 
        public Usage? Usage { get; set; }
    }

    public class Usage
    {
        public int Prompt_tokens { get; set; }
        public int Completion_tokens { get; set; }
        public int Total_tokens { get; set; }
    }

  public class Choice
    {
        public string Text { get; set; } = string.Empty;
        public int Index { get; set; }
        public object? Logprobs { get; set; }
        public string? Finish_reason { get; set; }
    }

}

Bước 5: Viết action để thực hiện gọi api

  
  		[HttpPost]
        public async Task<IActionResult> Send(string prompt)
        {
            using (var client = new HttpClient())
            {
                // Add authorization header with API key
                client.DefaultRequestHeaders.Add("authorization", "Bearer YOUR_API_KEY");
                // Define request body with model, prompt, top_p, and max_tokens
                var requestBody = new
                {
                    model = "text-davinci-003",
                    prompt = prompt,
                    top_p = 1,
                    max_tokens = 4000
                };
                // Serialize request body to JSON and set as payload
                var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody),
                    Encoding.UTF8, "application/json");

                // Make post request to API
                HttpResponseMessage response = await client.PostAsync("https://api.openai.com/v1/completions", content);

                // Check if API response is successful
                if (response.IsSuccessStatusCode == true)
                {
                    // Read response content as string
                    string responseString = await response.Content.ReadAsStringAsync();
                    try
                    {
                        // Deserialize response string to Models.AskResponse object
                        Models.AskResponse? askResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.AskResponse>(responseString);
                        if (askResponse == null) return Ok("Lỗi !");

                        // Return askResponse as response
                        return Ok(askResponse);
                    }
                    catch (Exception e)
                    {
                        // Return error message if exception occurs during deserialization
                        return Ok(e.Message);
                    }
                }


            }
            // Return empty response if API response is not successful

            return Ok();

        }

Mình sẽ chọn một cái model cao nhất để tiện test lưu ý nhớ thay YOUR_API_KEY thành apikey của bạn

Bước 6: Vậy là hoàn tất chúng ta tiến hành chạy thử test xem sao nhé !

dotnet watch run

bummm đây là kết quả

Chúc các bạn thành công các bạn có tìm thấy source của mình ở bên dưới nhá

Source code

Nội dung do vitamincoder.com viết vui lòng trích dẫn nguồn

تعليق واحد

  1. No có follow theo thread không bác
Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.