Bạn đã biết gì về prompt engineering? (P4) - Học được gì từ chiến lược thiết kế prompt của các kỹ sư Google?
Trong API docs của Google cung cấp cho mô hình Gemini, có mục Prompt design strategies, tức một số chiến lược chúng ta có thể áp dụng khi thiết kế prompt cho mô hình ngôn ngữ lớn. Tuy đây là tài liệu dành cho Gemini nhưng mình thấy nó hoàn toàn có thể áp dụng cho các LLM khác. Hãy cùng xem các kỹ sư Google có cho chúng ta biết thêm điều gì hay ho mới mẻ về prompt engineering không nhé:
1. Cung cấp chỉ dẫn rõ ràng và cụ thể
Đưa ra chỉ dẫn cho mô hình về những việc cần làm là một cách đơn giản và hiệu quả để tùy chỉnh hành vi của mô hình. Hãy đảm bảo rằng các chỉ dẫn đưa ra là rõ ràng và cụ thể.
- Xác định nhiệm vụ cần thực hiện: Mô tả chi tiết nhiệm vụ mà bạn muốn mô hình thực hiện.
- Đưa ra các ràng buộc: Cho mô hình biết những gì nên làm và không nên làm.
- Xác định định dạng của phản hồi: Đưa ra hướng dẫn chỉ định định dạng (format) của phản hồi. Ví dụ: bạn có thể yêu cầu mô hình đưa ra phản hồi dưới dạng bảng, dạng json, danh sách gạch đầu dòng, danh sách từ khóa, câu hoặc đoạn văn.
2. Cung cấp ví dụ (few-shot)
Bạn có thể đưa vào prompt các ví dụ về các phản hồi đúng. Từ các ví dụ, mô hình sẽ cố gắng xác định các pattern và mối quan hệ để áp dụng khi tạo phản hồi. Few-shot prompting thường được sử dụng để điều chỉnh định dạng, cách diễn đạt, phạm vi hoặc khuôn mẫu chung của phản hồi. Hãy sử dụng các ví dụ cụ thể và đa dạng để giúp mô hình xác định trọng tâm và tạo ra kết quả chính xác hơn.
Zero-shot prompt có thể sẽ kém hiệu quả hơn few-shot vì các ví dụ giúp cho mô hình biết cách áp dụng chỉ dẫn. Trên thực tế, nếu ví dụ đủ rõ ràng và đủ tốt, thậm chí bạn có thể không cần cung cấp chỉ dẫn cho mô hình.
- Tìm số lượng ví dụ tối ưu: Bạn có thể thử nghiệm với số lượng ví dụ cung cấp trong lời nhắc để có kết quả đúng như mong muốn nhất. Các mô hình như PaLM và Gemini thường có thể nắm được các pattern bằng cách sử dụng một vài ví dụ, các mô hình đơn giản hơn như BERT có thể cần nhiều hơn. Tuy nhiên, nếu đưa vào quá nhiều ví dụ có thể dẫn đến overfit.
- Sử dụng các ví dụ để cho mô hình thấy những gì cần làm theo sẽ hiệu quả hơn so với việc chỉ cho mô hình những gì cần tránh.
- Cung cấp định dạng nhất quán cho các ví dụ: Đảm bảo rằng cấu trúc và định dạng của các ví dụ giống nhau để tránh phản hồi có định dạng không mong muốn, hãy đặc biệt chú ý đến thẻ XML, khoảng trắng, xuống dòng, vv.
3. Cung cấp thông tin ngữ cảnh
Bạn có thể đưa vào prompt các hướng dẫn và thông tin mà mô hình cần để giải quyết vấn đề thay vì cho rằng mô hình có tất cả thông tin cần thiết. Thông tin theo ngữ cảnh này giúp mô hình hiểu được các ràng buộc và chi tiết về những gì bạn yêu cầu nó thực hiện.
4. Thêm tiền tố (prefix)
Tiền tố là một từ hoặc cụm từ mà bạn thêm vào nội dung prompt để phục vụ một số mục đích, tùy thuộc vào vị trí bạn đặt tiền tố:
- Tiền tố đầu vào: được thêm vào đầu vào giúp chỉ ra các phần quan trọng về mặt ngữ nghĩa của đầu vào cho mô hình. Ví dụ: tiền tố "tiếng Anh:" và "tiếng Pháp:" phân định hai ngôn ngữ khác nhau.
- Tiền tố đầu ra: Mặc dù đầu ra do mô hình tạo ra nhưng bạn có thể thêm tiền tố cho đầu ra trong lời nhắc. Tiền tố đầu ra cung cấp cho mô hình thông tin về những gì được mong đợi dưới dạng phản hồi. Ví dụ: tiền tố đầu ra "JSON:" báo hiệu cho mô hình rằng đầu ra phải ở định dạng JSON.
- Tiền tố ví dụ: Trong few-shot prompts, việc thêm tiền tố vào ví dụ sẽ cung cấp các nhãn mà mô hình có thể sử dụng khi tạo đầu ra, giúp xử lý (parsing) nội dung đầu ra dễ dàng hơn.
Trong ví dụ sau, "Text:" là tiền tố đầu vào và "The answer is:" là tiền tố đầu ra
Classify the text as one of the following categories.
- large
- small
Text: Rhino
The answer is: large
Text: Mouse
The answer is: small
Text: Snail![image.png](https://images.viblo.asia/8447d5b7-3d80-49e0-8814-5a2419ff979a.png
The answer is: small
Text: Elephant
The answer is:
5. Để mô hình viết nốt text đầu vào
Cơ chế hoạt động của các mô hình ngôn ngữ lớn là tự động hoàn thành đoạn text được đưa vào. Nếu bạn "mớm" cho mô hình một nội dung dang dở, mô hình sẽ trả về phần tiếp theo của đầu vào đó dựa trên mọi ví dụ hoặc ngữ cảnh có sẵn trong prompt. Đôi khi yêu cầu mô hình viết tiếp nội dung input lại dễ dàng hơn việc mô tả nhiệm vụ bằng ngôn ngữ tự nhiên.
Việc thêm một phần câu trả lời vào prompt có thể hướng dẫn mô hình tuân theo định dạng mong muốn.
Ví dụ hướng dẫn mô hình tạo dàn ý bài luận:
Prompt 1:
Create an outline for an essay about hummingbirds.
Ouptut:
I. Introduction
A. Hook: Begin with an intriguing fact or description of hummingbirds.
B. Provide some background information on hummingbirds.
1. Mention their small size and long, thin beaks.
2. Highlight their unique ability to hover and fly backward.
Prompt 1 không chỉ định format cho dàn ý nên mô hình đã chọn một format tùy ý. Để mô hình trả về dàn ý ở một định dạng cụ thể, bạn có thể thêm một đoạn văn bản mẫu cho phần bắt đầu của dàn ý và để mô hình hoàn thành tiếp phần còn lại.
Prompt 2:
Create an outline for an essay about hummingbirds.
I. Introduction
*
Ouptut:
I. Introduction
* Capture the reader's attention with an interesting![image.png](https://images.viblo.asia/8447d5b7-3d80-49e0-8814-5a2419ff979a.png anecdote or fact about hummingbirds.
* Provide a brief background on hummingbirds, including their unique characteristics.
* State the main points that will be covered in the essay.
6. Chia nhỏ prompt thành các phần đơn giản
Đối với các trường hợp cần đến các prompt phức tạp, một cách tiếp cận là chia mọi thứ thành các thành phần đơn giản hơn.
- Chia nhỏ chỉ dẫn: Thay vì có nhiều chỉ dẫn trong một prompt, hãy chia nhỏ thành một prompt cho mỗi chỉ dẫn và quyết định áp dụng prompt nào dựa trên thông tin đầu vào của người dùng.
- Xâu chuỗi prompt: Chia nhiều bước tuần tự thành các prompt riêng biệt và xâu chuỗi chúng sao cho đầu ra của prompt trước trở thành đầu vào của prompt sau.
- Thực hiện các tác vụ song song khác nhau trên các phần khác nhau của dữ liệu và tổng hợp các kết quả để cho ra kết quả cuối cùng. Ví dụ: bạn có thể yêu cầu mô hình thực hiện một thao tác trên phần đầu tiên của dữ liệu, thực hiện một thao tác khác trên phần còn lại của dữ liệu và tổng hợp kết quả.
7. Thử nghiệm với các giá trị tham số khác nhau (parameter)
Mỗi request mà bạn gửi đến một mô hình bao gồm các giá trị tham số giúp kiểm soát cách mô hình tạo ra phản hồi. Mô hình có thể tạo ra các kết quả khác nhau cho các giá trị tham số khác nhau. Thử nghiệm với các giá trị tham số khác nhau để có được kết quả tốt nhất cho nhiệm vụ. Một số loại tham số phổ biến:
Max output tokens
: Số lượng token tối đa có thể được tạo trong phản hồi. 100 token tương ứng với khoảng 20 từ tiếng Anh.Temperature
: kiểm soát mức độ ngẫu nhiên trong việc lựa chọn token. Temperature cao hơn có thể dẫn đến kết quả đa dạng hoặc sáng tạo hơn. Nhiệt độ bằng 0 mang tính tất định, nghĩa là phản hồi có xác suất cao nhất luôn được chọn. Đối với hầu hết các trường hợp, hãy thử bắt đầu với nhiệt độ 0,2. Nếu mô hình trả về phản hồi quá chung chung, quá ngắn hoặc mô hình đưa ra phản hồi dự phòng, hãy tăng dần lên.Top-K
: giá trị thấp hơn cho các phản hồi ít ngẫu nhiên hơn và giá trị cao hơn cho các phản hồi ngẫu nhiên hơn. Top-K mặc định là 40.Top-P
: giá trị thấp hơn cho các phản hồi ít ngẫu nhiên hơn và giá trị cao hơn cho các phản hồi ngẫu nhiên hơn. Top-P mặc định là 0,95.
8. Chiến lược Prompt iteration
Thiết kế prompt là một quá trình lặp đi lặp lại, ít nhất là một vài lần trước khi bạn thu được một version có thể tạo ra phản hồi mong muốn một cách nhất quán. Một số điều bạn có thể thử:
- Sử dụng các từ hoặc cách diễn đạt khác nhau trong prompt thường mang lại những phản hồi khác nhau từ mô hình mặc dù tất cả chúng đều có cùng một ý nghĩa. Nếu bạn không nhận được kết quả mong đợi từ prompt của mình, hãy thử diễn đạt lại nó. Nếu bạn không thể yêu cầu mô hình làm theo hướng dẫn của mình cho một nhiệm vụ, hãy thử đưa ra hướng dẫn cho mô hình về một nhiệm vụ tương tự.
Version 1:
How do I bake a pie?
Version 2:
Suggest a recipe for a pie.
Version 3:
What's a good pie recipe?
- Thay đổi thứ tự các thành phần của prompt: Hãy thử thay đổi thứ tự nội dung của prompt và xem điều đó ảnh hưởng như thế nào đến phản hồi.
9. Phản hồi dự phòng (fallback)
Phản hồi dự phòng là phản hồi được mô hình trả về khi prompt hoặc bản thân phản hồi của mô hình kích hoạt bộ lọc an toàn (safety filter). Ví dụ như: "I'm not able to help with that, as I'm only a language model"
. Nếu mô hình phản hồi bằng phản hồi dự phòng, hãy thử tăng tham số temperature
.
10. Những điều cần tránh
- Tránh dựa vào mô hình để đưa ra các thông tin có tính thực tế, fact.
- Các vấn đề về toán học và logic
All rights reserved