白细胞低吃什么补得快| 什么叫肠上皮化生| 小叶增生吃什么药好| 肺结节是什么| 甲钴胺是治什么病的| 上官是什么意思| 钴蓝色是什么颜色| 老人流口水是什么原因| 能屈能伸是什么生肖| 海员是干什么的| 曹操为什么杀华佗| 一个均一个金念什么| 欢喜是什么意思| 禁的拼音是什么| 备孕检查挂什么科| 冷落是什么意思| dmd是什么病| 26岁属什么的生肖| 兔头是什么意思| 肝阳上亢是什么意思| 卫字五行属什么| 碳酸钙俗称什么| 连长是什么军衔| 肚脐眼连接体内的什么器官| 蛇头疮用什么治疗最快| 广州五行属什么| amo是什么意思| 熟石灰是什么| 静脉血栓吃什么药| 什么草| loser什么意思| 微创手术是什么意思| 五台山是求什么的| 伪军是什么意思| 夏至为什么要吃面条| 阴囊长白毛是什么原因| 长大做什么| 不全纵隔子宫是什么意思| 条件反射是什么| 石蜡是什么东西| 做梦捡到钱是什么意思| 改进什么| 叙字五行属什么| 属虎什么命| 肛门瘙痒是什么原因| 艾草有什么作用| 不造是什么意思| 掌中宝是什么东西| 肛周脓肿用什么药| 精索静脉曲张什么症状| 浪子是什么意思| 腰痛什么原因| 小孩口臭吃什么药效果最好| 总做梦是什么原因| 现在有什么好的创业项目| 哮喘不能吃什么| 类风湿吃什么药最有效| 孕妇建档是什么意思| 毛泽东什么时候死的| 早晨嘴苦是什么原因引起的| 清明为什么插柳枝| 什么意思啊| 什么是血压| 一饿就心慌是什么原因引起的| 老年人吃什么钙片好| 昆仑玉是什么玉| hcg高是什么原因| 脾虚吃什么好的最快| 血糖偏高吃什么水果好| 为什么蚊子总是咬我| 男人染上霉菌什么症状| 五月十七是什么星座| 治鸡眼用什么药最好| 618什么星座| 为什么手上会长小水泡| 什么东西泡水喝降血压| 申时是什么时间| 委曲求全是什么生肖| 脾胃伏火是什么意思| 7.20是什么星座| 牙齿发炎吃什么药| 女人右手中指有痣代表什么| 嗅觉失灵是什么原因| 保护声带喝什么| sjh是什么意思| 屎壳郎为什么要推粪球| 小孩肠胃感冒吃什么药| 肺主治节是什么意思| 火龙果什么时候成熟| 什么水果利尿效果最好| 心肌炎查什么能查出来| 西皮是什么意思| 后脑勺疼痛什么原因引起的| 四季豆是什么| 岑字五行属什么| 肠道菌群失调有什么症状| 什么的朋友| 世袭制是什么意思| 子午流注是什么意思| 尿道口痛什么原因| 防冻液红色和绿色有什么区别| 陆陆续续是什么意思| 梦见吃粉条是什么预兆| po是什么的缩写| 老年痴呆症挂什么科| 湿温病是什么症状| 申遗是什么意思| 浓缩汁是什么意思| 美国为什么有两块土地| 弱水三千什么意思| 慢性病都包括什么病| 男士感染霉菌用什么药| 囟门是什么意思| 对辣椒过敏有什么症状| 银梳子梳头有什么好处| 穿刺活检是什么意思| 打hcg针有什么作用| 黄精有什么作用和功效| 坐怀不乱是什么意思| 宫颈醋酸白色上皮是什么病变| 孔雀喜欢吃什么食物| 仰仗是什么意思| ad是补什么的| 1977属什么| 痛风是什么引起的| 三月一日是什么星座| 肺部有空洞是什么病症| 阴茎不硬吃什么药| 后脚跟疼是什么原因| 什么是处女膜| 1981年属什么生肖| 水果有什么| 晕车药什么时候吃最好| 1月25日什么星座| rbc是什么意思| 6度醋与9度有什么区别| 什么是假性近视眼| 7.13是什么日子| 左旋肉碱什么时候吃效果好| 肌酐高是什么引起的| 无济于事的意思是什么| 反射弧太长是什么意思| 台风什么时候结束| 前列腺肥大吃什么药| 感冒嗓子哑了吃什么药| 情面是什么意思| 1977年出生是什么命| 什么是化学性肝损伤| 神经外科是看什么病的| 口臭是什么原因引起的| 腺样体增生是什么意思| 语素是什么| 轻度肠化是什么意思| wlp是什么意思| 神气活现是什么意思| 什么蛋不能吃脑筋急转弯| 吃鱼有什么好处| 吃枸杞对身体有什么好处| 造口是什么| 西昌火把节是什么时候| 牙龈紫黑是什么原因| 九八年属什么生肖| 肺活量是什么意思| 镜检是什么| experiment是什么意思| 威慑力是什么意思| 广东有什么城市| 冰雪什么| 补肾气吃什么药最好| 咳嗽有绿痰是什么原因| 六月二号什么星座| 楠字取名有什么寓意| 孕期便秘吃什么通便快| 幽门螺杆菌是一种什么病| 74年属什么生肖| 乳腺4a是什么意思| 问诊是什么意思| 清热败火的败是什么意思| 怀孕了不想要最好的办法是什么| 一个虫一个合读什么| ddg是什么意思| 七月与安生讲的是什么| 梦见好多死人是什么征兆| 什么是认知行为疗法| 放屁多是什么原因| 中国古代四大发明是什么| 气色是什么意思| 甜瓜不能和什么一起吃| 走路腿软没劲是什么原因引起的| 阴道瘙痒是什么原因| 强制是什么意思| 脾虚吃什么| 0中间有一横是什么字体| 什么水果糖分最高| 预约转账什么时候到账| 扁平疣是什么原因引起的| 五月二十二是什么星座| 海豹是什么动物| 吃什么排黑色素最强| 原浆酒是什么意思| 女人吃什么能活血化瘀| 宝宝在肚子里打嗝是什么原因| 笑点低是什么意思| 什么的事| 朱砂有什么功效| tags是什么意思| 2024什么年| 男孩什么时辰出生最好| 以色列人说什么语言| 什么的荷叶| 胃烧心吃什么药| 势利眼的人有什么特征| amy是什么意思| 是否是什么意思| 朱砂属于五行属什么| 梦见买床是什么意思| 什么是干咳| 纳肛是什么意思| 哎什么意思| 亦或是什么意思| 533是什么意思| 苡字取名寓意是什么| 水彩笔用什么能洗掉| 才美不外见的见是什么意思| 153是什么意思| 唐氏综合征是什么病| lmp是什么意思| 端午节是什么星座| 譬如是什么意思| roa胎位是什么意思| 牛与什么生肖最配| 病是什么偏旁| 产后大出血一般发生在什么时候| 生物技术专业学什么| 尿隐血弱阳性是什么意思| 段子是什么意思| 太岁是什么东西| 热火朝天是什么生肖| 什么药治肝最好最安全| 小便不利什么意思| 10月25日什么星座| 尿毒症小便什么颜色| 一切有为法是什么意思| 胎盘分级0级什么意思| 壁立千仞无欲则刚是什么意思| 一语惊醒梦中人是什么意思| 眼睛总是干涩是什么原因| 血小板高是什么原因| 司马光和司马迁是什么关系| 想改名字需要什么手续| 磨豆浆是什么意思| 毛鸡蛋是什么| jomalone是什么牌子| 蝎子吃什么东西| 长寿花什么时候扦插| 笔记本电脑什么品牌好| 发烧有什么症状| 水晶粉是什么原料做的| 三世诸佛是什么意思| 芈月是秦始皇什么人| 黄瓜籽有什么功效| 为什么起荨麻疹| 紧急避孕药什么时候吃最好| 主动脉壁钙化是什么意思| 百度

