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

Maud Nalpas
Maud Nalpas

Hiệu quả của 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 đưa ra. Kỹ thuật câu lệnh là quá trình tạo câu hỏi theo cách giúp 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 tính năng dựa trên mô hình ngôn ngữ lớn (LLM).

Kỹ thuật câu lệnh là một quá trình lặp lại. Nếu đã thử nghiệm với nhiều LLM, bạn có thể 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 với các mô hình có kích thước khác nhau.

Giao diện trò chuyện sử dụng các LLM lớn, chẳng hạn như Gemini hoặc ChatGPT, thường có thể mang lại kết quả hài lòng mà không cần phải đưa ra câu lệnh nhiều. Tuy nhiên, khi làm việc với một LLM mặc định, nhỏ hơn và chưa được tinh chỉnh, bạn cần điều chỉnh phương pháp của mình.

LLM nhỏ hơn có ít sức mạnh hơn và có nhóm thông tin nhỏ hơn để lấy dữ liệu.

"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 công bố kích thước này.

Trong tài liệu này, "các LLM nhỏ hơn" có nghĩa là mọi mô hình có tham số dưới 30 tỷ. 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ị cấp người 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 với Transformers.js. Bạn chỉ có thể tải mô hình xuống và chạy suy luận trên thiết bị của người dùng bằng các LLM nhỏ hơn này để tải xuống web một cách hợp lý và phù hợp với các giới hạn về bộ nhớ và GPU/CPU của thiết bị.
  • AI tạo sinh tuỳ chỉnh phía máy chủ. Bạn có thể chạy các mô hình trọng lượng mở nhỏ như Gemma 2B, Gemma 7B hoặc Gemma 27B trên máy chủ của riêng mình (và có thể tinh chỉnh nếu muốn).

Bắt đầu

Giao diện trò chuyện sử dụng các LLM lớn (như Gemini hoặc ChatGPT) thường có thể mang lại kết quả hài lòng mà không cần phải đưa ra câu lệnh nhiề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. LLM nhỏ hơn có ít thông tin hơn để tham khảo và hoạt động kém hiệu quả hơn.

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â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:
Input (review) Kết quả (điểm xếp hạng)
  LLM lớn hơn (Gemini 1.5) LLM nhỏ hơn (Gemma 2B)
Tôi rất thích kiểu dáng của chiếc áo này! Phân bổ trọng lượng tốt và đáng ngạc nhiên là rất thoải mái ngay cả khi đi bộ cả ngày. Bạn nên dùng. 5 4/5 sao**
Dây quai thì mỏng manh, và chúng bắt đầu đè lên vai tôi khi tôi đang chịu tải nặng. 1 2/5

Mặc dù Gemini 1.5 cung cấp kết quả mong muốn với lời nhắc đơn giản này, nhưng kết quả của Gemma lại không thỏa 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 xếp hạng.
  • Điểm xếp hạng có vẻ không chính xác. Bài đánh giá đầu tiên đủ nhiệt tình để cho thấy đó là 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 kỹ thuật câu lệnh, Nhắc một, một vài và nhiều lần cũng như Nhắc chuỗi suy nghĩ. Chúng tôi cũng phải cung cấp hướng dẫn rõ ràng về định dạng và yêu cầu mô hình phải sử dụng toàn bộ phạm vi điểm xếp hạng.

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`;
Input (review) Đầu ra có LLM nhỏ hơn (Gemma 2B)

Tôi rất thích kiểu dáng của chiếc áo này! Phân bổ trọng lượng tốt và thoải mái một cách đáng ngạc nhiên ngay cả khi đi bộ cả ngày. Bạn nên dùng.

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

Điểm xếp hạng (số nguyên): 5

Dây đeo thì mỏng manh và chúng bắt đầu đè lên vai tôi khi đang chịu tải 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. Điều này cũng cho thấy rằng sản phẩm có thể không phù hợp với tải trọng nặng hoặc hoạt động ngoài trời kéo dài.

**Điểm xếp hạng:** 1 (kém nhất)

Câu lệnh chi tiết hơn của chúng tôi, kết hợp với kỹ thuật câu lệnh ít lần và câu lệnh chuỗi suy nghĩ, giúp đưa ra điểm xếp hạng chính xác hơn.

Dự kiến phân tích cú pháp đầu ra theo cách thủ công

Mặc dù bạn phải luôn 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ả kém tinh tế hơn và có thể yêu cầu chuỗi suy nghĩ nhắc nhở.

Trong ví dụ đầu tiên, chúng ta đã sử dụng câu lệnh gợi ý chuỗi suy nghĩ, vì vậy, kết quả bao gồm cả thông tin phân tích và điểm xếp hạng. Chúng ta cần phân tích cú pháp điểm xếp hạng theo cách thủ công. Ngoài ra, hãy lưu ý đến định dạng không nhất quán trong kết quả của 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);
}

Sự khác biệt giữa API Mind

Các API đám mây LLM như API Gemini 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 lời nhắc hữu ích. 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 API AI trong trình duyệt, chẳng hạn như API suy luận LLM 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 thường có xu hướng gọn nhẹ hơn.

Hạn mức mã thông báo Mind

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

Ngoài ra, các mô hình nhỏ hơn thường có giới hạn mã thông báo đầu vào nhỏ hơn. Ví dụ: Gemini 1.5 Pro có giới hạn 1 triệu mã thông báo đầu vào, còn 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 giới hạn.

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

Tính đến việc thiết kế và thử nghiệm nhanh chóng trong phần ước tính thời gian kỹ thuật.

Do sự khác biệt về API và giới hạn về mã thông báo, có thể bạn sẽ 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 kiểm thử 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.

Thiết kế câu lệnh so với tinh chỉnh?

Đối với các nhà phát triển web, kỹ thuật câu lệnh là cách chúng tôi ưu tiên sử dụng để tận dụng AI tạo sinh thay vì huấn luyện và tinh chỉnh tuỳ chỉnh. Tuy nhiên, ngay cả kỹ thuật câu lệnh nâng cao cũng có thể chưa đủ trong một số trường hợp sử dụng, đặc biệt là 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 hàng đầu cho một nhiệm vụ cụ thể. Tính năng tinh chỉnh trực tiếp điều chỉnh 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, phù hợp với nhiệm vụ của mình, đã được gắn nhãn bằng các đầu ra ư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 tác vụ cụ thể.