大型語言模型的成效極度取決於我們提供的指示。「提示工程」是指以 LLM 產生最佳輸出內容的方式,構思問題。實作 LLM 式功能是相當重要的步驟。
提示工程是一項疊代程序。如果您曾嘗試使用不同的 LLM,可能會發現需要調整提示才能獲得更好的結果。
不同大小的模型也是如此。
採用大型 LLM 技術的聊天介面 (例如 Gemini 或 ChatGPT),通常只需少量提示就能產生滿意的結果。不過,如果使用未經精細調整的預設小型 LLM,就需要調整做法。
較小的 LLM 效能較低,可參考的資訊來源也較少。
「較小的 LLM」是什麼意思?
定義 LLM 大小相當複雜,開發人員不一定會揭露這項資訊。
在本文件中,「較小的 LLM」是指參數不到 300 億個的模型。截至目前,在消費者級裝置上,瀏覽器可以實際執行的模型參數數量介於數百萬到數十億之間。
較小的 LLM 適用於哪些情況?
- 裝置端/瀏覽器內的生成式 AI,例如:將 Gemma 2B 與 MediaPipe 的 LLM Inference API 搭配使用 (即使是僅支援 CPU 的裝置),也可以在瀏覽器中透過 Transformers.js 使用 DistilBert。只有使用較小的 LLM,才能下載模型並在使用者的裝置上執行推論,以便合理執行網路下載作業,並符合裝置的記憶體和 GPU/CPU 限制。
- 自訂伺服器端生成式 AI。您可以使用 Gemma 2B、Gemma 7B 或 Gemma 27B 等小型開放權重模型,在自己的伺服器上執行 (並視需要進行微調)。
開始使用
採用大型語言模型 (如 Gemini 或 ChatGPT) 的聊天介面,通常只需少量提示就能提供令人滿意的結果。然而,處理小型大型語言模型時,必須調整做法。規模較小的 LLM 較不強大,需要的資訊量較少。
提供背景資訊和精確的格式操作說明
如要透過小型 LLM 取得最佳結果,請設計更詳細且具體的提示。
例如:
Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.
Review: "${review}"
Rating:
輸入內容 (審核) | 輸出內容 (評分) | |
---|---|---|
大型大型語言模型 (Gemini 1.5) | 較小的 LLM (Gemma 2B) | |
我非常喜歡這款鞋子!重量分布均勻,即使長時間健行也能保持舒適。推薦。 | 5 | 4 顆星 (滿分 5 顆星)** |
背帶很脆弱,在負重下會開始勒到我的肩膀。 | 1 | 2/5' |
雖然 Gemini 1.5 可透過這項簡單的提示提供所需輸出內容,但 Gemma 的輸出內容並不理想:
- 格式不正確。我們要求評分為整數。
- 評分似乎不太準確。第一則評論非常熱情,足以獲得 5 顆星。
為解決這個問題,我們需要使用提示工程技術,包括單樣本、少量樣本和多樣本提示,以及思考鏈提示。我們也必須提供明確的格式操作說明,並要求模型必須使用完整的評分範圍。
例如:
`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`;
輸入內容 (審核) | 使用較小的 LLM 輸出 (Gemma 2B) |
---|---|
我非常喜歡這款鞋子!重量分布均勻,即使長時間健行也能保持舒適。推薦。 |
分析:這則評論非常正面,強調產品的尺寸和舒適度,表示消費者對產品非常滿意。這有助於公司給予高評分。 評分 (整數):5 |
背帶很脆弱,在負重下會開始勒到我的肩膀。 |
**分析:**這則評論強調了肩帶的舒適性有重大問題。同時也表示該產品可能不適合高負載或長時間輸出。 **評分:** 1 (最差) |
我們採用更精細的提示,搭配少量示例提示和思維鏈結提示技巧,可提供更準確的評分。
預期手動剖析輸出內容
雖然您應該一律手動清理並解讀 LLM 的輸出內容,但對於較小的 LLM 尤其如此,因為這類模型可能會產生較不精緻的結果,且可能需要思維鏈結提示。
在第一個範例中,我們使用了思維鏈條提示,因此輸出內容包含分析和評分,我們需要手動剖析評分。請注意,上一個部分的輸出內容格式不一致:模型有時會輸出 Markdown,但並非每次都會。
// 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);
}
Mind API 差異
Gemini API 或 OpenAI 等 LLM 雲端 API 通常是大型大型語言模型的進入點,可提供實用的提示功能。舉例來說,Gemini 1.5 Pro 提供系統指示和 JSON 模式。
目前,這些功能不一定適用於自訂模型的使用方式,也不一定適用於使用瀏覽器內 AI API 存取的小型 LLM,例如 MediaPipe LLM 推論 API 或 Transformers.js。雖然這不一定是技術限制,但瀏覽器內 AI API 通常較為精簡。
注意符記限制
由於較小的 LLM 提示需要包含範例或更詳細的操作說明,因此提示內容可能會較長,並占用更多輸入符代碼限制 (如有)。
此外,較小的模型通常有較小的輸入符記限制。舉例來說,Gemini 1.5 Pro 的輸入符記限制為 100 萬個,而 Gemma 模型的脈絡窗口為 8K。
使用符記計數函式,避免達到上限。
調整您的預估時間
在工程師的時間估算中,考量提示設計和測試所需的時間。
基於 API 差異和符記限制,針對規模較小的 LLM,您可能需要投入更多時間和心力來撰寫提示。測試及驗證 LLM 的輸出內容可能也需要較大的努力。
還是提示工程師或微調?
對於網頁開發人員而言,提示工程是比自訂訓練和微調更適合利用生成式 AI 的做法。不過,即使是進階提示設計,在某些用途上也可能不夠,尤其是在使用較小的 LLM 時。
在下列情況下使用精細調整:
- 您需要針對特定工作達到最高準確度和效能。精細調整會直接調整模型的內部參數,以取得最佳結果。
- 您已整理出與工作相關的詳盡資料,並已為偏好的輸出內容加上標籤。您需要這項資料才能有效微調。
- 您會重複使用模型來達成相同目的。微調作業可一次完成,並用於特定工作。