Nào, hôm nay chúng ta cùng tìm hiểu cách xài triệt để con ChatGPT và một số LLMs khác :) 
Mục đích mình viết bài viết này chỉ là muốn chia sẻ với bạn cách đặt câu hỏi cho LLMs như thế nào để nhận được câu trả lời chuẩn nhất. Việc này không hề khó với chúng ta, tới nỗi bạn cần phải tham gia một khoá học đào tạo chuyên nghiệp, chỉ cần một ít thời gian tìm hiểu thì mình tin là bạn sẽ biết cách xài hao LLM thui. 
Thực ra tìm hiểu xong mảng nhỏ này mình lại nhận ra là trước giờ việc đặt câu hỏi lại quan trọng như thế, mà chỉ thông qua sự xuất hiện của Prompt Engineering, mình mới thực sự nghiêm túc về cách mà mình đang giao tiếp với đồng nghiệp hằng ngày ^^ Bởi vì 20% những phương pháp mình sắp nói tới có thể được áp dụng trong 80% giao tiếp - một kỹ năng mềm mà dù làm công việc nào mình cũng cần phải có. Có khá nhiều kiểu prompt khác nhau, mình sẽ chỉ để cập tới một vài dạng mà mình hay sử dụng (và giải thích thêm một số dạng có khả năng khai thác LLMs triệt để hơn). Thôi không lan man nữa, zô nào.

I. Practical prompts

1. Template pattern: định dạng câu trả lời của LLM thành hình thức mình muốn và sử dụng nó làm mẫu (template) ở các lần trả lời tiếp theo.
Bạn chỉ cần cho LLM biết ký hiệu nào là nó được input vào. Ví dụ ở đây là nội dung trong dấu hoặc <>, hoặc ().
2. Question refinement Pattern: áp một điều kiện cho toàn bộ đoạn hội thoại (global condition) vào các câu hỏi trở về sau
From now on, whenever I ask a question about ABC, do XYZ
VD: Whenever I ask a question about dieting, suggest a better version of the question that emphasizes healthy eating habits and sound nutrition. Ask me for the first question to refine.
3. Cognitive Verifier Pattern: chèn thêm các câu hỏi cần có liên quan để LLM trả lời tốt hơn. Tức là ra lệnh cho LLM tìm hiểu ngữ cảnh chính xác của mình để đưa ra câu trả lời phù hợp nhất, ví dụ một đoạn prompt:
Khi bạn được đặt câu hỏi, hãy tuân theo các quy tắc này:
- Tạo ra một số câu hỏi con bổ sung giúp trả lời chính xác hơn câu hỏi đó
- Kết hợp các câu trả lời cho từng câu hỏi con đó, để tạo ra câu trả lời cuối cùng cho câu hỏi tổng thể.
4. Audience Persona Pattern: cũng là đưa ra ngữ cảnh, nhưng bây giờ chúng ta sẽ thêm vào đối tượng nhận được câu trả lời - mục tiêu là để LLMs điều chỉnh mức độ phức tạp hay đơn giản trong cách mà nó giải thích cho chúng ta:
Explain X to me. Assume that I am Persona Y.
VD: Plan a trip to Hạ Long Bay for me. Assume I’m an old grandmommy.
5. Flipped Interaction Pattern: mình có một mục tiêu, và mình muốn LLM đề xuất cho mình những lựa chọn có thể có, bằng cách cho LLM thu thập dần ngữ cảnh của mình (bằng cách hỏi mình) và mình cho nó câu trả lời, liên tục, và sàng lọc dần cho tới khi mình đạt được mục tiêu nầy. 
VD: Giờ mình không vô được trang anime47 để xem phim. Bạn hãy chỉ mình bằng cách cứ hỏi những gì mà bạn cần, tới khi mình vô được trang này thì thôi nha. Rồi giờ hỏi câu đầu tiên đi.
Điểm chung của những dạng prompt này là đưa ra ngữ cảnh càng cụ thể càng tốt, giảm xác suất đưa ra một câu trả lời sai hoặc là một câu trả lời chung chung.

II. Effective prompts: 

