大家好,我是你们的技术伙伴。👋
在2026年的今天,大模型(LLM)已经不再是简单的聊天玩具,它正在成为金融、医疗等垂直领域的核心生产力工具。但在实际业务中,我们经常面临一个痛点:如何让通用的大模型精准地理解特定领域的"黑话"?
今天,我将基于金融领域 的实战案例,带你从零构建一套完整的大模型提示词工程(Prompt Engineering) 体系。我们将利用Few-shot Learning(少样本学习),让模型在没有经过专业微调的情况下,也能具备顶级金融专家的分析能力。
核心内容概览:
- Prompt工程核心原则:如何让模型"听懂人话"?
- 金融文本分类:自动识别新闻、公告与财报。
- 金融文本匹配:判断两段话是否描述同一事件。
- 信息抽取:从杂乱文本中挖出"金矿"(实体与关系)。
🛠️ 第一部分:提示词工程------与大模型的"心灵对话"
很多初学者觉得大模型"不好用",其实是因为没有掌握**Prompt Engineering(提示词工程)**的艺术。这不仅仅是写指令,而是引导模型思考的过程。
1. 核心原则:清晰的指令
不要让模型猜谜。你需要明确告诉它:角色、任务、格式、限制。
- 角色扮演:让模型充当"金融分析师",它会自动调用相关领域的知识库。
- 思维链(Chain of Thought):给模型充足的"思考时间",要求它一步步推理,而不是直接蹦出答案。
2. 迭代优化
Prompt设计是一个循环迭代的过程:
- 初步想法 -> 编写初版Prompt。
- 输入模型 -> 观察输出。
- 结果检查 -> 分析错误(是理解错了任务,还是格式不对?)。
- 循环迭代 -> 调整指令,直到模型表现完美。
💰 第二部分:金融文本分类实战------给信息"贴标签"
在海量的金融资讯中,自动识别文本类型(如新闻报道、公司公告、财务报告、分析师报告)是风险控制和投资决策的第一步。
核心逻辑:
利用Few-shot思想,我们在Prompt中提供几个"标准答案"作为示例,让模型模仿学习。
代码实现:
python
from openai import OpenAI
import os
# 1. 配置客户端 (以Qwen为例)
client = OpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://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(
model="qwen-plus",
messages=prompt,
temperature=0.1 # 降低随机性,保证分类稳定
)
return response.choices[0].message.content
# 测试
text = "ABC公司今日发布公告称,已成功完成对XYZ公司股权的收购交易..."
print(f"分类结果: {classify_financial_text(text)}")
🔗 第三部分:金融文本匹配实战------寻找"孪生"信息
场景需求:
判断两条新闻是否在描述同一件事(例如:判断市场上的两条关于"降息"的消息是否指向同一政策)。
代码实现:
python
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(
model="qwen-plus",
messages=prompt
)
return response.choices[0].message.content
# 测试
print(check_similarity("油价大幅下跌,能源公司面临挑战。", "原油价格跳水,导致相关企业市值缩水。"))
📝 第四部分:金融信息抽取实战------从文本到结构化数据
这是大模型在金融领域最硬核的应用之一:实体抽取(NER)。我们需要从一段杂乱的文本中,提取出"日期"、"股票名称"、"涨跌幅"等关键信息,并整理成JSON格式。
核心技巧:
- Schema定义:明确告诉模型要提取哪些字段。
- 结果后处理:模型输出的可能是带Markdown格式的JSON,需要清洗。
代码实现:
python
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(
model="qwen-plus",
messages=prompt
)
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(r'```json(.*?)```', 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, indent=2, ensure_ascii=False))
🏁 结语
通过上述三个实战案例(分类、匹配、抽取),我们看到了大模型在金融领域的巨大潜力。Few-shot Learning 让我们无需海量标注数据,仅通过精心设计的Prompt,就能让模型具备专业能力。
给读者的建议:
- 多迭代:不要指望一次Prompt就完美,多试几次。
- 多用Role:给模型一个身份(如"资深审计师"),效果往往更好。
- 关注输出格式:在金融领域,数据的结构化(JSON)比文本本身更重要。
如果你觉得这篇文章对你有帮助,希望点赞、收藏、关注!你的支持是我持续输出硬核内容的最大动力!