自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:部分填充的提示模板和提示合成]

分类目录:《自然语言处理从入门到应用》总目录


部分填充的提示模板

提示模板是一个具有.format方法的类,它接受一个键值映射并返回一个字符串(一个提示),以传递给语言模型。与其他方法一样,将提示模板进行"部分填充"可能是有意义的。例如,传入所需值的子集,以创建一个新的提示模板,只需要剩余的子集值。

LangChain支持两种方式实现这个功能:

  • 使用字符串值
  • 使用返回字符串值的函数

这两种不同的方式支持不同的用例。在下面的文章中,我们将介绍这两种用例的动机以及在LangChain中如何实现它。

使用字符串进行部分填充

部分填充提示模板的一个常见用例是,如果我们先获得某些变量,然后再获得其他变量。例如,假设我们有一个需要两个变量foobaz的提示模板。如果您先获得foo值,但稍后获得 baz值,那么等到两个变量都在同一个位置时再传递给提示模板可能会很麻烦。相反,我们可以使用foo值部分填充提示模板,然后将部分填充的提示模板传递下去并直接使用它。下面是一个示例:

dart 复制代码
from langchain.prompts import PromptTemplate
prompt = PromptTemplate(template="{foo}{bar}", input_variables=["foo", "bar"])
partial_prompt = prompt.partial(foo="foo");
print(partial_prompt.format(bar="baz"))
foobaz

我们也可以使用部分变量初始化提示:

dart 复制代码
prompt = PromptTemplate(template="{foo}{bar}", input_variables=["bar"], partial_variables={"foo": "foo"})
print(prompt.format(bar="baz"))
foobaz
使用函数进行部分填充

另一个常见的用例是使用函数进行部分填充,这种情况下的用例主要针对当我们知道我们总是以相同方式获取某个变量时。一个典型的例子是日期或时间。想象一下,我们有一个提示,且我们总是希望其中包含当前日期。我们不能在提示中硬编码日期,并且将其与其他输入变量一起传递也有些麻烦。在这种情况下,使用一个函数进行部分填充,该函数始终返回当前日期非常方便。

dart 复制代码
from datetime import datetime

def _get_datetime():
    now = datetime.now()
    return now.strftime("%m/%d/%Y, %H:%M:%S")
prompt = PromptTemplate(
    template="告诉我一个{形容词}的关于{日期}的笑话",
    input_variables=["形容词", "日期"]
)
partial_prompt = prompt.partial(date=_get_datetime)
print(partial_prompt.format(形容词="有趣"))
告诉我一个有趣的关于02/27/2023, 22:15:16的笑话

我们还可以直接使用部分填充的变量初始化提示模板,这在这种工作流程中通常更有意义:

dart 复制代码
prompt = PromptTemplate(
    template="告诉我一个{形容词}的关于{日期}的笑话",
    input_variables=["形容词"],
    partial_variables={"日期": _get_datetime}
)
print(prompt.format(形容词="有趣"))
告诉我一个有趣的关于02/27/2023, 22:15:16的笑话

提示合成

下文介绍的是如何将多个提示组合在一起。当我们想要重用提示的部分时,这将非常有用。我们可以使用PipelinePrompt来实现这一点,PipelinePrompt由两个主要部分组成:

  • final_prompt:这是返回的最终提示
  • pipeline_prompts:这是一个包含元组的列表,每个元组都包含一个字符串name和一个Prompt模板。每个Prompt模板将被格式化,然后作为与name相同名称的变量传递给未来的Prompt模板。
dart 复制代码
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)
pipeline_prompt.input_variables
['example_a', 'person', 'example_q', 'input']

print(pipeline_prompt.format(
    person="Elon Musk",
    example_q="What's your favorite car?",
    example_a="Telsa",
    input="What's your favorite social media site?"
))

输出:

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

参考文献:

1\] LangChain 🦜️🔗 中文网,跟着LangChain一起学LLM/GPT开发:https://www.langchain.com.cn/ \[2\] LangChain中文网 - LangChain 是一个用于开发由语言模型驱动的应用程序的框架:http://www.cnlangchain.com/

相关推荐
2501_941982059 分钟前
结合 AI 视觉:使用 OCR 识别企业微信聊天记录中的图片信息
人工智能·ocr·企业微信
事变天下24 分钟前
肾尚科技完成新一轮融资,加速慢性肾脏病(CKD)精准化管理闭环渗透
大数据·人工智能
GEO AI搜索优化助手26 分钟前
范式革命——从“关键词”到“意图理解”,搜索本质的演进与重构
人工智能·搜索引擎·生成式引擎优化·ai优化·geo搜索优化
大刘讲IT27 分钟前
2025年企业级 AI Agent 标准化落地深度年度总结:从“对话”到“端到端价值闭环”的范式重构
大数据·人工智能·程序人生·ai·重构·制造
2301_8234380235 分钟前
【无标题】解析《采用非对称自玩实现强健多机器人群集的深度强化学习方法》
数据库·人工智能·算法
沛沛老爹36 分钟前
Web开发者快速上手AI Agent:提示词应用优化实战
人工智能·ai·agent·提示词·rag·入门知识
中国胖子风清扬39 分钟前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain
极度畅想40 分钟前
脑电模型实战系列(三):DEAP 数据集处理与 Russell 环状模型实战(一)
深度学习·特征提取·情感计算·脑机接口 bci·deap数据集
Dev7z42 分钟前
基于Stanley算法的自动驾驶车辆路径跟踪控制研究
人工智能·机器学习·自动驾驶
Java后端的Ai之路1 小时前
【分析式AI】-过拟合(含生活案例说明)
人工智能·aigc·生活·过拟合·分析式ai