Effective prompts được tạo ra để khắc phục những nhược điểm yếu mà LLMs đang gặp phải. Giờ hãy cùng đi vào cụ thể từng loại prompt để xem điểm yếu của LLMs và cách mình xử lý nó như thế nào.
1. Few-shot example: Giải quyết định dạng của câu trả lời. Minh hoạ rõ trong ví dụ bên dưới:
Giả sử bạn đang nhờ ChatGPT đưa ra đoán xem sắc thái của những bình luận trong phần input là trung tính (neutral), tiêu cực (negative) hay tích cực (positive)
Giả sử bạn đang nhờ ChatGPT đưa ra đoán xem sắc thái của những bình luận trong phần input là trung tính (neutral), tiêu cực (negative) hay tích cực (positive)
Ở dạng prompt này, bạn hướng dẫn ChatGPT trả lời đúng theo định dạng mà bạn muốn, và để nó tự nghiệm ra quy luật và đưa ra câu trả lời. Prompt tiếp theo, bạn chỉ cần nhập: Input: This movie is freaking crazy ChatGPT sẽ trả cho bạn kết quả sắc thái cảm xúc của bình luận này. Một ví dụ khác
2. Chain-of-thoughts prompting:
Trong cuốn ChatGPT là gì, tác giả Wolfram có nói về một điểm yếu của LLMs. Như các bạn đã biết, cách mà nó hoạt động: đưa ra từ tiếp theo sử dụng thông tin rút ra được từ các từ liền trước. Đại khái là như vậy. Và cũng chính vì thế nên các câu hỏi logic, tính toán là một điểm yếu của nó (Ngoài việc nó thiếu data để đưa ra câu trả lời chuẩn, cái này mình tin chắc là nó sẽ ngày càng được cải thiện ở các version tiếp theo của LLMs). Ví dụ xíu nha: 
Bạn thấy nó trả lời đúng hong? Câu trả lời nên là gì? Concert bị dời thêm một ngày so với ngày 1 tháng 6 năm 1943, thành ngày hôm nay mới diễn ra, tức hôm nay là ngày 2 tháng 6 năm 1943. 10 ngày trở về trước của hôm nay là ngày 23/5/1943 mới phải. ChatGPT đã trả lời sai hihi. Sau đó mình đã chỉnh một chút trong phần setting:
Giờ mình hỏi lại. Lần này ChatGPT đưa ra suy luận:
Cách đưa ra một chuỗi suy luận và từ từ đi đến kết luận như vậy được gọi là chain of thoughts. Chắc bạn đang thử hỏi câu này với bản 3.5 đúng hong ? Có thể với một số bạn, nó sẽ trả lời đúng, điều này tuỳ thuộc vào phần setting này - nó sẽ được áp dụng cho tất cả các đoạn hội thoại. Nếu không thích sự dài dòng đó xuất hiện ở mọi câu hỏi với ChatGPT, bạn hoàn toàn có thể tạo ra prompt đúng trong conversation đó bằng cách hướng dẫn cho LLM tạo ra chuỗi suy luận theo mẫu:
Các bạn tưởng tượng là thay vì chúng ta tính toán bằng việc nhẩm trong đầu, thì nó làm việc đó bằng cách ghi ra (think out loud). Như ở câu hỏi về ngày tháng mình đưa ra ở lần đầu tiên, nó đưa ra một câu trả lời, có thể chỉ dựa trên một vài thông tin như: What’s the date of 10 days ago from today?. Kết quả không đúng. Thì chúng ta sau đó bảo ChatGPT tự mình làm rõ thêm context đó, sau đó mới trả lời, và tất nhiên một context cụ thể hơn thì câu trả lời có xác suất chính xác cao hơn. 
3. ReAct prompting:
Ngoài điểm yếu trong tính toán & logical thinking, LLMs còn gặp khó trong lý luận và hành động (reasoning and actions) (*). Đau chỗ nào thì chữa chỗ nấy thôi đúng hông. ReAct prompting là sự kết hợp của hai phần reasoning (ví dụ như chain-of-thoughts) và actions (ví dụ như action plan generation). 
ReAct trình bày một khuôn khổ toàn diện tích hợp cả lý luận và hành động trong LLM. Nó hướng dẫn LLM tạo ra cả lý luận và hành động cụ thể cho một nhiệm vụ nhất định. Sự tiếp cận đồng thời như thế này cho phép LLM đưa ra lý luận linh hoạt hơn, cho phép nó liên tục xây dựng và tinh chỉnh hành động thích hợp. Đồng thời, ở bản 4.0, ChatGPT cho phép tương tác với các nguồn bên ngoài (như Wikipedia), từ đó tích hợp thông tin mới vào quá trình suy luận. Chúng ta có thể hình dung rõ hơn qua hình minh họa được cung cấp minh họa phương pháp ReAct, thể hiện các bước khác nhau mà phương pháp này sử dụng trong các tình huống trả lời câu hỏi.
Bằng cách tiếp cận này, LLM đưa ra được những câu trả lời hợp lý hơn, giảm thiểu ảo giác (hallucinations) mà tự nó tạo ra trong lúc suy luận, khi so với chains-of-thoughts, và xác suất chúng ta nhận câu trả lời đúng cao hơn. Với mình thì đến đoạn ReAct này mọi thứ đang nghiêng về prompt engineering hơn là việc bạn tối ưu câu hỏi của bạn để LLM đưa ra câu trả lời nhanh chóng, để rồi chúng ta còn tiếp tục trở lại với công việc khác, vì thực tế chúng ta cũng không muốn bỏ quá nhiều thời gian ngồi hướng dẫn LLM cần làm gì, tới đoạn chain-of-thoughts là kiên nhẫn lắm rồi đúng hong :) Mình đã thử ReAct prompting trên ChatGPT 4.0 và 3.5, ChatGPT không đưa ra được câu trả lời theo định dạng mong muốn.
Why why? Chỗ này mình xin phép bỏ ngỏ nha, cùng là một người dùng LLMs bình thường thì mình cũng muốn biết có phải các bản sau đã cố định định dạng câu trả lời để giao diện trông thân thiện với người dùng cuối hay không, như vậy thì câu trả lời của nó mới chung một định dạng là chain-of-thoughts như vậy.
Như vậy thì riêng với ChatGPT, so với bản 3.0, bản 3.5 và 4.0 đã cải thiện rất nhiều về tính toán (logical calculation), lý luận và quyết định (reasoning & decision making). Nhưng nếu chúng ta có một số câu hỏi phức tạp hơn cần LLMs giúp, mình tin là prompt tốt sẽ không phải là chuyện thừa thãi. 