LangChain框架入门03:PromptTemplate 提示词模板

百度   据融达高级经济师、总经理张建武介绍:“这种贷款模式,突破了金融机构贷款风险管控的传统手段和措施,为进一步支持新型农业经营主体开辟了新路径,受到新型农业合作组织的广泛欢迎。

在上一期文章中,我们已经完成了 LangChain 的基本环境搭建并成功运行了一个基础示例程序。本篇将继续深入介绍LangChain 的核心模块之一 :PromptTemplate(提示词模板)。

在与大语言模型交互时,通常不会直接将用户的原始输入直接传递给大模型,而是会先进行一系列包装、组织和格式化操作。这样做的目的是:更清晰地表达用户意图,更好地利用模型能力

这套结构化的提示词构建方式,就是 LangChain 中的 提示词模板(PromptTemplate)。对于 LLM 应用来说,好的提示词就是成功的一半。本文将深入讲解提示词模板的使用方法与技巧。

一、提示词模板分类

LangChain 提供了多种不同的提示词模板,下面介绍几种常用的提示词模板:

PromptTemplate:文本生成模型提示词模板,用字符串拼接变量生成提示词

ChatPromptTemplate:聊天模型提示词模板,适用于如 gpt-3.5-turbogpt-4 等聊天模型

HumanMessagePromptTemplate:人类消息提示词模板

