Kỹ thuật câu lệnh thực tế cho các LLM nhỏ hơn

Hiệu quả của một mô hình ngôn ngữ lớn phụ thuộc rất nhiều vào hướng dẫn mà chúng ta cung cấp cho mô hình đó. Thiết kế câu lệnh là quá trình tạo câu hỏi theo cách giúp mô hình ngôn ngữ lớn (LLM) đưa ra kết quả tốt nhất. Đây là một bước quan trọng trong việc triển khai một tính năng dựa trên LLM.

Thiết kế câu lệnh là một quá trình lặp lại. Nếu đã thử nghiệm với nhiều LLM, có lẽ bạn đã nhận thấy rằng mình cần điều chỉnh câu lệnh để đạt được kết quả tốt hơn.

Điều này cũng đúng đối với các mô hình có kích thước khác nhau.

Các giao diện trò chuyện được hỗ trợ bởi các LLM lớn, chẳng hạn như Gemini hoặc ChatGPT, thường có thể tạo ra kết quả thoả mãn với nỗ lực nhắc nhở tối thiểu. Tuy nhiên, khi làm việc với một LLM nhỏ hơn, mặc định và chưa được tinh chỉnh, bạn cần điều chỉnh phương pháp của mình.

Các LLM nhỏ hơn kém mạnh mẽ hơn và có một nhóm thông tin nhỏ hơn để lấy thông tin.

"LLM nhỏ hơn" có nghĩa là gì?

Việc xác định kích thước LLM rất phức tạp và nhà sản xuất không phải lúc nào cũng tiết lộ thông tin này.

Trong tài liệu này, "LLM nhỏ hơn" có nghĩa là bất kỳ mô hình nào có dưới 30 tỷ tham số. Tính đến thời điểm hiện tại, các mô hình có từ vài triệu đến vài tỷ tham số có thể chạy một cách thực tế trong trình duyệt, trên các thiết bị tiêu dùng.

LLM nhỏ hơn được dùng ở đâu?

  • AI tạo sinh trên thiết bị/trong trình duyệt, ví dụ: nếu bạn đang sử dụng Gemma 2B với API suy luận LLM của MediaPipe (thậm chí phù hợp với các thiết bị chỉ có CPU) hoặc DistilBert trong trình duyệt bằng Transformers.js. Bạn chỉ có thể tải mô hình xuống và chạy quy trình suy luận trên thiết bị của người dùng bằng các LLM nhỏ hơn này để giữ cho quá trình tải xuống web ở mức hợp lý và phù hợp với các hạn chế về bộ nhớ và GPU/CPU của thiết bị.
  • AI tạo sinh tuỳ chỉnh phía máy chủ. Các mô hình có trọng số mở nhỏ như Gemma 2B, Gemma 7B hoặc Gemma 27B có sẵn để bạn chạy trên máy chủ của riêng mình (và tuỳ chọn tinh chỉnh).

Bắt đầu

Các giao diện trò chuyện được hỗ trợ bởi các LLM lớn, chẳng hạn như Gemini hoặc ChatGPT, thường có thể tạo ra kết quả thoả mãn với nỗ lực nhắc nhở tối thiểu. Tuy nhiên, khi làm việc với các LLM nhỏ hơn, bạn cần điều chỉnh phương pháp của mình. Các LLM nhỏ hơn kém mạnh mẽ hơn và có một nhóm thông tin nhỏ hơn để lấy thông tin.

Cung cấp bối cảnh và hướng dẫn định dạng chính xác

Để đạt được kết quả tối ưu với các LLM nhỏ, hãy tạo các câu lệnh chi tiết và cụ thể hơn.

Ví dụ:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
Dữ liệu đầu vào (bài đánh giá) Kết quả (điểm)
  LLM lớn hơn (Gemini 1.5) LLM nhỏ hơn (Gemma 2B)
Tôi rất thích kiểu dáng này! Phân bổ trọng lượng tốt và thoải mái đến bất ngờ ngay cả khi đi bộ đường dài cả ngày. Tôi sẽ giới thiệu sản phẩm này. 5 4/5 sao**
Dây đeo mỏng manh và bắt đầu hằn vào vai tôi khi mang vật nặng. 1 2/5

Mặc dù Gemini 1.5 cung cấp kết quả mong muốn với câu lệnh đơn giản này, nhưng kết quả của Gemma không thoả mãn:

  • Định dạng không chính xác. Chúng tôi đã yêu cầu một số nguyên cho điểm.
  • Điểm có vẻ không chính xác lắm. Bài đánh giá đầu tiên đủ nhiệt tình để cho thấy một bài đánh giá 5 sao.

Để khắc phục vấn đề này, chúng ta cần sử dụng các kỹ thuật thiết kế câu lệnh, nhắc nhở một lần, nhắc nhở vài lần và nhắc nhở nhiều lầnnhắc nhở theo chuỗi suy nghĩ. Chúng ta cũng phải cung cấp hướng dẫn định dạng rõ ràng và yêu cầu mô hình sử dụng toàn bộ phạm vi điểm.

