LangChain提示词模板其一:PromptTemplate

ModelEngine·创作计划征文活动 10w+人浏览 1.4k人参与

目录

一点概念

建立PromptTemplate的方式

插入部分提示词的方式

fromat()与invoke()的区别

示例:使用PromptTemplate给予大模型提示词

一点概念

提示词模板(PromptTemplate):简单来说,就是给ai的提示词做一个模板,这个模板是有固定格式的,但是其中有一些变量可以自己设置。比如我做了一个比较模板:

"你喜欢A还是B?"

我们可以通过更改A和B,来让ai比较不同的东西,但是无论怎么改,不会脱离“比较”这一场景。我们这次比较的是两种水果,下次就可以用同一个模板来比较两款电脑,这样就可以实现模板的复用。在比较两者时,使用这一个模板即可,实现标准化和便利化。

LangChain的提示词模板有很多,他们由于构造函数不同、返回值类型等不同而存在差异,常见的提示词模板有PromptTemplate、ChatPromptTemplate、FewShotPromptTemplate等。本文介绍的是PromptTemplate。

建立PromptTemplate的方式

1.构造方法PromptTemplate( )

两个必需的参数:

(1)template:用字符串形式建立提示词模板,其中的变量用{}表示

(2)input_variables:用列表的形式声明模板中的变量

from langchain_core.prompts import PromptTemplate

#两个必须的参数:template input_variables
prompt_template = PromptTemplate(
    template="你是一个{name},你的工作是{work}",
    input_variables=["name", "work"],
)

prompt = prompt_template.format(name="GPT",work="回答问题")
print(prompt)

输出:

2.调用from_template( )函数

括号中直接填入模板和变量,无需声明template和input_variables两个参数

from langchain_core.prompts import PromptTemplate
#调用from_template函数
prompt_template = PromptTemplate.from_template("你是一个{name},你的工作是{work}")

prompt = prompt_template.format(name = "GPT", work = "回答各种问题")

print(prompt)

输出:

值得注意的一点是:模板中可以不含变量。例如:

from  langchain_core.prompts import PromptTemplate

text = "Can AI change the world?"
#调用from_template函数
prompt_template = PromptTemplate(template = text)

prompt = prompt_template.format()

print(prompt)

输出:

插入部分提示词的方式

插入部分提示词,顾名思义,就是不一次性补全提示词模板。例如,一个模板中有5个变量,我们现在能确定3个变量要填什么,但是剩下的2个变量还不能确定,要等待后续再填入。这里就是填入部分提示词。实现填入部分提示词的方法有二:

(1)在模板构造函数中使用partial_variables参数

from langchain_core.prompts import PromptTemplate

#调用from_template函数
prompt_template = PromptTemplate.from_template(
    template="请说明在{product}中,{aspect1}好还是{aspect2}好",
    partial_variables={"product":"phone_system"}#字典形式
)

prompt = prompt_template.format(aspect1 = "IOS",aspect2="Android")

print(prompt)

输出:

在这个例子中,我建立了一个模板,第一个变量可以确定是手机系统(phone_system),第二个和第三个变量不确定,这里就可以在构造函数中就使用partial_variables参数来提前声明第一个变量是什么,其他的两个变量可以在后续补充。

(2)partial( )函数可以在不改变原模板的情况下,插入部分提示词

from langchain_core.prompts import PromptTemplate

#调用from_template函数
prompt_template = PromptTemplate.from_template(
    template="请说明在{product}中,{aspect1}好还是{aspect2}好",
)
#partial()函数不会改变调用者的值,而是会返回一个新对象,所以要用一个新对象来接收它返回的值
#也就是说这里不能直接写成prompt_template.partial(aspect1="ios")
prompt_template = prompt_template.partial(product = "phone_system")

prompt = prompt_template.format(aspect1="IOS",aspect2="Android")

print(prompt)

输出:

可以看到,partial( )函数是在构造函数之外使用的,这样书写位置就更自由一些。

值得注意的是:partial()函数不会改变调用者的值,而是会返回一个新对象,所以要用一个新对象来接收它返回的值。

fromat()与invoke()的区别

先来看一个例子:

from langchain_core.prompts import PromptTemplate

