Prompt Engineering
Kỹ thuật prompt thiết kế chỉ dẫn, ngữ cảnh và ví dụ cung cấp cho model AI để định hướng đầu ra mà không cần huấn luyện lại, từ LLM đến thị giác máy tính.
Prompt engineering là thực hành thiết kế đầu vào cho model tạo sinh, bao gồm chỉ dẫn, ngữ cảnh, ví dụ và định dạng đầu ra mong muốn, nhằm định hướng nội dung model tạo ra mà không thay đổi trọng số model. Phương pháp này phát triển mạnh cùng GPT-3: trong Language Models are Few-Shot Learners (2020), OpenAI cho thấy model 175 tỷ tham số có thể thực hiện tác vụ mới mà không cần cập nhật gradient khi prompt mô tả tác vụ và đưa ra một vài ví dụ; bài báo gọi khả năng này là học trong ngữ cảnh. Ngày nay, prompt là cách chính để kiểm soát mô hình ngôn ngữ lớn (LLM), mô hình thị giác-ngôn ngữ (VLM), bộ sinh văn bản thành hình ảnh và các model thị giác có thể điều khiển bằng prompt.
Các kỹ thuật cốt lõi#
- Chỉ dẫn và vai trò: System prompt thiết lập vai trò, quy tắc và đối tượng người dùng của model; các dấu phân cách như tiêu đề hoặc thẻ theo kiểu XML phân tách chỉ dẫn với dữ liệu đang được xử lý.
- Ví dụ few-shot: Các cặp đầu vào-đầu ra mẫu minh họa tác vụ và định dạng câu trả lời rõ hơn phần mô tả. Prompt không có ví dụ được gọi là zero-shot.
- Định dạng đầu ra: Prompt nêu định dạng, chẳng hạn danh sách hoặc JSON với các key được chỉ định. Khi mã cần phân tích kết quả, đầu ra có cấu trúc áp dụng schema trong quá trình giải mã thay vì chỉ dựa vào request.
- Prompt chain-of-thought: Yêu cầu các bước lập luận trung gian trước khi trả lời, giúp tăng độ chính xác cho những bài toán nhiều bước.
- Prompt chaining: Chia một tác vụ phức tạp thành nhiều prompt, mỗi prompt đảm nhiệm một tác vụ hẹp và được kết nối bằng mã.
- Ngữ cảnh truy xuất: Chèn tài liệu hoặc dữ liệu tìm được qua tìm kiếm để model trả lời dựa trên dữ kiện được cung cấp thay vì trí nhớ.
Dữ kiện được cung cấp giúp giảm hallucination, và vị trí của chúng cũng quan trọng: nghiên cứu Lost in the Middle cho thấy model sử dụng thông tin hiệu quả nhất khi thông tin xuất hiện ở đầu hoặc cuối cửa sổ ngữ cảnh dài, và kém hiệu quả nhất khi thông tin bị chôn ở giữa.
Tác động của ví dụ thể hiện rõ nhất trên model nền chưa từng được tinh chỉnh theo chỉ dẫn. Đoạn mã sau đưa cho GPT-2, được tải bằng Transformers của Hugging Face, cùng một chỉ dẫn có và không có ba ví dụ:
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
# The same instruction, without and with three worked examples that show the answer format
instruction = "Convert each country to its capital city.\n"
prompts = {
"zero-shot": instruction + "Italy:",
"few-shot": instruction + "France: Paris\nJapan: Tokyo\nCanada: Ottawa\nItaly:",
}
for name, prompt in prompts.items():
inputs = tokenizer(prompt, return_tensors="pt")
output = model.generate(**inputs, max_new_tokens=4, do_sample=False, pad_token_id=tokenizer.eos_token_id)
completion = tokenizer.decode(output[0, inputs.input_ids.shape[1] :])
print(f"{name}: {completion!r}")Đoạn mã in ra zero-shot: '\n\nItaly is' và few-shot: ' Rome\nSpain:'. Chỉ dẫn đơn thuần khiến GPT-2 viết văn xuôi về Italy, trong khi ba ví dụ giúp model trả lời "Rome" theo định dạng mong đợi và tiếp tục theo mẫu với quốc gia tiếp theo.
Thiết kế prompt dựa trên thực nghiệm#
Những thay đổi nhỏ về cách dùng từ hoặc bố cục có thể làm kết quả khác biệt đáng kể. Melanie Sclar và cộng sự đo lường mức chênh lệch độ chính xác lên đến 76 điểm trên LLaMA-2-13B chỉ từ thay đổi định dạng, chẳng hạn dấu phân cách, kiểu chữ hoa-thường và khoảng trắng; độ nhạy này vẫn tồn tại ở các model lớn hơn, với nhiều ví dụ hơn và sau khi tinh chỉnh theo chỉ dẫn. Vì vậy, prompt được phát triển như mã: thử nghiệm trên một tập đầu vào cố định với đầu ra đúng đã biết, chỉnh sửa dựa trên các trường hợp thất bại và quản lý phiên bản—một phần công việc thường lệ của LLMOps.
Có thể tự động hóa vòng lặp này. Automatic Prompt Engineer (APE), do Yongchao Zhou và cộng sự phát triển, sử dụng LLM để đề xuất các chỉ dẫn ứng viên rồi giữ lại những chỉ dẫn đạt điểm cao nhất trên các ví dụ; chỉ dẫn do phương pháp này tạo ra đạt kết quả ngang bằng hoặc tốt hơn chỉ dẫn do con người viết ở 19 trong số 24 tác vụ trong Large Language Models Are Human-Level Prompt Engineers.
Prompt cho model thị giác#
Trong thị giác máy tính, prompt có nhiều dạng. Các bộ tạo ảnh từ văn bản như Stable Diffusion phản hồi mô tả về chủ thể, phong cách, ánh sáng và bố cục, cùng với prompt phủ định liệt kê những điều cần tránh. Model segmentation có thể nhận prompt chấp nhận prompt trực quan như điểm và hộp; SAM 3 của Meta cũng nhận các cụm danh từ ngắn và phân đoạn mọi instance của khái niệm được nêu tên. Ultralytics Platform sử dụng tính năng này để tự động gán nhãn bằng prompt văn bản.
Detector có vocabulary mở chuyển tên lớp thành prompt. Ultralytics YOLOE phát hiện và phân đoạn bất kỳ lớp nào mà set_classes() chỉ định, chẳng hạn "forklift" hoặc "double-decker bus", bằng cách so sánh đặc trưng vùng với embedding văn bản của các tên đó, nên cách diễn đạt trực tiếp làm thay đổi đối tượng model tìm thấy. Vì việc so khớp dựa trên hình thức, các prompt phụ thuộc vào trạng thái, vị trí hoặc phép so sánh, chẳng hạn "damaged", "left-most" hoặc "the one being carried", không có dấu hiệu thị giác đáng tin cậy; tên gần với các danh mục thông dụng thường hoạt động tốt nhất.
Prompt engineering và các thuật ngữ liên quan#
- Prompt tuning: Học các vector prompt liên tục bằng gradient descent trên dữ liệu có nhãn. Prompt engineering viết prompt thủ công bằng ngôn ngữ tự nhiên.
- Fine-tuning: Thay đổi trọng số của model bằng cách huấn luyện trên tập dữ liệu có nhãn. Prompt engineering giữ nguyên model và hoạt động tại thời điểm suy luận.
- Context engineering: Bao quát mọi nội dung được đưa vào ngữ cảnh của model trong một ứng dụng, bao gồm tài liệu truy xuất, kết quả từ công cụ và bộ nhớ. Prompt engineering là phần tập trung vào việc viết chỉ dẫn và ví dụ.
- Prompt injection: Một cuộc tấn công giấu chỉ dẫn trong văn bản hoặc hình ảnh mà model đọc, khiến chúng ghi đè prompt của developer.










