大模型Prompt工程

一、提示词技术

1. 提示工程的原则(规范)

基于OpenAI官网文档,我们提炼出了5条大原则:

  • 清晰的指令
  • 文本参考
  • 复杂任务拆分简单子任务
  • 给模型"思考"的时间
  • 借助外部工具

2. 提示技术

2.1 Zero-shot

Zero-Shot(Zero-Shot Prompting 零样本提示)不提供示例,直接靠模型预训练知识完成任务。像问专家问题,他凭经验直接回答;

特点:

① 高效:无需准备示例,适合快速测试。

② 灵活:利用模型广博知识。

2.2 Few-Shot

Few-Shot(Few-Shot Prompting 少样本提示)在prompt中提供少量输入-输出示例 (通常1-5个),

特点:

精准:示例减少歧义,提升一致性。

2.1 Zero-shot & Few-shot

2.1.1 在模型训练层面

Zero-shot :零样本,基于模型训练阶段学习的属性/语义关联,去迁移到未知的新类别;(类似于人类的联想,虽未见过此物,可基于已知的东西推理出新的东西

Few-shot :少样本,基于少量样本,快速泛化识别新样本;(基于给出的少量示例来得到结果

2.1.2 在提示词优化层面

Zero-shot:无提示,语言描述任务,依赖模型预训练知识回答 ;(无提示仅通过语言来描述人物,此方式完全依赖模型训练中获得的知识,模型训练过程中获取的知识越多,回答的效果就越好、反之效果差)

Few-shot:给与模型少量示例,引导模型对齐示例输出结果;

3. Json数据格式

3.1 Json介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 ,易于人阅读和编写,同时也易于机器解析和生成。Json是带有格式的字符串,主要用于数据交换,即程序和程序之间的信息互传,使用son会更加方便 ,如下示例:

3.2 Json的2种结构:Json对象&Json数组

Json对象:字典;
Json数组:列表包字典;

3.3 Python中如何使用Json

Python中使用Json主要完成:

  • 将Python字典、列表转换为 Json字符串;
  • 读取Json字符串,转换为Python字典或列表;

主要使用Python内置的 Json库:

  • json.dumps(字典或列表,ensure_ascii=False):将字典或列表转换为Json字符串;
    ensure_ascii参数确保中文能正常显示;返回值:Json字符串;
  • json.loads(json字符串):将son字符串转换为Python字典或列表;
    返回值:Python字典 或 Python列表;

二、提示词技术案例

当前金融领域信息化发展的时代,金融数据大量激增,许多投资者和研究者试图通过对这些数据进行深度分析而获得一些有效的决策和帮助,尽可能减少决策失误带来的损失。所以,针对金融数据的分析方法研究是目前十分有益且热门的话题。

当前案例主要有三大业务场景实现:

  • 基于大模型完成:金融 文本分类;
  • 基于大模型完成:金融文本信息抽取;
  • 基于大模型完成:金融文本匹配;

案例大模型选择:Qwen在线大模型(阿里云通义千问qwen3-max);

采用方法:基于 Few-Shot + Zero-Shot 的思想,设计prompt(提示词),进而应用大模型完成相应的任务;

1. LLM实现金融文本分类

掌握Fewshot方式下prompt的设计方式;

掌握利用LLM实现文本分类的代码;

1.1 任务介绍

1.2 Prompt设计

python 复制代码
import os
from openai import OpenAI
from dotenv import load_dotenv

# 调用阿里云百炼qwen3.7-plus
load_dotenv()

# 1.获取client对象(OpenAI类对象)
client = OpenAI(api_key=os.getenv("QWEN_API_KEY"), base_url=os.getenv("base_url"))

# 1.准备数据
examples_data = {  # 示例数据
    '新闻报道': '今日,股市经历了一轮震荡,受到宏观经济数据和全球贸易紧张局势的影响。投资者密切关注关联储可能的政策调整,以适应市场的不确定性。',
    '财务报告': '本公司年度财务报告显示,去年公司实现了稳步增长的盈利,同时资产负债表呈现强劲的状况。经济环境的稳定和管理层的有效战略执行为公司的健局',
    '公司公告': '本公司高兴地宣布成功完成最新一轮并购交易,收购了一家在人工智能领域领先的公司。这一战略举措将有助于扩大我们的业务领域,提高市场竞争',
    '分析师报告': '最新的行业分析报告指出,科技公司的创新将成为未来增长的主要推动力。云计算、人工智能和数字化转型被认为是引领行业发展的关键因素,投资者',
}
questions = [	# 提问数据
    "今日,央行发布公告宣布降低利率,以刺激经济增长。这一降息举措将影响贷款利率,并在未来几个季度内对金融市场产生影响。",
    "ABC公司今日发布公告称,已成功完成对XVZ公司股权的收购交易,本次交易是ABC公司在扩大业务范围、加强市场竞争力方面的重要举措,据悉,此次收购将进一发",
    "公司资产负债表显示,公司偿债能力强劲,现金流充足,为未来投资和扩张提供了坚实的财务基础。",
    "最新的分析报告指出,可再生能源行业预计将在未来几年经历持续增长,投资者应该关注这一领域的投资机会",
    "小明喜欢小新哟"
]

# 2.组装messages  (messages中只包含examples_data内容,不包含用户最后提问的问题)
messages = [
    {"role": "system",  "content": "你是一个金融专家,将文本分类为['新闻报道','财务报道','公司公告','分析师报告'],不清楚的分类为'不清楚类别'下面有示例:"},
]
for key, value in examples_data.items():
    messages.append({'role': 'user', 'content': value})
    messages.append({'role': 'assistant', 'content': key})
    
# print(messages) # 打印messages内容
# for i in messages:
#     print(i)

# 3.向模型提问
for q in questions:
    response = client.chat.completions.create(
        model="qwen3.7-plus",
        # 通过+号添加另一个列表将两个列表合并,列表中的内容是一个字典:role是user、
        # content内容是questions中给每一个问题,通过for循环获取
        messages=messages + [{"role": "user", "content": f"按照示例给问题分类:{q}"}]
    )
    # 4.获取结果
    print(response.choices[0].message.content)

2. LLM实现