
我挖掘了一个巨牛的 人工智能 学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站。前言在大模型开发过程中很多开发者只会写零样本提示直接下发任务指令让模型依靠原生知识作答。但零样本存在明显短板输出格式混乱、推理逻辑不统一、自定义规则难以对齐、模型容易自由发挥产生幻觉。我们上一篇刚学了样本提示词模板这就派上用场了学的提示词模板是作为“加工每个样例的工具”传入少样本模板的。它不直接构成最终答案但少样本模板最终拼出来的那堵“提示词大墙”每一块砖每个样例都是由你那个小模板烧制出来的。少样本提示Few-shotting是解决该问题的核心提示工程手段给 LLM 提供少量「输入 标准输出」样例让模型模仿样例的格式、逻辑、思考流程完成任务。结合 LangChain 封装的FewShotPromptTemplate、FewShotChatMessagePromptTemplate我们可以标准化、工程化实现少样本能力搭配结构化输出还能实现高精度信息提取。本文从零讲解少样本提示核心概念、区分字符串 / 聊天两类少样本模板附带两大完整实战案例链式推理问答、人物结构化信息提取全部代码可直接复制运行适配生产环境。一、少样本提示核心概念1.1 零样本 vs 少样本直观对比零样本Zero-shot只下发任务指令无任何参考样例模型自由解读需求。 示例代码from langchain_openai import ChatOpenAI model ChatOpenAI(modelgpt-4o-mini) res model.invoke(What is 2 9?) res.pretty_print()输出问题模型无法理解代表运算会解读为符号组合无法给出计算结果。少样本Few-shot在正式提问前提供多组标准样例让模型自主归纳任务规则。 样例集examples [ {input: 2 2, output: 4}, {input: 2 3, output: 5}, ]模型读取样例后可自动识别等价于加法最终计算2 9 11。1.2 少样本提示能解决哪些开发痛点统一输出格式强制模型输出 JSON、固定列表、自定义文本结构避免格式杂乱描述复杂任务逻辑部分风格、推理规则难以用文字说清示例比长篇指令更直观规范多步推理提供思考链样例引导模型分步推导减少一步错漏降低模型幻觉限定输出风格、字段范围让回答贴合样例标准。二、LangChain 少样本模板基础实现LangChain 区分两类场景提供两套少样本模板FewShotPromptTemplate纯文本大模型使用搭配基础PromptTemplateFewShotChatMessagePromptTemplate对话类 Chat 模型专用搭配ChatPromptTemplate工程开发最常用。2.1 对话专用FewShotChatMessagePromptTemplate聊天模型接收HumanMessage/AIMessage消息结构该模板自动将样例批量转换为对话消息。完整基础示例from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate from langchain_openai import ChatOpenAI # 1. 定义样例数据集 examples [ {input: 2 2, output: 4}, {input: 2 3, output: 5}, ] # 2. 定义单条样例的格式化模板基础ChatPromptTemplate example_prompt ChatPromptTemplate([ (human, {input}), (ai, {output}), ]) # 3. 初始化少样本模板 few_shot_prompt FewShotChatMessagePromptTemplate( example_promptexample_prompt, # 样例格式化模板 examplesexamples # 样例数据 ) # 4. 组装完整全局提示词系统指令 少样本示例 用户新问题 final_prompt ChatPromptTemplate([ (system, 你是一个神奇的数学奇才。), few_shot_prompt, (human, {input}), ]) # 5. 构建LCEL链执行 model ChatOpenAI(modelgpt-4o-mini) chain final_prompt | model res chain.invoke({input: What is 2 9?}) res.pretty_print()输出结果11模型成功通过样例归纳运算规则。核心参数说明FewShotChatMessagePromptTemplate同样实现Runnable接口支持.invoke()方法examples样例字典列表存放每组输入输出example_prompt基础聊天模板规定单组人机样例排版.invoke()传入空字典生成完整样例消息.to_messages()返回对话消息列表可直接传入模型.to_string()转换为纯文本字符串。完整流程梳理准备原始样本数据exampleslist[dict]第一个ChatPromptTemplate定义单条样本的对话格式user 提问 ai 标准答案FewShotChatMessagePromptTemplate 接收两样东西原始样本 examples 格式化规则 example_prompt 自动循环所有样本按规则批量生成一堆 HumanMessage / AIMessage 示范对话第二个ChatPromptTemplate最终总模板 把系统指令 system、上一步生成好的少样本对象、用户当前新提问拼接在一起组装成一套完整对话上下文拼接模型形成 chain调用执行。2.2 纯文本场景FewShotPromptTemplate面向非对话文本模型基于PromptTemplate构建支持prefix前置说明、suffix后置提问。 核心参数prefix样例前全局任务描述examples文本样例集合example_prompt单条样例格式化文本模板suffix样例后用户新问题占位符input_variables模板动态变量列表。FewShotChatMessagePromptTemplate vs FewShotPromptTemplate核心区别对比特性FewShotPromptTemplateFewShotChatMessagePromptTemplate输出格式纯文本字符串角色化消息列表Human/AI等适用模型传统文本生成模型聊天专用模型如ChatGPT、DeepSeek模板类型常与PromptTemplate配合常与ChatPromptTemplate配合消息结构扁平无角色区分层次化支持System、Human、AI等角色应用场景文本分类、信息提取等简单任务对话机器人、复杂指令遵循等可涵的疑问为什么 FewShotPromptTemplate 有 few_shot_prompt 就可以直接链式调用了而 FewShotChatMessagePromptTemplate 还需要再封装一层# 最终提示词模板chat_prompt_template ChatPromptTemplate 核心一句话结论FewShotPromptTemplate内部自带完整文本拼接能力prefix 样例 suffix本身就是完整独立 Prompt直接进链就能发给文本 LLMFewShotChatMessagePromptTemplate只负责批量生成一堆人机对话样例消息没有 system 全局指令、没有用户当前提问占位它只是「消息片段」必须外层套ChatPromptTemplate组装完整对话结构才能给 Chat 模型。三、两大落地实战案例案例一少样本引导多步链式推理需求对于问答类问题强制模型分步拆解提问、分步查询中间信息最后给出结论禁止直接输出答案。定义样例格式化模板from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate example_prompt PromptTemplate.from_template(Question: {question}\n{answer})构造多组推理标准样例examples [ { question: 李白和杜甫谁更长寿, answer: 是否需要后续问题是的。 后续问题李白享年多少岁 中间答案李白享年61岁。 后续问题杜甫享年多少岁 中间答案杜甫享年58岁。 所以最终答案是李白 }, { question: 腾讯的创始人什么时候出生, answer: 是否需要后续问题是的。 后续问题腾讯的创始人是谁 中间答案腾讯由马化腾创立。 后续问题马化腾什么时候出生 中间答案马化腾出生于1971年10月29日。 所以最终答案是1971年10月29日 , }, { question: 孙中山的外祖父是谁, answer: 是否需要后续问题是的。 后续问题孙中山的母亲是谁 中间答案孙中山的母亲是杨太夫人。 后续问题杨太夫人的父亲是谁 中间答案杨太夫人的父亲是杨胜辉。 所以最终答案是杨胜辉 , }, { question: 电影《红高粱》和《霸王别姬》的导演来自同一个国家吗, answer: 是否需要后续问题是的。 后续问题《红高粱》的导演是谁 中间答案《红高粱》的导演是张艺谋。 后续问题张艺谋来自哪里 中间答案中国。 后续问题《霸王别姬》的导演是谁 中间答案《霸王别姬》的导演是陈凯歌。 后续问题陈凯歌来自哪里 中间答案中国。 所以最终答案是是 , }, ]组装少样本模板拼接用户提问prompt FewShotPromptTemplate( examplesexamples, example_promptexample_prompt, suffixQuestion: {input}, input_variables[input], )完整执行链路from langchain_openai import ChatOpenAI # 生成消息列表 prompt_messages prompt.invoke({input: 《教父》和《星球大战》的导演来自同一个国家吗}).to_messages() model ChatOpenAI(modelgpt-4o-mini) res model.invoke(prompt_messages) res.pretty_print()模型输出会严格复刻样例的分步推理格式先拆解子问题、输出中间答案最后汇总结论。案例二少样本 结构化输出 实现文本信息提取需求自由文本中自动提取人物结构化信息姓名、身高、发色、肤色无人物返回空列表字段未知填充null。 整体流程Pydantic 定义输出结构 → 构造工具调用样例 → 工具样例转消息模板 → 少样本注入提示词 → 绑定结构化模型执行。定义结构化输出模型from typing import List, Optional from pydantic import BaseModel, Field class Person(BaseModel): 人物基础信息 name: Optional[str] Field(defaultNone, description人物姓名) hair_color: Optional[str] Field(defaultNone, description头发颜色) skin_color: Optional[str] Field(defaultNone, description肤色) height_in_meters: Optional[str] Field(defaultNone, description身高单位米) class Data(BaseModel): 批量人物提取结果 people: List[Person]构造两组覆盖边界的样例无人物、单人物examples [ ( 海洋是广阔而蓝色的。它有两万多英尺深。, Data(people[]), ), ( 小强从中国远行到美国。, Data(people[ Person(name小强, height_in_metersNone, skin_colorNone, hair_colorNone), ]), ), ]模板定义与样例消息转换 使用tool_example_to_messages将 Pydantic 工具样例转换为模型可识别的完整消息组HumanMessage AI 工具调用 ToolMessage AI 回复from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.utils.function_calling import tool_example_to_messages # 全局提示词模板预留样例消息占位 prompt_template ChatPromptTemplate([ (system, 你是信息提取专家仅提取文本内人物信息未知字段返回null), MessagesPlaceholder(example_messages), (user, {new_message}), ]) # 批量转换样例为消息列表 example_messages [] for txt, tool_call in examples: ai_response 检测到人 if tool_call.people else 未检测到人 example_messages.extend(tool_example_to_messages( inputtxt, tool_calls[tool_call], ai_responseai_response ))绑定结构化模型构建执行链from langchain_openai import ChatOpenAI model ChatOpenAI(modelgpt-4o-mini) # 强制模型输出Data结构化对象 structured_model model.with_structured_output(schemaData) chain prompt_template | structured_model # 测试输入文本 res chain.invoke({ example_messages: example_messages, new_message: 篮球场上身高两米的中锋王伟默契地将一米七的后卫挚友李明传球完成绝杀。 }) print(res)输出标准化结构化数据people[ Person(name王伟, hair_colorNone, skin_colorNone, height_in_meters2.0), Person(name李明, hair_colorNone, skin_colorNone, height_in_meters1.7) ]该方案完美解决纯指令提取不准、字段缺失、格式错乱问题是文档解析、简历抽取类业务标准方案。四、核心知识点总结面试 开发必背少样本提示核心价值通过少量输入输出样例对齐模型输出格式、推理逻辑降低幻觉解决复杂规则难以文字描述的痛点两类少样本模板区分FewShotChatMessagePromptTemplate对话模型专用基于ChatPromptTemplate生成人机对话消息FewShotPromptTemplate纯文本模型使用支持 prefix/suffix 自定义文本前后缀依赖基础模板少样本模板必须传入普通PromptTemplate/ChatPromptTemplate作为example_prompt用来统一格式化每一条样例承接上一篇内容统一 Runnable 规范两类少样本模板都实现 Runnable 接口支持.invoke()、.to_messages()、.to_string()可直接接入 LCEL 链式高阶组合方案少样本 with_structured_output结构化输出是信息抽取、实体识别、表单提取生产级标准实现工具样例转换tool_example_to_messages可快速将 Pydantic 工具样例转为完整工具调用消息省去手动拼接多条消息的繁琐工作。结语提示词模板是 LangChain 提示工程的基础而少样本提示是提示工程进阶核心能力。相比零样本少样本能极大提升输出稳定性、统一业务规范尤其适合结构化提取、标准化问答、固定格式生成等场景。本文覆盖了少样本基础语法、纯文本 / 对话两套模板、推理引导、结构化信息提取两大可落地案例所有代码开箱即用。掌握少样本提示后搭配之前学习的基础 PromptTemplate、LangChain Hub 公共模板即可搭建一套完整、标准化、工程化的提示词开发体系支撑企业级 AI Agent、文档解析、对话机器人开发。