概念
提示工程是 LangSmith 的核心支柱之一。 虽然传统软件应用程序是通过编写代码构建的,但 AI 应用程序通常涉及大量的提示词编写。 我们旨在通过提供一套专为启用和促进提示工程而设计的工具,使这一过程尽可能简单。
为什么提示工程?
提示词为模型设定了舞台,就像即兴表演中观众指导演员的下一场演出一样——它引导模型的行为,而不改变其底层能力。正如告诉演员“扮演海盗”会决定他们的表演方式, 提示词提供指令、示例和上下文,从而塑造模型的响应方式。
提示工程很重要,因为它允许你改变模型的行为。 虽然还有其他方法可以改变模型的行为(如微调),但提示工程通常是入门最简单的方法 并且通常能提供最高的投资回报率。
我们经常看到,提示工程是多学科交叉的。 有时最好的提示工程师并非构建该应用的软件工程师,而是产品经理 或另一领域的专家。 拥有适当的工具链和基础设施以支持这种跨学科协作至关重要。
提示词与提示模板
尽管我们经常互换使用这些术语,但理解“提示”和“提示模板”之间的区别非常重要。
提示是指传入语言模型的消息。
提示模板(Prompt Templates)是一种格式化信息的方式,用于确保提示中包含您所需的内容。提示模板可以包含变量,用于少样本示例、外部上下文或提示中需要的任何其他外部数据。

LangSmith 中的提示词
您可以在 LangSmith 中存储和版本化提示模板。 理解提示模板有几个关键方面。
聊天 vs 补全
有两种不同类型的提示:chat 风格提示和completion 风格提示。
聊天风格的提示词是一个消息列表。这是目前大多数模型 API 支持的提示风格,因此通常应优先使用这种风格。
Completion 风格的提示词只是一个字符串。这是一种较旧的提示风格,因此主要出于遗留原因而存在。
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)来访问提示词的特定提交。
在用户界面中,您可以通过切换提交标签页右上角的\"diff\"按钮,将某个提交与其上一个版本进行比较。
标签
您可能希望为提示词提交添加人类可读的标签,以便即使添加了新提交,您仍能引用它们。常见用例包括使用 dev 或 prod 等标签标记提示词。这使您能够追踪哪些版本的提示词被用于何处。
提示词游乐场
提示词游乐场使迭代和测试提示词的过程变得无缝衔接。您可以从侧边栏进入游乐场,或直接从保存的提示词中进入。
您可以在沙盒中进行以下操作:
- 更改正在使用的模型
- 更改正在使用的提示模板
- 更改输出模式
- 更改可用工具
- 输入要通过提示模板运行的变量
- 将提示词通过模型运行
- 观察输出
测试多个提示
您可以向您的游乐场添加更多提示,以便轻松比较输出并决定哪个版本更好:

在数据集上测试
要基于数据集进行测试,只需从右上角选择数据集并点击“开始”。您还可以修改结果是否流式返回以及测试中的重复次数。

您可以点击“查看实验”按钮,深入了解测试结果。