Langchain的提示词模板

        因为做AI项目的过程中,需要处理各种提示词(prompt),其中有些是固定的文本,有些是会反复修改的。如果是简单的提示词,直接用python里面的字符串format()或者replace()函数进行处理即可。对于复杂的,还是用langchain里面的提示词模板更方便。

        为了方便处理llm的promt,langchain提供了提示词模板。具体文档参见官方文档:https://api.python.langchain.com/en/latest/core_api_reference.html#module-langchain_core.prompts

        常见的类有BasePromptTemplate、PipelinePromptTemplate和PromptTemplate。其中BasePromptTemplate是后面2个类的基类(PromptTemplate的直接父类是StringPromptTemplate,而StringPromptTemplate的直接父类则是BasePromptTemplate)。


BasePromptTemplate中常用的方法有format(),input_variables(),partial(),save()。

PromptTemplate中常用的方法有from_file()、from_template()。

具体使用请参见下面的源码:template.txt文件中的内容如下:

这是一个测试用的模板文件,用于测试模板引擎的功能。
你叫做{ai_name},你是{ai_role},{instructions}


template.json中的文件内容如下:

{"_type": "prompt","input_variables": ["ai_name","ai_role","instructions"],"template_path": "template.txt"
}


template.py的代码如下:

# coding: utf-8
from langchain_core.prompts.loading import load_prompt
from langchain_core.prompts.pipeline import PipelinePromptTemplate
from langchain_core.prompts.prompt import PromptTemplate# load_prompt 返回的是 BasePromptTemplate
main_prompt_template = load_prompt("template.json")
# print(main_prompt_template)partial_variables = {}
partial_variables["instructions"] = "按照给定的思路和上下文,回答问题。"# 将有值的变量填充到模板中
main_prompt_template = main_prompt_template.partial(**partial_variables)
# print(main_prompt_template)# 设置模板中的其它变量
prompt = main_prompt_template.format(ai_name="胖胖",ai_role="智能助手机器人")
print(f"******\n{prompt}\n******")
# 会输出:
"""
******
这是一个测试用的模板文件,用于测试模板引擎的功能。
你叫做胖胖,你是智能助手机器人,按照给定的思路和上下文,回答问题。
******
"""# 使用PipelinePromptTemplate,可以将多个模板组合在一起
templates = []
task_template = """{task_description}"""task_prompt = PromptTemplate.from_template(task_template)
templates.append(("task",task_prompt))
print(f"task:{task_prompt.input_variables}")resources_template = """{support_resources}"""resources_prompt = PromptTemplate.from_template(resources_template)
templates.append(("resources", resources_prompt))
print(f"resources:{resources_prompt.input_variables}")final_template = """你的任务是:{task}
你可以使用的资源包括:{resources}
"""final_prompt = PromptTemplate.from_template(final_template)
pipeline_prompt = PipelinePromptTemplate(final_prompt=final_prompt,pipeline_prompts=templates)
print(f"pipeline: {pipeline_prompt.input_variables}")pipeline_prompt = pipeline_prompt.format(task_description="8月份的销售额是多少",support_resources="1. 你可以查阅本地文件列表。2. 你可以读取本地文件。")print(f"======\n{pipeline_prompt}\n======")
# 会输出:
"""
======
你的任务是:8月份的销售额是多少
你可以使用的资源包括:1. 你可以查阅本地文件列表。2. 你可以读取本地文件。======
"""

执行:python template.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强大的蓝牙工具Ubertooth系列

Ubertooth One 是一个开源的蓝牙嗅探设备,它提供了多个软件工具来进行蓝牙通信的分析、监视和探测。以下是 Ubertooth One 的一系列软件工具的介绍: Ubertooth:Ubertooth 是 Ubertooth One 的核心驱动程序和硬件抽象层。它允许与 Ubertooth O…

Oracle大型数据库技术

实验环境 sqlplus 记录实验过程的方法: spool 带有绝对路径的文件名 [append] --SQL语句 spool off开启相关服务 oracleserviceORCL 控制面板–管理–服务–找到后开启命令行方法: cmd–net start|stop oracleserviceorcl 常用操作 显示当前用户名 sho…

IPv4编址方式

IPv4编址方式 本文的知识都可以到B站up湖科大教书匠的视频里去看具体讲解。 分类地址 IPv4地址被分为网络号和主机号,可分为A类地址、B类地址、C类地址、D类地址、E类地址。其中,只有A类、B类、C类地址的可用于给网络中的主机编址。 A类地址的网络号…

京东Java实习一面

第一次面试,被狠狠地拷打了 1.自我介绍 2.谈一谈你项目中比较难的一个点 3.为什么选择用两级缓存? 4.缓存和数据库数据一致性是如何保证的? 5.缓存遇到并发查询的情况怎么办? 6.synchronized和其它锁有什么区别? 7.Elasticsearch中用到了哪些类型?document是如…

【Jvm】性能调优(下)线上问题排查思路汇总

