概念
提示词工程是 LangSmith 的核心支柱之一。传统的软件应用程序是通过编写代码构建的,而 AI 应用程序通常涉及大量的编写提示词。我们的目标是通过提供一套旨在启用和促进提示词工程的工具,使之尽可能容易。
为什么进行提示词工程?
提示词为模型设定了舞台,就像即兴表演中的观众指导演员的下一次表演一样 - 它引导模型的行为,而无需更改其底层能力。正如告诉演员“扮演海盗”会决定他们的行为方式一样,提示词提供了指导、示例和上下文,从而塑造了模型的响应方式。
提示词工程非常重要,因为它允许您更改模型的行为方式。虽然还有其他方法可以更改模型的行为(例如微调),但提示词工程通常是最容易入门的方法,并且通常提供最高的投资回报率。
我们经常看到提示词工程是多学科的。有时,最好的提示词工程师不是构建应用程序的软件工程师,而是产品经理或其他领域专家。拥有适当的工具和基础设施来支持这种跨学科的构建非常重要。
提示词 vs 提示词模板
尽管我们经常互换使用这些术语,但了解“提示词”和“提示词模板”之间的区别非常重要。
提示词指的是传递到语言模型中的消息。
提示词模板指的是格式化信息的方式,以使提示词包含您想要的信息。提示词模板可以包含少量示例、外部上下文或提示词中需要的任何其他外部数据的变量。
LangSmith 中的提示词
您可以在 LangSmith 中存储和版本控制提示词模板。提示词模板有几个关键方面需要理解。
聊天 vs 完成
有两种不同类型的提示词:chat
风格的提示词和 completion
风格的提示词。
聊天风格的提示词是消息列表。这是目前大多数模型 API 支持的提示风格,因此通常应优先选择这种风格。
完成风格的提示词只是一个字符串。这是一种较旧的提示风格,因此主要因历史原因而存在。
F-string vs mustache
您可以使用 f-string 或 mustache 格式,使用输入变量格式化您的提示词。这是一个使用 f-string 格式的示例提示词
Hello, {name}!
这是一个使用 mustache 格式的示例
Hello, {{name}}!
Mustache 格式为您提供更大的灵活性,可以处理条件变量、循环和嵌套键。阅读文档
工具
工具是 LLM 可以用来与外部世界交互的接口。工具包括名称、描述和用于调用工具的参数的 JSON 模式。
结构化输出
结构化输出是大多数最先进的 LLM 的一项功能,其中它们不是生成原始文本作为输出,而是坚持指定的模式。这可能使用也可能不使用底层的工具。
结构化输出类似于工具,但在几个关键方面有所不同。使用工具,LLM 选择调用哪个工具(或者可能选择不调用任何工具);使用结构化输出,LLM 始终以这种格式响应。使用工具,LLM 可以选择多个工具;使用结构化输出,仅生成一个响应。
模型
可选地,您可以将模型配置与提示词模板一起存储。这包括模型的名称和任何其他参数(温度等)。
提示词版本控制
版本控制是迭代和协作处理不同提示词的关键部分。
提交
每次保存对提示词的更新都会创建一个新的提交。您可以查看以前的提交,从而轻松查看早期的提示词版本,或在需要时恢复到以前的状态。在 SDK 中,您可以通过指定提交哈希以及提示词名称(例如 prompt_name:commit_hash
)来访问提示词的特定提交。
在 UI 中,您可以通过切换“提交”选项卡右上角的“diff”按钮,将提交与其以前的版本进行比较。
标签
您可能想要使用人类可读的标签标记提示词提交,以便即使在添加新提交时也可以引用它。常见的用例包括使用 dev
或 prod
标签标记提示词。这允许您跟踪提示词的哪些版本在何处使用。
提示词 Playground
提示词 playground 使迭代和测试提示词的过程变得无缝。您可以从侧边栏或直接从已保存的提示词进入 playground。
在 playground 中,您可以
- 更改正在使用的模型
- 更改正在使用的提示词模板
- 更改输出模式
- 更改可用的工具
- 输入输入变量以运行提示词模板
- 通过模型运行提示词
- 观察输出
测试多个提示词
您可以向 playground 添加更多提示词,以轻松比较输出并决定哪个版本更好
通过数据集进行测试
要通过数据集进行测试,您只需从右上角选择数据集,然后按“开始”即可。您可以修改结果是否流式传输,以及测试中的重复次数。
您可以单击“查看实验”按钮,以更深入地了解测试结果。