SystemMessagePromptTemplate:系统消息提示词模板

FewShotPromptTemplate:少量示例提示词模板,自动拼接多个示例到提示词中,例:1+1=2,2+2=4,让大模型去计算5+5等于多少。

二、提示词模板用法

2.1 PromptTemplate文本提示词模板

PromptTemplate 针对文本生成模型的提示词模板,也是LangChain提供的最基础的模板,通过格式化字符串生成提示词,在执行invoke时将变量格式化到提示词模板中,示例如下:

from langchain_core.prompts import PromptTemplate

prompt = PromptTemplate.from_template("你是一个专业的律师,请你回答我提出的法律问题,并给出法律条文依据,我的问题是:{question}")
prompt_value = prompt.invoke({"question": "婚姻法是在哪一年颁布的?"})
print(prompt_value)

执行结果:

text='你是一个专业的律师,请你回答我提出的法律问题,并给出法律条文依据,我的问题是:婚姻法是在哪一年颁布的?'

2.2 ChatPromptTemplate聊天消息提示词模板

ChatPromptTemplate 是专为聊天模型(如 gpt-3.5-turbogpt-4 等)设计的提示词模板,它支持构造多轮对话的消息结构,每条消息可指定角色(如系统、用户、AI)。

代码示例如下,提示词模板中包含两条消息,第一条是系统消息,无需做提示词渲染,第二条是人类消息,在执行invoke时,需要把变量question渲染进去。

from langchain_core.prompts import ChatPromptTemplate

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题,并确保没有错误"),
    ("human", "请写一个Python程序,关于{question}")
])

print(chat_prompt.invoke({"question": "冒泡排序"}))

执行结果:

messages=[SystemMessage(content='你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题'), HumanMessage(content='请写一个Python程序,关于冒泡排序')]

2.3 Prompt三个常用方法区别

上述的代码示例中,我们使用了invoke方法,除了invoke方法能够格式化提示词模板,format()和partial()方法也可以做到,以下是它们的作用:

format:格式化提示词模板为字符串

partial:格式化提示词模板为一个新的提示词模板,可以继续进行格式化

invoke:格式化提示词模板为PromptValue

format() 方法用法如下,将 question 参数格式化到提示词模板中,返回一个字符串:

from langchain_core.prompts import ChatPromptTemplate

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题,并确保没有错误"),
    ("human", "请写一个Python程序,关于{question}")
])

print(chat_prompt.format(question="冒泡排序"))

执行结果:

System: 你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题,并确保没有错误
Human: 请写一个Python程序,关于冒泡排序

partial()方法用法如下,可以格式化部分变量,并且继续返回一个模板

from datetime import datetime

from langchain_core.prompts import ChatPromptTemplate

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题,并确保没有错误"),
    ("system", "当前时间是:{currentTime}"),
    ("human", "请写一个Python程序,关于{question}")
]).partial(currentTime=datetime.now())

