Kỹ thuật gợi ý

Trong mô-đun AI tạo sinh, bạn đã tìm hiểu rằng không gian đầu vào của các mô hình AI tạo sinh gần như không giới hạn. Để tạo ra kết quả phù hợp với kỳ vọng của người dùng, bạn cần phải tạo câu lệnh. Câu lệnh là một hợp đồng có cấu trúc giữa ứng dụng của bạn và mô hình.

Câu lệnh được viết rõ ràng:

  • Nêu rõ cách LLM nên xây dựng câu trả lời.
  • Bao gồm nhiều thành phần có thể được lập phiên bản, kiểm thử và cải thiện theo thời gian.
  • Có thể đóng vai trò là một cấu phần phần mềm dùng chung để cộng tác giữa các nhóm.

Trong mô-đun này, bạn sẽ tìm hiểu cách viết câu lệnh hiệu quả. Chúng tôi giải thích cách một câu lệnh được cấu trúc và cách các thành phần của câu lệnh được phân phối giữa hệ thống và người dùng cuối. Bạn cũng sẽ tìm hiểu các kỹ thuật cơ bản về câu lệnh và các tình huống áp dụng từng kỹ thuật.

Trong suốt học phần này, chúng ta sẽ sử dụng một ví dụ chung: BlogBuddy, một trợ lý viết bài dựa trên AI, lấy cảm hứng từ cách CyberAgent sử dụng Prompt API.

Quay lại mô-đun AI tạo sinh cho bản thiết kế hệ thống BlogBuddy.

Thành phần câu lệnh

Mỗi thành phần của câu lệnh đều có một vai trò cụ thể trong việc định hướng hành vi của mô hình.

  • Bối cảnh: Xác định vai trò và miền của mô hình để mô hình hiểu cách hành xử.
  • Hướng dẫn: Giao một nhiệm vụ cụ thể cho mô hình.
  • Biến đầu vào: Ngữ cảnh dành riêng cho tình huống, do ứng dụng của bạn cung cấp theo thời gian thực.
  • Định dạng đầu ra: Xác định cấu trúc đầu ra dự kiến. Ví dụ: bạn có thể muốn đầu ra JSON.
  • Ví dụ: Minh hoạ cách thực hiện tác vụ cho một hoặc nhiều đầu vào khác.
  • Điều kiện ràng buộc: Đặt giới hạn rõ ràng để đảm bảo kết quả nhất quán, an toàn và phù hợp với thương hiệu.

Lời nhắc của bạn có thể bao gồm một số hoặc tất cả các thành phần này. Ví dụ sau đây minh hoạ các thành phần này cho tính năng trợ lý viết của BlogBuddy.

### Context

You are a writing assistant for blog authors.
Your job is to generate helpful, concise, and engaging content.

### Instruction

Generate 3 alternative titles for the user's blog post with a given style.

### Input variables

Here is the content of the blog post:
${blogPostContent}

Here is the desired style:
${titleStyle}

### Output format

Return valid JSON ONLY, in the following exact structure:
{
  "titles": ["Title option 1", "Title option 2", "Title option 3"]
}

### Examples

Example input:
{
  "blogPostContent": "I finally visited the small neighborhood café I've been eyeing for months...",
  "titleStyle": "friendly"
}

Example output:
{
  "titles": [
    "A First Visit to the Neighborhood Café",
    "Trying the Café I've Wanted to Visit for Months",
    "My Experience at a Long-Awaited Local Spot"
  ]
}
### Constraints

- Each title must be under 128 characters.
- Titles must be original, not copied verbatim from the draft.
- Keep the tone natural and human. Avoid emojis unless explicitly requested.
- Avoid sensationalism or clickbait.
- If the draft includes multiple topics, choose the most prominent topic.

Đối với các câu lệnh đầu tiên, hãy bắt đầu bằng những thông tin cơ bản: hướng dẫn và định dạng đầu ra. Sau đó, hãy lặp lại quy trình thêm các thành phần khác khi bạn phân tích kết quả và xác định những chế độ kiểm soát chi tiết hơn cần thiết để đạt được thành công.

Câu lệnh của hệ thống so với câu lệnh của người dùng