文章目录 前言性能调优(上)线上问题排查工具汇总JVM调优(中)Java中不得不了解的OOM Error 一.JVM参数1.参数分类2.非稳定参数(-XX)说明3.查询JVM默认参数及运行时生效参数4.常用参数5.GC日志相关参数6.发生…

嵌入式系统在智慧城市建设中的关键角色与挑战

(本文为简单介绍,观点源于网络) 智慧城市的概念,随着信息技术的日益发展而不断深化。它利用各种信息传感器,通过物联网、云计算、大数据等技术手段,实现城市管理的智能化、精细化。在这一过程中&#xff0…

jvm、jre、jdk的关系

jvm Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。 jre JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,主要包括 Java 虚拟机(JVM)、J…

沁恒CH32V30X学习笔记06---串口dma接收+空闲中断组合接收数据

DMA 控制器提供 18 个通道,其中 DMA1 包含 7 个通道,DMA2 包含 11 个通道,每个通 道对应多个外设请求,通过设置相应外设寄存器中对应 DMA 控制位 通道映射 dma1 dma2 示例代码 bsp_usart_it.c /** bsp_usart_it.c** Created on: 2024年2月18日* Author: admin*/…

如何使音频类app广告变现收益最大化

要使音频类应用程序的广告变现收益最大化,可以采取以下策略: admaoyan猫眼聚合 精准定位受众: 了解你的用户群体,包括他们的兴趣、偏好和行为,以便向他们展示相关性更高的广告。使用用户数据分析工具,如Goo…

SPSSAU【文本分析】|LDA主题分析

LDA主题分析 LDA主题分析是一种提取出文本数据核心主题的模型,其可将整份数据文档的信息提取成几个主题,并且标题出主题与关键词之间的权重情况,用于识别主题的具体实际意义,除此之外,LDA主题分析涉及到可视化展示和图…

PyCharm 自动添加文件头注释

PyCharm 自动添加文件头注释 1. File and Code Templates2. Python FileReferences 1. File and Code Templates File -> Settings -> Editor -> File and Code Templates -> Python Script Reformat according to style & Enable Live Templates Created by…

stm32--笔记

一、引脚与变量 ​​​​​​​​​​​​​​ 二、STM32时钟 [STM32-时钟系统详解_stm32时钟_KevinFlyn的博客-CSDN博客] 三、定时器中断实验 1、定时器中断实验 ​ stm32关于通用定时器的周期、频率计算公式_stm32tim频率计算_胶囊咖啡的博客-CSDN博客 ​ 【STM32】通用…

2024.2.18 C++QT 作业

思维导图 练习题 1>定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std;class Animal { public:virtual void perform() {cout << "这是一个动…

pytest 框架自动化测试

随笔记录 目录 1. 安装 2. 安装pytest 相关插件 2.1 准备阶段 2.2 安装 2.3 验证安装成功 3. pytest测试用例的运行方式 3.1 主函数模式 3.1.1 主函数执行指定文件 3.1.2 主函数执行指定模块 3.1.3 主函数执行某个文件中的某个类、方法、函数 3.1.4 主函数执行生…

「优选算法刷题」:寻找数组的中心下标

一、题目 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元…

怎么测试阿里云香港服务器是不是cn2?

阿里云服务器是CN2线路吗&#xff1f;云服务器BGP多线精品网络线路是cn2&#xff0c;香港轻量应用服务器不是cn2。 如何测试是不是中国电信cn2网络线路&#xff1f;可以本地公网 mtr 该公网IP地址看下是否走的CN2线路&#xff1a; 163骨干网出国的最后一跳IP开头是202.97CN2 …

Deployment

一、Deployment&#xff1a;管理部署发布的控制器 1、背景问题&#xff1a; 应用中的 Pod 如果出现了一些故障&#xff0c;如何保证集群内可用 Pod 的数量&#xff1f; 如何为所有 Pod 更新镜像版本&#xff1f; 在更新过程中&#xff0c;如何保证服务的可用性&#xff1f;…

PyCharm 调试过程中控制台 (Console) 窗口内运行命令 - 实时获取中间状态

PyCharm 调试过程中控制台 [Console] 窗口内运行命令 - 实时获取中间状态 1. yongqiang.py2. Debugger -> Console3. Show Python PromptReferences 1. yongqiang.py #!/usr/bin/env python # -*- coding: utf-8 -*- # yongqiang chengfrom __future__ import absolute_imp…

pytorch入门笔记二

torch.nn.Sequential torch.nn.Sequential是一个容器&#xff0c;利用此容器可以快速简单的搭建一个简单的神经网络。这里以搭建一个三层神经网络为例。 首先该容器的参数分别是上一层到下一层的权重、激活函数&#xff0c;以此循环。 这里torch提供快速生成网络权重的方法&am…

MyBatis框架-动态SQL

动态SQL 什么是动态SQL&#xff1a;动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼接时要确保不能忘记添加必…