提示词工程学习总结:用 Few-shot 把大模型调教成金融文本分类、抽取与匹配的自动化流水线
摘要本文系统梳理了黑马程序员《大模型 RAG 与 Agent 智能体项目实战教程》中【提示词工程】模块的 6 集内容围绕金融文本处理主线从提示词设计的六大核心技巧出发深入对比零样本zero-shot与少样本few-shot两种思想并依次拆解金融文本分类、JSON 格式规范、金融信息抽取、金融文本匹配四个实战案例。文章还总结了常见踩坑与排错方法并阐明该模块与后续 RAG、Agent 开发的前后衔接关系帮助读者建立从提示词到结构化任务落地的完整认知。提示词工程学习总结用 Few-shot 把大模型调教成金融文本分类、抽取与匹配的自动化流水线目录一、模块定位与学习目标二、第 1 集大模型 prompt 工程指南——六大核心技巧三、第 2 集零样本 zero-shot 与少样本 few-shot 的思想3.1 zero-shot完全信任模型的预训练知识3.2 few-shot给少量示例来对齐输出3.3 zero-shot vs few-shot 对比四、第 3 集金融文本分类——把分类任务写成 prompt4.1 任务与标签定义4.2 system 角色与消息结构4.3 调用代码五、第 4 集JSON 数据格式——让大模型输出能被程序解析5.1 为什么是 JSON5.2 Python 中与 JSON 互转六、第 5 集金融文本信息抽取——从非结构化新闻里抽字段6.1 任务与抽取字段6.2 prompt 与代码七、第 6 集金融文本匹配——判断两段文本是否语义相关7.1 任务定义7.2 prompt 与代码八、踩坑与排错清单九、与前后模块的衔接十、面试与实战常考点相关链接李沐深度学习191集课程全解析模块拆解、学习路径-CSDN博客吴恩达《面向开发者的提示词工程》-CSDN博客吴恩达 MCP 教程Model Context Protocol一-CSDN博客多模态大模型教程学习笔记 — ViT · CLIP · SAM · GLIP · Stable Diffusion一句话总结提示词工程的本质就是提问的工程——在不动模型权重的前提下靠角色设定、指令清晰、上下文、思维链分步、输出格式约束和少量示例Few-shot这六板斧把一个通用大模型引导成能稳定完成金融文本分类、金融信息抽取、金融文本匹配这三类结构化任务的专用助手而它正是后面 RAG 与 Agent 开发的地基。本总结对应黑马程序员《大模型 RAG 与 Agent 智能体项目实战教程》中【提示词工程】模块的 6 集内容编号 1015。这一模块没有讲空泛的 prompt 八股而是用一条贯穿始终的金融文本处理主线把理论落地先讲清提示词设计的核心原则与零样本/少样本两种思想再用阿里云通义千问qwen-max与本地 Ollama 蒸馏模型qwen3:4b两套环境依次跑完金融文本分类、JSON 格式规范、金融信息抽取、金融文本匹配四个真实案例。下面按模块定位 → 逐集拆解 → 踩坑 → 前后衔接 → 面试考点的顺序展开。一、模块定位与学习目标在整套课程里【提示词工程】夹在前置准备 OpenAI 库基础使用和RAG 开发LangChain之间。它的定位非常明确大模型本身的结构极简——用户输入、模型输出输出我们无法直接控制唯一能掌控的就是输入也就是 prompt。因此课程反复强调一句结论不管是 RAG 检索增强还是 Agent 智能体抑或是围绕大模型的各种复杂应用开发本质上都是在提示词上下功夫。一个好的提示词甚至能让基础模型的输出效果媲美经过微调的模型。学完本模块应当达到三个目标说清楚什么是提示词工程并能熟练运用至少六种提示词设计技巧理解零样本zero-shot与少样本few-shot两种思想的区别、适用场景与优劣能独立用 OpenAI 兼容 SDKopenai库组装messages列表完成金融文本分类、JSON 格式信息抽取、金融文本匹配三类任务并能在云端 qwen-max 与本地 qwen3:4b 之间一键切换。二、第 1 集大模型 prompt 工程指南——六大核心技巧第 1 集是纯概念课不写代码。它先给提示词工程下定义在不更新模型权重的前提下探讨如何与大模型交互、引导其行为从而获得所需结果的方法。简化说就是提问的工程——你怎么问决定了模型怎么答。课上用写贪吃蛇做了对比演示直接输入写一个贪吃蛇程序模型只能猜你的需求默认用 Python 给一版而把提示词写细——要求复古像素风格、用 HTML 和 JavaScript 实现、明确玩法上下左右控制、随机生成食物且不重叠、得分增加、视觉风格蛇身、食物、背景、分数显示、UI边框、操作说明、标题——模型就能精确产出符合预期的代码。结论是你描述得越清晰、越详细模型的回答就越贴合你的想法。在此基础上课程总结了六个可复用的提示词设计技巧技巧核心做法课程中的例子详细描述把需求、约束、风格、长度都写清楚用温柔的语气写情书500 字以上角色设定让模型扮演某个专业身份你是面试官给我出题我答完再出下一题分隔符区分输入用三引号、中括号、XML 标签把待处理原文与指令隔开用 20 个字总结由三引号包围的文本指定任务步骤把复杂任务拆成步骤一、步骤二引导模型按逻辑执行分步响应增强逻辑性与指向性提供示例给一两个输入→输出样例对齐风格与格式给听君一席话胜似一席话再让模型仿写废话文学使用参考文本把标准答案/知识库塞进上下文让模型从中抽取答案降低幻觉请在我给的参考资料内作答——这正是 RAG 的雏形其中第六条使用参考文本专门用来对付大模型的幻觉一本正经地胡说八道把标准答案给模型要求它只在给定文本里挑选或抽取答案它就不会自由发挥。课程预告这套给知识库、让模型在知识库内找答案的做法后面学 LangChain 时就是 RAG。下面是一组好 prompt vs 坏 prompt的对照体会一下同一件事两种问法的差别维度坏 prompt模糊好 prompt精准任务写个游戏用 HTMLJavaScript 写复古像素风贪吃蛇方向键控制、食物不与蛇身重叠、实时计分角色无你是一名资深金融分析师擅长把金融新闻归类原文与指令指令和待总结文字混在一起用把待总结文本单独包围再下总结指令输出无约束只输出是或不是不要解释缺失值不说明若原文未提及一律填原文未提及三、第 2 集零样本 zero-shot 与少样本 few-shot 的思想从第 2 集开始进入金融实战。课程先交代了案例背景要对金融领域数据做基本分析落地为三个业务场景——金融文本分类、金融信息抽取、金融文本匹配。模型默认选用阿里云通义千问在线模型课上用 qwen-max即千问 3 max每个模型都有 100 万 token 的免费额度额度用完换一个同系列模型即可因为对这类任务来说千问系列模型效果基本相当。设计提示词时本案例统一借用两种思想zero-shot零样本和 few-shot少样本。3.1 zero-shot完全信任模型的预训练知识zero-shot 在提示词层面的含义是不提供任何示例仅用自然语言描述任务的要求、目标和约束让模型直接出结果。它依赖的是模型在预训练阶段学到的能力把这种能力属性迁移到新任务上。课程用认动物打比方模型训练时认识马四脚兽、老虎有条纹、熊猫黑白色但没见过斑马。这时只要用语言告诉它斑马是四脚兽、有黑白色条纹模型就能把已知属性四脚兽、条纹、黑白色组合迁移从而认出斑马。落到 prompt 上的真实例子是请判断双引号包围的用户评论中的情感倾向只输出正面或负面。 评论这款代餐的饱腹感强不柴很推荐。请判断双引号包围的用户评论中的情感倾向只输出正面或负面。 评论这款代餐的饱腹感强不柴很推荐。模型没有在训练里直接见过这句话但它认识饱腹感强不柴推荐这些正向词做属性迁移后输出正面。3.2 few-shot给少量示例来对齐输出few-shot 则是在提问时附带少量输入→输出示例让模型照着示例的格式和判断标准处理新问题。训练层面的比方是给企鹅三张样本图新图虽然不完全一样模型通过相似度匹配发现新图与企鹅样本得分最高于是判为企鹅。prompt 层面的真实例子抽取产品名称和核心卖点要求输出 JSON请从广告语中抽取产品名称和核心卖点两个字段输出 JSON。 示例1 输入苹果电脑高效节能性能强大适合牛马工作使用。 输出{产品名称: MacBook Pro, 核心卖点: 高效节能、性能强大} 示例2 输入联想笔记本畅玩游戏无压力。 输出{产品名称: 联想笔记本, 核心卖点: 畅玩游戏无压力} 现在请处理 输入华为 MatePad Pro 高清大屏长效续航你的好帮手。请从广告语中抽取产品名称和核心卖点两个字段输出 JSON。 示例1 输入苹果电脑高效节能性能强大适合牛马工作使用。 输出{产品名称: MacBook Pro, 核心卖点: 高效节能、性能强大} 示例2 输入联想笔记本畅玩游戏无压力。 输出{产品名称: 联想笔记本, 核心卖点: 畅玩游戏无压力} 现在请处理 输入华为 MatePad Pro 高清大屏长效续航你的好帮手。有了这两个示例模型自然会输出{产品名称: 华为 MatePad Pro, 核心卖点: 高清大屏、长效续航}。3.3 zero-shot vs few-shot 对比对比维度zero-shot零样本few-shot少样本是否给示例不给任何示例给少量输入→输出样例依赖什么完全依赖模型预训练知识与属性迁移预训练知识 示例对齐prompt 长度短、省 token较长、示例占用上下文优点简洁、通用、无需准备标注数据输出格式/标准更可控对齐精度高缺点遇细分标签、特殊格式容易跑偏示例不够或不典型时会误导模型适用场景模型熟悉的常见任务如情感判断自定义标签、自定义 JSON 字段、严格格式输出一句话记忆zero-shot 是直接问相信模型懂few-shot 是先做给你看你照着办。后面三个金融案例全部采用 few-shot——因为它们都涉及自定义标签和严格输出格式。四、第 3 集金融文本分类——把分类任务写成 prompt4.1 任务与标签定义任务是给若干段来自金融领域的文本让模型判断它属于哪一类。课程定义了四个主类别外加一个兜底类别标签含义 / 判定标准新闻报告对市场、行业、事件的新闻性报道公司公告上市公司对外发布的正式公告财务公告财务报告涉及财务数据、财报、经营数据的公告分析师报告分析师出具的分析、点评、研报不清楚未知无法归入上述四类时的兜底不要硬猜设计提示词要抓住两个点第一向模型解释我们认为的文本分类是什么第二指定它按什么格式输出。这两点都靠 few-shot 的对话历史来传递——与其口头解释不如直接给几个用户问→模型答的样例。4.2 system 角色与消息结构课程的 system 提示词大意是你是金融专家请把用户给的金融文本按【新闻报告、公司公告、财务公告、分析师报告】四类做分类如果你判断不清楚就回答不清楚下面我会给你一些示例。然后在消息历史里塞入若干组示例用户发一段文本模型回一个标签最后再放上真正要分类的问题。messages的目标结构如下[ {role: system, content: 你是金融专家……按四个分类做分类不清楚就回答不清楚下面给你示例}, {role: user, content: 示例文本1}, {role: assistant, content: 新闻报告}, {role: user, content: 示例文本2}, {role: assistant, content: 财务报告}, ... 其余两组示例 ... {role: user, content: 按照示例回答这段文本的分类类别待分类文本} ][ {role: system, content: 你是金融专家……按四个分类做分类不清楚就回答不清楚下面给你示例}, {role: user, content: 示例文本1}, {role: assistant, content: 新闻报告}, {role: user, content: 示例文本2}, {role: assistant, content: 财务报告}, ... 其余两组示例 ... {role: user, content: 按照示例回答这段文本的分类类别待分类文本} ]4.3 调用代码课程用 OpenAI 兼容 SDK 实现核心是先组装好 system 示例历史再循环把每个待分类文本拼到末尾提问from openai import OpenAI client OpenAI( api_keyyour-dashscope-api-key, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) 示例数据key 是标签value 是该标签的示例文本 examples_data { 新闻报告: 示例今日 A 股三大指数集体收涨新能源板块领涨……, 公司公告: 示例本公司董事会决议召开临时股东大会……, 财务报告: 示例公司上半年营业收入同比增长 12%净利润……, 分析师报告: 示例我们给予该公司买入评级目标价……, } questions [待分类文本1……, 待分类文本2……, 待分类文本3……, 待分类文本4……, 待分类文本5……] 组装 system few-shot 历史 messages [{role: system, content: 你是金融专家请把用户给的金融文本按【新闻报告、公司公告、财务报告、分析师报告】四类分类若判断不清楚直接回答不清楚。下面给你示例。}] for label, text in examples_data.items(): messages.append({role: user, content: text}) messages.append({role: assistant, content: label}) 逐个提问 for q in questions: resp client.chat.completions.create( modelqwen-max, messagesmessages [{role: user, content: f按照示例回答这段文本的分类类别{q}}], ) print(q, , resp.choices[0].message.content)from openai import OpenAI client OpenAI( api_keyyour-dashscope-api-key, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) # 示例数据key 是标签value 是该标签的示例文本 examples_data { 新闻报告: 示例今日 A 股三大指数集体收涨新能源板块领涨……, 公司公告: 示例本公司董事会决议召开临时股东大会……, 财务报告: 示例公司上半年营业收入同比增长 12%净利润……, 分析师报告: 示例我们给予该公司买入评级目标价……, } questions [待分类文本1……, 待分类文本2……, 待分类文本3……, 待分类文本4……, 待分类文本5……] # 组装 system few-shot 历史 messages [{role: system, content: 你是金融专家请把用户给的金融文本按【新闻报告、公司公告、财务报告、分析师报告】四类分类若判断不清楚直接回答不清楚。下面给你示例。}] for label, text in examples_data.items(): messages.append({role: user, content: text}) messages.append({role: assistant, content: label}) # 逐个提问 for q in questions: resp client.chat.completions.create( modelqwen-max, messagesmessages [{role: user, content: f按照示例回答这段文本的分类类别{q}}], ) print(q, , resp.choices[0].message.content)课程运行结果五个问题依次得到新闻报告、公司公告、财务报告、分析师报告、不清楚——最后一段不属于任何一类模型如实在 system 指令约束下回了不清楚而不是硬猜一个标签。切换本地 Ollama 模型只需改两处把base_url换成http://localhost:11434/v1把model换成本地已有的qwen3:4b。注意运行前必须先启动 Ollama 服务。本地 4B 蒸馏模型跑得慢一些跑的时候显卡占用率冲到 100%但同样能正确完成分类任务——这说明小参数蒸馏模型把大模型的核心能力学到了手这类任务完全够用。五、第 4 集JSON 数据格式——让大模型输出能被程序解析为什么要单独插一集讲 JSON因为后面的信息抽取案例要求模型输出可被程序直接解析的结构化数据而不是一段自然语言。如果模型输出的是一段人话Python 端还得靠字符串切分去抠字段既脆弱又麻烦。5.1 为什么是 JSON数据形式是否结构化是否自带 schema元数据机器解析主要缺点TXT 纯文本否非结构化否很难靠人写规则切分信息规整度差CSV是逗号固定分隔否容易按逗号切即可列含义易丢失孤立的11、12、16不知道是年龄还是身高JSON是是键值自带含义容易标准库直接解析空间占用略大现在硬盘便宜用空间换可靠性很值JSON 有两种结构JSON 对象用{}包围键值对KV键必须是字符串值可以是数字、字符串、列表甚至嵌套的对象或数组——对应 Python 的字典。JSON 数组用[]包围里面是一堆 JSON 对象——对应 Python 的列表套字典。5.2 Python 中与 JSON 互转用 Python 内置的json库做双向转换两个核心 APIimport json d {name: 周杰伦, age: 11, hobby: [唱歌, 打球], other: {city: 台北}} 1) Python 字典/列表 - JSON 字符串 s json.dumps(d, ensure_asciiFalse) # ensure_asciiFalse 否则中文变成 \uXXXX 乱码 print(s) 2) JSON 字符串 - Python 字典/列表 back json.loads(s) print(type(back)) # class dictimport json d {name: 周杰伦, age: 11, hobby: [唱歌, 打球], other: {city: 台北}} # 1) Python 字典/列表 - JSON 字符串 s json.dumps(d, ensure_asciiFalse) # ensure_asciiFalse 否则中文变成 \uXXXX 乱码 print(s) # 2) JSON 字符串 - Python 字典/列表 back json.loads(s) print(type(back)) # class dict这里有一个极易踩的坑JSON 标准只认双引号为了跨语言兼容因为很多语言里单引号和双引号是两回事。如果你偷懒直接str(d)把字典转字符串Python 会用单引号包键值那不是合法 JSON别的语言或json.loads都认不了。所以规范做法永远是json.dumps。六、第 5 集金融文本信息抽取——从非结构化新闻里抽字段6.1 任务与抽取字段信息抽取Information Extraction的任务是给一段非结构化的金融口头报告/新闻文本让模型把指定字段抽出来组装成 JSON字典。课程定义了五个字段字段名说明示例值日期行情对应的交易日2025 年 6 月 6 日股票名称标的证券名称含市场传智教育 A 股开盘价当日开盘价格66收盘价当日收盘价格68成交量成交股数/手数123000关键设计点有两个一是向模型解释我们要抽哪几个字段二是要求它按 JSON 字符串输出。再补一条容错规则某个字段原文没提就填原文未提及——这样既不会漏键也不会让模型瞎编。6.2 prompt 与代码system 提示词大意是请帮我完成信息抽取我给你句子你从句子中抽取【日期、股票名称、开盘价、收盘价、成交量】这五个字段按 JSON 字符串输出如果某个信息原文未提及就用原文未提及表示。请参考如下示例。示例数据是一个列表每项是{content: 句子, answer: 结果字典}。注意塞进消息历史的answer必须先用json.dumps转成 JSON 字符串因为content只能是字符串。import json from openai import OpenAI client OpenAI(api_keyyour-key, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1) schema [日期, 股票名称, 开盘价, 收盘价, 成交量] examples_data [ {content: 2025 年 6 月 6 日传智教育 A 股开盘 66 元收盘 68 元成交 123000 手。, answer: {日期: 2025年6月6日, 股票名称: 传智教育A股, 开盘价: 66, 收盘价: 68, 成交量: 123000}}, {content: 另一份示例句子……, answer: {日期: ……, 股票名称: ……, 开盘价: ……, 收盘价: ……, 成交量: ……}}, ] questions [ 2025 年 6 月 6 日传智教育 A 股开盘 66 元收盘 68 元成交 123000 手。, 2025 年 6 月 6 日黑马程序员 A 股开盘 200 元人民币收盘 206 元。, ] messages [{role: system, content: 请完成信息抽取从用户句子中抽取【日期、股票名称、开盘价、收盘价、成交量】五个字段 按 JSON 字符串输出若某信息原文未提及一律填\原文未提及\。请参考如下示例。}] for ex in examples_data: messages.append({role: user, content: ex[content]}) messages.append({role: assistant, content: json.dumps(ex[answer], ensure_asciiFalse)}) for q in questions: resp client.chat.completions.create( modelqwen-max, messagesmessages [{role: user, content: f按照上述示例现在抽取这个句子的信息{q}}], ) print(resp.choices[0].message.content)运行结果验证第一个句子五个字段全部抽对日期 2025 年 6 月 6 日、传智教育 A 股、开盘 66、收盘 68、成交量 123000第二个句子里压根没提成交量模型严格按指令把成交量填成了原文未提及。这就是大模型处理非结构化文本的价值——靠写死的字符串切分根本抠不出来交给模型却又快又准。同样地切到本地qwen3:4bbase_url改为http://localhost:11434/v1也能跑对只是慢一些。七、第 6 集金融文本匹配——判断两段文本是否语义相关7.1 任务定义文本匹配语义相似度判断任务给成对的短文本让模型判断两句话是否说的是同一件事/有关联只输出是或不是。课程示例股票大涨投资者乐观 ↔ 上涨的市场让投资者满意 →是都讲股票上涨带来乐观情绪油价 ↔ 智能城市 →不是两个领域无关联房地产 ↔ 房地产 →是同主题提示词设计仍抓两点解释什么叫匹配、约束输出只能是是/不是。这次用了正反两类示例——是给两对、不是给两对共四个示例让模型同时学到正例和反例的边界。还用了第 1 集讲的分隔符技巧把两个待判断的句子都用中括号[]包起来避免模型混淆。7.2 prompt 与代码examples_data是一个字典键是答案是/不是值是该答案下的句子对列表。双层循环把它们展开成用户给两句→模型回是/不是的对话历史。from openai import OpenAI client OpenAI(api_keyyour-key, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1) examples_data { 是: [ (股票大涨投资者乐观, 上涨的市场让投资者满意), (房地产市场回暖, 楼市成交量回升), ], 不是: [ (国际油价波动, 智能城市建设), (央行加息, 某地新能源汽车销量), ], } questions [ (利润上升影响房地产市场, 高利率对房地产有冲击), (国际油价上涨, 智慧城市试点落地), (股票普涨, 投资者情绪高涨), ] messages [{role: system, content: 请完成文本匹配用户会给出两个用中括号包围的句子判断它们是否语义相关/同属一类 只回答\是\或\不是\不要解释。请参考示例。}] for label, pairs in examples_data.items(): for t in pairs: messages.append({role: user, content: f句子一[{t[0]}]句子二[{t[1]}]}) messages.append({role: assistant, content: label}) for q in questions: resp client.chat.completions.create( modelqwen-max, messagesmessages [{role: user, content: f句子一[{q[0]}]句子二[{q[1]}]}], ) print(q, , resp.choices[0].message.content)运行结果为是、不是、是与人工判断完全一致前一句房地产高利率相关、中间油价与智慧城市无关、最后股票普涨与投资者情绪高涨相关。切到本地qwen3:4b同样能给出正确结果。这个任务本质上就是后面 RAG 里召回片段是否与问题相关的判分雏形。八、踩坑与排错清单把这几个案例连起来做最容易踩下面几个坑模型不按格式输出。表现让它输出 JSON它却写成好的结果如下……再讲一段话。对策①在 system 里明确只输出 JSON不要任何解释②用 few-shot 给一个标准答案示范③信息抽取这类强格式任务把answer用json.dumps(..., ensure_asciiFalse)标准化后再塞进示例历史。JSON 被 markdown 代码块包裹json.loads直接报错。大模型经常返回json ... 。对策解析前先清洗——去掉首尾的json 和再json.loads或在 prompt 里加一句直接输出 JSON不要用代码块包裹。JSON 引号不对。模型偶尔用单引号或 trailing comma。对策优先用支持容错的解析或在 prompt 强调必须使用双引号、标准 JSON。中文记得ensure_asciiFalse否则json.dumps出来全是\uXXXX。少样本示例不够或不典型。表现分类时把财务报告和公司公告混为一谈。对策①每个标签至少给一个示例边界模糊的标签公司公告 vs 财务公告要各给一个区分度高的例子②匹配任务要正反例都给否则模型只会顺着一个方向答。标签混淆 / 乱猜。表现遇到不认识的文本硬塞进某个类别。对策在 system 里设兜底类——分类任务说不清楚就回答不清楚抽取任务说没提到就填原文未提及给模型一条体面的弃权通道。切换本地模型时连不上。表现Connection refused。对策确认 Ollama 已启动、base_url是http://localhost:11434/v1、model名字与本地ollama list里完全一致如qwen3:4b。忘记messages是列表套字典。few-shot 必须靠对话历史实现system 打头后面一组组user/assistant交替最后再补一个待回答的user。结构预想要画清楚再动手 append。九、与前后模块的衔接向前衔接本模块建立在前置准备通义千问接入、环境变量保管 API Key、Ollama 本地部署和OpenAI 库基础使用客户端创建、流式输出、带历史消息调用之上。你会发现三个案例用的都是同一套client.chat.completions.create(model..., messages...)写法区别只在messages怎么组装。向后衔接本模块是 RAG 与 Agent 的提示词地基。第 1 集讲的使用参考文本、降低幻觉就是 RAG 的思想内核——后面 LangChain 的通用提示词模板、FewShotPromptTemplate、ChatPromptTemplate本质上就是把本集手写的messages组装过程模板化、可复用化信息抽取的 JSON 结构化输出、文本匹配的相关性判断更是 RAG 召回与 Agent 工具调用里天天要用的能力。十、面试与实战常考点什么是提示词工程在不更新模型权重的前提下通过设计输入提问来引导大模型输出预期结果的方法俗称提问的工程。常用提示词技巧有哪些详细描述、角色设定、分隔符区分输入、指定任务步骤思维链、提供示例few-shot、使用参考文本降低幻觉。zero-shot 和 few-shot 的区别前者不给示例、纯靠语言描述和模型预训练知识后者给少量输入→输出样例来对齐格式与判断标准格式要求高时优先 few-shot。如何让大模型稳定输出 JSONsystem 强约束 few-shot 示例 json.dumps(answer, ensure_asciiFalse)标准化示例 输出端清洗 markdown 代码块后再json.loads。金融文本分类怎么落地system 设金融专家角色并枚举标签与兜底规则few-shot 用对话历史给文本→标签样例最后逐个待分类文本拼到messages末尾调用。信息抽取中字段缺失怎么办在 prompt 里约定原文未提及的占位符保证 JSON 键完整、不瞎编。云端模型和本地蒸馏模型怎么选额度充足优先云端qwen-max快离线/隐私/成本敏感时用 Ollama 本地 qwen3:4b改base_url和model两处即可小模型这类结构化任务也能胜任。结语这一模块表面上在调金融文本分类、信息抽取、文本匹配三个小案例实际上是在练一件事——把模糊的业务需求翻译成一份结构清晰、带角色、带示例、带格式约束的messages。把这套功夫练熟后面学 LangChain 模板、做 RAG 检索增强、搭 Agent 智能体时你会发现框架只是把你手写的messages变得更优雅而真正决定效果上限的永远是你提示词里的那几个字。