Better prompt engineering - Best practices từ kỹ sư của Google

0 0 0

Người đăng: Tài

Theo Viblo Asia

Trong chuỗi bài viết về Prompt Engineering được tôi tổng hợp lại từ tài liệu của bác Lee Boonstra (Software Engineer Tech Lead tại Google, Office of the CTO), tôi đã chia sẻ về những kiến thức nền tảng và kỹ thuật xây dựng prompt hiệu quả. Nếu anh em chưa đọc thì có thể tham khảo lại hai bài viết trước đó để nắm được bức tranh tổng thể trước khi đi sâu vào nội dung của bài viết này.

Bài viết này sẽ tập trung vào phần best practices được các kỹ sư của Google áp dụng khi viết prompt. Tuy là các nguyên tắc đơn giản, nhưng nếu áp dụng đúng cách, anh em sẽ thấy chất lượng output cải thiện rõ rệt – từ độ chính xác cho đến tính nhất quán. Hy vọng sau bài viết này, anh em sẽ có thêm một “bộ công cụ” vững chắc để làm việc hiệu quả hơn với LLM.

Bài viết sẽ cover các techniques sau

  • Sử dụng example
  • Sử dụng các keyword dễ hiểu
  • Instructions over Constraints
  • Kiểm soát max token length
  • Sử dụng variables
  • Sử dụng schemas

I. Sử dụng example

Một trong những lựa chọn đơn giản nhất mà hiệu quả nhất để cải thiện prompt là cung cấp example. Dựa vào example, model sẽ có hiểu biết rõ hơn, chính xác và đầy đủ hơn về yêu cầu và format của kết quả mong muốn.

Vì LLM là mô hình dự đoán dựa vào xác suất nên example được xem như một khung cấu trúc để model dựa vào từ đó tự generate ra kết quả đáp ứng yêu cầu của prompt. Thông qua ví dụ, model còn có thể cải thiện được độ chính xác, phong cách, ngữ điệu (nếu có) sao cho sát nhất với ví dụ của prompt đưa ra.

DONT
Viết một hàm Python tên là group_users_by_city để chuyển đổi danh sách người dùng thành một JSON mới, trong đó các người dùng được nhóm theo thành phố.

DO
Viết một hàm Python tên là group_users_by_city để chuyển đổi danh sách người dùng thành một JSON mới, trong đó các người dùng được nhóm theo thành phố.
Input là một list các dictionary, mỗi dictionary đại diện cho một dòng dữ liệu.
Output là một valid JSON.

Input example

[ {"name": "Alice", "age": 30, "city": "Hanoi"}, {"name": "Bob", "age": 25, "city": "Saigon"}, {"name": "Charlie", "age": 28, "city": "Hanoi"}
]

Output example

{ "Hanoi": [ {"name": "Alice", "age": 30}, {"name": "Charlie", "age": 28} ], "Saigon": [ {"name": "Bob", "age": 25} ]
}

II. Sử dụng các keyword dễ hiểu

Nếu anh em tự mình đọc prompt của chính mình mà không thể hiểu nó đang cung cấp thông tin gì, cho mục đích gì thì điều đó cũng có nghĩa là model cũng khó có thể hiểu được ý của anh em. Để anh em có thể giải thích mong muốn của mình cho người khác thì trước tiên anh em phải tự phát biểu được mong muốn đấy cho chính mình.
Anh em cố gắng không dùng những từ ngữ quá phức tạp, hàn lâm và cũng không cung cấp thừa thông tin làm nhiễu suy luận của model.

Một số từ được recommend để mô tả hành động cho model anh em có thể tham khảo cho prompt của mình

Understanding & interpretation - Hiểu biết và giải thích

  • Describe (Mô tả)
  • Define (Định nghĩa)
  • Compare (So sánh)
  • Contrast (Phân biệt)
  • Summarize (Tóm tắt)
  • Show (Hiển thị / Trình bày)
  • Translate (Dịch)

Analysis & Reasoning - Phân tích và Lý luận

  • Analyze (Phân tích)
  • Classify (Phân loại)
  • Categorize (Xếp loại)
  • Identify (Nhận diện)
  • Evaluate (Đánh giá)
  • Measure (Đo lường)
  • Parse (Phân tích cú pháp)
  • Find (Tìm kiếm)
  • Extract (Trích xuất)
  • Retrieve (Truy xuất)

Decision & Judgment - Ra quyết định và Phán đoán

  • Pick (Chọn)
  • Select (Lựa chọn)
  • Rank (Xếp hạng)
  • Recommend (Đề xuất)
  • Predict (Dự đoán)

Creation & Generation - Tạo nội dung

  • Create (Tạo ra)
  • Generate (Sinh ra)
  • Write (Viết)
  • Rewrite (Viết lại)
  • Provide (Cung cấp)
  • Return (Trả về)
  • Act (Thực hiện hành động)

