提出问题
我们问AI某手机的配置,有时要求固定的返回格式,比如要求格式如下:
名称:iPhone 11
屏幕:6.1英寸
CPU:A13 Bionic(7纳米制程)
5G:不支持
代码:
from langchain_community.llms.tongyi import Tongyi
from dotenv import load_dotenv
# 加载 .env 文件,并放入到环境变量中
load_dotenv()
# 不用qwen3-max,因为qwen3-max是聊天模型,qwen-max是大语言模型
model = Tongyi(model="qwen-max")
# 调用stream向模型提问,返回generator类型
res = model.stream(input="iPhone 11配置")
for chunk in res:
print(chunk, end="", flush=True)
回答如下:
iPhone 11是苹果公司在2019年推出的一款智能手机,它具有以下主要配置特点:
- **显示屏**:采用6.1英寸Liquid视网膜高清LCD全面屏,分辨率为1792 x 828像素(326 ppi),支持True Tone显示、宽色域显示(P3)以及触感触控。
- **处理器**:搭载了A13仿生芯片,这是当时非常先进的移动处理器之一,提供了强大的性能和能效比。
- **摄像头系统**:
- 后置双摄:1200万像素超广角镜头+1200万像素广角镜头组合。支持夜间模式、人像模式、智能HDR等功能。
- 前置摄像头为1200万像素TrueDepth相机系统,支持Face ID面部识别解锁。
- **存储选项**:提供64GB、128GB及256GB三种容量选择。
- **防水防尘等级**:达到IP68级别,在最深2米的水下停留时间最长可达30分钟。
- **操作系统**:最初预装iOS 13系统,并且能够升级到后续版本。
- **其他特性**:支持无线充电、快速充电(需额外购买适配器)、双卡双待功能等。
可以看到,回复内容太多,与我们要求的格式不同
解决
使用 FewShotPromptTemplate 提示词模板类,告诉AI格式例子,AI就会按照例子返回相同的格式
介绍
当 AI 仅靠 文字、指令无法精准理解你的输出要求 (格式/风格/逻辑)时,给 AI 看几个示例,让它模仿生成,此时应该使用 FewShotPromptTemplate
FewShotPromptTemplate 就是把 示例 + 基础提示词模板 打包,让你能快速构建带示例的提示词,解决纯文字指令描述不清、AI 输出格式不统一的问题。
适用场景
FewShotPromptTemplate 本质是「示例驱动的提示词生成」,适合以下场景:
- AI 输出格式不统一(比如需要固定JSON/表格/特定文本格式);
- 任务逻辑复杂,纯文字指令描述不清(比如多条件的文本分类);
- 需要 AI 模仿特定风格(比如专业报告、口语化对话、古风文案);
- 少量示例就能让 AI 理解规则(少样本学习)。
语法
FewShotPromptTemplate(examples,example_prompt,prefix,suffix,input_variables,separator)
参数解释
| 参数 | 作用 | 示例 |
|---|---|---|
examples |
给 AI 参考的示例列表,每个元素是字典 | [{"city":"北京",...}, ...] |
example_prompt |
定义单个示例的格式模板 | PromptTemplate.from_template("城市:{city}...") |
prefix |
示例前的引导语,说明任务要求 | 请按照以下格式生成天气播报: |
suffix |
示例后的指令,包含动态变量 | 生成 {city} 的天气播报: |
input_variables |
最终要传入的动态变量 | ["city"] |
方法
format() 方法
纯字符串渲染,填充变量生成最终提示词文本
返回值:生成最终提示词文本,字符串类型
案例
问AI某手机的配置,要求返回的格式如下:
名称:iPhone 11
屏幕:6.1英寸
CPU:A13 Bionic(7纳米制程)
5G:不支持
定义示例 + 示例模板
首先准备要给 AI 看的示例,并用模板定义示例的格式:
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
# 第一步:定义示例模板(告诉 AI 示例的格式)
example_template = """
名称:{name}
屏幕:{screen}
CPU:{cpu}
5G:{5G}
"""
example_prompt = PromptTemplate.from_template(example_template)
# 第二步:准备示例(列表+字典格式,每个字典是一个示例)
examples = [
{"name": "iPhone 17 Pro Max", "screen": "6.9英寸", "cpu": "A19 Pro(3纳米制程)", "5G": "支持"},
{"name": "华为Mate 80 Pro", "screen": "6.8英寸", "cpu": "麒麟9100(4纳米制程)", "5G": "支持(麒麟5G芯片)"},
{"name": "小米17 Ultra", "screen": "6.78英寸", "cpu": "骁龙8 Gen4(4纳米制程)", "5G": "支持"}
]
# 第三步:1.定义开头的引导语
prefix = "请按照以下格式返回指定手机的配置(参考示例格式):"
# 第三步:2.定义问AI的问题
suffix = "现在请生成 {name} 的手机配置:"
# 第四步:组装 FewShotPromptTemplate
few_shot_prompt = FewShotPromptTemplate(
prefix=prefix, # 开头的引导语
example_prompt=example_prompt, # 示例的格式模板
examples=examples, # 要展示给 AI 的示例
suffix=suffix, # 问AI的问题(包含动态变量)
input_variables=["name"], # 最终要传入的动态变量(这里是城市名)
)
# 渲染模板,生成最终提示词
final_prompt = few_shot_prompt.format(name="iphone15")
print("最终给 AI 的提示词:")
print(final_prompt)
运行结果(最终提示词)
最终给 AI 的提示词:
请按照以下格式返回指定手机的配置(参考示例格式):
名称:iPhone 17 Pro Max
屏幕:6.9英寸
CPU:A19 Pro(3纳米制程)
5G:支持
名称:华为Mate 80 Pro
屏幕:6.8英寸
CPU:麒麟9100(4纳米制程)
5G:支持(麒麟5G芯片)
名称:小米17 Ultra
屏幕:6.78英寸
CPU:骁龙8 Gen4(4纳米制程)
5G:支持
现在请生成 iphone15 的手机配置:
结合ai
把这个模板和模型串联,AI 会严格模仿示例格式输出:
在上面的案例的开头加上导入:
from langchain_community.llms.tongyi import Tongyi
from dotenv import load_dotenv
在上面的案例的最下面,加上下面代码:
# 加载 .env 文件,并放入到环境变量中
load_dotenv()
# 创建模型对象
model = Tongyi(model="qwen-max")
# 串联模板和模型(| 运算符)
chain = few_shot_prompt | model
# 调用链(自动渲染模板 + 调用模型)
res = chain.stream({"name": "iphone11"})
print("---------大模型回答--------------------")
for chunk in res:
print(chunk, end="", flush=True)
AI 输出结果:
---------大模型回答--------------------
名称:iPhone 11
屏幕:6.1英寸 Liquid 视网膜高清显示屏
CPU:A13 仿生芯片(7纳米制程)
5G:不支持
可以看到:格式完全匹配示例