Một số thành phần của câu lệnh được mã hoá cứng, trong khi những thành phần khác có thể do người dùng cuối cung cấp:

  • Câu lệnh hệ thống do nhà phát triển ứng dụng cung cấp và xác định hành vi tổng thể của mô hình. Bạn có thể đặt vai trò, giọng điệu dự kiến, định dạng đầu ra (chẳng hạn như giản đồ JSON nghiêm ngặt) và mọi ràng buộc chung của mô hình. Câu lệnh hệ thống cũng là nơi bạn mã hoá các yêu cầu về sự an toàn và trách nhiệm. Tham số này vẫn nhất quán trên các yêu cầu và cung cấp một nền tảng ổn định cho hành vi của mô hình.

  • Câu lệnh của người dùng chứa yêu cầu tức thì dẫn đến một kết quả. Người dùng yêu cầu một tác vụ cụ thể, có thể bao gồm các biến cụ thể. Ví dụ: "Đề xuất 3 tiêu đề cho bài đăng này", "Viết tiếp đoạn văn này" hoặc "Làm cho nội dung này nghe có vẻ trang trọng hơn".

Hầu hết các API AI tạo sinh đều cho phép bạn cấu trúc một câu lệnh dưới dạng một mảng gồm các thông báo, mỗi thông báo có một vai trò (hệ thống hoặc người dùng) và nội dung. Điều này giúp bạn dễ dàng tách các chỉ dẫn ổn định, toàn cầu khỏi đầu vào động cho mỗi yêu cầu.

Làm cách nào để quyết định những thành phần nào thuộc lời nhắc hệ thống và những thành phần nào nên để người dùng chỉ định? Câu trả lời phụ thuộc vào mức độ linh hoạt của trải nghiệm người dùng và khả năng của mô hình.

Các trường hợp sử dụng bị hạn chế

Đối với các trường hợp sử dụng có tính đặc thù cao, hầu hết câu lệnh đều có thể được xác định trước trong câu lệnh hệ thống. Ví dụ: trong BlogBuddy, người dùng có thể nhấp vào Hiện tiêu đề để liệt kê các đề xuất tiêu đề được tạo cho bản nháp của họ.

Tác vụ đã được cố định, định dạng đầu ra đã biết và người dùng không cần cung cấp thêm bối cảnh để nhận được kết quả như mong đợi. Trong trường hợp này, bạn sẽ đặt tất cả các quy tắc ổn định, nguyên tắc về giọng điệu, giản đồ đầu ra và ví dụ trong câu lệnh hệ thống.

Để tạo ứng dụng này bằng Prompt API, chúng ta sẽ dùng initialPrompts để xác định hành vi ở cấp hệ thống cho toàn bộ phiên:

// Defines stable behavior for the entire session
const session = await LanguageModel.create({
  initialPrompts: [
    {
      role: "system",
      content: `You are a blog-writing assistant.
      Your task is to generate high-quality titles for blog posts.
      Always respond in concise, friendly language.
      Return exactly 3 alternative titles.
      Produce valid JSON with a "titles" array of strings.`
    }
  ]
});

Khi người dùng nhấp vào Hiện phụ đề, lời nhắc sẽ xuất hiện cho nội dung hiện tại:

// The only variable input is the blog content
const result = await session.prompt(blogContent);

Theo thời gian, người dùng có thể yêu cầu tính linh hoạt và khả năng kiểm soát cao hơn. Trong trường hợp này, bạn có thể di chuyển một số thành phần nhất định vào lời nhắc cho người dùng, cùng với các chế độ kiểm soát giao diện. Ví dụ: trình đơn thả xuống về quy cách phong cách hoặc giọng điệu.

Tuy nhiên, quá nhiều hành động có cấu trúc có thể làm rối trải nghiệm người dùng. Khi điều này xảy ra, bạn có thể muốn chuyển sang một thiết kế mở hơn, cho phép người dùng tự chỉ định hầu hết các câu lệnh. Bạn sẽ tìm hiểu thêm về cách tối ưu hoá thiết kế này trong mô-đun về mẫu trải nghiệm người dùng.

Các tác vụ linh hoạt dựa vào câu lệnh chi tiết của người dùng

Một trải nghiệm tương tác không giới hạn giúp người dùng viết bài đăng trên blog từ đầu, mang đến cho người dùng nhiều sự linh hoạt hơn. Họ có thể yêu cầu ý tưởng, dàn ý, bản viết lại, thay đổi giọng điệu hoặc ý tưởng, hoặc chỉ định chính xác cách thực hiện một nhiệm vụ. Với loại ứng dụng này, bạn có thể cần một mô hình phía máy chủ mạnh mẽ hơn.

