第三讲 | 大模型prompt工程:PromptTemplate、ChatPromptTemplate、FewShot
一、前言:什么是prompt工程
提示词工程(Prompt Engineering),也称为In-Context Prompting,是指在不更新模型权重的情况下,通过设计、优化输入文本,引导大模型精准输出符合预期的结果,充分挖掘模型能力,属于人和大模型交互的核心技术
核心目标:可控、准确、格式统一、减少幻觉
在人工智能领域,Prompt指的是用户给大型语言模型发出的指令
·例如,“[讲个笑话]”、“[用Python编个贪吃蛇游戏]”、“[写封情书]”等
·虽然看似简单,但实际上,Prompt的设计对于模型的结果影响很大,因此如何设计prompt,进而与模型更好的交互,是研究人员必备的必不可少的技能(提示词工程)
二、JSON数据格式
在讲解prompt工程之前,先补充一下JSON数据格式的知识,在prompt工程中,JSON极为重要,能够约束大模型输出格式→让AI返回的数据能直接被代码自动解析,实现程序与大模型无缝对接,是开发AI后端、RAG系统必不可少的手段。
1.两大基础结构
-JSON对象
{
"key": value,
"key": value
}
key必须是字符串,value可以是数字、字符串、列表、JSON对象或JSON数组
-JSON数组
[{}, {}, {}, ...] 有序值列表
-JSON对象→Python字典,JSON数组→Python列表内含多个字典
2.Python中使用JSON
Python中使用JSON主要完成:
·将Python字典、列表转换为JSON字符串
·读取JSON字符串,转换为Python字典或列表
主要使用Python内置的json库
·json.dumps(字典或列表,ensure_ascii=False):将字典或列表转换为JSON字符串
·ensure_ascii参数确保中文能正常显示
·返回值:JSON字符串
·json.loads(JSON字符串):将JSON字符串转换为Python字典或列表
·返回值:Python字典或Python列表
三、基础万能Prompt框架(CRISPE)
1.角色(Capacity):赋予模型身份
| 你是一名资深Java后端工程师
2.背景(Role):交代场景上下文
| 现在需要给学生讲解计算机网络四次挥手
3.指令(Instruction):明确任务
| 使用生活化比喻,通俗易懂总结知识点
4.输出格式(Output):规定返回样式
| 使用分点结构,禁止长篇大段文字
5.约束(Experiment):划定边界、禁忌
| 不使用复杂公式,例子贴合学生学习场景
四、主流Prompt基础技巧
1.零样本提示Zero-shot
基于模型训练阶段学习的属性/语义关联,去迁移到未知的新类别,无提示,语言描述任务,依赖模型预训练知识回答
2.少样本提示Few-shot(最常用)
基于少量样本,快速泛化识别新样本,给与模型少量示例,引导模型对齐示例输出结果
LangChain框架内置的少样本提示模板(FewShotPromptTemplate)
·example_prompt:示例数据的提示词模板
·examples:示例数据,list,内套字典
·prefix:组装提示词,示例数据前内容
·suffix:组装提示词,示例数据后内容
·input_variables:列表,注入的变量列表
3.思维链Chain
LangChain中链是一种将各个组件串联在一起,按顺序执行,前一个组件的输出作为下一个组件的输入
·可以通过 “|” 符号来让各个组件形成链
·成链的各个组件,需是Runnable接口的子类
·形成的链是RunnableSerializable对象(Runnable接口子类)
·可通过链调用invoke或stream触发整个链条的执行
五、PrompTemplate
提示词优化在模型应用中非常重要,LangChain提供了PromptTemplate类,用来协助优化提示词。
PromptTemplate表示提示词模板,可以构建一个自定义的基础提示词模板,支持变量的注入,最终生成所需的提示词。
# 调用.format方法注入信息即可
# prompt_text = prompt_template.format()
#
# model=
# res = model.invoke(input=prompt_text)
# print(res)
六、ChatPromptTemplate
ChatPromptTemplate:支持注入任意数量的历史会话信息
·通过from_messages方法,从列表中获取多轮次会话作为聊天的基础模板
·ps:前面PromptTemplate类用的from_template仅能接入一条消息,而from_messages可以接入一个list的消息
历史会话信息并不是静态的(固定的),而是随着对话的进行不停地积攒,即动态的。
所以,历史会话信息需要支持动态注入。
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.prompts import MessagesPlaceholder
chat_template = ChatPromptTemplate.from_messages(
[
("system", "......")
("ai", "......")
MessagesPlaceholder("history")
("human", "......")
]
)
history_data = [
("human", "......")
("ai", "......")
("human", "......")
("ai", "......")
]
prompt_value = chat_template.invoke({"history": history_data})
-MessagesPlaceholder作为占位
-提供history作为占位的key
-基于invoke动态注入历史会话记录(必须是invoke,format无法注入)
七、模板类的format和invoke方法
| 区别 | format | invoke |
| 功能 | 纯字符串替换,解析占位符生成提示词 | Runnable接口标准方法,解析占位符生成提示词 |
| 返回值 | 字符串 | PromptValue类对象 |
| 传参 | .format(k=v, k=v, ...) | .invoke({"k":v, "k":v, ...}) |
| 解析 | 支持解析{}占位符 | 支持解析{}占位符和MessagesPlaceholder结构化占位符 |
八、总结
本文系统性地介绍了提示词工程(Prompt Engineering)的核心知识体系,为开发者提供了从基础到实践的完整指引。主要内容总结如下:
1. 提示词工程核心价值
提示词工程是在不更新模型权重的前提下,通过精心设计输入文本来引导大模型精准输出的关键技术。其核心目标包括:
- 可控性:确保模型输出符合预期方向
- 准确性:减少错误信息和幻觉
- 格式统一:便于程序自动化处理
- 效率提升:最大化挖掘模型潜力
2. JSON数据格式的关键作用
JSON作为约束模型输出的重要工具,能够:
- 强制模型返回结构化数据,便于代码解析
- 实现程序与大模型的无缝对接
- 在AI后端和RAG系统中发挥核心作用
- 通过Python的json库轻松实现转换与处理
3. CRISPE万能Prompt框架
CRISPE框架提供了系统化的提示词设计方法论:
- 角色(Capacity):赋予模型特定身份
- 背景(Role):交代任务场景上下文
- 指令(Instruction):明确具体任务要求
- 输出格式(Output):规定返回样式结构
- 约束(Experiment):划定边界和禁忌
4. 主流Prompt技巧
- 零样本提示(Zero-shot):依赖模型预训练知识,无示例直接描述任务
- 少样本提示(Few-shot):提供少量示例引导模型对齐输出,最常用
- 思维链(Chain):将多个组件串联执行,前序输出作为后续输入
5. LangChain模板工具
- PromptTemplate:基础提示词模板,支持变量注入
- ChatPromptTemplate:支持动态注入多轮历史会话信息
- FewShotPromptTemplate:内置少样本提示模板
- format与invoke方法:format用于纯字符串替换,invoke支持结构化占位符解析
6. 实践建议
在实际应用中,建议:
- 从CRISPE框架开始,系统化设计提示词
- 优先使用JSON格式约束输出,便于程序集成
- 根据任务复杂度选择零样本或少样本提示
- 利用LangChain模板工具提升开发效率
- 通过思维链将复杂任务分解为多个步骤
掌握这些提示词工程技术,能够显著提升与大模型的交互效果,为开发高质量的AI应用和RAG系统奠定坚实基础。随着大模型技术的不断发展,提示词工程将继续在AI应用开发中扮演越来越重要的角色。
更多推荐



所有评论(0)