为什么需要提示工程?
提示为模型设定了场景,就像即兴表演中的观众成员指导演员的下一步表演——它指导模型的行为,而不改变其底层能力。正如告诉演员“扮演一个海盗”决定他们的表现一样,提示提供了指令、示例和上下文,这些塑造了模型如何响应。 提示工程很重要,因为它允许你改变模型的行为方式。虽然还有其他方法可以改变模型的行为(如微调),但提示工程通常是入门最简单的方式,并且往往提供最高的投资回报率。 我们经常看到,提示工程是多学科的。有时候,最佳的提示工程师并不是构建应用的软件工程师,而是产品经理或另一个领域的专家。拥有适当的工具和基础设施来支持这种跨学科构建至关重要。提示与提示模板
尽管我们经常将这些术语互换使用,但了解“提示”和“提示模板”之间的区别很重要。 提示语指的是传递给语言模型的那些消息。 提示模板指的是一种格式化信息的方式,以便让提示包含您想要的信息。提示模板可以包括用于少量示例、外部上下文或任何其他所需外部数据的变量。
LangSmith中的提示
您可以在LangSmith中存储和版本控制提示模板。了解提示模板的几个关键方面很重要。聊天与生成
有两种不同类型的提示:chat 风格的提示和 completion 风格的提示。
聊天风格提示是一个消息列表。这是目前大多数模型API支持的提示风格,因此通常应优先选择这种风格。
完成风格提示只是一个字符串。这是一种较旧的提示风格,因此主要存在是为了兼容旧系统。
F 字符串与 Mustache
您可以使用 f-string 或 mustache 格式来格式化您的提示。以下是一个使用 f-string 格式的示例提示:- 演示场UI将获取
is_logged_in变量,但任何嵌套变量您需要自行指定。将以下内容粘贴到输入中以确保上述条件提示正常工作:
LangSmith 操场默认使用
f-string 作为模板格式,但您可以在提示设置/模板格式部分切换到 mustache 格式。mustache 使您在条件变量、循环和嵌套键方面拥有更多灵活性。对于条件变量,您需要在“输入”部分手动添加 json 变量。请参阅文档工具
工具是LLM可以用来与外界交互的接口。工具包括名称、描述以及用于调用工具的参数的JSON模式。结构化输出
结构化输出是大多数最先进的LLM的功能,其中它们不是产生原始文本作为输出,而是坚持使用指定的模式。这可能在底层使用或不使用工具。结构化输出类似于工具,但在几个关键方面有所不同。在使用工具时,LLM会选择调用哪个工具(或者可能选择不调用任何工具);而在结构化输出中,LLM总是以这种格式响应。在使用工具时,LLM可能选择多个工具;而在结构化输出中,只生成一个响应。
模型
可选地,您可以将模型配置与提示模板一起存储。这包括模型名称以及任何其他参数(如温度等)。提示版本
版本控制是迭代和协作处理不同提示的关键部分。提交
每次保存对提示的更新都会创建一个新的提交。您可以查看以前的提交,这使得回顾早期的提示版本或必要时恢复到之前的状态变得容易。在SDK中,您可以通过指定提交哈希和提示名称(例如prompt_name:commit_hash)来访问特定提示的提交。
在用户界面中,您可以通过切换“提交”标签页右上角的“差异”按钮来比较提交与其前一个版本。

标签
您可能希望使用可读性强的标签标记提示提交,以便即使添加了新的提交,您也能引用它。常见用例包括使用dev 或 prod 标签标记提示。这允许您跟踪在何处使用了哪些版本的提示。
提示语游乐场
提示游乐场使迭代和测试您的提示过程变得无缝。您可以从侧边栏或直接从已保存的提示进入游乐场。 在游乐场中,您可以:- 更改正在使用的模型
- 更改正在使用的提示模板
- 更改输出模式
- 更改可用的工具
- 输入用于运行提示模板的输入变量
- 将提示通过模型运行
- 观察输出
测试多个提示
您可以将更多提示添加到您的游乐场中,以便轻松比较输出并决定哪个版本更好:
在数据集上进行测试
要测试数据集,您只需从右上角选择数据集并按“开始”按钮。您可以修改结果是否以流式传输返回,以及测试中重复的次数。