以编程方式管理提示
您可以使用 LangSmith Python 和 TypeScript SDK 以编程方式管理提示。
以前,此功能位于langchainhub包,现已弃用。
所有后续功能都将位于langsmith包。
安装软件包
在 Python 中,可以直接使用 LangSmith SDK(推荐,功能齐全),也可以通过 LangChain 包使用(仅限于推送和拉取提示)。
在 TypeScript 中,必须使用 LangChain npm 包来拉取提示(它也允许推送)。对于所有其他功能,请使用 LangSmith 包。
- 蟒
- LangChain (Python)
- TypeScript (类型脚本)
pip install -U langsmith
# version >= 0.1.99
pip install -U langchain langsmith
# langsmith version >= 0.1.99 and langchain >= 0.2.13
yarn add langsmith langchain
// langsmith version >= 0.1.99 and langchain version >= 0.2.14
配置环境变量
如果您已经拥有LANGSMITH_API_KEY设置为 LangSmith 中当前工作区的 API 密钥,则可以跳过此步骤。
否则,请通过导航到Settings > API Keys > Create API Key在 LangSmith。
设置环境变量。
export LANGSMITH_API_KEY="lsv2_..."
我们所说的 “prompts” 过去被称为 “repos”,所以代码中对 “repo” 的任何引用都是指 prompt。
推送提示
要创建新提示或更新现有提示,您可以使用push prompt方法。
- 蟒
- LangChain (Python)
- TypeScript (类型脚本)
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)
from langchain import hub as prompts
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
url = prompts.push("joke-generator", prompt)
# url is a link to the prompt in the UI
print(url)
import * as hub from "langchain/hub";
import { ChatPromptTemplate } from "@langchain/core/prompts";
const prompt = ChatPromptTemplate.fromTemplate("tell me a joke about {topic}");
const url = hub.push("joke-generator", {
object: prompt,
});
// url is a link to the prompt in the UI
console.log(url);
您还可以将 Prompt 作为 Prompt 和 Model 的 RunnableSequence 推送。 这对于存储要用于此提示的模型配置非常有用。 LangSmith Playground 必须支持该提供程序。(请参阅此处的设置:支持的提供程序)
- 蟒
- LangChain (Python)
- TypeScript (类型脚本)
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)
from langchain import hub as prompts
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
chain = prompt | model
url = prompts.push("joke-generator-with-model", chain)
# url is a link to the prompt in the UI
print(url)
import * as hub from "langchain/hub";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({ model: "gpt-4o-mini" });
const prompt = ChatPromptTemplate.fromTemplate("tell me a joke about {topic}");
const chain = prompt.pipe(model);
await hub.push("joke-generator-with-model", {
object: chain
});
拉取提示
要拉取提示,您可以使用pull prompt方法,该方法将提示作为 LangChain 返回PromptTemplate.
要提取私有提示,您无需指定所有者句柄(但如果您设置了所有者句柄,则可以指定)。
要从 LangChain Hub 拉取公共提示,您需要指定提示作者的句柄。
- 蟒
- LangChain (Python)
- TypeScript (类型脚本)
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"})
from langchain import hub as prompts
from langchain_openai import ChatOpenAI
prompt = prompts.pull("joke-generator")
model = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | model
chain.invoke({"topic": "cats"})
import * as hub from "langchain/hub";
import { ChatOpenAI } from "@langchain/openai";
const prompt = await hub.pull("joke-generator");
const model = new ChatOpenAI({ model: "gpt-4o-mini" });
const chain = prompt.pipe(model);
await chain.invoke({"topic": "cats"});
与推送 Prompt 类似,你也可以将 Prompt 拉取为 Prompt 和 Model 的 RunnableSequence。 只需在拉取提示符时指定 include_model。 如果存储的提示包含模型,它将作为 RunnableSequence 返回。 确保您为正在使用的模型设置了正确的环境变量。
- 蟒
- LangChain (Python)
- TypeScript (类型脚本)
from langsmith import Client
client = Client()
chain = client.pull_prompt("joke-generator-with-model", include_model=True)
chain.invoke({"topic": "cats"})
from langchain import hub as prompts
chain = prompts.pull("joke-generator-with-model", include_model=True)
chain.invoke({"topic": "cats"})
import * as hub from "langchain/hub";
import { Runnable } from "@langchain/core/runnables";
const chain = await hub.pull<Runnable>("joke-generator-with-model", { includeModel: true });
await chain.invoke({"topic": "cats"});
拉取提示时,您还可以指定特定的提交哈希或提示标签来提取特定版本的提示。
- 蟒
- LangChain (Python)
- TypeScript (类型脚本)
prompt = client.pull_prompt("joke-generator:12344e88")
prompt = prompts.pull("joke-generator:12344e88")
const prompt = await hub.pull("joke-generator:12344e88")
要从 LangChain Hub 拉取公共提示,您需要指定提示作者的句柄。
- 蟒
- LangChain (Python)
- TypeScript (类型脚本)
prompt = client.pull_prompt("efriis/my-first-prompt")
prompt = prompts.pull("efriis/my-first-prompt")
const prompt = await hub.pull("efriis/my-first-prompt")
对于拉取提示,如果您使用的是 Node.js 或支持动态导入的环境,我们建议使用langchain/hub/nodeentryPoint 的 Sample,因为它会自动处理与提示配置关联的模型的反序列化。
如果您处于非 Node 环境中,则非 OpenAI 模型不支持 “includeModel”,您应该使用基础langchain/hubentryPoint 的 EntryPoint 访问。
使用不带 LangChain 的提示
如果您想将提示存储在 LangSmith 中,但直接将它们与模型提供商的 API 一起使用,您可以使用我们的转换方法。 这些作会将您的提示转换为 OpenAI 或 Anthropic API 所需的有效负载。
这些转换方法依赖于 LangChain 集成包中的逻辑,您需要安装相应的包作为依赖项 除了您选择的官方 SDK 之外。以下是一些示例:
OpenAI
- 蟒
- TypeScript (类型脚本)
pip install -U langchain_openai
yarn add @langchain/openai @langchain/core
// @langchain/openai version >= 0.3.2
- 蟒
- TypeScript (类型脚本)
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)
import * as hub from "langchain/hub";
import { convertPromptToOpenAI } from "@langchain/openai";
import OpenAI from "openai";
const prompt = await hub.pull("jacob/joke-generator");
const formattedPrompt = await prompt.invoke({
topic: "cats",
});
const { messages } = convertPromptToOpenAI(formattedPrompt);
const openAIClient = new OpenAI();
const openAIResponse = await openAIClient.chat.completions.create({
model: "gpt-4o-mini",
messages,
});
Anthropic
- 蟒
- TypeScript (类型脚本)
pip install -U langchain_anthropic
yarn add @langchain/anthropic @langchain/core
// @langchain/anthropic version >= 0.3.3
- 蟒
- TypeScript (类型脚本)
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)
import * as hub from "langchain/hub";
import { convertPromptToAnthropic } from "@langchain/anthropic";
import Anthropic from "@anthropic-ai/sdk";
const prompt = await hub.pull("jacob/joke-generator");
const formattedPrompt = await prompt.invoke({
topic: "cats",
});
const { messages, system } = convertPromptToAnthropic(formattedPrompt);
const anthropicClient = new Anthropic();
const anthropicResponse = await anthropicClient.messages.create({
model: "claude-3-haiku-20240307",
system,
messages,
max_tokens: 1024,
stream: false,
});
列出、删除和点赞提示
您还可以使用list prompts,delete prompt,like prompt和unlike prompt方法。
有关这些方法的大量文档,请参阅 LangSmith SDK 客户端。
- 蟒
- TypeScript (类型脚本)
# 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")
// List all prompts in my workspace
import Client from "langsmith";
const client = new Client({ apiKey: "lsv2_..." });
const prompts = client.listPrompts();
for await (const prompt of prompts) {
console.log(prompt);
}
// List my private prompts that include "joke"
const private_joke_prompts = client.listPrompts({ query: "joke", isPublic: false});
// Delete a prompt
client.deletePrompt("joke-generator");
// Like a prompt
client.likePrompt("efriis/my-first-prompt");
// Unlike a prompt
client.unlikePrompt("efriis/my-first-prompt");