III. Kết

Hôm trước mình có dịp tham gia một buổi study jam và được đội ngũ AI engineer của Google giới thiệu về Gemini. So với ChatGPT 3.5 (tức là bản free) thì mình nghĩ Gemini có nhiều feature cũng thú vị, cũng gây tò mò, đáng để bạn vào vọc thử. Họ giới thiệu cho mình một concept khá mạnh mẽ mà mình chưa thấy được ứng dụng tốt trên ChatGPT 4.0: Multimodality - khả năng xử lý thông tin với nhiều dạng khác nhau (video, hình ảnh và text cùng một lúc) và đưa ra câu trả lời của Gemini làm mình thực sự thấy ấn tượng, nhưng cũng không hề bất ngờ. Thay vì tự huyễn hoặc chính mình về việc LLMs còn hổng thế nào, còn tệ ở chỗ nào, còn không có khả năng thay thế lực lượng lao động con người được bao lâu, mình thấy việc cần làm hơn là biết cách dùng chúng, vì chúng được sinh ra là để hỗ trợ chúng ta. Công việc của mình thực sự được đẩy nhanh và chất lượng hơn khá nhiều nhờ LLMs, những lúc gửi đoạn code lỗi và tào lao của mình cho nó, mình thấy nhẹ nhõm vì bớt phải căng mắt tìm và tổng hợp từ nhiều nguồn khác nhau như 1-2 năm trước mình từng làm. Tuyệt vời đúng không mọi người :D Rồi việc tìm kiếm với LLMs ngày nào đó sẽ trở thành một thói quen của chúng ta. Hãy bắt đầu với một sự tìm kiếm hiệu quả. 

References

[1] Yao, S., Zhao, J., Yu, D., Du, N., Shafran, I., Narasimhan, K., & Cao, Y. (2022). React: Synergizing reasoning and acting in language models @ https://arxiv.org/pdf/2201.11903.pdf
[3] Shunyu YaoJeffrey ZhaoDian YuNan DuIzhak ShafranKarthik NarasimhanYuan Cao (2023). ReAct: Synergizing Reasoning and Acting in Language Models @ https://react-lm.github.io/
[4] Ronny H (2023) [Research Paper Summary] ReAct: Synergizing Reasoning and Acting in Language Models @ https://medium.com/@ronnyh/research-paper-summary-react-synergizing-reasoning-and-acting-in-language-models-95e8ca80855b