Skip to main content
虽然传统软件应用程序是通过编写代码构建的,但AI应用程序通常从提示中获取其逻辑。 本指南将介绍LangSmith中提示工程的关键概念。

为什么需要提示工程?

提示在不改变模型底层能力的情况下引导其行为。通过提供指令、示例和上下文,提示塑造了模型对输入的响应方式。 提示工程之所以重要,是因为它允许你修改模型行为。虽然存在其他方法(如微调),但提示工程通常提供最低的入门门槛,并且往往能带来最高的投资回报率。 提示工程通常是一项多学科协作的工作。最有效的提示工程师可能是产品经理、领域专家或其他非技术团队成员,而不是构建应用程序的软件工程师。适当的工具和基础设施对于支持这种跨职能协作至关重要。

提示类型

有两种不同的提示格式:chat(聊天)风格提示和completion(补全)风格提示。 聊天提示是一系列消息,每条消息都有一个角色(如systemuserassistant)。这是当前大多数模型API支持的提示风格,也是推荐的格式。 补全提示是一个单一字符串。这是一种较旧的提示风格,主要为了向后兼容而保留。
除非有特定原因需要使用补全提示,否则新项目请使用聊天提示。聊天提示为多轮对话提供了更好的结构,并且受到现代LLM更好的支持。

提示与提示模板

虽然提示提示模板经常互换使用,但理解它们的区别有助于澄清LangSmith如何管理和评估你的AI应用程序。
  • 提示指的是传递给语言模型的消息。
  • 提示模板允许你创建带有动态占位符的可重用提示,这些占位符在运行时被填充。你无需硬编码值,而是定义变量,LangSmith在每次运行提示时用不同的输入替换这些变量。这使得提示灵活、可测试且更易于迭代。
以下是模板在实践中的工作方式:
  1. 定义模板:创建一个带有变量(用花括号标记)的提示,这些变量将在运行时被替换:
    You are a customer support agent. This is the refund policy:
    
    {refund_policy}
    
    Please respond to the user's question:
    
    {question}
    
  2. 提供输入值:为每个变量提供实际值:
    {
    "refund_policy": "no refunds under any circumstances",
    "question": "can I get a refund for this hat?"
    }
    
  3. 获取最终提示:LangSmith用你的输入替换变量,创建发送给模型的提示:
    You are a customer support agent. This is the refund policy:
    
    no refunds under any circumstances
    
    Please respond to the user's question:
    
    Can I get a refund for this hat?
    
提示模板格式指南中了解更多关于模板变量语法和格式选项的信息。

LangSmith中的提示

你可以在LangSmith中存储和版本化提示模板。这些模板可以在工作台中测试,通过提交和标签进行版本控制,并拉取到你的应用程序代码中。
打开工作台来创建和测试你的第一个提示模板。有关分步指南,请参阅创建提示
以下部分描述了提示模板的关键方面。

F-string 与 mustache

你可以使用f-stringmustache格式来格式化带有输入变量的提示模板。 有关如何在工作台中使用这些格式的详细信息,请参阅模板格式
工作台使用f-string作为默认模板格式,但你可以在提示设置/模板格式部分切换到mustache格式。mustache在条件变量、循环和嵌套键方面提供了更多灵活性。对于条件变量,你需要在“inputs”部分手动添加json变量。阅读文档

工具

工具是LLM可用于与外部世界交互的接口。工具由名称、描述和用于调用该工具的参数的JSON模式组成。

结构化输出

结构化输出是大多数最先进LLM的一项功能,其中它们不产生原始文本作为输出,而是遵循指定的模式。这可能使用也可能不使用底层的工具
结构化输出类似于工具,但在几个关键方面有所不同。使用工具时,LLM选择调用哪个工具(或可能选择不调用任何工具);使用结构化输出时,LLM总是以这种格式响应。使用工具时,LLM可能选择多个工具;使用结构化输出时,只生成一个响应。

模型

你可以选择将模型配置与提示模板一起存储。这包括模型的名称和任何其他参数(温度等)。

提示版本控制

版本控制是迭代和协作处理提示的关键组成部分。

提交

每次保存对提示的更新都会创建一个具有唯一提交哈希的新提交。这允许你:
  • 查看提示的完整更改历史记录。
  • 查看早期版本。
  • 如有需要,恢复到先前的状态。
  • 在代码中使用提交哈希引用特定版本(例如,client.pull_prompt("prompt_name:commit_hash"))。
在UI中,你可以通过切换提示详情页面右上角的差异来比较提交与其先前版本。

标签

提交标签是指向提示历史记录中特定提交的人类可读标签。与提交哈希不同,标签可以移动以指向不同的提交,允许你更新代码引用的版本而无需更改代码本身。 提交标签的用例可以包括:
  • 环境stagingproduction标签保留给环境功能,该功能允许你在命名的部署目标之间提升提交,并在不更改代码的情况下切换版本。
  • 版本控制:标记提示的稳定版本,例如v1v2,这允许你在代码中引用特定版本并随时间跟踪更改。
  • 协作:标记准备审查的版本,这使你可以与协作者共享特定版本并获取反馈。
不要与资源标签混淆:提交标签引用特定的提示版本。资源标签是用于组织工作区资源的键值对。
有关创建和管理提交标签的详细信息,请参阅管理提示

工作台

工作台提供了一个用于迭代和测试提示的界面。你可以从侧边栏或直接从已保存的提示访问工作台。 在工作台中,你可以:
  • 更改正在使用的模型
  • 更改正在使用的提示模板
  • 更改输出模式
  • 更改可用的工具
  • 输入要通过提示模板运行的输入变量
  • 通过模型运行提示
  • 观察输出
在工作台中使用 Polly 来优化提示、生成工具并在AI辅助下创建输出模式。

测试多个提示

你可以将多个提示添加到工作台中,以比较输出并评估性能: 将提示添加到工作台

在数据集上测试

要在数据集上测试,请从右上角选择数据集,然后单击“开始”。你可以配置结果是否流式传输以及测试的重复次数。 在工作台的数据集上测试 单击“查看实验”按钮以查看详细的测试结果。