当前位置: 首页 > news >正文

LangChain关于提示词的几种写法

上文中 <---->(可点击移步查阅),我们已经了解到LangChain如何编写调用大模型的一个基本框架,
在编写完这个基本框架后,就要与大模型进行交互了,这时候,就需要我们编写提示词了,
那么以下,就会介绍提示词的几种编写方式

1 可携带变量的提示词

1.1 PromptTemplate

1.1.1 以构造方法的形式创建

创建步骤如下:【1】导包【2】构建变量提示词模板【2.1】创建PromptTemplate实例【2.2】PromptTemplate构造函数中传递两个参数【2.2.1】template:定义携带变量的<提示词模板字符串>【2.2.2】input_variables:以列表形式指定<提示词模板字符串>中哪些是变量【3】通过实例调用方法组成真正的提示词【3.1】format(变量名1=值1, 变量名2=值2, ...)【3.2】invoke({"变量名1":"值1","变量名2":"值2","变量名3":"值3", ...})以上两个方法任选其一,作用是会将提示词模板中的变量替换成真正的值,返回PromptValue 对象

示例代码如下:

# 调用format()# 导包
from langchain.prompts import PromptTemplate#定义多变量模板。
template = PromptTemplate(template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。",input_variables=["product", "aspect1", "aspect2"]
)#使用模板生成提示词
# 说明:在调用format()函数时,一定要将所有的参数都进行赋值,才可以得到正确的字符串返回结果。否则报错
# prompt_1 = template.format(product="智能手机", aspect1="电池续航")
prompt_1 = template.format(product="智能手机", aspect1="电池续航", aspect2="拍照质量")print("提示词1:",prompt_1)
# 调用invoke()# 导包
from langchain.prompts import PromptTemplate#定义多变量模板。
template = PromptTemplate(template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。",input_variables=["product", "aspect1", "aspect2"]
)#使用模板生成提示词
prompt_1 = template.invoke({"product": "智能手机", "aspect1": "电池续航","aspect2": "拍照质量"
})print("提示词1:",prompt_1)

PromptTemplate构造方法中还可以再传入一个参数:partial_variables
示例代码如下:

from langchain.prompts import PromptTemplatetemplate = PromptTemplate(template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。",input_variables=["product", "aspect1","aspect2"],partial_variables={"aspect2":"拍照质量","aspect1":"电池续航"}
)str = template.format(product = "笔记本电脑")

1.1.2 以PromptTemplate类提供的from_template()的形式创建

创建步骤如下:【1】导包【2】构建变量提示词模板【2.1】调用PromptTemplate类提供的from_template()【2.2】from_template()中传递一个参数【2.2.1】template:定义携带变量的<提示词模板字符串>【3】通过实例调用方法组成真正的提示词【3.1】format(变量名1=值1, 变量名2=值2, ...)【3.2】invoke({"变量名1":"值1","变量名2":"值2","变量名3":"值3", ...})以上两个方法任选其一,作用是会将提示词模板中的变量替换成真正的值,返回PromptValue 对象

示例代码如下:

# 调用format()# 导包
from langchain.prompts import PromptTemplatetemplate = PromptTemplate.from_template(template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。"
)prompt_1 = template.format(product="智能手机", aspect1="电池续航", aspect2="拍照质量")print("提示词1:",prompt_1)
# 调用invoke()# 导包
from langchain.prompts import PromptTemplatetemplate = PromptTemplate.from_template(template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。"
)prompt_1 = template.invoke({"product":"智能手机","aspect1":"电池续航","aspect2":"拍照质量"})print(prompt_1)
print(type(prompt_1))

from_template()中还可以再传入一个参数:partial_variables
示例代码如下:

from langchain.prompts import PromptTemplatetemplate = PromptTemplate.from_template(template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。",partial_variables={"aspect2":"拍照质量","aspect1":"电池续航"}
)result = template.format(product="智能手机", )

1.1.3 结合大模型使用

定义好提示词后,如何将其传递给大模型呢?
我们这里以大模型提供的invoke()为例:
其他方法的使用可点击移步查阅

[1] 非对话大模型:

