1.大模型prompt工程指南
一、概念
- 提示词工程,也叫In‑Context Prompting :不更新模型权重,通过和大模型交互,引导模型行为,拿到想要结果的方法。
- Prompt:给大模型下达的指令,Prompt 设计好坏对输出结果影响很大,是必备技能。
- 本质:就是学会更好地向大模型提问;RAG、Agent 等大模型开发,底层都离不开提示词。
大模型基础流程:用户输入 → 模型输出。想要理想结果,提问要详细、清晰、有逻辑、可提供参考材料。
二、核心总原则
所有技巧的根基:清晰表达需求,如同人与人沟通,指令模糊,模型输出就会跑偏。
三、6 大提示词技巧
技巧 1:详细的描述
不要指令过于简略,把背景、要求、约束条件全部写清楚。
差:写一封情书 好:用温柔话语写一封情书,表达仰慕思念,字数不少于 500 字。
技巧 2:让模型充当某个角色
给模型指定身份,限定它的行为模式。
示例:充当 AI 算法面试官,一次只出一道题,我回答完再出下一题。
技巧 3:使用分隔符划分内容
使用三引号"""、XML 标签、中括号,区分指令和待处理文本,帮助模型区分不同部分。
示例:用 20 个字符总结
"""待处理文本"""中的内容。
技巧 4:对任务指定步骤
复杂任务拆分成有序步骤,告诉模型一步步做,降低任务难度。
示例: 步骤 1:把
"""文本"""一句话总结,前缀加 Summary; 步骤 2:把步骤 1 摘要翻译成英文,前缀加翻译:
技巧 5:提供例子(Few‑shot Learning 少样本)
给模型提供输出样例,让模型模仿样例格式、风格生成新内容。
示例:按照下面这条评论的格式,帮我生成新样本。
技巧 6:使用参考文本作答(RAG 核心思想)
- 作用:降低模型幻觉(模型一本正经编造不存在的信息)。
- 用法:把参考文档交给模型,要求只能依据提供文档回答;文档找不到答案就输出指定话术,禁止自行编造内容。
plaintext
根据"""文档内容"""回答问题,找不到答案输出"我找不到答案",禁止自己造答案。
问题:xxx
四、补充理解
提示词工程不需要改动模型参数权重,完全靠输入文本引导;RAG 知识库问答本质就是 "参考文本作答" 这条提示词技巧的工程落地。
要不要我出 3 道简答题帮你巩固这部分知识点?
2.提示词实战案例介绍和零样本少样本思想
一、实战案例背景
- 背景:金融数据爆发,需要借助大模型做数据分析,辅助投资决策,降低决策失误损失,金融文本分析是热门方向。
- 三大业务场景
- 金融文本分类
- 金融文本信息抽取
- 金融文本匹配
- 模型选型:阿里云通义千问
qwen3‑max(Qwen 在线大模型) - 实现思路:Zero‑Shot + Few‑Shot ,通过设计 Prompt 提示词完成任务,不改动模型参数。
二、Zero‑shot(零样本)思想
核心:不给任何示例,只用语言描述任务,依靠模型预训练学到的知识做推理,不修改模型参数。
- 模型训练层面:训练没有见过新类别,依靠已经学到的特征、语义关系,推理识别新类别。例:见过马、虎、熊猫,描述斑马特征,模型推理识别斑马。
- Prompt 提示词层面:只写任务要求、约束,不给样例,直接让模型输出结果。
- 示例:
请判断""包围的用户评论中的情感倾向,输出 正面 或 负面。"这款代餐鸡胸肉饱腹感很强,吃起来也不柴,很推荐!"
- 示例:
- 一句话理解:用语言定义任务,信任模型预训练知识。
三、Few‑shot(少样本)思想
核心:给少量示例样本,让模型参考示例的格式、逻辑,提升输出对齐精度,不修改模型参数。包含 one‑shot(单样本)。
- 模型训练层面:依靠少量支持样本 + 相似度判断,识别未知样本。例:少量企鹅样本,计算相似度,识别图片企鹅。
- Prompt 提示词层面:提供 1~N 组输入输出样例,模型模仿示例格式和逻辑完成新任务。
- 示例:给出 2 组产品名称、卖点抽取的 JSON 样例,再让模型处理新文本,输出相同 JSON 格式。
- 一句话理解:用示例定义任务,提升输出格式、结果的对齐精度。
四、Zero‑Shot vs Few‑Shot 总结
模型训练维度
- Zero‑shot 零样本:依靠训练学到的属性、语义关联,迁移识别从未见过的新类别。
- Few‑shot 少样本:依靠少量样本,快速泛化识别新样本。
Prompt 提示词工程维度
- Zero‑shot:仅语言描述任务,不给示例,依赖模型预训练知识直接回答。
- Few‑shot:提供少量输入输出示例,引导模型对齐示例的输出格式与逻辑。
本节课任务
金融领域 3 大任务:文本分类、信息抽取、文本匹配,结合 Zero‑Shot / Few‑Shot 设计 Prompt 完成业务。
⭐面试简答版(可直接背)
Zero‑Shot:不给样例,只用自然语言描述任务,靠模型本身预训练知识完成任务; Few‑Shot:给少量输入输出示例,让模型模仿样例的格式逻辑输出,两者都不需要微调、不改动模型权重参数。
3、提示词优化案例-金融文本分类任务
一、任务介绍
- 业务任务:金融文本分类 对金融文本做类别划分,可选类别:
新闻报道、公司公告、财务公告、分析师报告。输入 4 段金融文本,模型输出每段文本对应的类别。
- Prompt 设计两点核心 1)告诉模型什么是文本分类任务;2)指定输出格式 ;3)本案例使用 Few‑Shot(少样本)提示词 :在 messages 对话历史中放入多组
user‑assistant输入输出示例,让模型模仿示例完成新文本分类。
messages 里面的 user/assistant 样例是人工写好的,用来给模型做示范。
- 技术选型
- 模型:qwen3‑max(通义千问)
- 接口:阿里云 dashscope 兼容 openai 接口
- 实现:OpenAI 库,构造 messages 消息列表,把 few‑shot 示例放入上下文,循环对多条文本调用模型做分类。
二、代码逻辑拆解
- 配置客户端
OpenAI,设置阿里云base_url - 准备 Few‑shot 样例数据:字典
examples_data,key 是类别,value 是对应样例文本 - 准备待分类的提问文本列表
questions - 构建 messages:
- system 角色:设定身份为金融专家,给出全部可选分类,未知文本输出 "不清楚类别"
- 循环遍历样例字典,依次追加
user(样例文本)、assistant(对应类别),把少样本示例放进对话上下文
- 循环每一条待分类文本,追加 user 消息,调用
chat.completions.create请求模型 - 获取打印模型返回分类结果
三、完整可运行代码
python
运行
from openai import OpenAI
# 1. 初始化客户端,对接阿里云通义千问qwen3-max
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="你的阿里云API-KEY" # 替换为自己的key
)
# Few‑Shot样例数据:key为分类结果,value是样例文本
examples_data = {
"新闻报道": '今日,股市经历了一轮震荡,受到宏观经济数据和全球贸易紧张局势的影响。投资者密切关注美联储可能的政策调整,以适应市场的不确定性。',
"财务公告": '本公司年度财务报告显示,去年公司实现了稳步增长的盈利,同时资产负债表呈现强劲的状况。经济环境的稳定和管理层的有效战略执行为公司的健康发展奠定了基础。',
"公司公告": '本公司高兴地宣布成功完成最新一轮并购交易,收购了一家在人工智能领域领先的公司。这一战略举措将有助于扩大我们的业务领域,提高市场竞争力',
"分析师报告": '最新的行业分析报告指出,科技公司的创新将成为未来增长的主要推动力。云计算、人工智能和数字化转型被认为是引领行业发展的关键因素,投资者需要重点关注'
}
# 需要分类的提问文本
questions = [
"今日,央行发布公告宣布降低利率,以刺激经济增长。这一降息举措将影响贷款利率,并在未来几个季度内对金融市场产生影响。",
"ABC公司今日发布公告称,已成功完成对XYZ公司股权的收购交易。本次交易是ABC公司在扩大业务范围、加强市场竞争力方面的重要举措。据悉,此次收购将进一步巩固ABC公司在行业中的地位,并为未来业务发展提供更广阔的发展空间。详情请见公司官方网站公告栏",
"公司资产负债表显示,公司偿债能力强劲,现金流充足,为未来投资和扩张提供了坚实的财务基础。",
"最新的分析报告指出,可再生能源行业预计将在未来几年经历持续增长,投资者应该关注这一领域的投资机会",
"小明喜欢小新哟" # 测试不属于4类的情况
]
# 组装messages消息列表
messages = [
{
"role": "system",
"content": "你是金融专家,将文本分类为['新闻报道', '财务公告', '公司公告', '分析师报告'],不清楚的分类为'不清楚类别'"
}
]
# 把few‑shot示例加入消息上下文:user输入样例文本,assistant输出对应分类
for category, text in examples_data.items():
messages.append({"role": "user", "content": text})
messages.append({"role": "assistant", "content": category})
# 循环处理每一条待分类文本
for q in questions:
resp = client.chat.completions.create(
model="qwen3-max",
messages=messages + [{"role": "user", "content": f"按照示例,回答这段文本的分类类别:{q}"}]
)
result = resp.choices[0].message.content
print(f"文本:{q}")
print(f"分类结果:{result}")
print("-" * 80)

四、关键知识点总结
- Few‑Shot 提示词实现方式:把多组(user‑assistant)示例放到 messages 对话历史,模型读取上下文示例模仿输出,不需要微调模型权重。
- system 角色:给模型设定身份、任务规则、全部输出类别、异常兜底(识别不出来输出 "不清楚类别")。
- Zero‑Shot:不给示例,仅 system + 任务描述;Few‑Shot:上下文带上少量示范样例,输出更稳定。
- 接口使用阿里云 dashscope 兼容 OpenAI 格式,更换
base_url即可。
注意:运行前填入自己阿里云 dashscope 的
api_key。
提示词工程‑04 JSON 数据格式 笔记
一、JSON 基础概念
- JSON 全称 :JavaScript Object Notation,轻量级数据交换格式
✅重点:JSON 是带格式的字符串,不是 Python 字典,用于程序与程序之间互传数据。
-
三种文本格式对比
表格
格式 特点 缺点 普通 Text 文本 非结构化 信息抽取麻烦 CSV 逗号分隔 结构化,解析快 没有 Schema 元信息,字段含义靠表头,存在风险 JSON 结构化,自带 Schema(key),信息抽取方便 占用空间更大 -
JSON 两大核心结构 1)JSON 对象
{}
- key 必须是双引号字符串
- value 支持:数字、字符串、数组、JSON 对象
- 对应 Python:字典 dict
2)JSON 数组 []
- 里面可以放多个 JSON 对象
[ {...}, {...} ] - 对应 Python:列表 list,列表里面存放字典
JSON = Python 字典 / 列表套字典 的字符串表现形式。
二、Python 内置 json 库核心 API
需要先导包:
import json
json.dumps(数据, ensure_ascii=False)
- 作用:Python 对象(字典 / 列表) → JSON 字符串
- 参数
ensure_ascii=False:解决中文转义乱码,中文正常显示 - 返回:json 字符串
⚠️注意:
str(字典)只是把字典转字符串,不是合法 JSON ,引号是单引号,接口无法解析;必须用json.dumps。
json.loads(json字符串)
- 作用:JSON 字符串 → Python 字典 / Python 列表
- 返回:dict /list
⚠️传入的字符串必须是合法 json,key 是双引号,否则抛解析异常。
三、完整示例代码
python
运行
import json
# 1. Python字典 --> json字符串 dumps
person_dict = {
"name": "周杰伦",
"age": 11,
"gender": "男"
}
# str转换只是普通字符串,不是合法JSON
print(str(person_dict))
# dumps转换为标准JSON字符串,ensure_ascii=False保留中文
json_str = json.dumps(person_dict, ensure_ascii=False)
print(json_str, type(json_str))
# 2. Python列表(多个字典) --> json字符串
person_list = [
{"name": "周杰伦", "age": 11, "gender": "男"},
{"name": "蔡依临", "age": 12, "gender": "女"},
{"name": "小明", "age": 16, "gender": "男"}
]
json_array_str = json.dumps(person_list, ensure_ascii=False)
print(json_array_str, type(json_array_str))
# 3. json字符串 --> Python对象 loads
s1 = '{"name": "周杰伦", "age": 11, "gender": "男"}'
res_dict = json.loads(s1)
print(res_dict, type(res_dict))
s2 = '[{"name": "周杰伦", "age": 11}, {"name": "蔡依临", "age": 12}]'
res_list = json.loads(s2)
print(res_list, type(res_list))
四、大模型场景为什么要学 JSON
- 让大模型输出JSON 格式结果 ,不需要做字符串切割,直接
json.loads()解析拿到结构化数据。 - API 接口之间传参、接收返回,绝大多数都是 JSON 字符串。
- SFT 数据集、Alpaca 数据集,大多存储为 JSON/JSONL 格式。
五、易错点汇总
- JSON 字符串 key 必须双引号 ,单引号会
json.loads报错。 - 中文处理:dumps 一定要写
ensure_ascii=False,否则中文变成\uXXXX编码。 str(dict)≠ JSON 字符串,不能用来网络传输。- JSON 对象用
{};JSON 数组用[],不要写混。
提示词工程‑05 金融文本信息抽取 课程笔记
一、任务简介:LLM 信息抽取
信息抽取:从非结构化自然语言文本,提取出预先定义好的实体 / 字段,输出结构化 JSON 数据。
- Schema(抽取字段定义)
python
运行
schema = {
"金融": ["日期", "股票名称", "开盘价", "收盘价", "成交量"]
}
需要从股票新闻文本,抽取出这 5 个字段;原文没有的字段填原文中未提及。 2. 原始输入:自然语言股票新闻;输出:标准 JSON。
二、Prompt 设计两个核心要点
- 告诉模型什么是信息抽取任务 :使用 Few‑Shot(少样本提示) ,给模型多组
user‑assistant示例对,人工给出输入文本 + 正确输出 JSON,让模型模仿格式与抽取逻辑。 - 强制指定输出格式:要求输出 JSON 字符串,禁止多余解释文字。
Few‑Shot 原理:示例里的 Bot 回复不是模型生成,是人工写好放到 messages 消息列表,给模型做范例。
三、代码实现思路
- 初始化 OpenAI 兼容客户端(对接阿里云通义千问 qwen3‑max,dashscope 兼容 openai 接口)
- 定义
examples_data:少样本示例集合,每条包含原始文本content、标准答案answers - 构建 messages 消息列表
- 第一条:
system角色:任务指令,说明 schema、输出格式、缺失值处理规则 - 循环把 examples_data 转为一组一组
user+assistant消息,json.dumps把字典转字符串,ensure_ascii=False保证中文不乱码
- 第一条:
- 待抽取问题列表
questions,循环每一条待抽取文本 - 每次请求把新的待抽取句子追加到 messages,调用大模型接口
- 打印模型返回的 JSON 结果
四、完整可运行代码
依赖安装:
pip install openai需要去阿里云百炼获取DASHSCOPE_API_KEY环境变量
python
运行
import json
import os
from openai import OpenAI
# ---------------------- 1.初始化客户端 对接通义千问兼容OpenAI接口 ----------------------
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
# 定义抽取schema
schema = ["日期", "股票名称", "开盘价", "收盘价", "成交量"]
# ---------------------- 2.Few‑shot少样本示例数据 ----------------------
examples_data = [
{
"content": "2023-01-10,股市震荡。股票强大科技A股今日开盘价100人民币,一度飙升至105人民币,随后回落至98人民币,最终以102人民币收盘,成交量达到520000。",
"answers": {
"日期": "2023-01-10",
"股票名称": "强大科技A股",
"开盘价": "100人民币",
"收盘价": "102人民币",
"成交量": "520000"
}
},
{
"content": "2024-05-16,股市利好。股票英伟达美股今日开盘价105美元,一度飙升至109美元,随后回落至100美元,最终以116美元收盘,成交量达到3560000。",
"answers": {
"日期": "2024-05-16",
"股票名称": "英伟达美股",
"开盘价": "105美元",
"收盘价": "116美元",
"成交量": "3560000"
}
}
]
# ---------------------- 3.待抽取测试文本 ----------------------
questions = [
"2025-06-16,股市利好。股票传智教育A股今日开盘价66人民币,一度飙升至70人民币,随后回落至65人民币,最终以68人民币收盘,成交量达到123000。",
"2025-06-06,股市利好。股票黑马程序员A股今日开盘价200人民币,一度飙升至211人民币,随后回落至201人民币,最终以206人民币收盘。"
]
# ---------------------- 4.组装messages消息列表 ----------------------
messages = [
{
"role": "system",
"content": f"你帮我完成信息抽取,我给你句子,你抽取{schema}信息,按JSON字符串输出,如果某些信息不存在,用'原文中未提及'表示,请参考如下示例:"
}
]
# 循环添加few‑shot示例 user + assistant
for example in examples_data:
messages.append({
"role": "user",
"content": example["content"]
})
messages.append({
"role": "assistant",
# ensure_ascii=False,中文不转义
"content": json.dumps(example["answers"], ensure_ascii=False)
})
# ---------------------- 5.循环调用模型做信息抽取 ----------------------
for q in questions:
resp = client.chat.completions.create(
model="qwen3-max",
messages=messages + [
{"role": "user", "content": f"按照上述的示例,现在抽取这个句子的信息:{q}"}
]
)
result = resp.choices[0].message.content
print("====抽取结果====")
print(result)
# 可以把字符串转回字典做后续解析
# res_json = json.loads(result)
五、关键细节 & 坑点
json.dumps(..., ensure_ascii=False):必须加 ,否则中文会被转成\uXXXX编码,模型会学错示例格式。- Few‑Shot 的示例是写死在 messages,不是传给 system;是一组一组 user‑assistant 交替。
- messages 是不断复用示例,每次只追加新 user 问题,示例不会重复构造。
- 第二个测试句子没有成交量,模型输出
原文中未提及。 - 如果本地 Ollama 跑,修改
base_url="http://localhost:11434/v1",model 改为对应模型名。
六、拓展思考
- Few‑Shot 数量不是越多越好,示例过多会超出上下文窗口,一般 2‑4 个样本。
- 模型输出 JSON 偶尔会带 markdown
json代码块,生产环境需要做字符串清洗。 - 进阶可以用大模型原生
response_format强制 JSON 输出,进一步提升稳定性阿里云帮助...。
示例输出样例
plaintext
====抽取结果====
{"日期":"2025-06-16","股票名称":"传智教育A股","开盘价":"66人民币","收盘价":"68人民币","成交量":"123000"}
====抽取结果====
{"日期":"2025-06-06","股票名称":"黑马程序员A股","开盘价":"200人民币","收盘价":"206人民币","成交量":"原文中未提及"}
提示词工程‑06 金融文本匹配 笔记
一、任务介绍:文本匹配
文本匹配任务:输入两句文本,判断两句之间语义是否相关。
- 输出:
是(语义相关) /不是(语义无关)
案例输入文本对
- ("股票市场今日大涨,投资者乐观。", "持续上涨的市场让投资者感到满意。") → 是
- ("油价大幅下跌,能源公司面临挑战。", "未来智能城市的建设趋势愈发明显。") → 不是
- ("利率上升,影响房地产市场。", "高利率对房地产有一定冲击。") → 是
二、Prompt 设计要点(Few‑Shot 少样本)
- 向模型解释什么是文本匹配任务;
- 指定输出格式,只允许输出
是或者不是; - 使用 Few‑Shot,在 messages 中放入多组人工写好的
user‑assistant示例,让模型模仿示例逻辑进行判断。
注意:示例里 Bot 的回答是人工写好,不是模型生成,作为范例给模型参考。
三、代码逻辑流程
- 初始化阿里云通义千问 qwen3‑max 客户端(OpenAI 兼容接口)
- 准备
examples_data示例字典:key 为标签"是"/"不是",value 存放对应的句子对列表 - 待判断的句子对列表
questions - 组装 messages 消息列表
- system:设定任务:做文本匹配,只输出是 / 不是,参考示例
- 双层循环遍历示例字典,循环添加
user(输入两句文本)、assistant(标准答案),构建 few‑shot 上下文
- 循环每一组待匹配句子,追加 user 消息,调用大模型
- 打印模型输出结果
四、完整可运行代码
python
运行
import os
from openai import OpenAI
# 1、初始化客户端,对接阿里云通义千问qwen3‑max
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
# 2、Few‑Shot示例数据
examples_data = {
"是": [
("公司ABC发布了季度财报,显示盈利增长。", "财报披露,公司ABC利润上升。"),
("公司ITCAST发布了年度财报,显示盈利大幅度增长。", "财报披露,公司ITCAST更赚钱了。")
],
"不是": [
("黄金价格下跌,投资者抛售。", "外汇市场交易额创下新高。"),
("央行降息,刺激经济增长。", "新能源技术的创新。")
]
}
# 3、待测试的文本对
questions = [
("利率上升,影响房地产市场。", "高利率对房地产有一定的冲击。"),
("油价大幅下跌,能源公司面临挑战。", "未来智能城市的建设趋势愈发明显。"),
("股票市场今日大涨,投资者乐观。", "持续上涨的市场让投资者感到满意。")
]
# 4、组装messages
messages = [
{
"role": "system",
"content": "你帮我完成文本匹配,我给你2个句子,判断它们语义是否匹配,只回答是或者不是,请参考如下示例:"
}
]
# 循环填充few‑shot示例到messages
for label, sentence_pair_list in examples_data.items():
for s1, s2 in sentence_pair_list:
messages.append({
"role": "user",
"content": f"句子1:[{s1}],句子2:[{s2}]"
})
messages.append({
"role": "assistant",
"content": label
})
# 5、循环调用模型,完成文本匹配
for q1, q2 in questions:
resp = client.chat.completions.create(
model="qwen3-max",
messages=messages + [
{"role": "user", "content": f"句子1:[{q1}],句子2:[{q2}]"}
]
)
res = resp.choices[0].message.content
print(f"句子1:{q1}")
print(f"句子2:{q2}")
print(f"匹配结果:{res}")
print("-"*70)
五、输出示例
plaintext
句子1:利率上升,影响房地产市场。
句子2:高利率对房地产有一定的冲击。
匹配结果:是
----------------------------------------------------------------------
句子1:油价大幅下跌,能源公司面临挑战。
句子2:未来智能城市的建设趋势愈发明显。
匹配结果:不是
----------------------------------------------------------------------
句子1:股票市场今日大涨,投资者乐观。
句子2:持续上涨的市场让投资者感到满意。
匹配结果:是
六、知识点总结
- 文本匹配任务:判断两句语义相关性,输出二分类
是 / 不是。 - Few‑Shot 实现:在 messages 放入多组 user‑assistant 对话样例,模型模仿示例做推理,不微调模型权重。
- 消息组装:字典外层循环标签(是 / 不是),内层循环句子对列表,批量构建示例。
- system 提示词约束输出,限制模型只能输出指定答案,减少多余文字。
- 替换 base_url 可以对接本地 Ollama。
七、三大任务回顾(整套提示词工程案例)
三个任务全部使用Few‑Shot 提示词,不需要训练、微调,只通过构造 messages 对话示例完成业务。