Đượ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 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.
Hướng dẫn viết API chatbox giống ChatGPT
Đ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
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ả.
- n -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#
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 |
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 codeNội dung do vitamincoder.com viết vui lòng trích dẫn nguồn