从Prompt工程到金融实战:基于Few-shot Learning的大模型信息抽取全解析
大家好我是你们的技术伙伴。在2026年的今天大模型LLM已经不再是简单的聊天玩具它正在成为金融、医疗等垂直领域的核心生产力工具。但在实际业务中我们经常面临一个痛点如何让通用的大模型精准地理解特定领域的“黑话”今天我将基于金融领域的实战案例带你从零构建一套完整的大模型提示词工程Prompt Engineering体系。我们将利用Few-shot Learning少样本学习让模型在没有经过专业微调的情况下也能具备顶级金融专家的分析能力。核心内容概览Prompt工程核心原则如何让模型“听懂人话”金融文本分类自动识别新闻、公告与财报。金融文本匹配判断两段话是否描述同一事件。信息抽取从杂乱文本中挖出“金矿”实体与关系。️ 第一部分提示词工程——与大模型的“心灵对话”很多初学者觉得大模型“不好用”其实是因为没有掌握Prompt Engineering提示词工程的艺术。这不仅仅是写指令而是引导模型思考的过程。1. 核心原则清晰的指令不要让模型猜谜。你需要明确告诉它角色、任务、格式、限制。角色扮演让模型充当“金融分析师”它会自动调用相关领域的知识库。思维链Chain of Thought给模型充足的“思考时间”要求它一步步推理而不是直接蹦出答案。2. 迭代优化Prompt设计是一个循环迭代的过程初步想法- 编写初版Prompt。输入模型- 观察输出。结果检查- 分析错误是理解错了任务还是格式不对。循环迭代- 调整指令直到模型表现完美。 第二部分金融文本分类实战——给信息“贴标签”在海量的金融资讯中自动识别文本类型如新闻报道、公司公告、财务报告、分析师报告是风险控制和投资决策的第一步。核心逻辑利用Few-shot思想我们在Prompt中提供几个“标准答案”作为示例让模型模仿学习。代码实现from openai import OpenAI import os # 1. 配置客户端 (以Qwen为例) client OpenAI(api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1) # 2. 定义金融专家角色与示例样本 class_examples { 新闻报道: 今日股市经历了一轮震荡受到宏观经济数据和全球贸易紧张局势的影响..., 财务报告: 本公司年度财务报告显示去年公司实现了稳步增长的盈利..., 公司公告: 本公司高兴地宣布成功完成最新一轮并购交易..., 分析师报告: 最新的行业分析报告指出科技公司的创新将成为未来增长的主要推动力... } def classify_financial_text(text): # 构建Prompt系统指令 少量示例 待分类文本 prompt [ {role: system, content: 你是一个资深金融专家请严格将文本分类为新闻报道、财务报告、公司公告、分析师报告。如果不确定回答其他。} ] # 加入示例Few-shot Learning的核心 for cls, example in class_examples.items(): prompt.append({role: user, content: f请分类{example}}) prompt.append({role: assistant, content: cls}) # 加入待预测文本 prompt.append({role: user, content: f请分类{text}}) # 调用模型 response client.chat.completions.create( modelqwen-plus, messagesprompt, temperature0.1 # 降低随机性保证分类稳定 ) return response.choices[0].message.content # 测试 text ABC公司今日发布公告称已成功完成对XYZ公司股权的收购交易... print(f分类结果: {classify_financial_text(text)}) 第三部分金融文本匹配实战——寻找“孪生”信息场景需求判断两条新闻是否在描述同一件事例如判断市场上的两条关于“降息”的消息是否指向同一政策。代码实现def init_matching_prompt(): # 定义匹配逻辑与示例 examples { 是: [ (公司ABC发布了季度财报显示盈利增长。, 财报披露公司ABC利润上升。), ], 不是: [ (黄金价格下跌投资者抛售。, 外汇市场交易额创下新高。), (央行降息刺激经济增长。, 新能源技术的创新。) } } history [ {role: system, content: 判断两个句子语义是否相似相似返回是不相似返回不是。} ] for label, pairs in examples.items(): for pair in pairs: history.append({role: user, content: f句子一{pair[0]}\n句子二{pair[1]}}) history.append({role: assistant, content: label}) return history def check_similarity(sentence1, sentence2): prompt init_matching_prompt() prompt.append({role: user, content: f句子一{sentence1}\n句子二{sentence2}}) response client.chat.completions.create( modelqwen-plus, messagesprompt ) return response.choices[0].message.content # 测试 print(check_similarity(油价大幅下跌能源公司面临挑战。, 原油价格跳水导致相关企业市值缩水。)) 第四部分金融信息抽取实战——从文本到结构化数据这是大模型在金融领域最硬核的应用之一实体抽取NER。我们需要从一段杂乱的文本中提取出“日期”、“股票名称”、“涨跌幅”等关键信息并整理成JSON格式。核心技巧Schema定义明确告诉模型要提取哪些字段。结果后处理模型输出的可能是带Markdown格式的JSON需要清洗。代码实现import json import re # 定义抽取的Schema SCHEMA { 金融: [日期, 股票名称, 开盘价, 收盘价, 成交量] } IE_PATTERN {}\n\n提取上述句子中{}的实体并按照JSON格式输出。如果句子中没有的信息用[原文中未提及]来表示多个值之间用,分隔。 def extract_financial_info(raw_text): # 1. 构建Prompt (包含系统指令和Few-shot示例) prompt [ {role: system, content: 你是信息提取专家请严格按照JSON格式输出不要添加任何解释。} ] # 这里可以加入一些预定义的示例... # prompt.append(...) # 2. 添加当前任务 user_content IE_PATTERN.format(raw_text, SCHEMA[金融]) prompt.append({role: user, content: user_content}) # 3. 推理 response client.chat.completions.create( modelqwen-plus, messagesprompt ) raw_response response.choices[0].message.content # 4. 后处理去除json等Markdown标签 return clean_response(raw_response) def clean_response(response: str): 清洗模型输出提取纯JSON if json in response: # 使用正则提取json代码块 res re.findall(rjson(.*?), response, re.S) if res: response res[0].strip() try: return json.loads(response) except: return {error: 解析失败, raw: response} # 测试 text 2023-02-15股票佰笃[BD]美股开盘价10美元最终以13美元收盘... result extract_financial_info(text) print(json.dumps(result, indent2, ensure_asciiFalse)) 结语通过上述三个实战案例分类、匹配、抽取我们看到了大模型在金融领域的巨大潜力。Few-shot Learning让我们无需海量标注数据仅通过精心设计的Prompt就能让模型具备专业能力。给读者的建议多迭代不要指望一次Prompt就完美多试几次。多用Role给模型一个身份如“资深审计师”效果往往更好。关注输出格式在金融领域数据的结构化JSON比文本本身更重要。如果你觉得这篇文章对你有帮助希望点赞、收藏、关注你的支持是我持续输出硬核内容的最大动力