#两个必须的参数:template input_variables
prompt_template = PromptTemplate(
    template="你是一个{name},你的工作是{work}",
    input_variables=["name", "work"],
)

prompt = prompt_template.format(name="GPT",work="回答问题")
print(prompt_template)
print(prompt)

输出:

可以看出,将提示词模板直接输出的话,输出的是提示词模板的各种属性,并不是一句完整的自然语言。提示词模板需要通过format( )或invoke( )函数来变为自然语言。

我们在format( )或invoke( )函数中还可以填充模板的变量,将提示词模板补充完整。

from langchain_core.prompts import PromptTemplate

prompt_template = PromptTemplate.from_template("你是一个{name},你的工作是{work}")

#使用format():
prompt1 = prompt_template.format(name = "GPT", work = "回答各种问题")
print(prompt1)
print("format()返回类型:",type(prompt1))

#使用invoke():
prompt2 = prompt_template.invoke(input={"name":"GPT","work":"回答各种问题"})
print(prompt2)
print("invoke()返回类型:",type(prompt2))

输出:

由此我们可以看出这两个函数的区别体现在参数和返回值类型上。

format( )  参数:给模板中的变量赋值          返回值类型:str
invoke( )  参数:字典                                  返回值类型:StringPromptValue

示例:使用PromptTemplate给予大模型提示词

以上内容介绍了提示词模板PromptTemplate的用法,接下来将给出一个例子来让大模型调用我们写的提示词模板,体会一下提示词模板的用法:

from langchain_openai import ChatOpenAI
import dotenv
import os
#加载配置文件
dotenv.load_dotenv()
#创建智能体
chat_model = ChatOpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL"),
)
#创建模板
prompt_template = PromptTemplate.from_template("阐述{aspect1}、{aspect2}和{aspect3}的发展前景")
prompt = prompt_template.invoke(input={"aspect1":"ios","aspect2":"Android","aspect3":"Windows"})
#将模板输入给大模型并用response接收大模型的回复
response = chat_model.invoke(prompt)
#打印
print(response.content)

输出:

以下是对iOS、Android和Windows三大操作系统发展前景的简要阐述:

### iOS的发展前景
1. **生态系统优势明显**  
   iOS拥有苹果公司强大的生态体系,设备之间的无缝连接(如iPhone、iPad、Mac、Apple Watch等)提升了用户粘性。随着硬件性能提升和软件优化,体验持续改善。
   
2. **高端市场定位稳固**  
   iOS主要定位于高端智能手机市场。苹果注重隐私保护和安全性,满足了对个人数据安全要求较高的用户需求,有助于维持其用户基础。
   
3. **新技术的引领者**  
   苹果持续在AR(增强现实)、健康监测、无线通信(如5G、WiFi 6/6E)等领域投入,增强平台竞争力。未来苹果可能进一步推动XR(扩展现实)、可穿戴设备和智能家居的整合。
   
4. **面临挑战**  
   iOS相对封闭的系统架构在一定程度上限制了开发者创新空间,且高价策略限制了部分市场的用户规模扩展。

### Android的发展前景
1. **市场份额持续领先**  
   Android作为开源系统,支持多厂家设备,覆盖从低端到高端的全线市场,全球市场份额稳居第一。
   
2. **开放性带来创新动力**  
   开发者生态庞大,允许更多个性化和多样化的应用,支持多样的硬件创新(如折叠屏、不同传感器配置等)。
   
3. **谷歌生态与服务支持强化**  
   谷歌通过AI、云服务等技术提升Android智能化水平,同时在数字支付、安全、智能助手等方面不断丰富生态。
   
4. **碎片化问题需解决**  
   设备和系统版本多样带来的兼容性和安全保障问题依然存在,影响用户体验和应用表现,需要加强统一管理和更新机制。

### Windows的发展前景
1. **PC时代的主导地位逐步转型**  
   Windows依然是全球企业和个人计算的重要平台,但随着移动设备和云计算的发展,其市场重心正逐渐从传统PC向云和混合办公转型。
   
2. **云服务与混合办公的结合**  
   微软通过Windows系统与Azure云平台、Microsoft 365办公套件紧密结合,推动远程办公、协作和生产力提升。
   
