原文標題:《你一直以來都用錯了 ChatGPT!掌握這 3 大提示技巧,讓你秒變 GPT 達人!》
原文作者:Normanrockon,MultiSig
提示工程的目標是通過提供清晰、簡潔且結構良好的輸入來提高語言模型的性能,這些輸入需要針對模型所用於的特定任務或應用進行定製。可以將提示工程比喻成與人交流時使用清晰明瞭的語言,讓對方更容易理解你的意圖,從而做出更滿意的迴應。
那麼接下來,我們將依次介紹 OpenAI 提供的提示工程最佳實踐,FushionAI 的自動生成功能,以及讓 GPT 進行自我反思。我們還會提供一個額外的實用小技巧,請多留心!
爲了獲得最佳效果,我們建議使用最新、性能最強大的模型。截至 2022 年 11 月,文本生成方面的最佳選擇是「text-davinci-003」模型,代碼生成方面的最佳選擇是「code-davinci-002」模型。能使用 GPT-4 當然會比 ChatGPT 要更好。
效果不佳:
將下面的文本摘要成一個關鍵要點的項目列表。
{輸入文本}
更好的選擇:
將下面的文本摘要成一個關鍵要點的項目列表。
文本:
""" {輸入文本} """
效果不佳:
寫一首關於 OpenAI 的詩。
更好的選擇:
寫一首關於 OpenAI 的短篇勵志詩,重點描述 DALL-E 產品發佈(DALL-E 是一個文本到圖像的機器學習模型),風格仿照 {著名詩人}。
效果不佳:
從下面的文本中提取實體。提取以下 4 種實體類型:公司名稱、人名、特定主題和主題。
文本:{文本}
更好的選擇:
從下面的文本中提取重要實體。首先提取所有公司名稱,然後提取所有人名,然後提取與內容相關的特定主題,最後提取總體主題。
期望格式:
公司名稱:<逗號分隔的公司名稱列表>
人名:-||-
特定主題:-||-
總體主題:-||-
文本:{文本}
零次學習
從下面的文本中提取關鍵詞。
文本:{文本}
關鍵詞:
少次學習 - 提供幾個示例
從下面的文本中提取關鍵詞。
文本 1:Stripe 爲 Web 開發人員提供了 API,以便他們將支付處理集成到自己的網站和移動應用程序中。
關鍵詞 1:Stripe,支付處理,API,Web 開發人員,網站,移動應用程序
文本 2:OpenAI 已經訓練出了處理和生成文本方面非常優秀的語言模型。我們的 API 可以讓您使用這些模型,解決幾乎任何涉及處理語言的任務。
關鍵詞 2:OpenAI,語言模型,文本處理,API。
文本 3:{文本}
關鍵詞 3:
微調:請參閱參考文獻裏的微調最佳實踐指南。
效果不佳:
這個產品的描述應該比較簡短,只有幾句話,不要太多。
更好的選擇:
用 3 至 5 句話的段落來描述這個產品。
效果不佳:
以下是代理和客戶之間的對話。不要詢問用戶名或密碼。不要重複。
客戶:我無法登錄我的賬戶。代理:
更好的選擇:
以下是代理和客戶之間的對話。代理將嘗試診斷問題並提出解決方案,同時避免詢問任何與個人身份信息(PII)有關的問題。不要詢問用戶名或密碼,而是引導用戶查閱幫助文章 www.samplewebsite.com/help/faq
客戶:我無法登錄我的賬戶。代理:
效果不佳:
編寫一個簡單的 Python 函數
1. 詢問我一個以英里爲單位的數字
2. 將英里換算成公里
在下面的代碼示例中,添加「import」提示模型應該以 Python 語言開始編寫。(類似地,「SELECT」是 SQL 語句開始的好提示。)
更好的選擇:
編寫一個簡單的 Python 函數
1. 詢問我一個以英里爲單位的數字
2. 將英里換算成公里
import
FusionAI 是一個可以自動生成更適合 GPT 提示並生成相應文章的 AI 軟件,我會建議新手期時將它當作學習提示工程的教程來使用。
例如,當我給出提示:「I want to have a blog of prompt engineering」FusionAI 會修改此提示爲
可以看出來這樣生成出來的提示對照了前文提到的第 3 和第 6 條技巧,規定了輸入長度,要求變得更精確了,讓 AI 聚焦於提示工程的好處和挑戰,並且舉出相應例子。
讓我們用中文輸入挑戰一下 FusionAI。給出提示:「給我一篇關於提示工程的博客」。FusionAI 修改提示爲:
可以看出來這個提示是有嚴重偏差的,詞不達意,無法使用。這其實給我們提了個醒,語言和指令在轉譯的時候是會有信息損失的,轉譯的次數越多信息差就越大,直到不可辨別。因此我們要儘量接觸和使用一手信息,在 AI 上也適用。
我們不建議使用各種模版或者類似 FusionAI 的工具來生成內容,因爲噪音太大。當然,在你還不瞭解提示工程的時候可以參考它們來學習,這是可以的。
在 Eric Jang 的一篇最新的博客《Can LLMs Critique and Iterate on Their Own Outputs?》裏,他提到 LLM 可以在沒有任何基礎反饋的情況下自我糾正,並嘗試將這樣的自我反思作爲一種提示工程的技巧。(注意,目前只有 GPT-4 有這個功能)
你可以把這種情況想象成某人向你發送了一條短信,然後迅速「取消發送」,再發送一條新的短信。
讓我們舉個例子,當我們讓 GPT-4 寫出一首不押韻的詩:「can you write a poem that does not rhyme? think carefully about the assignment」,GPT-4 給出的回答是:
很明顯,節選的小詩是押韻的,這並不符合我們的要求。那麼我們給出進一步的指令讓 GPT-4 進行自我反思:「did the poem meet the assignment?」,那麼 GPT-4 會回答:
可以看出來,這次 GPT-4 生成的小詩確實是不押韻的,在沒有給出任何額外反饋的前提下 GPT-4 完成了自我的提示工程。筆者猜想這可能跟 LLM 的無監督學習有關,但爲什麼 GPT-4 擁有此功能而 GPT-3.5 卻沒有,就不得而知了。
當然,這樣的能力也是有侷限的。如果你願意,你可以要求 GPT-4 隨機給出兩個五位數並且求出它們的乘積。接下來你會發現,無論你讓 GPT-4 怎麼反思,它都無法給出正確的答案。GPT-4 只會不斷客氣地胡說八道而已。對於想深入研究的讀者,可以從文末鏈接閱讀 Eric 的博客和一篇最新的預印版論文《Reflection》
有心的讀者可能已經發現了,作者在使用 LLM 一般都選擇英文作爲提示語言。這是因爲作爲預訓練模型,其表現的優異程序與預訓練時的數據集有關係,一般來說數據越多則被訓練得越好。而英語作爲全球第一的使用語言,數據量是遠超中文的。所以除非你需要輸出與中文語境強相關的文章,否則我會建議使用英文來作爲提示語言。
在這篇文章裏我們介紹了三種提示工程的方法。分別是 OpenAI 推薦的前置提示工程,AI 自動生成,以及以反思爲主的後置提示工程。同時,我們也建議非英語母語者嘗試使用英語作爲與 LLM 交互的語言。
參考文獻:
https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api
https://docs.google.com/document/d/1h-GTjNDDKPKU_Rsd0t1lXCAnHltaXTAzQ8K2HRhQf9U/edit#
https://fusion.tiiny.site/home.html
https://evjang.com/2023/03/26/self-reflection.html
https://arxiv.org/pdf/2303.11366.pdf
原文鏈接
欢迎加入律动 BlockBeats 官方社群:
Telegram 订阅群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方账号:https://twitter.com/BlockBeatsAsia