草莓熊Lotso个人主页❄️个人专栏:《C知识分享》 《Linux 入门到实践零基础也能懂》✨生活是默默的坚持毅力是永久的享受 博主简介文章目录前言一. 少样本提示核心原理1.1 什么是少样本提示1.2 LangChain 中的两种实现方式二. 实战案例 1推理引导字符串模板2.1 完整代码实现2.2 代码核心解读2.3 运行结果三. 实战案例 2结合结构化输出的信息提取3.1 需求说明3.2 完整代码实现3.3 代码核心解读3.4 运行结果四. 总结与最佳实践4.1 核心要点总结4.2 最佳实践前言大型语言模型LLM虽然拥有海量知识但在面对特定格式输出、复杂逻辑推理、专业领域任务时单纯的文字指令往往效果不佳。你可能遇到过这些问题要求模型输出 JSON 格式但它总是返回自然语言希望模型先分析再得出结论但它直接给出答案想从非结构化文本中提取特定信息但结果总是不准确。这时候少样本提示Few-Shot Prompting就派上了用场。它通过向模型提供少量 “输入 - 输出” 示例教会模型如何执行任务是提升 LLM 输出质量最有效、成本最低的方法之一。本文将从原理出发结合 LangChain 官方最佳实践通过两个完整实战案例带你掌握少样本提示的核心用法让你的 AI 应用输出更稳定、更精准。一. 少样本提示核心原理1.1 什么是少样本提示少样本提示是一种通过向 LLM 提供少量具体示例来引导模型按照预期格式、风格或逻辑生成输出的技术。它不需要对模型进行微调只需在提示词中加入示例就能显著提升模型在特定任务上的表现。我们用一个简单的例子理解零样本提示直接提问What is 2 9?模型可能回答“这不是一个标准的数学运算”少样本提示先给示例再提问2 2 4 2 3 5 What is 2 9?模型会通过示例推断出代表加法正确回答111.2 LangChain 中的两种实现方式LangChain 针对不同的提示格式提供了两种少样本提示模板模板类型适用场景核心特点FewShotPromptTemplate字符串提示适用于传统 LLM生成纯文本提示FewShotChatMessagePromptTemplate聊天消息提示适用于现代聊天模型GPT-4o、Claude 等保留对话结构两种模板的核心逻辑一致将示例集格式化后与用户查询组合成最终提示发送给模型。二. 实战案例 1推理引导字符串模板我们先从最基础的字符串模板开始实现一个多步推理问答系统。要求模型在回答问题时先列出需要解决的子问题再逐步推导最后给出结论。2.1 完整代码实现fromlangchain_core.promptsimportPromptTemplate,FewShotPromptTemplatefromlangchain_openaiimportChatOpenAI# 1. 定义示例集每个示例包含问题和预期回答examples[{question:李白和杜甫谁更长寿,answer: 是否需要后续问题是的。 后续问题李白享年多少岁 中间答案李白享年61岁。 后续问题杜甫享年多少岁 中间答案杜甫享年58岁。 所以最终答案是李白 },{question:腾讯的创始人什么时候出生,answer: 是否需要后续问题是的。 后续问题腾讯的创始人是谁 中间答案腾讯由马化腾创立。 后续问题马化腾什么时候出生 中间答案马化腾出生于1971年10月29日。 所以最终答案是1971年10月29日 }]# 2. 定义单个示例的格式化模板example_promptPromptTemplate.from_template(Question: {question}\n{answer})# 3. 创建少样本提示模板few_shot_promptFewShotPromptTemplate(examplesexamples,# 示例集example_promptexample_prompt,# 单个示例的格式化方式prefix你是一个善于推理的助手请按照示例的格式回答问题。,# 系统提示suffixQuestion: {input},# 用户查询的占位符input_variables[input]# 输入变量)# 4. 初始化模型并构建链modelChatOpenAI(modelgpt-4o-mini,temperature0)chainfew_shot_prompt|model# 5. 调用链并输出结果resultchain.invoke({input:《教父》和《星球大战》的导演来自同一个国家吗})result.pretty_print()2.2 代码核心解读示例集设计示例必须清晰、一致准确反映你希望模型输出的格式和逻辑。这里的示例展示了 “先分解问题→逐步解答→得出结论” 的推理过程。example_prompt定义单个示例如何被格式化。它将每个示例的question和answer字段填充到模板中生成 “Question: …\nAnswer: …” 的格式。**FewShotPromptTemplate**参数prefix放在所有示例之前的系统提示用于设定模型角色和任务要求suffix放在所有示例之后的用户查询占位符input_variables声明模板中需要用户传入的变量2.3 运行结果 Ai Message 是否需要后续问题是的。 后续问题《教父》的导演是谁 中间答案《教父》的导演是弗朗西斯·福特·科波拉。 后续问题弗朗西斯·福特·科波拉来自哪里 中间答案弗朗西斯·福特·科波拉来自美国。 后续问题《星球大战》的导演是谁 中间答案《星球大战》的导演是乔治·卢卡斯。 后续问题乔治·卢卡斯来自哪里 中间答案乔治·卢卡斯也来自美国。 所以最终答案是是可以看到模型完美遵循了示例的推理格式先分解问题再逐步解答输出结果清晰可追溯。三. 实战案例 2结合结构化输出的信息提取在企业级应用中我们经常需要从非结构化文本中提取结构化数据如人名、地址、金额等。将少样本提示与结构化输出结合可以实现极高精度的信息提取。3.1 需求说明从任意文本中提取人物信息包括姓名、身高、肤色、头发颜色。如果某个信息不存在则返回null。3.2 完整代码实现fromtypingimportList,OptionalfrompydanticimportBaseModel,Fieldfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholderfromlangchain_core.messagesimportSystemMessagefromlangchain_core.utils.function_callingimporttool_example_to_messages# 1. 定义结构化输出模型PydanticclassPerson(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以米为单位的高度)classData(BaseModel):提取关于人的数据。people:List[Person]# 2. 定义示例集每个示例包含输入文本和预期输出examples[(海洋是广阔而蓝色的。它有两万多英尺深。,Data(people[]),# 没有人物信息的情况),(小强从中国远行到美国。,Data(people[Person(name小强,height_in_metersNone,skin_colorNone,hair_colorNone),]),# 部分信息缺失的情况)]# 3. 定义提示词模板prompt_templateChatPromptTemplate([SystemMessage(content你是一个提取信息的专家只从文本中提取相关信息。如果不知道属性值返回null),MessagesPlaceholder(example_messages),# 示例消息占位符(user,{new_message}),])# 4. 将示例转换为模型可理解的聊天消息格式example_messages[]fortxt,tool_callinexamples:# 根据提取结果生成AI响应文本ai_response检测到人iftool_call.peopleelse未检测到人# 将示例转换为聊天消息列表example_messages.extend(tool_example_to_messages(inputtxt,tool_calls[tool_call],ai_responseai_response))# 5. 初始化模型并绑定结构化输出modelChatOpenAI(modelgpt-4o-mini,temperature0)structured_modelmodel.with_structured_output(schemaData)# 6. 构建链chainprompt_template|structured_model# 7. 测试信息提取resultchain.invoke({example_messages:example_messages,new_message:篮球场上身高两米的中锋王伟默契地将球传给一米七的后卫挚友李明完成一记绝杀。})print(\n提取结果)print(result)3.3 代码核心解读Pydantic 模型定义使用BaseModel定义输出结构每个字段通过Field添加描述模型会严格按照这个结构生成输出。tool_example_to_messages这是 LangChain 提供的工具函数专门用于将结构化示例转换为聊天模型能理解的消息格式。它会为每个示例生成 4 条消息HumanMessage输入文本AIMessage包含工具调用即结构化输出ToolMessage确认工具调用成功AIMessage自然语言响应MessagesPlaceholder用于在提示模板中插入动态的消息列表这里用来插入我们转换后的示例消息。3.4 运行结果提取结果 people[ Person(name王伟, hair_colorNone, skin_colorNone, height_in_meters2.0), Person(name李明, hair_colorNone, skin_colorNone, height_in_meters1.7) ]模型准确提取了文本中的两个人物信息对于缺失的头发颜色和肤色正确返回了None。四. 总结与最佳实践4.1 核心要点总结少样本提示是提升 LLM 输出质量的关键技术通过示例引导模型行为无需微调模型。LangChain 提供两种模板FewShotPromptTemplate适用于字符串提示FewShotChatMessagePromptTemplate适用于聊天消息提示结合结构化输出可以实现高精度的信息提取适合企业级应用。当示例集较大时使用示例选择器动态选择最相关的示例平衡效果和成本。4.2 最佳实践示例设计示例要清晰、一致准确反映预期输出格式覆盖常见的边界情况如信息缺失、多实体提取示例数量不宜过多通常 3-5 个足够模板选择现代聊天模型优先使用FewShotChatMessagePromptTemplate传统 LLM 使用FewShotPromptTemplate示例选择器对长度敏感的场景使用LengthBasedExampleSelector大多数场景推荐使用SemanticSimilarityExampleSelector需要多样性的场景使用MaxMarginalRelevanceExampleSelector 我是草莓熊 Lotso若这篇技术干货帮你打通了学习中的卡点 【关注】跟我一起深耕技术领域从基础到进阶见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好需要时直接查、随时用 【评论】分享你的经验或疑问比如曾踩过的技术坑一起交流避坑 ️ 【投票】用你的选择助力社区内容方向告诉大家哪个技术点最该重点拆解 技术之路难免有困惑但同行的人会让前进更有方向愿我们都能在自己专注的领域里一步步靠近心中的技术目标结语少样本提示是每个 LangChain 开发者必须掌握的基础技能。通过合理设计示例和选择合适的模板你可以让大模型在各种任务上都表现出色。✨把这些内容吃透超牛的放松下吧✨ʕ˘ᴥ˘ʔづきらど
企业数字化 ERP 产品动态
相关推荐
三步搞定E-Hentai漫画收藏:免费批量下载终极指南 三步搞定E-Hentai漫画收藏:免费批量下载终极指南
E-Hentai-Downloader是一款专为漫画爱好者设计的智能下载工具,让你轻松将E-Hentai画廊内容批量打包为ZIP文件,实现漫画资源的高效管理与永久收藏。无需复杂操作,只需简单几步即可… · 2026/9/21 0:13:56
2026,大一寸证件照手机制作指南:尺寸底色规范与多款工具实操教程 2026 年各类资格认定、出入境证件、院校报名材料提交都需要标准大一寸证件照,很多人不清楚大一寸证件照标准尺寸像素底色要求,线下照相馆拍摄耗时且成本偏高,借助手机 App、微信内轻量化小程序就能自行制作合规电子证件照。本文整理多款可制作… · 2026/9/3 11:39:53
二十一、RAG Agent:让检索从「流水线」变成「智能体」 RAG Agent:让检索从「流水线」变成「智能体」 📚 专栏导航:这是《LangChain 30篇精讲》的第 21 篇。前面 20 篇我们走过了从 Hello World 到 RAG 全链路优化、再到 LangGraph 入门的完整路径。从这一篇开始,进入模块五:高级 Agent 与生产化。 写在前面:那个"什么都… · 2026/9/26 9:46:06
DeskcommCRM深度解析:帮助台与客户关系管理一体化实战指南 1. 先说清楚 DeskcommCRM 是个什么东西这两年做客户支持系统的团队越来越多,我接触过不少自研的、开源的、商用SaaS的方案。第一次看到 DeskcommCRM 这个名字时,我第一反应是"又一个把工单和客户档案硬拼在一起的系统"。但实际把玩下来&#x… · 2026/9/26 9:46:06
OpenClaw人人养虾:国内网络配置与TaoToken接入实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 9:46:06
CRM系统实施落地全记录:客户信息整合、数据清洗与团队协作实战 DeskcommCRM是我最近完整走完一遍的客户沟通与关系管理系统落地项目。从最开始的需求调研、数据清洗、字段配置,到后来一线销售和客服真正在电脑上用它记客户、回消息、跟工单,前后差不多一个月。这套系统的定位很明确:把散落在微信、电话、表… · 2026/9/26 9:46:00
Agentic工作负载运行时编排:基于Kubernetes的ax项目设计与实践 1. 从“ax”这个标题说起:一个被低估的运行时调度命题第一次看到“ax”这个标题,很多人会以为是某个命令行工具的缩写,或者某个内部项目的代号。但把ax、agentic、orchestration、runtime、Kubernetes这几个词摆在一起,方向就非常… · 2026/9/26 9:46:00
桌面端CRM实践:用DeskcommCRM解决客户信息分散难题 手头堆了三个微信账号、两个企业通讯录、再加上Excel里一份快半年没更新的客户名单,每天找资料的时间比谈客户的时间还长,这种状态我持续了挺久。后来我们团队开始落地一套定位为“桌椅旁的客户关系管理”的桌面端CRM工具,就是DeskcommCRM&am… · 2026/9/26 9:46:00
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46