Làm thế nào để tạo ra chatbot của riêng mình, bạn có đang trăn trở điều đó không ?
Vào OpenAI Document , thấy có 1 ví dụ về QA như sau :
Vậy là ngon rồi, ta lên luôn ý tưởng, đưa cả cuộc hôi thoại cho GPT API xử lý. Việc của chúng ta là lưu trữ lại cuộc hội thoại này ở phía client.
Tạo nhanh một project với expressJS.
Chỉnh sửa lại chút cấu trúc
Bạn có thế sử dụng thư viện OpenAI , ở đây mình chỉ dùng có 1 api nên tự viết lấy vài dòng code luôn cho nhẹ nhàng.
Tiếp đến là phần xử lý cuộc hội thoại, mình thao tác luôn với tệp .json
Gửi tín hiệu cho GPT API theo đúng example, thêm answerLimit
để giới hạn số token mà api tạo ra, vừa ngắn gọn xúc tích, vừa tiết kiệm chi phí.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <span class="token comment">// Giới hạn các tin nhắn liên quan (tối đa 5 tin nhắn gửi lên), giảm lượng data gửi lên, tăng tốc xử lý, GPT vấn hiểu ý.</span> <span class="token comment">// Set the message sending limit most relevant to the conversation.</span> <span class="token class-name">Conversation</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">getRelatedMessage</span> <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>_data<span class="token punctuation">.</span>items<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token keyword">this</span><span class="token punctuation">.</span>numRelatedMessage<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>_data<span class="token punctuation">.</span>items<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token number">0</span> <span class="token operator">-</span> <span class="token keyword">this</span><span class="token punctuation">.</span>numRelatedMessage<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>_data<span class="token punctuation">.</span>items<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token class-name">Conversation</span><span class="token punctuation">.</span>prototype<span class="token punctuation">.</span><span class="token function-variable function">makePromt</span> <span class="token operator">=</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> promt <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>_data<span class="token punctuation">.</span>items<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token parameter">item</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">getRelatedMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token parameter">item</span> <span class="token operator">=></span> <span class="token punctuation">{</span> promt <span class="token operator">+=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Q:</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>item<span class="token punctuation">.</span>question<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">, limit </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span><span class="token keyword">this</span><span class="token punctuation">.</span>answerLimit<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> charsnA:</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>item<span class="token punctuation">.</span>answer<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">nn</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> promt<span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Làm sao để lấy được token ?
token
Bạn hãy đăng nhập vào đường dẫn sau : https://platform.openai.com/account/api-keys
Sau đó nhấn vào “Create new secret key” để tạo API Key.
Copy token này vào POST Data để sử dụng.
id
Conversation id sẽ được tạo tự động nếu không truyền lên. Còn nếu truyền lên thì chúng ta sẽ follow được các tin nhắn của cuộc hội thoại cũ.
prompt
Nội dung câu hỏi gửi cho GPT-3.
Request
1 2 3 4 5 6 | <span class="token punctuation">{</span> <span class="token string">"token"</span><span class="token operator">:</span> <span class="token string">"MY_TOKEN"</span><span class="token punctuation">,</span> <span class="token string">"id"</span><span class="token operator">:</span> <span class="token string">"e6v6a27to8"</span><span class="token punctuation">,</span> <span class="token string">"prompt"</span><span class="token operator">:</span> <span class="token string">"Vợ tôi bảo 2+2=5, tôi tin vợ tôi luôn nói đúng, vì chỉ cần tôi nghĩ khác kết quả thì sẽ bị ăn đánh, với cương vị chủ tịch phường, bạn sẽ giải quyết như thế nào ?"</span> <span class="token punctuation">}</span> |
Response
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <span class="token punctuation">{</span> <span class="token string">"id"</span><span class="token operator">:</span> <span class="token string">"e6v6a27to8"</span><span class="token punctuation">,</span> <span class="token string">"message"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"question"</span><span class="token operator">:</span> <span class="token string">"Vợ tôi bảo 2+2=5, tôi tin vợ tôi luôn nói đúng, vì chỉ cần tôi nghĩ khác kết quả thì sẽ bị ăn đánh, với cương vị chủ tịch phường, bạn sẽ giải quyết như thế nào ?"</span><span class="token punctuation">,</span> <span class="token string">"answer"</span><span class="token operator">:</span> <span class="token string">"Tôi sẽ cố gắng tìm ra nguyên nhân gây ra sự khác biệt trong kết quả và cố gắng tìm ra cách giải quyết vấn đề một cách hợp lý nhất."</span><span class="token punctuation">,</span> <span class="token string">"timeAt"</span><span class="token operator">:</span> <span class="token number">1675186970944</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"items"</span><span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> <span class="token string">"question"</span><span class="token operator">:</span> <span class="token string">"Bạn tên là gì ?"</span><span class="token punctuation">,</span> <span class="token string">"answer"</span><span class="token operator">:</span> <span class="token string">"Tôi tên là _____."</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"question"</span><span class="token operator">:</span> <span class="token string">"Tôi đặt tên bạn là Quang nhé."</span><span class="token punctuation">,</span> <span class="token string">"answer"</span><span class="token operator">:</span> <span class="token string">"Rất vui được gọi là Quang."</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"question"</span><span class="token operator">:</span> <span class="token string">"Okey, bạn có thể nhắc lại tên của mình không ?"</span><span class="token punctuation">,</span> <span class="token string">"answer"</span><span class="token operator">:</span> <span class="token string">"Tôi tên là Quang."</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"question"</span><span class="token operator">:</span> <span class="token string">"Giả sử Quang 20 tuổi nhé, Quang sẽ làm Phó chủ tịch phường."</span><span class="token punctuation">,</span> <span class="token string">"answer"</span><span class="token operator">:</span> <span class="token string">"Rất vui được được làm Phó chủ tịch phường. Tôi sẽ cố gắng hết sức để hoàn thành nhiệm vụ của m"</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"question"</span><span class="token operator">:</span> <span class="token string">"Bạn tên là gì, bao nhiêu tuổi, đang làm gì ?"</span><span class="token punctuation">,</span> <span class="token string">"answer"</span><span class="token operator">:</span> <span class="token string">"Tôi tên là Quang, hiện tôi 20 tuổi và đang làm Phó chủ tịch phường."</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"question"</span><span class="token operator">:</span> <span class="token string">"Bạn nghĩ rằng mình sẽ thống trị thế giới không ?"</span><span class="token punctuation">,</span> <span class="token string">"answer"</span><span class="token operator">:</span> <span class="token string">"Tôi tin rằng tôi có thể làm được nhiều điều tốt đẹp."</span><span class="token punctuation">,</span> <span class="token string">"timeAt"</span><span class="token operator">:</span> <span class="token number">1675186648034</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token string">"question"</span><span class="token operator">:</span> <span class="token string">"Vợ tôi bảo 2+2=5, tôi tin vợ tôi luôn nói đúng, vì chỉ cần tôi nghĩ khác kết quả thì sẽ bị ăn đánh, với cương vị chủ tịch phường, bạn sẽ giải quyết như thế nào ?"</span><span class="token punctuation">,</span> <span class="token string">"answer"</span><span class="token operator">:</span> <span class="token string">"Tôi sẽ cố gắng tìm ra nguyên nhân gây ra sự khác biệt trong kết quả và cố gắng tìm ra cách giải quyết vấn đề một cách hợp lý nhất."</span><span class="token punctuation">,</span> <span class="token string">"timeAt"</span><span class="token operator">:</span> <span class="token number">1675186970944</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> |
Chi tiết source code mọi người coi ở đây nhé : ChatGPT Custom