大模型(Large Language Model,LLM)尤其是OpenAI推出的ChatGPT模型打破了人類語(yǔ)言和機(jī)器語(yǔ)言之間的障礙,人們通過(guò)自然語(yǔ)言(Prompt)就可以操作模型,而模型可以準(zhǔn)確的捕獲用戶的復(fù)雜語(yǔ)義和目的,最后以人類可以理解的方式輸出結(jié)果。
為了能更好的使用大模型,如何寫(xiě)提示詞(Prompt)也就是提示詞工程成為一門(mén)新的學(xué)科,這個(gè)學(xué)科關(guān)注提示詞開(kāi)發(fā)和優(yōu)化,幫助用戶將大語(yǔ)言模型(Large Language Model,LLM)用于各場(chǎng)景和研究領(lǐng)域。
在開(kāi)發(fā)和優(yōu)化提示詞的過(guò)程中,新的問(wèn)題又陸續(xù)出現(xiàn),比如如何管理提示詞的版本、如何比較不同的大模型、如何復(fù)現(xiàn)提示詞的結(jié)果、如何評(píng)估提示詞的效果等。
本文通過(guò)分析提示詞工程的共性問(wèn)題,然后介紹如何使用Azure Machine Learning Prompt Flow(后文簡(jiǎn)稱Prompt Flow)解決這些問(wèn)題。
#1
提示詞工程的挑戰(zhàn)
基于LLM模型的提示詞工程開(kāi)發(fā)生命周期
在闡述提示詞工程的挑戰(zhàn)之前,我們先理解基于LLM的應(yīng)用程序開(kāi)發(fā)的生命周期。了解生命周期之后,我們可以更好地利用Prompt Flow高效地處理整個(gè)周期中的每個(gè)步驟(特別是提示詞工程),從而開(kāi)發(fā)出更好的基于LLM的應(yīng)用程序。
上圖是基于LLM的應(yīng)用程序開(kāi)發(fā)的生命周期,主要有以下四步:
第一步:初始化,確定業(yè)務(wù)用例,收集示例數(shù)據(jù),了解如何構(gòu)建基本提示詞,開(kāi)發(fā)基本Prompt Flow;
第二步:試驗(yàn),我們需要設(shè)計(jì)提示詞,并把提示詞在少量樣本中測(cè)試并評(píng)價(jià)提示詞在小樣本中的結(jié)果。然后根據(jù)結(jié)果優(yōu)化提示詞直到達(dá)到標(biāo)準(zhǔn);
第三步:評(píng)估&優(yōu)化,需要把第二步設(shè)計(jì)好的提示詞在大量樣本中測(cè)試,評(píng)估測(cè)試結(jié)果。如果結(jié)果不達(dá)標(biāo),返回第二步重新優(yōu)化提示詞。如果結(jié)果滿足所需條件,可繼續(xù)到下一步;
第四步:部署Prompt Flow,監(jiān)視生產(chǎn)環(huán)境中的性能,并收集使用情況數(shù)據(jù)和反饋。并為進(jìn)一步迭代的提供依據(jù)。本文只關(guān)注提示詞工程的優(yōu)化和評(píng)估,所以只討論上圖的第2步試驗(yàn)(Experimentation)和第3步評(píng)估&優(yōu)化(Evaluation&Refinement)。
挑戰(zhàn)一:提示詞的開(kāi)發(fā)和優(yōu)化
針對(duì)特定的問(wèn)題,我們需要開(kāi)發(fā)提示詞和選擇不同的模型來(lái)解決問(wèn)題,需要能夠靈活的使用各種模型比如OpenAI、Azure OpenAI、Cognitive Search,需要能夠管理不同的提示詞版本來(lái)并比較不同提示詞版本的效果,需要平臺(tái)能夠提供開(kāi)箱即用的運(yùn)行時(shí)環(huán)境來(lái)支持提示詞工程的全生命周期開(kāi)發(fā)。
Azure Machine Learning Prompt Flow的功能可以解決這些挑戰(zhàn)。
挑戰(zhàn)二:提示詞工程的效果評(píng)估
在提示詞開(kāi)發(fā)完成后,就要針對(duì)更大的數(shù)據(jù)集運(yùn)行來(lái)評(píng)估提示的有效性,并根據(jù)需要進(jìn)行優(yōu)化。在這個(gè)過(guò)程中,我們需要平臺(tái)能夠評(píng)估不同提示詞的運(yùn)行結(jié)果,需要有數(shù)量化的指標(biāo)來(lái)評(píng)估針對(duì)大數(shù)據(jù)集運(yùn)行的提示詞的最終效果。
Azure Machine Learning Prompt Flow的功能可以滿足上述需求。
#2
Prompt Flow vs.挑戰(zhàn)一
創(chuàng)建“連接”管理遠(yuǎn)程API
Prompt Flow提供了各種預(yù)生成連接,包括Azure Open AI、Open AI和Azure Content Safety。這些預(yù)生成連接支持在內(nèi)置工具中與這些資源無(wú)縫集成。此外,用戶可靈活地使用鍵值對(duì)創(chuàng)建自定義連接類型,從而能夠根據(jù)特定要求定制連接。
通過(guò)使用“連接”,在提示詞工程中可以方便選擇不同的大預(yù)言模型并比較不同模型的效果。
下圖展示了如何創(chuàng)建Azure OpenAI“連接”,“連接”可僅供創(chuàng)建者使用,也可以在整個(gè)工作區(qū)共享:
創(chuàng)建“運(yùn)行時(shí)”
“運(yùn)行時(shí)”充當(dāng)運(yùn)行應(yīng)用程序所需的計(jì)算資源,例如包含所有必要的依賴項(xiàng)包的Docker映像。這是“Prompt Flow”執(zhí)行的必備條件。因此,建議在開(kāi)始“Prompt Flow”創(chuàng)建之前設(shè)置運(yùn)行時(shí)。
創(chuàng)建和開(kāi)發(fā)Prompt Flow
為了方便演示,我們克隆一個(gè)現(xiàn)有的“Prompt Flow”中,選擇“Web Classification”,如下圖:
運(yùn)行Prompt Flow
你可以點(diǎn)擊右上角的“Run”按鈕運(yùn)行整個(gè)Prompt Flow,也可以點(diǎn)擊每個(gè)單元上面的“小三角”運(yùn)行一個(gè)單元。