1.langchain中的prompt模板(Prompt Templates)

news/2024/11/23 18:01:40/

本教程将介绍如何使用 LangChain 库中的提示模板(PromptTemplate)来生成和处理文本。我们将通过具体的代码示例来解释程序的运行逻辑。

1. 导入必要的库

首先,从 langchain_core.prompts 模块中导入 PromptTemplate 类。

from langchain_core.prompts import PromptTemplate

2. 创建和使用基础提示模板

2.1 创建提示模板

使用 PromptTemplate.from_template 方法来创建一个提示模板。模板中可以使用 {topic} 这样的占位符。

prompt_template = PromptTemplate.from_template("Tell me a joke about {topic}")

2.2 调用提示模板

使用 invoke 方法并传入一个字典来填充模板中的占位符。

result = prompt_template.invoke({"topic": "cats"})
print(result.text)

输出:

Tell me a joke about cats

3. 使用聊天提示模板

3.1 创建聊天提示模板

ChatPromptTemplate 允许我们定义多轮对话的提示。每个提示由一个元组组成,包含角色和内容。

from langchain_core.prompts import ChatPromptTemplateprompt_template = ChatPromptTemplate([("system", "You are a helpful assistant"),("user", "Tell me a joke about {topic}")
])

3.2 调用聊天提示模板

同样使用 invoke 方法来填充占位符并获取结果。

result = prompt_template.invoke({"topic": "cats"})
print(result.to_messages())

输出:

[SystemMessage(content='You are a helpful assistant', additional_kwargs={}, response_metadata={}), HumanMessage(content='Tell me a joke about cats', additional_kwargs={}, response_metadata={})]

4. 动态添加消息

4.1 修改模板以包含动态消息

使用 placeholder 来动态添加消息。

prompt_template = ChatPromptTemplate([("system", "You are a helpful assistant"),("placeholder", "{msgs}")  # 动态消息占位符
])

4.2 调用模板并添加动态消息

传入一个包含消息的列表来填充 placeholder

result = prompt_template.invoke({"msgs": [("user", "Tell me a joke about cat")]})
print(result.to_messages())

输出:

[SystemMessage(content='You are a helpful assistant', additional_kwargs={}, response_metadata={}), HumanMessage(content='Tell me a joke about cat', additional_kwargs={}, response_metadata={})]

总结

通过本教程,我们学习了如何使用 LangChain 的 PromptTemplateChatPromptTemplate 来创建和处理文本提示。这些工具可以帮助我们灵活地生成和管理多轮对话和动态内容。

参考链接:https://python.langchain.com/docs/concepts/prompt_templates/

希望这个教程对你有所帮助!如果有任何问题,欢迎随时提问。


http://www.ppmy.cn/news/1549337.html

相关文章

Spark 分布式计算中网络传输和序列化的关系(二)

在 Spark 分布式计算 中,网络传输和序列化是数据处理的重要组成部分。Spark 通过将任务划分为多个分布式计算节点来处理数据,而序列化和网络传输直接影响计算性能和数据交互效率。 1. 序列化在 Spark 中的作用 序列化是 Spark 将数据对象转换为字节流以…

基于Matlab实现LDPC编码

在无线通信和数据存储领域,LDPC(低密度奇偶校验码)编码是一种高效、纠错能力强大的错误校正技术。本MATLAB仿真程序全面地展示了如何在AWGN(加性高斯白噪声)信道下应用LDPC编码与BPSK(二进制相移键控&#…

中国省级金融发展水平指数(金融机构存款余额、贷款余额、GDP)2020-2023年

数据范围: 包含的数据内容如下: 分省份金融机构存款余额、分省份金融机构贷款余额、分省份金融机构存贷款余额、分省份GDP、分省份金融发展指数 西藏自治区、贵州省、黑龙江省2023年数据暂未公布,计算至2022年,其他省份数据无缺失…

Cloud Native 云原生后端的开发注意事项

在云原生后端开发里,数据管理和存储这块得好好弄。数据库选型得综合考虑,像关系型数据有复杂查询需求就选 MySQL、PostgreSQL,海量非结构化数据就可以考虑 MongoDB、Cassandra 这些。设计数据库得遵循规范化原则,像设计电商订单表…

【工具变量】中国省级及地级市保障性住房数据集(2010-2023年)

一、测算方式:参考顶刊《世界经济》蔡庆丰(2024)老师的研究,具体而言,本文将土地用途为经济适用住房用地、廉租住房用地、公共租赁住房用地、共有产权住房用 地等类型的土地定义为具有保障性住房用途的土地。根据具有保…

【AI系统】AI系统架构的组成

AI 系统组成 如图所示,大致可以将 AI 系统分为以下几个具体的方向: AI 训练与推理框架 AI 框架不仅仅是指如 PyTorch 等训练框架,还包括推理框架。其负责提供用户前端的 AI 编程语言,接口和工具链。负责静态程序分析与计算图构建…

HTML·第八章 利用CSS制作导航栏菜单

8.1 水平顶部导航栏 水平顶部导航栏(Horizontal Top Navigation Bar)是网页设计中常用的一种导航栏布局,通常位于页面的顶部,以水平的方式排列导航选项。这种布局便于用户快速访问网站的主要部分。常见的设计元素包括菜单项、图标…

【Homework】【7】Learning resources for DQ Robotics in MATLAB

阻尼伪逆使系统在任务空间奇异性方面具有一定的鲁棒性 阻尼伪逆 阻尼伪逆是SVD(奇异值分解)逆矩阵的一种有趣替代方法,它使系统在任务空间奇异性方面具有一定的鲁棒性。其主要思想是对任意(可能为奇异的)矩阵 B ∈ …