Organization & Structuring - Tổ chức và Sắp xếp

  • Organize (Sắp xếp)
  • Sort (Phân loại / Sắp xếp)
  • List (Liệt kê)

III. Instructions over Constraints

Instruction cung cấp chỉ dẫn cho model hoàn thành task được giao, mang hơi hướng tích cực, tạo không gian khuyến khích AI sáng tạo
Constraint đưa ra các ràng buộc yêu cầu model không được vi phạm các ràng buộc này, mang hơi hướng tiêu cực, giới hạn khả năng của AI

Vì sao nên dùng Instructions?

  • Giúp AI hiểu rõ mục tiêu và cách làm.
  • Kết quả chính xác và đúng ý hơn.
  • Giảm rủi ro AI hiểu sai yêu cầu.

Nếu có thể, anh em hãy viết prompt cung cấp instruction một cách tích cực cho model biết cần phải làm gì, thay vì đưa ra các nguyên tắc yêu cầu model không được vi phạp.
Cùng xem ví dụ dưới đây

DONT
Giải thích khái niệm LLM
Đừng giải thích dài dòng, đừng dùng thuật ngữ chuyên ngành.

DO
Giải thích khái niệm LLM
Giải thích ngắn gọn, dưới 100 từ, dùng ngôn ngữ đơn giản mà người không chuyên có thể hiểu được.

Anh em có thể ứng dụng best practice này cho đa phần các prompt để giúp AI hiểu rõ mong muốn và cách thức xử lý task. Tuy vậy, với những model có tính sáng tạo cao (Temperature) nhưng mong muốn output nhất quán, đúng khuôn mẫu; sử dụng constraint sẽ giúp anh em kiểm soát điều đó.
Ví dụ yêu cầu model chỉ ouptut theo định đạng cho trước như JSON, yêu cầu viết code không sử dụng thư viện X, Y, Z, etc. Do đó, anh em cần ứng dụng linh hoạt tùy vào use case của mình.

IV. Kiểm soát max token length

Kiểm soát độ dài token tối đa (max_tokens) khi viết prompt là rất quan trọng với túi tiền của anh em. Đặt max_tokens hợp lý sẽ giúp anh em tối ưu hóa kết quả và chi phí:

  • Nếu anh em set max_tokens quá thấp: sẽ khiến câu trả lời bị cắt cụt, thiếu ý, hoặc không hoàn chỉnh.
  • Nếu anh em set max_tokens quá cao: lãng phí tài nguyên hoặc khiến AI "cố" viết dài dòng không cần thiết, dù anh em đã yêu cầu ngắn gọn.

Do đó, anh em nên ước lượng độ dài cần thiết cho câu trả lời và đặt max_tokens cao hơn một chút so với dự kiến để đảm bảo tính trọn vẹn.
Config này chủ yếu được set trong code lúc gửi request sang LLM, ngoài ra ChatGPT playground, Google AI studio cũng cung cấp giao diện trực quan để anh em tinh chỉnh max_tokens.
Các ứng dụng chat bot phổ thông như ChatGPT không cung cấp option cho anh em config max_tokens, tuy vậy anh em có thể workaround bằng cách đưa ra các yêu cầu rõ ràng như

  • Tóm tắt ABC trong 1 câu
  • Tổng hợp DEF bằng 3 gạch đầu dòng
  • Giải thích XYZ ngắn gọn dưới 50 từ

V. Sử dụng variables

Sử dụng variables giúp anh em tái sử dụng prompt. Thay vì viết nhiều prompt tương tự nhau, anh em chỉ cần viết một prompt với các variables có thể thay đổi, rồi truyền giá trị sau. Một số điểm cần lưu ý khi sử dụng variables trong prompt

  • Đặt tên biến rõ ràng - task khó nhất với ae dev 😃)
  • Có thể kết hợp nhiều biến trong một prompt.
  • Tránh lồng biến phức tạp gây khó hiểu, khó maintain.

Ví dụ
Cung cấp prompt: Viết mô tả cho sản phẩm: {product_name}. Đối tượng khách hàng là {customer_type}. Hãy viết với giọng văn {tone}, tập trung vào lợi ích chính và lý do nên mua.
Sau đó, anh em upload .csv file chứa danh sách sản phẩm với format như sau

product_name,customer_type,tone
Máy lọc không khí,gia đình,thân thiện
Laptop chơi game,game thủ,nhiệt huyết
Sách giáo dục trẻ em,phụ huynh,bình tĩnh

Sử dụng variables giúp anh em tự động hoá, tiết kiệm thời gian và xử lý các yêu cầu dạng batch dễ dàng hơn.

VI. Sử dụng schemas

Sử dụng JSON không chỉ hữu ích để định dạng output mà nó còn rất hiệu quả trong việc định dạng đầu vào của model. Khi được cung cấp schema, model sẽ hiểu rõ cấu trúc và kiểu dữ liệu của input, do đó, có thể giảm nguy cơ model hiểu sai ý nghĩa của input.