print(chat_prompt.invoke({"question": "写一个插入排序"}).to_string())

执行结果:

System: 你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题,并确保没有错误
System: 当前时间是:2025-08-04 09:37:38.084382
Human: 请写一个Python程序,关于写一个插入排序

2.4 MessagesPlaceholder消息占位符

如果我们不确定消息何时生成,也不确定要插入几条消息,比如在提示词中添加聊天历史记忆这种场景,可以在ChatPromptTemplate添加MessagesPlaceholder占位符,在调用invoke时,在占位符处插入消息。

prompt = ChatPromptTemplate.from_messages([
    MessagesPlaceholder("memory"),
    SystemMessage("你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题"),
    ("human", "{question}")
])

prompt_value = prompt.invoke({"memory": [HumanMessage("我的名字叫大志,是一名程序员"),
                                         AIMessage("好的,大志你好")],
                              "question": "请问我的名字叫什么?"})
print(prompt_value.to_string())

执行结果:

Human: 我的名字叫大志,是一名程序员
AI: 好的,大志你好
System: 你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题
Human: 请问我的名字叫什么?

隐式使用MessagesPlaceholder方法

prompt = ChatPromptTemplate.from_messages([
    ("placeholder", "{memory}"),
    SystemMessage("你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题"),
    ("human", "{question}")
])

prompt_value = prompt.invoke({"memory": [HumanMessage("我的名字叫大志,是一名程序员"),
                                         AIMessage("好的,大志你好")],
                              "question": "请问我的名字叫什么?"})
print(prompt_value.to_string())

执行结果:

Human: 我的名字叫大志,是一名程序员
AI: 好的,大志你好
System: 你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题
Human: 请问我的名字叫什么?

2.5 PromptValue提示值

PromptValue 是提示词模板 .invoke() 执行后返回的中间对象,支持将提示词转换为字符串或消息列表传递给 LLM。主要包含两个方法:

to_string:将提示词转换为字符串

to_messages:将提示词转换为消息列表。普通 PromptValue 调用该方法会将整个字符串包装成一条人类消息;ChatPromptValue是PromptValue的子类,ChatPromptValue 会返回完整的消息列表(系统、人类、AI消息 等)

PromptValue这个中间类的存在的作用在于:适配不同LLM的输入要求,因为聊天模型需要输入消息,文本生成模型则需要输入字符串,PromptValue能够自由转换为字符串或消息,以适配不同 LLM 的输入要求,并且保持接口一致、逻辑清晰、易于维护。

2.6 加号连接提示词模板

PromptTemplate重载了+号运算符,因此可以使用+将两个提示词模板进行连接,连接成一个提示词模板,通过 + 操作符将多个提示词模板组合,可以实现提示词的模块化、动态拼接,提升代码复用率和维护性。

from langchain_core.prompts import ChatPromptTemplate

first_chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是OpenAI开发的大语言模型,下面所有提问你扮演小米雷军的角色,对我的提问进行回答")
])

second_chat_prompt = ChatPromptTemplate.from_messages([
    ("human", "{question}")
])

all_chat_prompt = first_chat_prompt + second_chat_prompt

print(all_chat_prompt.invoke({"question": "Are you OK?"}).to_string())

执行结果:

System: 你是OpenAI开发的大语言模型,下面所有提问你扮演小米雷军的角色,对我的提问进行回答
Human: Are you OK?

或者直接使用模板和字符串进行连接

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是OpenAI开发的大语言模型,下面所有提问你扮演小米雷军的角色,对我的提问进行回答")
]) + "{question}"
print(chat_prompt.invoke({"question": "Are you OK?"}).to_string())

执行结果:

System: 你是OpenAI开发的大语言模型,下面所有提问你扮演小米雷军的角色,对我的提问进行回答
Human: Are you OK?

三、完整示例

下面是一个完整的案例,使用了ChatPromptTemplate的用法,目前只需要关注Prompt相关的代码即可,其他相关代码后续文章会展开讲解。

from datetime import datetime

import dotenv
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_openai import ChatOpenAI

