Skip to main content

以编程方式管理提示

您可以使用 LangSmith 的 Python 和 TypeScript SDK 来以编程方式管理提示。

笔记

此前,此功能位于 langchainhub 包中,该包现已弃用。 今后所有功能都将位于 langsmith 包中。

安装包

在 Python 中,您可以直接使用 LangSmith SDK(推荐,功能完整),也可以通过 LangChain 包使用(仅支持推送和拉取提示词)。

在 TypeScript 中,您必须使用 LangChain npm 包来拉取提示词(该包也支持推送)。对于所有其他功能,请使用 LangSmith 包。

pip install -U langsmith 
# version >= 0.1.99

配置环境变量

如果您已在 LangSmith 中将 LANGSMITH_API_KEY 设置为当前工作区的 API 密钥,则可以跳过此步骤。

否则,请通过访问 LangSmith 中的 Settings > API Keys > Create API Key 来获取您工作区的 API 密钥。

设置您的环境变量。

export LANGSMITH_API_KEY="lsv2_..."
术语

我们所称的“提示词”(prompts)过去曾被称为“repos”,因此代码中所有对“repo”的引用均指代提示词。

提交一个提示词

要创建新提示词或更新现有提示词,您可以使用 push prompt 方法。

from langsmith import Client
from langchain_core.prompts import ChatPromptTemplate

client = Client()

prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
url = client.push_prompt("joke-generator", object=prompt)
# url is a link to the prompt in the UI
print(url)

您还可以将提示词作为由提示词和模型组成的 RunnableSequence 推送。 这有助于保存您希望与此提示词配合使用的模型配置。 该提供商必须受 LangSmith Playground 支持。(参见此处的设置:支持的提供商

from langsmith import Client
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

client = Client()
model = ChatOpenAI(model="gpt-4o-mini")

prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
chain = prompt | model

client.push_prompt("joke-generator-with-model", object=chain)

拉取一个提示词

要获取提示词,您可以使用 pull prompt 方法,该方法会以 LangChain 的 PromptTemplate 格式返回提示词。

拉取一个私有提示词(prompt)时,您无需指定所有者用户名(不过如果您已设置,也可以指定)。

要从 LangChain Hub 拉取一个公开提示词(prompt),您需要指定该提示词作者的句柄(handle)。

from langsmith import Client
from langchain_openai import ChatOpenAI

client = Client()

prompt = client.pull_prompt("joke-generator")
model = ChatOpenAI(model="gpt-4o-mini")

chain = prompt | model
chain.invoke({"topic": "cats"})

与推送提示词类似,您也可以将提示词拉取为一个由提示词和模型组成的 RunnableSequence。 拉取提示词时,只需指定 include_model 参数即可。 如果存储的提示词中已包含模型,则它将作为 RunnableSequence 返回。 请确保已为所使用的模型正确设置了相应的环境变量。

from langsmith import Client

client = Client()
chain = client.pull_prompt("joke-generator-with-model", include_model=True)
chain.invoke({"topic": "cats"})

拉取提示词时,您还可以指定特定的提交哈希值或提示词标签,以拉取该提示词的特定版本。

prompt = client.pull_prompt("joke-generator:12344e88")

要从 LangChain Hub 拉取一个公开提示词(prompt),您需要指定该提示词作者的句柄(handle)。

prompt = client.pull_prompt("efriis/my-first-prompt")
JavaScript 用户的重要提示

如需加载提示词(prompts),若您使用的是 Node.js 或支持动态导入的环境,我们建议使用 langchain/hub/node 入口点,因为它会自动处理与您的提示词配置相关联的模型反序列化。

如果您处于非 Node.js 环境中,则“includeModel”不支持非 OpenAI 模型,您应使用基础入口点 langchain/hub

不使用 LangChain 的提示词

如果您希望将提示词存储在 LangSmith 中,但直接通过模型提供商的 API 使用它们,则可以使用我们的转换方法。 这些方法会将您的提示词转换为 OpenAI 或 Anthropic API 所需的请求负载。

这些转换方法依赖于 LangChain 集成包内部的逻辑,因此除了安装您选择的官方 SDK 外,您还需将相应的集成包作为依赖项进行安装。以下是一些示例:

OpenAI

pip install -U langchain_openai
from openai import OpenAI

from langsmith.client import Client, convert_prompt_to_openai_format

# langsmith client
client = Client()

# openai client
oai_client = OpenAI()

# pull prompt and invoke to populate the variables
prompt = client.pull_prompt("joke-generator")
prompt_value = prompt.invoke({"topic": "cats"})

openai_payload = convert_prompt_to_openai_format(prompt_value)
openai_response = oai_client.chat.completions.create(**openai_payload)

Anthropic

pip install -U langchain_anthropic
from anthropic import Anthropic

from langsmith.client import Client, convert_prompt_to_anthropic_format

# langsmith client
client = Client()
# anthropic client
anthropic_client = Anthropic()
# pull prompt and invoke to populate the variables
prompt = client.pull_prompt("joke-generator")
prompt_value = prompt.invoke({"topic": "cats"})
anthropic_payload = convert_prompt_to_anthropic_format(prompt_value)
anthropic_response = anthropic_client.messages.create(**anthropic_payload)

提示词列表、删除和点赞

您还可以使用 list promptsdelete promptlike promptunlike prompt 方法来列出、删除以及点赞/取消点赞提示。 有关这些方法的详细文档,请参阅 LangSmith SDK 客户端

# List all prompts in my workspace
prompts = client.list_prompts()
# List my private prompts that include "joke"
prompts = client.list_prompts(query="joke", is_public=False)
# Delete a prompt
client.delete_prompt("joke-generator")
# Like a prompt
client.like_prompt("efriis/my-first-prompt")
# Unlike a prompt
client.unlike_prompt("efriis/my-first-prompt")

这个页面对你有帮助吗?


您可以留下详细的反馈 在 GitHub 上.