Với các tác vụ linh hoạt, người dùng cần chỉ định thêm thông tin vì phạm vi lựa chọn có thể có rộng hơn nhiều. Câu lệnh hệ thống vẫn chi phối hành vi tổng thể.

Các phương pháp hay nhất là:

  • Đặt các quy tắc, cấu trúc và ví dụ ổn định vào câu lệnh hệ thống. Đặt nội dung động và các yêu cầu theo nhiệm vụ cụ thể trong câu lệnh cho người dùng.
  • Trải nghiệm người dùng của bạn càng cởi mở thì lời nhắc người dùng càng cần linh hoạt hơn để đáp ứng những thông tin đầu vào không thể đoán trước.
  • Càng nhiều việc mà câu lệnh của người dùng phải thực hiện, thì mô hình càng cần có khả năng cao hơn, vì mô hình phải xử lý nhiều biến thể hơn với ít cấu trúc tích hợp hơn.

Bạn có thể sử dụng các quy tắc này để dần tối ưu hoá sự đánh đổi giữa quyền kiểm soát và tính linh hoạt của người dùng trong bối cảnh sản phẩm của mình. Theo dõi chặt chẽ các lựa chọn ưu tiên và hành vi của người dùng. Tính linh hoạt cao hơn không phải lúc nào cũng chuyển thành giá trị thực tế. Người dùng cũng cần có thời gian, kỹ năng và khả năng nhận thức để tạo ra những câu lệnh chi tiết hơn.

Các kỹ thuật đưa ra câu lệnh phổ biến

Nhà phát triển thường thử một số kỹ thuật đặt câu lệnh để tìm ra kỹ thuật phù hợp nhất với trường hợp sử dụng và mô hình của họ.

Đặt câu lệnh không kèm ví dụ

Bạn mô tả nhiệm vụ cho mô hình và hy vọng vào kết quả tốt nhất. Ví dụ:

"What is the capital of France?"

Đặt câu lệnh không cần ví dụ là một cơ sở hiệu quả cho nhiều tác vụ AI. Đối với những yêu cầu không phức tạp, chẳng hạn như truy vấn kiến thức bách khoa, bạn nên sử dụng kỹ thuật này. Tuy nhiên, trong hầu hết các ứng dụng thực tế, bạn cần mở rộng câu lệnh bằng cách bổ sung điều kiện và logic.

Đặt câu lệnh dựa trên một vài ví dụ

Với tính năng tạo câu lệnh dựa trên một vài ví dụ, bạn cung cấp các ví dụ để minh hoạ hành vi, phong cách, cấu trúc phù hợp và các biến quan trọng khác. Sau đây là một ví dụ về câu lệnh để phân loại cảm xúc:

You classify user messages into one of the following categories:
- "positive"
- "negative"
- "neutral"
Here are examples to guide your classifications:
Input: "I love this product! It works perfectly."
Output: { "label": "positive" }

Input: "This is terrible. I want a refund."
Output: { "label": "negative" }

Đặt câu lệnh dựa trên một vài ví dụ rất hữu ích cho loại tác vụ giả dự đoán này. Bạn cũng có thể áp dụng cho những tác vụ tuân theo một cấu trúc dễ nhận biết, chẳng hạn như tạo tiêu đề trong Hình 1.

Khi không gian đầu ra rất rộng, chẳng hạn như nội dung mở hoặc nội dung dài, thì việc đưa ra lời nhắc ít lần có thể không phải là kỹ thuật tốt nhất. Rất khó hoặc thậm chí không thể cung cấp các ví dụ bao quát không gian này một cách có ý nghĩa.

Câu lệnh theo chuỗi suy luận

Bạn khuyến khích mô hình suy luận từng bước trước khi đưa ra câu trả lời. Bạn có thể mô tả rõ ràng các bước hoặc để mô hình xác định. Ví dụ:

"Think step-by-step to identify the main idea of this paragraph. Then produce a
short heading under 60 characters."

Phương pháp suy luận theo chuỗi hoạt động hiệu quả đối với những nhiệm vụ đòi hỏi phải suy luận và thực hiện nhiều bước, chẳng hạn như phác thảo một bài đăng trên blog hoặc hỗ trợ các quyết định phức tạp. Đây là kỹ thuật chính đằng sau cái gọi là mô hình suy luận.

Việc này có thể tốn kém. Việc tạo các dấu vết suy luận từng bước sẽ làm tăng khả năng tính toán, chi phí và độ trễ. Chỉ sử dụng khi trường hợp sử dụng của bạn đòi hỏi khả năng lập luận và lập kế hoạch phức tạp.

