Giới thiệu

Kể từ khi được OpenAI công bố, ChatGPT đã tạo nên một cơn sốt trong lĩnh vực trí tuệ nhân tạo và xử lý ngôn ngữ tự nhiên (NLP). Theo báo cáo, ChatGPT đã đạt hơn 100 triệu người dùng chỉ trong vòng 2 tháng đầu tiên sau khi phát hành và giờ từ trên mạng xã hội, truyền hình hay trường học đều nhắc đến ChatGPT như một người bạn hỗ trợ đắc lực.

Tuy nhiên, chúng ta đã thực sự khai thác tối đa sức mạnh của ChatGPT chưa?

 

 

Trong series này, mình sẽ chia sẻ những khái niệm cơ bản và các kỹ thuật của Prompt Engineering mà mình biết được. Với việc áp dụng các kỹ thuật này để cải thiện prompt, chúng ta sẽ có thể tận dụng khả năng của LLMs trong nhiều lĩnh vực, từ công việc hàng ngày đến nghiên cứu và phát triển. Nếu chưa có tài khoản ChatGPT hãy tạo ngay cho bản thân một tài khoản và bắt đầu thôi.

Cơ bản về Prompt Engineering

Prompt là gì? Tại sao Prompt Engineering quan trọng?

Nảy giờ ở phần giới thiệu mình đã nói nhiều về Prompt và Prompt Engineering vậy thì nó là gì?

 

Prompt là đầu vào hoặc truy vấn mà bạn cung cấp cho Large Language Models (LLMs) hay câu hỏi cho ChatGPT.

 

Large Language Models (LLMs) là thuật ngữ để chỉ các mô hình xác suất có khả năng hiểu và sinh ra ngôn ngữ tự nhiên (Generate text) dựa trên kiến thức được thu thập từ các tập dữ liệu cực lớn. LLMs sẽ nhận vào một đoạn text và trả về một đoạn text khác dưới dạng phản hồi. Có nghĩa là, kết quả mà LLM hay ChatGPT trả về, hoàn toàn phụ thuộc vào input mà ta đưa vào cho nó. Nếu như input của bạn tốt bạn sẽ nhận được câu trả lời đúng với mong đợi và để làm được điều đó bạn cần biết Prompt Engineering.

 

 

Prompt Engineering (còn được gọi là prompt design) đề cập đến kỹ thuật thiết kế đầu vào (tức là prompt) rõ ràng, cụ thể và liên quan đến ngữ cảnh để hướng dẫn hoặc gợi ý cho ChatGPT có thể hiểu và trả lời, tạo ra được kết quả như mong muốn. Một người có kỹ năng về Prompt Engineerin được gọi là Prompt Engineer.

Để trở thành một Prompt Engineer hoặc tận dụng hết được sức mạnh của LLMs hay ChatGPT chúng ta phải hiểu và vận dụng được kỹ thuật Prompt Engineering. 

 

 

Đầu tiên, chúng ta cần phải nắm được các nguyên tắt, kỹ thuật cơ bản qua các ví dụ minh họa dưới đây.

Nguyên tắc cốt lõi của Prompt Engineering

  1. Conciseness and Clarity (Ngắn gọn và Rõ ràng)
    • Nguyên tắc đầu tiên đó là Prompt của bạn phải nên dễ hiểu và rõ ràng.
    • Ví dụ: Thay vì hỏi "Hãy kể về một số thứ về thế chiến II." bạn nên hỏi "Tóm tắt các sự kiện chính trong Thế chiến II."
    • Việc Prompt rõ ràng giảm đi sự mơ hồ và cải thiện độ chính xác của câu trả lời.
  2. Contextual Relevance (Liên quan đến Ngữ cảnh)
    • Tiếp theo là cung cấp ngữ cảnh cần thiết để giúp mô hình hiểu nền tảng của truy vấn hay câu hỏi của bạn.
    • Ví dụ: "Giải thích khái niệm trọng lực như bạn đang nói chuyện với một học sinh trung học đang học vật lý."
    • Việc viết prompt có ngữ cảnh sẽ giúp điều chỉnh các câu trả lời phù hợp với đúng đối tượng và tình huống. Như trên ví dụ ChatGPT sẽ cho ra câu trả lời dễ hiểu hơn vì đối tượng ở đây là học sinh trung học đang học vật lý.
  3. Specificity and Detail (Cụ thể và Chi tiết)
    • Sạo lại có ngắn gọn rõ ràng ở trên rồi giờ thì là cụ thể chi tiết?
    • Chi tiết và cụ thể mà mình đề cập ở đây là về những gì bạn muốn mô hình tạo ra. Bạn càng viết rõ được những gì bạn muốn thì mô hình sẽ sinh ra câu trả lời càng chính xác và liên quan hơn.
    • Ví dụ: "Liệt kê ba lợi ích của việc tập thể dục hàng ngày." Ở ví dụ đã chỉ rõ cụ thể là liệt kê 3 lợi ích.

