Bạn có thể đạt được nhiều điều chỉ với những câu lệnh (prompt) đơn giản, nhưng chất lượng của kết quả phụ thuộc vào lượng thông tin bạn cung cấp và cách bạn xây dựng prompt. Một prompt có thể chứa thông tin như hướng dẫn hoặc câu hỏi mà bạn gửi đến mô hình và bao gồm các chi tiết khác như bối cảnh, đầu vào hoặc ví dụ. Bạn có thể sử dụng những yếu tố này để chỉ dẫn AI một cách hiệu quả hơn nhằm cải thiện chất lượng kết quả.
Hãy bắt đầu bằng cách xem qua một ví dụ cơ bản về một câu lệnh đơn giản:
Prompt
The sky is
Output:
blue.
Nếu bạn đang sử dụng OpenAI Playground hoặc bất kỳ mô hình ngôn ngữ nào khác, bạn có thể cài đặt mô hình như ảnh bên dưới
Dưới đây là hướng dẫn về cách bắt đầu với OpenAI Playground:
Một điều cần lưu ý là khi sử dụng các mô hình trò chuyện của OpenAI như gpt-3.5-turbo
hoặc gpt-4
, bạn có thể cấu trúc prompt của mình theo ba vai trò khác nhau: system
, user
, và assistant
. Tin nhắn system
không bắt buộc nhưng giúp xác định hành vi tổng thể của assistant
Ví dụ trên chỉ bao gồm một tin nhắn từ người dùng mà bạn có thể sử dụng để ra lệnh trực tiếp mô hình. Để đơn giản, tất cả các ví dụ, trừ khi có thông báo rõ ràng, sẽ chỉ sử dụng tin nhắn user
để ra lệnh mô hình gpt-3.5-turbo
. Tin nhắn assistant
trong ví dụ trên tương ứng với phản hồi của mô hình. Bạn cũng có thể xác định một tin nhắn assistant
để truyền đạt các ví dụ về hành vi mong muốn mà bạn muốn.
Bạn có thể quan sát từ câu lệnh ví dụ ở trên rằng mô hình ngôn ngữ phản hồi bằng một chuỗi các mã thông báo (tokens) có ý nghĩa trong bối cảnh "The sky is"
. Đầu ra có thể không như mong đợi hoặc xa rời nhiệm vụ bạn muốn thực hiện. Thực tế, ví dụ cơ bản này nhấn mạnh sự cần thiết phải cung cấp nhiều ngữ cảnh hơn hoặc chỉ dẫn cụ thể về điều bạn muốn đạt được với hệ thống. Đây chính là những gì mà kỹ thuật thiết kế câu lệnh (prompt engineering) đề cập đến.
Hãy thử cải thiện nó một chút:
Prompt:
Complete the sentence: The sky is
Output:
blue during the day and dark at night.
Có tốt hơn không? Vâng, với yêu cầu trên, bạn đang hướng dẫn mô hình hoàn thành câu, vì vậy kết quả trông tốt hơn nhiều khi nó thực hiện đúng những gì bạn đã yêu cầu ("hoàn thành câu"). Cách tiếp cận này trong việc thiết kế các yêu cầu hiệu quả để hướng dẫn mô hình thực hiện một nhiệm vụ mong muốn được gọi là kỹ thuật thiết kế câu lệnh trong hướng dẫn này.
Ví dụ trên là một minh họa cơ bản về những gì có thể thực hiện với các mô hình ngôn ngữ lớn (LLMs) ngày nay. Các LLM hiện tại có khả năng thực hiện đủ loại nhiệm vụ nâng cao, từ tóm tắt văn bản đến suy luận toán học và tạo mã.
Bạn đã thử một câu lệnh rất đơn giản ở trên. Một câu lệnh tiêu chuẩn có định dạng sau:
<Câu hỏi>?
hoặc
<Hướng dẫn>
Bạn có thể định dạng nó thành dạng trả lời câu hỏi (QA), đây là định dạng chuẩn trong nhiều tập dữ liệu QA, như sau:
Q: <Câu hỏi>?A:
Khi đưa ra câu lệnh như trên, nó còn được gọi là zero-shot prompting, tức là bạn đang trực tiếp yêu cầu mô hình phản hồi mà không có bất kỳ ví dụ hay minh họa nào về tác vụ mà bạn muốn nó thực hiện. Một số mô hình ngôn ngữ lớn có khả năng thực hiện zero-shot prompting, nhưng điều này phụ thuộc vào độ phức tạp và kiến thức của tác vụ cũng như các tác vụ mà mô hình đã được huấn luyện để thực hiện tốt.
Một ví dụ cụ thể về yêu cầu như sau:
Prompt
Q: Kỹ thuật thiết kế câu lệnh (prompt engineering) là gì?
Với một số mô hình mới hiện nay, bạn có thể bỏ qua phần "Q:" vì nó đã được mặc định và hiểu bởi mô hình như một nhiệm vụ trả lời câu hỏi dựa trên cách mà trình tự được cấu thành. Nói cách khác, prompt có thể được đơn giản hóa như sau:
Prompt
Kỹ thuật thiết kế câu lệnh (prompt engineering) là gì?
Dựa trên định dạng tiêu chuẩn ở trên, một kỹ thuật phổ biến và hiệu quả để yêu cầu được gọi là few-shot prompting (câu lệnh với ví dụ), trong đó bạn cung cấp các ví dụ (ví dụ như các bản trình bày). Bạn có thể định dạng các lời nhắc few-shot như sau:
<Câu hỏi>?<Trả lời><Câu hỏi>?<Trả lời><<Câu hỏi>?<Trả lời><Câu hỏi>?
Định dạng phiên bản QA sẽ trông như thế này:
Q: <Câu hỏi>?A: <Trả lời>Q: <Câu hỏi>?A: <Trả lời>Q: <Câu hỏi>?A: <Trả lời>Q: <Câu hỏi>?A:
Hãy nhớ rằng không cần thiết phải sử dụng định dạng QA. Định dạng của prompt phụ thuộc vào nhiệm vụ cụ thể. Ví dụ, bạn có thể thực hiện một nhiệm vụ phân loại đơn giản và cung cấp các ví dụ minh họa cho nhiệm vụ như sau:
Prompt:
Điều này thật tuyệt vời! // Tích cực
Điều này thật tệ! // Tiêu cực
Wow, bộ phim đó thật tuyệt! // Tích cực
Thật là một chương trình khủng khiếp!
Output:
Tiêu cực
Các câu lệnh few-shot cho phép học trong ngữ cảnh, tức là khả năng của các mô hình ngôn ngữ trong việc học các nhiệm vụ được cung cấp thông qua một vài ví dụ. Chúng tôi sẽ giới thiệu kỹ hơn về việc ra lệnh zero-shot và few-shot trong các phần tiếp theo.