Một ví dụ nho nhỏ là việc format thời gian, nếu không có schema định nghĩa rõ ràng trường creation_date có dạng YYYY-MM-DD, thì với input là 2025-02-05, model có thể hiểu đây là ngày 2 tháng 5, và nó cũng có thể hiểu anh em đang truyền vào ngày 5 tháng 2 năm 2025.

Ví dụ
Anh em định nghĩa input schema như sau

{ "type": "object", "properties": { "name": { "type": "string", "description": "Product name" }, "creation_date": { "type": "string", "format": "YYYY-MM-DD", "description": "Date the product was created" } }
} 

Sau đó, anh em có thể feed JSON input cho model như sau

{ "name": "Apple", "creation_date": "2025-02-05"
}

Lúc này, nếu anh em hỏi model trong tháng 2 có sản phẩm Apple nào được tạo không, thì đáp án chắc chắn là có, cho dù anh em có re-run bao nhiêu lần đi nữa, nhưng nếu không cung cấp schema, câu trả lời sẽ là hên xui, lúc có lúc không :v

VII. Lời kết

Trong phạm vi bài viết này, tôi tập trung chọn lọc những best practices có tính ứng dụng cao, dễ áp dụng vào công việc thực tế của anh em khi làm việc với LLM, đặc biệt là các tác vụ tạo nội dung, phân tích hoặc xây dựng ứng dụng AI mức cơ bản.

Iài liệu gốc của bác Lee Boonstra còn đề cập đến nhiều kỹ thuật nâng cao khác như sử dụng JSON repair, các best practices khi viết CoT prompt. Cá nhân tôi nhận thấy những phần này không thực sự cần thiết với phần lớn use case phổ thông cuả tôi, nên đã chủ động lược bỏ để tránh làm loãng nội dung.

Nếu anh em quan tâm và muốn mở rộng thêm kiến thức, anh em hãy dành thời gian review lại tài liệu gốc, để hiểu thêm về kỹ thuật và các phương pháp nâng cao cho anh em chuyên prompt engineering tại đây

Prompt engineering không chỉ là kỹ thuật – đó là nghệ thuật giao tiếp hiệu quả với AI.


Nếu anh em cảm thấy bài viết hữu ích đừng ngần ngại click upvote cho bài viết, hoặc phát hiện ý nào chưa hợp lý hoặc cần giải thích thêm hãy comment cho tôi biết để cùng trao đổi nhé. Anh em có thể tham khảo các bài viết khác của tôi tại Blog cái nhân hoặc kết nối với tôi qua Linkedin

Bình luận

Bài viết tương tự

- vừa được xem lúc

Lightweight Fine-Tuning: Một hướng đi cho những người làm AI trong kỉ nguyên của các Super Large Models (Phần 1)

Note: Tiêu đề và nội dung của bài viết này được lấy cảm hứng từ bài viết của sếp mình: "Hướng đi nào cho những người làm AI trong kỉ nguyên của các Super Large Models?". Recommend các bạn nên đọc để t

0 0 33

- vừa được xem lúc

[Từ Transformer Đến Language Model] Bài 2: Kiến trúc và phương pháp Generative-Pretraining của GPT model

Tiếp nối series kiến thức nền tảng của large language model. Ở Bài 1: Bắt đầu với kiến trúc mô hình - Transformer, mình đã giới thiệu với các bạn về kiến trúc khởi nguồn của large language model - tra

0 0 29

- vừa được xem lúc

Hướng dẫn xây dựng một trang web InterviewGPT ứng dụng chatgpt cho các bạn sinh viên thực hành phỏng vấn

Giới thiệu về InterviewGPT. InterviewGPT là một ứng dụng web được phát triển nhằm cung cấp một trải nghiệm tương tác và trợ giúp trong quá trình phỏng vấn việc làm.

0 0 28

- vừa được xem lúc

Lightweight Fine-Tuning: Một hướng đi cho những người làm AI trong kỉ nguyên của các Super Large Models (Phần 2)

Note: Tiêu đề và nội dung của bài viết này được lấy cảm hứng từ bài viết của sếp mình: "Hướng đi nào cho những người làm AI trong kỉ nguyên của các Super Large Models?". Recommend các bạn nên đọc để t

0 0 30

- vừa được xem lúc

Fine-tuning một cách hiệu quả và thân thiện với phần cứng: Adapters và LoRA

Fine-tuning là gì. Parameter-efficient Fine-tuning (PEFT) với Adapters.

0 0 37

- vừa được xem lúc

Tất tần tật về LLaMA-2 - liệu có đủ làm nên một cuộc cách mạng mới

Lời giới thiệu. Xin chào tất cả các bạn, đã lâu lắm rồi kể từ sau bài viết về Trải lòng sau khi đọc GPT-4 Technical Report của OpenAI - các bác nên đổi tên công ty đi mình không có viết bài về LLM nữa

0 0 30