引言
在大语言模型应用开发中,提示词是非常重要的环节。langchain提供了强大且灵活的提示模板(Prompt Template)功能。本文深入探讨LangChain中如何共同组合成提示模板。
什么是共同组合提示模板?
将Prompt的不同部分组合在一起。可以使用字符串提示或者聊天提示执行。
字符串提示合成
使用字符串提示时,每个模板都连接在一起。可以直接使用提示或字符串(列表中的第一个元素必须是提示)。
from langchain_core.prompts import PromptTemplate
prompt = (
PromptTemplate.from_template("{省份}有几个地级市?")
+ "请说出三个分别列出"
+ "\n 省会距离{城市}有多远?"
)
print(prompt)
print(prompt.format(省份="河南省",城市="北京"))
input_variables=['城市', '省份'] template='{省份}有几个地级市?请说出三个分别列出\n 省会距离{城市}有多远?'
河南省有几个地级市?请说出三个分别列出
省会距离北京有多远?
聊天提示合成
在 langchain_core.messages
模块中,AIMessage
、HumanMessage
和 SystemMessage
是三个用于表示不同类型消息的类。与上述相类似,将其进行组合。示例如下:
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
# 初始化
prompt = SystemMessage(content="我是河南人")
new_prompt = (
prompt + HumanMessage(content="嗨") + AIMessage(content="什么?") + "{input}"
)
# 这会创建一个 ChatPromptTemplate 类的实例
print(new_prompt.format_messages(input="我在向你打招呼"))
[SystemMessage(content='我是河南人'), HumanMessage(content='嗨'), AIMessage(content='什么?'), HumanMessage(content='我在向你打招呼')]
使用PipelinePrompt
PipelinePromptTemplate是 LangChain中的一个类,主要有两部分组成:
1.final prompt: 最终提示
2.Pipeline prompts:元组列表,由字符串名称和提示模板组成。每个提示模板都将被格式化,然后作为具有相同名称的变量传递给未来的提示模板。
from langchain_core.prompts import PipelinePromptTemplate, PromptTemplate
full_template = """{introduction}
{example}
{start}"""
full_prompt = PromptTemplate.from_template(full_template)
print(full_prompt)
introduction_template = """You are impersonating {person}."""
introduction_prompt = PromptTemplate.from_template(introduction_template)
print(introduction_prompt)
example_template = """Here's an example of an interaction:
Q: {example_q}
A: {example_a}"""
example_prompt = PromptTemplate.from_template(example_template)
print(example_prompt)
start_template = """Now, do this for real!
Q: {input}
A:"""
start_prompt = PromptTemplate.from_template(start_template)
print(start_prompt)
input_prompts = [
("introduction", introduction_prompt),
("example", example_prompt),
("start", start_prompt),
]
pipeline_prompt = PipelinePromptTemplate(
final_prompt = full_prompt, pipeline_prompts=input_prompts
)
print(pipeline_prompt)
print(pipeline_prompt.input_variables)
print(
pipeline_prompt.format(
person="Elon Musk",
example_q="What's your favorite car?",
example_a="Tesla",
input="What's your favorite social media site?",
)
)
You are impersonating Elon Musk.
Here's an example of an interaction:
Q: What's your favorite car?
A: TeslaNow, do this for real!
Q: What's your favorite social media site?
A: