LangChain教程:FewShotPromptTemplate提示词模板类

提出问题

我们问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:不支持

可以看到:格式完全匹配示例


原文出处:/show_1GW2qOZeEQrL.html