基于LangSmith的提示词工程

提示词(Prompt)用于引导大模型(LLM)的行为。提示词工程(Prompt Engineering)是指设计、测试并优化给大模型的指令,以使其生成可靠且有用的响应的过程。

LangSmith提供了用于创建、版本控制、测试提示词以及进行协作的工具。另外还有一些常见概念,例如提示词模板(Prompt Templates)------ 可让你复用结构化的提示词,以及变量(Variables)------ 能让你在提示词中动态插入值(例如用户的问题)。

在本文中,你将通过软件开发工具包(SDK)来创建、测试并优化提示词。本指南以OpenAI作为示例大模型提供商,但相同的工作流程也适用于其他提供商。

准备

开始之前,请确保你已具备以下条件:

  • 一个 LangSmith 账号:可前往 smith.langchain.com 注册或登录。
  • 一个 LangSmith API 密钥:请参考《创建 API 密钥指南》操作。
  • 一个 OpenAI API 密钥:可从OpenAI控制台生成。

搭建环境

bash 复制代码
mkdir ls-prompt-quickstart && cd ls-prompt-quickstart
python -m venv .venv
source .venv/bin/activate
pip install -qU langsmith openai langchain_core
export LANGSMITH_API_KEY='<your_api_key>'
export OPENAI_API_KEY='<your_api_key>'

创建提示词

要创建提示词,你需要先定义提示词中所需的消息列表,然后将其推送到LangSmith平台。 使用对应编程语言的构造函数与推送方法:

  • Python:通过 ChatPromptTemplate 构建 → 调用 client.push_prompt(...) 推送
  • TypeScript:通过 ChatPromptTemplate.fromMessages(...) 构建 → 调用 client.pushPrompt(...) 推送。

在 create_prompt.py文件中添加以下代码:

python 复制代码
from langsmith import Client
from langchain_core.prompts import ChatPromptTemplate

client = Client()

prompt = ChatPromptTemplate([
    ("system", "You are a helpful chatbot."),
    ("user", "{question}"),
])

client.push_prompt("prompt-quickstart", object=prompt)

此操作会创建一个有序的消息列表,将其封装到 ChatPromptTemplate(对话提示词模板)中,然后按名称将该提示词推送到你的工作区,以便进行版本控制和复用。

执行脚本: python create_prompt.py

点击生成的链接,即可在 LangSmith 用户界面(UI)中查看新创建的 "提示词中心"(Prompt Hub)提示词。

测试提示词

在本步骤中,你将通过名称("prompt-quickstart")拉取上一步创建的提示词,用测试输入对其进行格式化,转换为 OpenAI 的对话格式,然后调用OpenAI的Chat Completions API。

之后,你可以通过创建新版本来迭代优化该提示词。工作区成员可打开已有提示词,在用户界面(UI)中尝试修改,并将这些修改保存为该提示词的新提交记录,从而为整个团队保留历史版本记录。

在 test_prompt.py文件中添加以下内容:

python 复制代码
from langsmith import Client
from openai import OpenAI
from langchain_core.messages import convert_to_openai_messages

client = Client()
oai_client = OpenAI()

prompt = client.pull_prompt("prompt-quickstart")

# Since the prompt only has one variable you could also pass in the value directly
# Equivalent to formatted_prompt = prompt.invoke("What is the color of the sky?")
formatted_prompt = prompt.invoke({"question": "What is the color of the sky?"})

response = oai_client.chat.completions.create(
    model="gpt-4o",
    messages=convert_to_openai_messages(formatted_prompt.messages),
)

此操作会通过名称加载提示词,使用 pull(拉取)方法获取你正在测试的提示词的最新提交版本。你也可以通过传入"提交哈希值"(格式为 :)来指定某个特定的提交版本。

执行测试: python test_prompt.py

若要创建提示词的新版本,只需使用初始时的相同推送方法,传入相同的提示词名称和更新后的模板即可。LangSmith会将其记录为新的提交记录,并保留之前的版本。

将以下代码复制到 iterate_prompt.py文件中:

python 复制代码
from langsmith import Client
from langchain_core.prompts import ChatPromptTemplate

client = Client()

new_prompt = ChatPromptTemplate([
    ("system", "You are a helpful chatbot. Respond in Spanish."),
    ("user", "{question}"),
])

client.push_prompt("prompt-quickstart", object=new_prompt)

执行脚本: python iterate_prompt.py

现在你的提示词将包含两条提交记录。

如需优化你的提示词,可参考以下方式:

相关推荐
王小王-1234 分钟前
基于Python的车联网数据聚合与可视化分析平台设计与实现
python·车联网·新能源汽车·车联网聚合分析
白兰地空瓶4 分钟前
硅谷大佬都在聊的 Loop Engineering,到底在卷什么?
agent·ai编程
叫我:松哥30 分钟前
基于Flask框架的校园二手书籍交易平台,注重校园场景的特殊需求,通过学号认证保障用户真实性
后端·python·sqlite·flask·bootstrap
企业智能研究37 分钟前
企微智能客服赋能私域运营:从流量沉淀到高效转化的完整路径
人工智能·ai·agent·智能客服·私域运营
namexingyun42 分钟前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
通信仿真爱好者1 小时前
第【17】期--考虑硬件损伤和不完美CSI的RIS-MISO系统的深度强化学习联合优化-python完整代码+参考文献
python·深度强化学习·ris
是上好佳佳佳呀1 小时前
【LangChain|Day03】LangChain 链式调用 Chains 笔记
笔记·langchain
装不满的克莱因瓶1 小时前
自然语言处理常见任务——从文本理解到生成式AI的完整任务体系
人工智能·pytorch·python·深度学习·ai·自然语言处理
ptc学习者1 小时前
python 中描述符@property property 大概的样子
开发语言·python
zmzb01031 小时前
Python课后习题训练记录Day129
开发语言·python