Ví dụ:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`;
Dữ liệu đầu vào (bài đánh giá) Kết quả với một LLM nhỏ hơn (Gemma 2B)

Tôi rất thích kiểu dáng này! Phân bổ trọng lượng tốt và thoải mái đến bất ngờ ngay cả khi đi bộ đường dài cả ngày. Tôi sẽ giới thiệu sản phẩm này.

Phân tích: Bài đánh giá này rất tích cực và nhấn mạnh kiểu dáng cũng như sự thoải mái của sản phẩm, cho thấy sự hài lòng cao với sản phẩm. Điều này cho thấy điểm cao là hợp lý.

Điểm (số nguyên): 5

Dây đeo mỏng manh và bắt đầu hằn vào vai tôi khi mang vật nặng.

**Phân tích:** Bài đánh giá nêu bật một vấn đề đáng kể về sự thoải mái của dây đeo. Bài đánh giá này cũng cho thấy sản phẩm có thể không phù hợp với vật nặng hoặc các chuyến đi chơi kéo dài.

**Điểm:** 1 (tệ nhất)

Câu lệnh chi tiết hơn của chúng tôi, kết hợp với các kỹ thuật đặt câu lệnh dựa trên một vài ví dụ và nhắc nhở theo chuỗi suy nghĩ, giúp đưa ra điểm chính xác hơn.

Dự kiến phân tích cú pháp kết quả theo cách thủ công

Mặc dù bạn luôn phải dọn dẹp và diễn giải kết quả của LLM theo cách thủ công, nhưng điều này đặc biệt đúng đối với các LLM nhỏ hơn có thể tạo ra kết quả ít hoàn thiện hơn và có thể yêu cầu nhắc nhở theo chuỗi suy nghĩ.

Trong ví dụ đầu tiên, chúng tôi đã sử dụng tính năng nhắc nhở theo chuỗi suy nghĩ, vì vậy, kết quả bao gồm cả phân tích và điểm. Chúng tôi cần phân tích cú pháp theo cách thủ công để lấy điểm. Ngoài ra, hãy lưu ý định dạng không nhất quán trong kết quả ở phần trước: mô hình đôi khi xuất ra Markdown, nhưng không phải lúc nào cũng vậy.

// Use try/catch to catch (parsing) errors
try {
  // Parse the output for a rating
  const int = /[1-5]/;
  const ratingAsString = llmOutput.match(int)[0];
  // Parse as int
  const ratingAsInt = parseInt(ratingAsString);
  // `checkRating` checks the rating is a number between 1 and 5, since the
  // regEx may catch a number like "100"
  const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console.error('Error', e);
}

Lưu ý về sự khác biệt giữa các API

Các API đám mây LLM như Gemini API hoặc OpenAI (thường là điểm truy cập vào các LLM lớn hơn) cung cấp các tính năng nhắc nhở tiện dụng. Ví dụ: Gemini 1.5 Pro cung cấp hướng dẫn hệ thốngchế độ JSON.

Hiện tại, các tính năng này không phải lúc nào cũng có sẵn để sử dụng mô hình tuỳ chỉnh hoặc cho các LLM nhỏ hơn được truy cập bằng các API AI trong trình duyệt, chẳng hạn như API suy luận LLM của MediaPipe hoặc Transformers.js. Mặc dù đây không nhất thiết là một hạn chế kỹ thuật, nhưng các API AI trong trình duyệt có xu hướng tinh gọn hơn.

Lưu ý về hạn mức mã thông báo

Vì câu lệnh của bạn cho các LLM nhỏ hơn cần bao gồm các ví dụ hoặc hướng dẫn chi tiết hơn, nên câu lệnh này có thể dài hơn và chiếm nhiều hơn hạn mức mã thông báo đầu vào (nếu có).

Ngoài ra, các mô hình nhỏ hơn có xu hướng có hạn mức mã thông báo đầu vào nhỏ hơn. Ví dụ: Gemini 1.5 Pro có hạn mức mã thông báo đầu vào là 1 triệu trong khi các mô hình Gemma có cửa sổ ngữ cảnh 8K.

Sử dụng các hàm đếm mã thông báo để tránh đạt đến hạn mức.

Điều chỉnh thời gian ước tính

Tính đến thiết kế và thử nghiệm câu lệnh trong thời gian ước tính kỹ thuật của bạn.

Do sự khác biệt về API và hạn mức mã thông báo, bạn có thể cần nhiều thời gian và công sức hơn để tạo câu lệnh cho một LLM nhỏ hơn so với một LLM lớn hơn. Việc thử nghiệm và xác thực kết quả của LLM cũng có thể tốn nhiều công sức hơn.

Kỹ sư thiết kế câu lệnh so với tinh chỉnh?

Đối với nhà phát triển web, thiết kế câu lệnh là cách ưu tiên của chúng tôi để tận dụng AI tạo sinh so với quá trình huấn luyện và tinh chỉnh tuỳ chỉnh. Tuy nhiên, ngay cả kỹ thuật thiết kế câu lệnh nâng cao cũng có thể không đủ trong một số trường hợp sử dụng, đặc biệt nếu bạn đang sử dụng một LLM nhỏ hơn.

Sử dụng tính năng tinh chỉnh khi:

  • Bạn yêu cầu độ chính xác và hiệu suất cao nhất cho một nhiệm vụ cụ thể. Tính năng tinh chỉnh sẽ điều chỉnh trực tiếp các tham số nội bộ của mô hình để có kết quả tối ưu.
  • Bạn có dữ liệu được tuyển chọn kỹ lưỡng, liên quan đến nhiệm vụ của bạn, đã được gắn nhãn bằng kết quả ưu tiên. Bạn cần dữ liệu này để tinh chỉnh hiệu quả.
  • Bạn sử dụng mô hình cho cùng một mục đích nhiều lần. Bạn có thể tinh chỉnh một lần và sử dụng lại cho một nhiệm vụ cụ thể.