Lời nhắc tự suy ngẫm

Sau lần tạo ban đầu, bạn yêu cầu mô hình đánh giá và sửa đổi đầu ra của chính nó. Ví dụ:

"Review your previous output.
Identify unclear phrasing and rewrite it more concisely."

Tự suy ngẫm đặc biệt hữu ích đối với những tác vụ được hưởng lợi từ việc tinh chỉnh lặp đi lặp lại, chẳng hạn như các công cụ chỉnh sửa hoặc viết lại. Bạn có thể triển khai nhanh chóng và đạt được những lợi ích đáng kể về chất lượng. Vòng lặp tự suy ngẫm sẽ có lợi khi câu lệnh của bạn hoạt động hiệu quả. Trước tiên, hãy tinh chỉnh đầu ra để rõ ràng hơn hoặc tăng sự hài lòng của người dùng.

Điểm cần nhớ

Trong mô-đun này, bạn đã tìm hiểu cách tạo câu lệnh từ các thành phần có cấu trúc. Trên thực tế, kỹ thuật tạo câu lệnh là một lĩnh vực mang tính thử nghiệm cao. Sự rõ ràng và độ tin cậy chỉ xuất hiện sau nhiều vòng tinh chỉnh.

Trong mô-đun tiếp theo, chúng ta sẽ xem xét Phát triển câu lệnh dựa trên đánh giá. Phương pháp này giúp bạn cải thiện câu lệnh một cách có hệ thống và tập trung vào những câu lệnh phù hợp nhất với sản phẩm và người dùng của bạn.

Tài nguyên

Mỗi kỹ thuật này đều có các biến thể và phương pháp hay nhất riêng. Có rất nhiều tài nguyên chi tiết bên ngoài, chẳng hạn như:

Hãy xem tài liệu về mô hình bạn đã chọn, vì có thể có lời khuyên cụ thể dành cho bạn để đạt được kết quả tốt nhất có thể.

Kiểm tra mức độ hiểu biết của bạn

Bạn có thể chỉ định những loại quy tắc nào trong câu lệnh hệ thống?

Các biến đầu vào cụ thể (chẳng hạn như thông tin đầu vào của người dùng), cấu trúc đầu ra dự kiến, vai trò của mô hình và giới hạn số ký tự.
Tuyệt vời, chính xác!
Chỉ có dữ liệu do người dùng nhập vào mới được đưa vào đây.
Không đúng, hãy thử lại.
Để thiết lập vai trò và lĩnh vực của mô hình, nhờ đó mô hình hiểu được cách hành xử.
Không đúng, hãy thử lại.
Loại mô hình và kích thước mô hình mà bạn đang sử dụng.
Không đúng, hãy thử lại.

Bạn nên sử dụng kỹ thuật nào khi muốn mô hình suy luận từng bước trước khi đưa ra câu trả lời?

Đặt câu lệnh không kèm ví dụ
Chưa chính xác.
Đặt câu lệnh dựa trên một vài ví dụ
Chưa chính xác.
Câu lệnh theo chuỗi suy luận
Tuyệt vời, chính xác!
Lời nhắc tự suy ngẫm
Chưa chính xác.

Khi nào thì đặt câu lệnh dựa trên một vài ví dụ hữu ích nhất?

Khi yêu cầu mô hình thực hiện một tác vụ mà không có ngữ cảnh.
Chưa chính xác.
Khi nhiệm vụ tuân theo một cấu trúc dễ nhận biết (chẳng hạn như tạo tiêu đề) hoặc yêu cầu định dạng cụ thể.
Tuyệt vời, chính xác!
Khi không gian đầu ra rất lớn, chẳng hạn như viết sáng tạo không giới hạn.
Chưa chính xác.
Khi bạn muốn mô hình tự đánh giá công việc của mình.
Chưa chính xác.

Kỹ thuật đặt câu lệnh tự phản ánh là gì?

Yêu cầu mô hình phê bình và sửa đổi kết quả đầu ra của chính nó để cải thiện độ rõ ràng hoặc chất lượng.
Tuyệt vời, chính xác!
Chạy câu lệnh nhiều lần và tính trung bình kết quả.
Chưa chính xác.
Yêu cầu người dùng viết lại câu lệnh nếu kết quả không tốt.
Chưa chính xác.
Cho phép mô hình thay đổi câu lệnh hệ thống một cách linh hoạt.
Chưa chính xác.