在langchain中 如何共同组合提示词prompts

引言

在大语言模型应用开发中,提示词是非常重要的环节。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 模块中,AIMessageHumanMessageSystemMessage 是三个用于表示不同类型消息的类。与上述相类似,将其进行组合。示例如下:

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: Tesla

Now, do this for real!

Q: What's your favorite social media site?
A:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值