import os
import dotenv
from langchain_openai import OpenAIdotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1")
os.environ['OPENAI_BASE_URL'] = os.getenv("OPENAI_BASE_URL")# 非对话大模型
llm = OpenAI()
template = PromptTemplate.from_template(template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。"
)prompt_1 = template.invoke({"product":"智能手机","aspect1":"电池续航","aspect2":"拍照质量"})str = llm.invoke(prompt_1)  #此时的参数prompt_1是PromtValue类型
print(str)print(type(str))

[2] 对话大模型:

import os
import dotenv
from langchain_openai import ChatOpenAIdotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1"

文章转载自:

http://gMZQwxc8.hhjtj.cn
http://UMOxtbOT.hhjtj.cn
http://jHqV5Vlm.hhjtj.cn
http://oTEYgDwF.hhjtj.cn
http://F03Uk2h9.hhjtj.cn
http://87cJHsqg.hhjtj.cn
http://4KHPOcEv.hhjtj.cn
http://2QBN2VmX.hhjtj.cn
http://JUZW48Nf.hhjtj.cn
http://Bb7XkOKi.hhjtj.cn
http://txvTBMB3.hhjtj.cn
http://gF7Ev7Z5.hhjtj.cn
http://bTSHAh1z.hhjtj.cn
http://SqUXHLSw.hhjtj.cn
http://dgtoSTY8.hhjtj.cn
http://Q21MCoqQ.hhjtj.cn
http://DolXQ6o8.hhjtj.cn
http://yA4f9xny.hhjtj.cn
http://pFn8tn3U.hhjtj.cn
http://WqVXw6jP.hhjtj.cn
http://ulUc8LTL.hhjtj.cn
http://tOZ31Ovt.hhjtj.cn
http://dy63WRbL.hhjtj.cn
http://dXEDdfNg.hhjtj.cn
http://i7oGAayb.hhjtj.cn
http://C4crA807.hhjtj.cn
http://EPmrxOCD.hhjtj.cn
http://g1hS5YAk.hhjtj.cn
http://Ohnr7WRx.hhjtj.cn
http://1wOdTqCq.hhjtj.cn
http://www.dtcms.com/a/369005.html

相关文章:

  • openharmony之AV_CodeC音视频编解码模块详解(二)
  • 【明道云】[工作表控件9] 子表控件:一对多数据建模实战指南
  • Linux/UNIX系统编程手册笔记:DAEMON、编写安全的特权程序、能力、登录记账
  • Docker部署PanSou 一款开源网盘搜索项目,集成前后端,一键部署
  • 【服务器】英伟达M40显卡风冷方案心得
  • Process Explorer 学习笔记(第三章3.3.1):DLL和句柄
  • 解锁无限创意:Tldraw+cpolar如何通过内网穿透技术打破空间限制
  • 安全沙箱配置针对海外vps容器隔离的验证方法
  • SQL-DML
  • 数据库原理及应用_数据库基础_第4章关系模型的基本理论_触发器
  • RWA点亮新能源的数字未来
  • css margin外边距重叠/塌陷问题
  • 【Python - 基础 - 规范】(01)Python命名规范...
  • 高级RAG策略学习(四)——上下文窗口增强检索RAG
  • 如何通过AI进行数据资产梳理
  • 跨平台超低延迟RTSP播放器技术设计探究
  • 一文了解大模型推理优化
  • 嵌入式单片机---串口通信及相关通信技术
  • k8s基础练习环境搭建
  • AiPPT生成的PPT内容质量怎么样?会不会出现逻辑混乱或数据错误?
  • 系统架构思考20241204
  • GPU版Pytorch的安装
  • 飞算JavaAI炫技赛:在线图书借阅平台的设计与实现
  • Bing 搜索引擎检索语法
  • 14 C++ STL 容器实战:stack/list 模拟实现指南 + priority_queue 用法及避坑技巧
  • ElasticSearch新角色的创建及新用户的创建
  • 【运维】Linux inotify watches 限制问题解决方案
  • ES模块(ESM)、CommonJS(CJS)和UMD三种格式
  • centos下gdb调试python的core文件
  • 计算机网络2 第二章 物理层——用什么方式传输邮件