3. **适应多设备、多场景**  
   Windows 11在界面和功能上努力适配触控、笔记本、平板和甚至折叠屏设备,体现对多样化硬件支持的增强。
   
4. **挑战与机遇**  
   移动端市场份额较小,面临来自iOS和Android的双重竞争。未来Windows可能更多聚焦于桌面及企业市场,同时加强与云计算和AI的融合,探索下一代计算体验。

---

### 总结
- **iOS**将继续巩固高端市场和生态体系,聚焦隐私、安全及新技术应用。  
- **Android**凭借开放性和广泛的硬件支持保持市场领先地位,需优化碎片化问题。  
- **Windows**则在传统PC基础上向云服务和混合办公转型,努力适应多样设备形态和新兴计算模式。

整体来看,三大操作系统各有侧重和发展路径,未来将在不同领域和生态中相互竞争与融合。

都看到这了,可以顺手点个赞吗~ (:D)

### LangChain 提示词模板的使用指南与示例 LangChain 提示词模板是一种强大的工具,用于构建灵活且可扩展的提示系统。以下是一些关于 LangChain 提示词模板的相关信息和示例。 #### 1. 基本概念 LangChain 提供了 `PromptTemplate` 类,用于定义提示模板。提示模板允许用户通过占位符插入动态内容,并生成最终的提示字符串[^1]。 ```python from langchain_core.prompts import PromptTemplate # 定义一个简单的提示模板 prompt_template = PromptTemplate.from_template("告诉我一个关于 {topic} 的笑话") ``` #### 2. 组合提示词模板 LangChain 支持通过操作符(如 `+`)来组合多个提示词模板。这使得复杂提示的构建更加直观和灵活[^2]。 ```python from langchain_core.prompts import PromptTemplate # 组合多个提示模板 prompt = ( PromptTemplate.from_template("告诉我一个关于 {topic} 的笑话") + ", 让它有趣一点" + "\n\n并且用 {language} 表达" ) # 格式化提示 formatted_prompt = prompt.format(topic="科技", language="中文") print(formatted_prompt) ``` **输出:** ``` 告诉我一个关于 科技 的笑话, 让它有趣一点 并且用 中文 表达 ``` #### 3. 高级用法:少样本学习 在某些情况下,可以将少量示例嵌入到提示模板中以帮助模型更好地理解任务需求。这种技术被称为少样本学习[^1]。 ```python from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate # 定义单个示例 example_formatter_template = PromptTemplate( input_variables=["input", "output"], template="问题: {input}\n答案: {output}", ) # 创建少样本提示模板 few_shot_prompt = FewShotPromptTemplate( examples=[ {"input": "什么是人工智能?", "output": "人工智能是模拟人类智能的技术."}, {"input": "机器学习是什么?", "output": "机器学习是让计算机从数据中学习的技术."} ], example_prompt=example_formatter_template, prefix="以下是几个例子:", suffix="现在,请回答这个问题:{new_question}", input_variables=["new_question"] ) # 格式化提示 formatted_few_shot_prompt = few_shot_prompt.format(new_question="深度学习是什么?") print(formatted_few_shot_prompt) ``` **输出:** ``` 以下是几个例子: 问题: 什么是人工智能? 答案: 人工智能是模拟人类智能的技术. 问题: 机器学习是什么? 答案: 机器学习是让计算机从数据中学习的技术. 现在,请回答这个问题:深度学习是什么? ``` #### 4. SQL 查询生成示例 LangChain 还支持生成特定格式的提示词,例如用于生成 SQL 查询的提示词模板[^4]。 ```python from langchain_core.prompts import PromptTemplate # 定义 SQL 查询生成提示模板 sql_template = PromptTemplate.from_template( "问题:{question}\nSQL 查询:SELECT \"{column}\" FROM {table} WHERE {condition};" ) # 格式化提示 formatted_sql_template = sql_template.format( question="列出今天入职且工资高于 10000 的员工姓名。", column="name", table="employees", condition="hire_date = CURRENT_DATE AND salary > 10000" ) print(formatted_sql_template) ``` **输出:** ``` 问题:列出今天入职且工资高于 10000 的员工姓名。 SQL 查询:SELECT "name" FROM employees WHERE hire_date = CURRENT_DATE AND salary > 10000; ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值