Kỹ thuật Cơ bản trong Prompt Engineering

  1. Zero-Shot Learning (Học không qua Ví dụ)
    • Nghĩa là chúng ta sẽ hỏi và mô hình tạo ra câu trả lời mà không cần qua các ví dụ trước hoặc huấn luyện. Đây là kỹ thuật cơ bản nhất ,nó sẽ hữu ích cho các truy vấn đơn giản
    • Ví dụ: "Thủ đô của Pháp là gì?".
  2. One-Shot Learning (Học từ một ví dụ) và Few-Shot Learning (Học từ các ví dụ)
    • 2 kỹ thuật mà mình rất hay sử dụng, đó là cung cấp một hoặc nhiều ví dụ để hướng dẫn mô hình. Nó sẽ giúp cho ChatGPT có thể biết được định dạng hoặc phong cách câu trả lời mà bạn mong đợi.
    • Ví dụ 1: "Dịch 'Hello' sang tiếng Pháp. Bây giờ, dịch 'Goodbye' sang tiếng Pháp."
    • Ví dụ 2: "Dịch các cụm từ sau sang tiếng Pháp: 'Good morning' -> 'Bonjour', 'Good night' -> 'Bonne nuit'. Bây giờ, dịch 'See you later'."
  3. Ngoài ra còn rất nhiều kỹ thuật từ cơ bản đến nâng cao khác mà bạn có thể tìm đọc thêm như Chain-of-Thoughts, Generated Knowledge Prompting, Tree of Thoughts, Retrieval Augmented Generation (RAG),…

Với các ví dụ trên thì có vẻ khá dễ dàng đúng không? Chắc có không ít người đã và đang sử dụng những kỹ thuật này để hỏi ChatGPT phục vụ nhu cầu của bản thân. Tuy nhiên đây chỉ mới là những câu hỏi ví dụ đơn giản, đối với những yêu cầu phức tạp hơn chúng ta cần phải có một cấu trúc prompt phức tạp hơn.

Tình huống: Xây dựng một Ứng dụng Unique Bedtime Chronicles

Tạo ra một câu chuyện để kể cho em bé đi ngủ hằng đêm.

  • Câu truyện không được trùng lập
  • Tên em bé sẽ là tên nhân vật chính
  • Câu chuyện sẽ có thể loại
  • Phù hợp với độ tuổi của bé
  • Điạ điểm xảy ra câu chuyện đa dạng
  • Có thể thêm nhân vật vào câu chuyện

Nếu là bạn, bạn sẽ viết prompt như thế nào? Hãy dừng lại một chú, thử xây dựng prompt cho yêu cầu này và hỏi ChatGPT xem sao.
Và giờ cùng xem cách mình viết một prompt hoàn chỉnh cho ứng dụng này sẽ như thế nào.

 

alt text

Xây dựng một Prompt Hoàn chỉnh

Một prompt được xây dựng hoàn chỉnh thường bao gồm các yếu tố sau:

  1. Instruction (Hướng dẫn): "Please write me a short story."
    • Nêu rõ những gì bạn muốn mô hình làm. Việc này cung cấp chỉ dẫn rõ ràng, giảm đi xác xuất các câu trả lời không liên quan.
  2. Role Assignment (Gán vai trò): "You are a children's author."
    • Gán một vai trò cụ thể cho mô hình để thu hẹp phạm vi câu trả lời. Việc phân công vai trò giúp điều chỉnh câu trả lời tập trung vào một lĩnh vực cụ thể.
  3. Providing Context (Ngữ cảnh): "In this story, Nam is the main character, is 7-year-old and male. The story takes place at Wano with the following characters: Lufy, Zoro."
    • Cung cấp thông tin nền tảng để nâng cao câu trả lời. Prompt có ngữ cảnh tạo ra các câu trả có thông tin liên quan hơn.
  4. Output Indicator (Định dạng đầu ra): "First content is story title and have the words \'Title:\' at the start. After story title, write me an image prompt for an AI image generator and have the words \'Image Prompt:\' at the start. Choose a book illustrator and put something in the image prompt to say the image should be made in the style of that artist."
    • Và cuối cùng là chỉ định định dạng hoặc loại phản hồi mà bạn mong đợi.
    • Ở ví dụ này mình define rõ mong muốn của mình là title của câu chuyển sẽ có chữ \'Title:\' bắt đầu trong câu, còn prompt hình ảnh thì sẽ có chữ \'Image Prompt:\' bắt đầu trong câu…

Như vậy, với cấu trúc trên mình có một prompt hoàn chỉnh:

 

Prompt: You are a children's author. Please write me a short story. In this story, Nam is the main character, is 7-year-old and male. The story takes place at Wano with the following characters: Lufy, Zoro. First content is story title and have the words \'Title:\' at the start. After story title, write me an image prompt for an AI image generator and have the words \'Image Prompt:\' at the start. Choose a book illustrator and put something in the image prompt to say the image should be made in the style of that artist.

 

Chỉ cần thay thế các thông tin như tên em bé, tuổi, địa điểm, nhân vật trong câu chuyện,… mình đã có một ứng dụng thú vị như bên dưới 😄

 

define_story.png loading.png

Video: demo

Github: https://github.com/olololoe110399/bedtime_stories

Kết luận

Prompt engineering là một kỹ năng thiết yếu để tương tác hiệu quả với các LLMs như ChatGPT. Bằng cách hiểu và áp dụng các nguyên tắc và kỹ thuật được nêu trong hướng dẫn này, bạn có thể cải thiện đáng kể chất lượng của các phản hồi do LLMs tạo ra. Dù bạn đang làm việc với các truy vấn đơn giản hay các nhiệm vụ phức tạp, một prompt đúng có thể tạo nên sự khác biệt trong việc đạt được các kết quả chính xác và liên quan hơn.

Hãy chia sẻ cho mình quan điểm của bạn để chúng ta cùng trao đổi và thảo luận hoặc góp ý những gì mình nói chưa đúng nếu bạn thấy nhé.

Phần tới mình sẽ nói về một số kỹ thuật nâng cao hơn, thêm các ví dụ khác và chia sẻ các prompt tips