目录
一点概念
提示词模板(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)
998

被折叠的 条评论
为什么被折叠?



