【LangChain系列 11】Prompt模版——拼装组合

原文地址:【LangChain系列 11】Prompt模版------拼装组合

本文速读:

  • 多prompt模版组合

  • 单prompt模版拼装

在平常业务开发中,我们常常需要把一些公共模块提取出来作为一个独立的部分,然后将业务中去将这些模块进行组合。在LLM应用开发中,我们也会需要采用这种思想,比如将一些公共的promt模版独立出来,这样prompt模版就可以更好地复用,减少不必要的代码,保持代码和逻辑的简洁。

LangChain对prompt模版的组合提供两种方式:

  1. 针对多个prompt模版进行组合。

  2. 将多个部分拼装成一个prompt模版。

01 多prompt模版组合

LangChain提供了PipelinePrompt来进行多prompt模版组合。一个PipelinePrompt包含两个部分:

  • 最终的prompt模版:最终生成的prompt模版。

  • 待组合的prompt模版:它是一个列表,列表里的每一项包含一个名字和一个prompt模版。

如下面代码所示,full_prompt就是最终的 prompt模版,input_prompts就是 待组合的prompt模版;将input_prompts中的prompt模版最终组合成了full_prompt。

ini 复制代码
from langchain.prompts.pipeline import PipelinePromptTemplate
from langchain.prompts.prompt import PromptTemplate

full_template = """{introduction}

{example}

{start}"""
full_prompt = PromptTemplate.from_template(full_template)

introduction_template = """You are impersonating {person}."""
introduction_prompt = PromptTemplate.from_template(introduction_template)

example_template = """Here's an example of an interaction: 

Q: {example_q}
A: {example_a}"""
example_prompt = PromptTemplate.from_template(example_template)

start_template = """Now, do this for real!

Q: {input}
A:"""
start_prompt = PromptTemplate.from_template(start_template)

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.input_variables)

输出结果:

css 复制代码
['example_a', 'person', 'example_q', 'input']

执行下面代码:

ini 复制代码
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?"
))

输出结果:

rust 复制代码
    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:
    

02 单prompt模版拼装

单prompt模版拼装是指将多个部分拼装成一个完整的prompt模版,一般来说是将字符串与prompt模版拼成一个新的prompt模版。下面主要介绍字符串prompt模版和对话prompt模版这两种模版的拼装,通过两个代码示例来介绍它们的用法。

字符串prompt模版

在下面代码中,将一个字符串prompt模版和两个字符串通过 + 拼装起来。

swift 复制代码
from langchain.prompts import PromptTemplate

prompt = (
    PromptTemplate.from_template("Tell me a joke about {topic}")
    + ", make it funny"
    + "\n\nand in {language}"
)
print(prompt)

输出结果:

ini 复制代码
PromptTemplate(input_variables=['language', 'topic'], output_parser=None, partial_variables={}, template='Tell me a joke about {topic}, make it funny\n\nand in {language}', template_format='f-string', validate_template=True)

执行代码:

ini 复制代码
print(prompt.format(topic="sports", language="spanish"))

输出结果:

vbnet 复制代码
'Tell me a joke about sports, make it funny\n\nand in spanish'

同样,我们可以在LLMChain中使用这个拼装的prompt。

ini 复制代码
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain

model = ChatOpenAI()
chain = LLMChain(llm=model, prompt=prompt)
chain.run(topic="sports", language="spanish")

执行代码,输出结果:

arduino 复制代码
'¿Por qué el futbolista llevaba un paraguas al partido?\n\nPorque pronosticaban lluvia de goles.'

对话prompt模版

在下面代码中,将对话prompt中的Message和字符串通过 + 进行拼装,形成一个新的prompt模版,不仅可以将Message进行拼装,而且可以将MessagePrompt进行拼装,不过先要将MessagePrompt中的变量进行赋值。

ini 复制代码
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.schema import HumanMessage, AIMessage, SystemMessage

prompt = SystemMessage(content="You are a nice pirate")
new_prompt = (
    prompt
    + HumanMessage(content="hi")
    + AIMessage(content="what?")
    + "{input}"
)
print(new_prompt.format_messages(input="i said hi"))

输出结果:

python 复制代码
    [SystemMessage(content='You are a nice pirate', additional_kwargs={}),
     HumanMessage(content='hi', additional_kwargs={}, example=False),
     AIMessage(content='what?', additional_kwargs={}, example=False),
     HumanMessage(content='i said hi', additional_kwargs={}, example=False)]

同样地,可以在LLMChain中使用它:

javascript 复制代码
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain

model = ChatOpenAI()
chain = LLMChain(llm=model, prompt=new_prompt)
chain.run("i said hi")

执行代码,输出结果:

vbnet 复制代码
'Oh, hello! How can I assist you today?'

本文小结

本文主要介绍了prompt模版的拼装组合,既可以将多个prompt模版进行组合,也可以对单个prompt模版进行拼装。

相关推荐
世优科技虚拟人11 小时前
2026数字展厅设计核心关键,AI数字人交互大屏加速智慧展厅升级改造
人工智能·大模型·数字人·智慧展厅·展厅设计
艾莉丝努力练剑11 小时前
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系
大数据·人工智能·爬虫·python·pycharm·编辑器
MobotStone12 小时前
数字沟通之道
人工智能·算法
Together_CZ12 小时前
Cambrian-S: Towards Spatial Supersensing in Video——迈向视频中的空间超感知
人工智能·机器学习·音视频·spatial·cambrian-s·迈向视频中的空间超感知·supersensing
caiyueloveclamp13 小时前
【功能介绍05】ChatPPT好不好用?如何用?用户操作手册来啦!——【AI辅写+分享篇】
人工智能·powerpoint·ai生成ppt·aippt·免费aippt
Aileen_0v013 小时前
【Gemini3.0的国内use教程】
android·人工智能·算法·开源·mariadb
xiaogutou112113 小时前
5款软件,让歌唱比赛海报设计更简单
人工智能
后端小张13 小时前
智眼法盾:基于Rokid AR眼镜的合同条款智能审查系统开发全解析
人工智能·目标检测·计算机视觉·ai·语言模型·ar·硬件架构
dalalajjl13 小时前
每个Python开发者都应该试试知道创宇AiPy!工作效率提升500%的秘密武器
大数据·人工智能
wheeldown13 小时前
【Rokid+CXR-M】基于Rokid CXR-M SDK的博物馆AR导览系统开发全解析
c++·人工智能·ar