使用Prompty构建和管理LLM提示 原创
译者 | 布加迪
审校 | 重楼
将生成式AI加入到应用程序中遇到的一个问题是,没有管理提示的标准方法。通常情况下,每个将AI加入到代码中的团队都采用不同的方法,以不同的方式管理数据。他们一次次地重新发明轮子,并未借鉴其他团队和项目经验。
为每个应用程序构建新的AI交互模型,并采用不同的方式来存储、使用和更新提示,这纯属浪费时间。AI开发人员的资源有限,经验丰富的开发人员分散在多个项目中。对于记住每个应用程序的工作方式以及他们需要如何构建和测试提示毫无成效可言。
使用不同的AI模型增添了复杂性。团队可能在使用大语言模型(LLM),比如OpenAI的GPT、Facebook的Llama、Anthropic的Claude,或者基于Hugging Face的开源模型的自定义工具。也许他们决定构建一个使用本地小语言模型(比如微软的Phi)的应用程序。
Prompty简介
我们需要一种与LLM无关的方式来处理模型,以便我们在开发工具中试用模型,这样我们可以在不切换上下文的情况下使用模型。这就是微软赞助的Prompty项目的由来。它是一个Visual Studio Code扩展,有助于解决处理LLM及其他生成式AI工具时面临的许多问题。
可以在GitHub上找到Prompty,它是一个活跃的开源项目。你可以贡献代码或向开发团队提出请求。如果你更喜欢开始编写代码,可以在Visual Studio Code市场中找到Prompty,它与文件系统和代码编辑器相集成。项目网站上有文档,虽然目前内容有点贫乏,但对于入门用户来说绰绰有余了。
Prompty是一个简单易用的工具。易于理解的格式借鉴了熟悉的配置语言,比如YAML。因为我们用提示所做的任务是配置生成式AI。提示好比是定义模型搜索的语义空间的一种方式,以提供答案。
Prompty的核心是一种领域特定语言,用于描述与生成式AI之间的交互。它被嵌入到Visual Studio Code扩展中,该扩展充分利用了诸多功能,比如用于代码格式化和检查、高亮显示错误以及提供代码补全的语言服务器。它还支持Python输出和C#输出,未来版本将针对JavaScript和TypeScript。
如果你没有深入研究Build 2024大会的内容,这场分会介绍了使用Prompty作为AI开发平台的一部分。
使用Prompty构建提示
在代码中使用Prompty与使用其他任何库没什么不同。除了Visual Studio Code扩展外,你还需要创建一个含有适当软件包的应用程序框架。一旦你有了可以访问LLM端点的应用程序框架,就可以使用Prompty扩展为你的代码添加提示资产。在Visual Studio Code资源管理器中,鼠标右击应用程序的根文件夹,并创建新的Prompty。这将为文件夹添加一个.prompty文件,可以根据需要重命名该文件。
打开.prompty文件,开始构建提示资产。这个格式化的文档含有两个部分:你正在构建的应用程序的详细描述,含有所使用的模型的详细信息和应用程序需要使用的任何参数,以及基于该模型的任何信息的样本。第二部分含有基本系统提示,以定义你期望的输出类型。然后是上下文,即使用LLM进行自然语言输出的用户或应用程序提供的信息。
有用的是,你可以使用Prompty来测试提示,并在Visual Studio Code的输出窗格中显示输出。这让你可以改进LLM输出将使用的行为,比如在非正式的闲聊输出与较正式的输出之间切换。你需要提供适当的环境变量,包括任何身份验证令牌。与往常一样,最好将这些内容保存在一个单独的文件中,以免无意中暴露它们。
结合使用Prompty与LLM编排器
一旦你编写并测试了提示,可以导出提示资产数据,并将它与你选择的LLM编排器结合使用,包括Azure AI Studio中的Prompt Flow和用于构建基于AI的独立代理的Semantic Kernel。这种方法允许你使用Prompty提示作为基于检索增强生成(RAG)的应用程序的基础,通过添加基础数据并使用提示生成接驳外部数据源的自然语言接口,降低输出错误的风险。
因而生成的函数使用Prompty提示描述来构建与LLM之间的交互,你可以将其封装在异步操作中。结果是一个AI应用程序,除了组装用户输入和显示LLM输出外,基本没有多少代码。许多繁重的工作由Semantic Kernel等工具处理;通过将提示定义与应用程序相分离,你就可以使用.prompty资产文件在应用程序之外更新LLM交互。
将Prompty资产添加到应用程序中很简单,只需选择编排器并自动生成代码片段,以便将提示添加到应用程序中。目前只支持数量有限的编排器,但这是一个开源项目,因此你可以提交额外的代码生成器来支持其他的应用程序开发工具链。
最后一点尤其重要:Prompty目前专注于为云托管的LLM构建提示,但我们正从大模型转向更小、更专门的工具,比如微软的Phi Silica,它们旨在在个人边缘硬件、甚至手机端的神经处理单元上运行。
如果我们要交付边缘AI应用程序,Prompty之类的工具应该是我们工具链的一部分,它们需要与本地端点一起工作,为常用SDK生成API调用。微软是否会扩展Prompty以处理Phi Silica类值得拭目以待,微软承诺会在Windows App SDK中提供Phi Silica类,作为Copilot运行时环境的一部分。这将为.Net和C++开发人员提供必要的工具来管理本地提示和面向云的提示。
发展壮大AI工具链
像这样的工具是AI应用程序开发工具链的重要组成部分,因为它们允许不同技能集的人进行协作。在这里,提示工程师获得一个工具来构建和管理所需的提示,以一种允许应用程序开发人员在其代码中使用提示的方式交付一致的AI应用程序。Visual Studio Code允许我们将扩展组装成一个连贯的工具链,这种方法可能比拥有单一的AI开发环境要好。
如果你正在调整模型,可以使用Windows AI工具包。如果你在构建提示,那么Prompty适合你,而开发人员可以为所选择的编排器、Windows App SDK以及所选择的C++或C++工具使用相应的工具。Visual Studio Code允许你选择某个项目所需的扩展,架构师可以使用微软的Dev Box虚拟机或GitHub Codespaces,借助相应的工具链构建和管理适当的开发环境。
Prompty是为LLM应用程序开发提供更成熟方法的重要组成部分。通过在代码外测试和调试提示的同时将提示记入文档,你可以并行构建应用程序和提示,帮助提示工程师和应用程序开发人员更有效地协作,就像Figma等前端技术可以助力在Web上与设计人员进行类似的协作一样。
原文标题:Build and manage LLM prompts with Prompty,作者:Simon Bisson