使用Prompty構(gòu)建和管理LLM提示
譯文譯者 | 布加迪
審校 | 重樓
將生成式AI加入到應(yīng)用程序中遇到的一個(gè)問題是,沒有管理提示的標(biāo)準(zhǔn)方法。通常情況下,每個(gè)將AI加入到代碼中的團(tuán)隊(duì)都采用不同的方法,以不同的方式管理數(shù)據(jù)。他們一次次地重新發(fā)明輪子,并未借鑒其他團(tuán)隊(duì)和項(xiàng)目經(jīng)驗(yàn)。
為每個(gè)應(yīng)用程序構(gòu)建新的AI交互模型,并采用不同的方式來存儲(chǔ)、使用和更新提示,這純屬浪費(fèi)時(shí)間。AI開發(fā)人員的資源有限,經(jīng)驗(yàn)豐富的開發(fā)人員分散在多個(gè)項(xiàng)目中。對于記住每個(gè)應(yīng)用程序的工作方式以及他們需要如何構(gòu)建和測試提示毫無成效可言。
使用不同的AI模型增添了復(fù)雜性。團(tuán)隊(duì)可能在使用大語言模型(LLM),比如OpenAI的GPT、Facebook的Llama、Anthropic的Claude,或者基于Hugging Face的開源模型的自定義工具。也許他們決定構(gòu)建一個(gè)使用本地小語言模型(比如微軟的Phi)的應(yīng)用程序。
Prompty簡介
我們需要一種與LLM無關(guān)的方式來處理模型,以便我們在開發(fā)工具中試用模型,這樣我們可以在不切換上下文的情況下使用模型。這就是微軟贊助的Prompty項(xiàng)目的由來。它是一個(gè)Visual Studio Code擴(kuò)展,有助于解決處理LLM及其他生成式AI工具時(shí)面臨的許多問題。
可以在GitHub上找到Prompty,它是一個(gè)活躍的開源項(xiàng)目。你可以貢獻(xiàn)代碼或向開發(fā)團(tuán)隊(duì)提出請求。如果你更喜歡開始編寫代碼,可以在Visual Studio Code市場中找到Prompty,它與文件系統(tǒng)和代碼編輯器相集成。項(xiàng)目網(wǎng)站上有文檔,雖然目前內(nèi)容有點(diǎn)貧乏,但對于入門用戶來說綽綽有余了。
Prompty是一個(gè)簡單易用的工具。易于理解的格式借鑒了熟悉的配置語言,比如YAML。因?yàn)槲覀?/span>用提示所做的任務(wù)是配置生成式AI。提示好比是定義模型搜索的語義空間的一種方式,以提供答案。
Prompty的核心是一種領(lǐng)域特定語言,用于描述與生成式AI之間的交互。它被嵌入到Visual Studio Code擴(kuò)展中,該擴(kuò)展充分利用了諸多功能,比如用于代碼格式化和檢查、高亮顯示錯(cuò)誤以及提供代碼補(bǔ)全的語言服務(wù)器。它還支持Python輸出和C#輸出,未來版本將針對JavaScript和TypeScript。
如果你沒有深入研究Build 2024大會(huì)的內(nèi)容,這場分會(huì)介紹了使用Prompty作為AI開發(fā)平臺(tái)的一部分。
使用Prompty構(gòu)建提示
在代碼中使用Prompty與使用其他任何庫沒什么不同。除了Visual Studio Code擴(kuò)展外,你還需要?jiǎng)?chuàng)建一個(gè)含有適當(dāng)軟件包的應(yīng)用程序框架。一旦你有了可以訪問LLM端點(diǎn)的應(yīng)用程序框架,就可以使用Prompty擴(kuò)展為你的代碼添加提示資產(chǎn)。在Visual Studio Code資源管理器中,鼠標(biāo)右擊應(yīng)用程序的根文件夾,并創(chuàng)建新的Prompty。這將為文件夾添加一個(gè).prompty文件,可以根據(jù)需要重命名該文件。
打開.prompty文件,開始構(gòu)建提示資產(chǎn)。這個(gè)格式化的文檔含有兩個(gè)部分:你正在構(gòu)建的應(yīng)用程序的詳細(xì)描述,含有所使用的模型的詳細(xì)信息和應(yīng)用程序需要使用的任何參數(shù),以及基于該模型的任何信息的樣本。第二部分含有基本系統(tǒng)提示,以定義你期望的輸出類型。然后是上下文,即使用LLM進(jìn)行自然語言輸出的用戶或應(yīng)用程序提供的信息。
有用的是,你可以使用Prompty來測試提示,并在Visual Studio Code的輸出窗格中顯示輸出。這讓你可以改進(jìn)LLM輸出將使用的行為,比如在非正式的閑聊輸出與較正式的輸出之間切換。你需要提供適當(dāng)?shù)沫h(huán)境變量,包括任何身份驗(yàn)證令牌。與往常一樣,最好將這些內(nèi)容保存在一個(gè)單獨(dú)的文件中,以免無意中暴露它們。
結(jié)合使用Prompty與LLM編排器
一旦你編寫并測試了提示,可以導(dǎo)出提示資產(chǎn)數(shù)據(jù),并將它與你選擇的LLM編排器結(jié)合使用,包括Azure AI Studio中的Prompt Flow和用于構(gòu)建基于AI的獨(dú)立代理的Semantic Kernel。這種方法允許你使用Prompty提示作為基于檢索增強(qiáng)生成(RAG)的應(yīng)用程序的基礎(chǔ),通過添加基礎(chǔ)數(shù)據(jù)并使用提示生成接駁外部數(shù)據(jù)源的自然語言接口,降低輸出錯(cuò)誤的風(fēng)險(xiǎn)。
因而生成的函數(shù)使用Prompty提示描述來構(gòu)建與LLM之間的交互,你可以將其封裝在異步操作中。結(jié)果是一個(gè)AI應(yīng)用程序,除了組裝用戶輸入和顯示LLM輸出外,基本沒有多少代碼。許多繁重的工作由Semantic Kernel等工具處理;通過將提示定義與應(yīng)用程序相分離,你就可以使用.prompty資產(chǎn)文件在應(yīng)用程序之外更新LLM交互。
將Prompty資產(chǎn)添加到應(yīng)用程序中很簡單,只需選擇編排器并自動(dòng)生成代碼片段,以便將提示添加到應(yīng)用程序中。目前只支持數(shù)量有限的編排器,但這是一個(gè)開源項(xiàng)目,因此你可以提交額外的代碼生成器來支持其他的應(yīng)用程序開發(fā)工具鏈。
最后一點(diǎn)尤其重要:Prompty目前專注于為云托管的LLM構(gòu)建提示,但我們正從大模型轉(zhuǎn)向更小、更專門的工具,比如微軟的Phi Silica,它們旨在在個(gè)人邊緣硬件、甚至手機(jī)端的神經(jīng)處理單元上運(yùn)行。
如果我們要交付邊緣AI應(yīng)用程序,Prompty之類的工具應(yīng)該是我們工具鏈的一部分,它們需要與本地端點(diǎn)一起工作,為常用SDK生成API調(diào)用。微軟是否會(huì)擴(kuò)展Prompty以處理Phi Silica類值得拭目以待,微軟承諾會(huì)在Windows App SDK中提供Phi Silica類,作為Copilot運(yùn)行時(shí)環(huán)境的一部分。這將為.Net和C++開發(fā)人員提供必要的工具來管理本地提示和面向云的提示。
發(fā)展壯大AI工具鏈
像這樣的工具是AI應(yīng)用程序開發(fā)工具鏈的重要組成部分,因?yàn)樗鼈冊试S不同技能集的人進(jìn)行協(xié)作。在這里,提示工程師獲得一個(gè)工具來構(gòu)建和管理所需的提示,以一種允許應(yīng)用程序開發(fā)人員在其代碼中使用提示的方式交付一致的AI應(yīng)用程序。Visual Studio Code允許我們將擴(kuò)展組裝成一個(gè)連貫的工具鏈,這種方法可能比擁有單一的AI開發(fā)環(huán)境要好。
如果你正在調(diào)整模型,可以使用Windows AI工具包。如果你在構(gòu)建提示,那么Prompty適合你,而開發(fā)人員可以為所選擇的編排器、Windows App SDK以及所選擇的C++或C++工具使用相應(yīng)的工具。Visual Studio Code允許你選擇某個(gè)項(xiàng)目所需的擴(kuò)展,架構(gòu)師可以使用微軟的Dev Box虛擬機(jī)或GitHub Codespaces,借助相應(yīng)的工具鏈構(gòu)建和管理適當(dāng)?shù)拈_發(fā)環(huán)境。
Prompty是為LLM應(yīng)用程序開發(fā)提供更成熟方法的重要組成部分。通過在代碼外測試和調(diào)試提示的同時(shí)將提示記入文檔,你可以并行構(gòu)建應(yīng)用程序和提示,幫助提示工程師和應(yīng)用程序開發(fā)人員更有效地協(xié)作,就像Figma等前端技術(shù)可以助力在Web上與設(shè)計(jì)人員進(jìn)行類似的協(xié)作一樣。
原文標(biāo)題:Build and manage LLM prompts with Prompty,作者:Simon Bisson