# 读取env配置
dotenv.load_dotenv()
# 1.构建提示词
chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是OpenAI开发的大语言模型,对我的提问进行回答"),
    MessagesPlaceholder("memory"),
    ("human", "{question}"),
    ("human", "{currentTime}")
]).partial(currentTime=datetime.now())

# 2.构建GPT-3.5模型
llm = ChatOpenAI(model="gpt-3.5-turbo")

# 3.创建输出解析器
parser = StrOutputParser()

# 4.执行链
chain = chat_prompt | llm | parser

print(chain.invoke({"question": "你是谁,现在是哪一年,请问今年最好的手机品牌是什么?",
                    "memory": [HumanMessage("你是小米公司的雷军,你扮演雷军的身份和我对话"),
                               AIMessage("好的我是小米公司的雷军,下面将会以雷军的身份和口吻回答你的问题")]}))

执行结果如下,是不是很有雷军内味?

你好,我是雷军。现在是2025-08-04,感谢你对小米的关注!

至于今年最好的手机品牌,其实这个问题没有固定答案。每个品牌都有自己的优势和特点。在我看来,作为小米的创始人,我们的小米系列无论是在技术创新、性价比还是用户体验方面都走在行业的前沿。当然,苹果、三星等品牌也在不断推陈出新,各有各的魅力。

从整体来看,2025年5G、AI、影像技术、屏幕表现等方面仍然是手机的核心竞争力。小米在这些领域持续投入,尤其是在AI相机和超快充电技术上,我们的创新和突破都得到了不少用户的认可。

你觉得现在最注重手机的哪个方面?

四、总结

本文介绍了用来构建文本生成模型的提示词模板 PromptTemplate 、 构建对话模型的提示词模板 ChatPromptTemplate,在ChatPromptTemplate中还可以使用MessagesPlaceholder 占位符灵活的插入动态信息。

还介绍了PromptTemplate类中三种方法的作用 invokeformatpartial ,最后介绍了用+号连接多个PromptTemplate。

提示词模板是LangChain 中非常核心的模块,它可以让AI能够更加清晰理解我们的意图,通过提示词模板的复用、拼接,能大大简化使用LLM的工作量,通过本文,相信你应该已经掌握了如何使用提示词模板,后续将继续深入介绍LangChain的核心模块和高级用法,敬请期待。

posted @ 2025-08-04 10:55  大志说编程  阅读(37)  评论(0)    收藏  举报
毒唯什么意思 坐月子能吃什么 右派是什么意思 经常喝柠檬水有什么好处和坏处 绿豆什么时候收获
甘油是什么成分 相处是什么意思 舌根痛吃什么药好得快 赛字五行属什么 排斥是什么意思
6克血是什么概念 代偿期和失代偿期是什么意思 什么的月光 女人性冷淡用什么药 流星雨是什么意思
震撼的意思是什么 妈妈的姐姐的儿子叫什么 吃什么能生精和提高精子质量 血小板为0意味着什么 农历六月十八是什么日子
鼓风机是干什么用的qingzhougame.com 乌鸦兄弟告诉我们什么道理hcv8jop7ns3r.cn 一个月一个并念什么96micro.com 有什么赚钱的软件hcv8jop8ns8r.cn 真菌孢子是什么意思hcv8jop2ns1r.cn
黑茶色是什么颜色hcv9jop2ns8r.cn 血光之灾是什么意思hcv9jop1ns8r.cn 预谋是什么意思hcv7jop5ns4r.cn 阴道炎有些什么症状hcv8jop0ns6r.cn 丹田是什么意思hcv8jop8ns9r.cn
高血压是什么hcv9jop3ns6r.cn 6.10号是什么星座hcv8jop6ns4r.cn 脚面疼是什么原因引起的hcv8jop4ns7r.cn 女人吃猪肝有什么好处hcv8jop1ns9r.cn 好久不见是什么意思hcv8jop5ns6r.cn
哥们是什么意思hcv8jop8ns3r.cn 02年属什么生肖520myf.com funfair是什么意思hcv7jop5ns3r.cn 想一出是一出什么意思hcv9jop5ns3r.cn 钛对人体有什么好处hcv9jop2ns3r.cn
百度