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