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 tôi cho đi. Kỹ thuật câu lệnh là tạo câu hỏi theo cách thu được kết quả tốt nhất từ một mô hình ngôn ngữ lớn (LLM). Đâ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 bạn đã thử nghiệm với nhiều LLM khác nhau, có thể 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 với các mô hình có kích thước khác nhau.

Giao diện của Chat được hỗ trợ bởi các mô hình ngôn ngữ lớn (LLM) lớn, chẳng hạn như Gemini hoặc ChatGPT, thường có thể tạo ra kết quả hài lòng mà không cần tốn nhiều công sức nhắc. Tuy nhiên, khi làm việc với một mô hình ngôn ngữ lớn (LLM) mặc định, nhỏ hơn và không đượ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 sẽ kém mạnh mẽ hơn và có lượng thông tin nhỏ hơn để lấy từ đó.

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

Việc xác định kích thước mô hình ngôn ngữ lớn (LLM) rất phức tạp và không phải lúc nào cũng được được nhà sản xuất công bố.

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

Các LLM nhỏ hơn được sử dụng ở đâu?

  • AI tạo sinh trên thiết bị/trong trình duyệt, chẳng hạn như khi bạn đang dùng Gemma 2B bằng API suy luận LLM của MediaPipe (thậm chí phù hợp với thiết bị chỉ dùng CPU) hoặc DistilBert trong trình duyệt có Transformers.js. 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 với các LLM nhỏ hơn này nhằm giữ cho các lượt tải xuống trên web một cách hợp lý và phù hợp các giới hạn bộ nhớ và GPU/CPU của thiết bị.
  • AI tạo sinh phía máy chủ tuỳ chỉnh. Các mô hình không gian mở nhỏ như Gemma 2B, Gemma 7B hoặc Gemma 27B có sẵn cho bạn để chạy trên máy chủ của riêng bạn (và tinh chỉnh (không bắt buộc).

Bắt đầu

Giao diện của Chat do các LLM lớn (chẳng hạn như Gemini hoặc ChatGPT) hỗ trợ thường có thể mang lại kết quả hài lòng mà không cần tốn nhiều công sức để đưa ra yêu cầ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 sẽ kém mạnh mẽ hơn và có lượng thông tin nhỏ hơn để lấy từ đó.

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:
Thông tin đầu vào (xem lại) Kết quả (điểm xếp hạng)
  Mô hình ngôn ngữ lớn (LLM) lớn hơn (Gemini 1.5) LLM nhỏ hơn (Gemma 2B)
Thiết bị này cực kỳ thích hợp! Phân bổ trọng lượng tốt và thoải mái một cách đáng kinh ngạc ngay cả khi đi bộ cả ngày. Sẽ giới thiệu cho bạn. 5 4 trên 5 sao**
Dây 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 đưa ra kết quả mong muốn nhờ câu lệnh đơn giản này, nhưng đầu ra không đáp ứng được:

  • Đị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.
  • Thông tin đánh giá có vẻ không chính xác. Bài đánh giá đầu tiên đủ nhiệt tình để biểu thị 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 thiết kế câu lệnh, Nhắc một, một vài và nhiều lầnchuỗi lời nhắc suy nghĩ. Chúng tôi cũng phải cung cấp hướng dẫn định dạng rõ ràng và nhấn mạnh rằng mô hình nên sử dụng toàn bộ các đ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`;
Thông tin đầu vào (xem lại) Xuất dữ liệu bằng một mô hình ngôn ngữ lớn (LLM) nhỏ hơn (Gemma 2B)

Thiết bị này cực kỳ thích hợp! Phân bổ cân nặng một cách hiệu quả và đáng ngạc nhiên thoải mái ngay cả khi đi bộ cả ngày. Sẽ giới thiệu cho bạn.

Phân tích: Bài đánh giá này rất tích cực và nhấn mạnh tính chất của sản phẩm vừa vặn và thoải mái, cho thấy sự hài lòng tuyệt vời đối với sản phẩm. Chiến dịch này xác định xếp hạng cao.

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

Dây đai mỏng manh và chúng bắt đầu đào sâu vào vai tôi khi tải nặng.

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

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

Câu lệnh của chúng tôi công phu hơn, kết hợp với kỹ thuật nhắc vài chi tiết và gợi ý theo chuỗi, giúp đưa ra thông tin đánh giá chính xác hơn.

Có thể phân tích cú pháp kết quả 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 một mô hình ngôn ngữ lớn (LLM) theo cách thủ công, nhưng việc này đặc biệt đúng với các LLM nhỏ hơn có thể tạo ra kết quả ít trau chuốt hơn và có thể cần đến việc nhắc suy nghĩ theo chuỗi.

Trong ví dụ đầu tiên, chúng tôi đã sử dụng lời nhắc theo chuỗi suy nghĩ, vì vậy, kết quả bao gồm cả bản phân tích lẫn điểm xếp hạng, đồng thời chúng tôi cần phải phân tích cú pháp của điểm xếp hạng đó theo cách thủ công. Ngoài ra hãy lưu ý định dạng không nhất quán trong đầu ra ở phần trước: đôi khi mô hình 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 của Mind API

Các API đám mây LLM như Gemini API hoặc OpenAI, thường là mục nhập trỏ đến các LLM lớn hơn, cung cấp các tính năng 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 sử dụng được để 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 hẳn là giới hạn về kỹ thuật, nhưng các API AI trong trình duyệt có xu hướng gọn gàng hơn.

Giới hạn về 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 ví dụ hoặc chi tiết hơn hướng dẫn của bạn, quá trình này có thể mất nhiều thời gian hơn và chiếm nhiều mã thông báo đầu vào hơn nếu có.

Ngoài ra, các mô hình nhỏ hơn có xu hướng có giới hạn mã thông báo đầu vào nhỏ hơn. Cho ví dụ: Gemini 1.5 Pro có giới hạn là 1 triệu mã thông báo đầu vào 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 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à hạn mức về mã thông báo, bạn có thể 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 một LLM lớn hơn. Kiểm thử và xác thực Dữ liệu đầu ra của LLM cũng có thể mất nhiều công sức hơn.

Kỹ sư đưa ra câu lệnh hay tinh chỉnh?

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