笔记跟着黑马程序员大模型RAG与Agent智能体项目实战教程,基于主流的LangChain技术从大模型提示词到实战项目学习记录的
一、前言
提示词工程(Prompt Engineering)是大模型应用落地最基础、成本最低的优化手段,无需微调模型权重,仅通过优化输入指令,就能大幅提升大模型输出准确率与规范性。其中 Zero-Shot(零样本) 和 Few-Shot(少样本) 是提示词设计的两大核心思想,本文结合原理、案例、实战业务完整拆解。
二、Few-Shot 少样本学习核心概念
2.1 基础定义
Few-shot Learning 即少样本学习 :模型在海量通用数据预训练完成后,面对全新未知任务,仅需要提供少量参考样本,就能快速学会任务规则并完成推理。
- One-shot Learning:单样本学习,属于 Few-shot 的特殊形式,只给 1 条示例;
- Few-shot:一般提供 2~5 条示例,提示词场景最常用。
2.2 两个层面理解 Few-Shot
(1)模型底层训练层面(图像识别举例)
以企鹅分类任务为例:
- 先给模型少量企鹅、鹈鹕、海雀的参考图片(Support Set);
- 模型通过相似度函数计算待识别图片(Query Image)与各类别的匹配分值;
- 分值最高的类别即为最终预测结果。简单说:靠少量样本学习特征,靠相似度匹配未知数据。
(2)提示词工程应用层面
核心逻辑:用少量示例定义输出格式、规则、风格,强制模型对齐结果,减少幻觉与格式错乱。
实操示例:产品信息抽取(JSON 固定格式)
任务:抽取产品名称、核心卖点,严格输出 JSON 格式,参考下面 2 个示例执行示例 1:MacBookPro 高效节能,性能强大,适合牛马工作使用输出:{"产品名称":"MacBookPro","产品卖点":"高效节能,性能强大"}示例 2:联想笔记本拥有 RTX4060 独立显卡,畅玩游戏,丝滑流畅输出:{"产品名称":"联想笔记本","产品卖点":"畅玩游戏,丝滑流畅"}待处理文本:华为 MatepadPro,高清大屏,长效续航,你的好帮手最终输出:{"产品名称":"华为 MatepadPro","产品卖点":"高清大屏,长效续航"}
三、Zero-Shot 零样本学习核心概念
3.1 基础定义
Zero-Shot Learning 零样本学习:不给任何参考示例,只通过自然语言文字描述任务要求,依靠大模型预训练阶段学到的海量知识、语义关联,直接完成全新陌生任务。
3.2 两个层面理解 Zero-Shot
(1)模型训练层面
模型依靠预训练时学习到的类别关联、语义特征,直接对从未见过的新类别做迁移推理,全程不需要提供该类别的任何样本。
(2)提示词工程应用层面
只口头描述任务规则,无任何示范案例,完全依赖大模型自身知识库完成输出。
极简示例
任务:判断下面用户评价的情感,只输出「正向」或「负向」评价:这家银行办理业务速度太慢,等待时间过长输出:负向
四、Zero-Shot vs Few-Shot 对比
4.1 模型底层训练维度
- Zero-Shot 零样本不提供任何新类别样本,利用模型预训练沉淀的语义、特征关联,直接迁移识别未知类别。
- Few-Shot 少样本提供少量标注样本,让模型快速学习新任务特征,泛化能力更强,识别精度更高。
4.2 提示词编写落地维度
- Zero-Shot仅用自然语言描述任务规则,无示例,完全依赖大模型自身预训练知识作答;优点是提示词简短,缺点是复杂任务容易格式跑偏、产生幻觉。
- Few-Shot给模型多条标准输出示例,引导模型严格对齐示例的结构、格式、措辞;优点是输出稳定、格式统一,适合 RAG 信息抽取、分类、结构化输出场景。
五、业务实战场景
5.1 实战业务目标
基于 Zero-Shot、Few-Shot 两种提示词思想,完成金融行业三大经典 NLP 任务:
- 文本分类(如客户投诉分类、业务咨询类别划分)
- 信息抽取(如合同关键字段、金额、日期、业务主体提取)
- 文本匹配(如问句与知识库标准问题相似度匹配)
5.2 落地选型
- 简单分类、简短问答:优先使用 Zero-Shot,提示词简洁高效;
- 需要固定 JSON / 表格格式、高准确率抽取、多规则约束:优先使用 Few-Shot 少样本提示词,规避模型输出混乱问题;
- 工程化方案:实际开发中采用
Zero-Shot + Few-Shot混合模式,封装成通用提示词模板调用大模型接口。
六、总结
- 本质区别:Zero-Shot 靠模型自有知识干活,Few-Shot 靠少量示例教模型怎么干活;
- 提示词使用口诀:简单任务零样本,格式严格少样本;
- 行业落地:在金融、政务、企业知识库 RAG 项目中,Few-Shot 是保证结构化输出最常用的提示词方案。
一、什么是 JSON
1. 核心定义
JSON(JavaScript Object Notation)是带固定规则的格式化字符串 ,专门用来存储、传递带层级结构的数据,最大优势是跨编程语言通用,Python、Java、前端 JS、Go 都能无障碍解析,是接口数据传输的标准格式。
2. 三种数据格式对比
-
纯文本
小明11岁是个男孩
小李12岁是个女孩
小王16岁是一个男孩子
缺点:没有字段划分,代码提取姓名、年龄极其麻烦,无法自动化解析。
-
CSV 逗号分隔格式
小明,11,男
小李,12,女
小王,16,男
优点:结构简单、占用体积小;缺点:依赖固定顺序,少一列、顺序错乱直接解析失败,不支持嵌套复杂数据。
-
JSON 格式
{"name": "小明", "age": 11, "gender": "男"}
优点:自带 key 字段标识、支持无限嵌套、全语言兼容;
缺点:符号冗余,存储空间略大于 CSV。
二、JSON 和 Python 数据结构
JSON 本质是字符串,解析后会自动映射成 Python 内置类型:
-
**JSON 对象
{}→ Python 字典dict**JSON 嵌套结构示例:{
"age": 11,
"name": "小明",
"hobby": ["唱", "跳", "rap"],
"other": {
"身高": 172,
"体重": 68
}
}
解析后就是 Python 嵌套字典,取值方式:dict["other"]["身高"]
-
**JSON 数组
[]→ Python 列表list**JSON 数组(多条数据集合):[
{"name": "小明", "age": 11},
{"name": "小李", "age": 12},
{"name": "小王", "age": 16}
]
解析后为 Python 列表套字典,取值:list[0]["name"]
格式硬性规则
- JSON 的键必须用双引号
",不支持单引号; - 只支持:对象、数组、字符串、数字、
true/false/null,不能存放 Python 对象、函数。
三、Python 内置 json 模块方法
无需 pip 安装,Python 自带库,直接导入:
import json
1. json.dumps():Python 对象 → JSON 字符串
作用:把字典 / 列表打包成标准 JSON 字符串,用于网络接口传输、写入文件。语法:
json.dumps(数据, ensure_ascii=False, indent=2)
ensure_ascii=False:必加参数,避免中文转义为\uXXXX乱码;indent=2:可选,自动换行缩进,美化打印格式。
示例代码
import json
# Python嵌套字典
person = {
"age": 11,
"name": "小明",
"hobby": ["唱", "跳", "rap"],
"other": {
"身高": 172,
"体重": 68
}
}
# 转为JSON字符串
json_str = json.dumps(person, ensure_ascii=False, indent=2)
print(type(json_str)) # 输出 <class 'str'>
print(json_str)
2. json.loads():JSON 字符串 → Python 对象
作用:接收接口返回 / 文件读取的 JSON 字符串,还原成字典 / 列表,方便代码取值计算。语法:
json.loads(json格式字符串)
承接上面的示例
python
# 把JSON字符串还原为Python字典
python_data = json.loads(json_str)
print(type(python_data)) # <class 'dict'>
# 嵌套取值
print(python_data["other"]["身高"]) # 输出 172
dumps:打包,Python 字典 / 列表 → JSON 字符串(对外发送)loads:拆包,JSON 字符串 → Python 字典 / 列表(接收解析)- 中文不乱码,永远带上参数
ensure_ascii=False - JSON 大括号对应 Python 字典,JSON 中括号对应 Python 列表
