1.提示词工程概念

提示工程(Prompt Engineering),也称为 In-Context
Prompting,是指在不更新模型权重的情况下如何与大模型交互以引导其行为以获得所需结果的方法。

在人工智能领域,Prompt 指的是用户给大型语言模型发出的指令。

  • 例如,“「讲个笑话」”、“「用 Python 编个贪吃蛇游戏」”、“「写封情书」" 等。
  • 虽然看似简单,但实际上,Prompt 的设计对于模型的结果影响很大。
  • 因此如何设计 prompt,进而与模型更好的交互,是研究人员必备的必不可少的技能(提示工程)。

2.提示词技巧

任何Prompt技巧,都不如清晰的表达你的需求。这就类似人与人沟通,如果话说不明白,不可能让别人理解你的思想。因此,写出清晰的指令,是核心。

技巧1:详细的描述

  • ❌ 差的Prompt:写一封情书
  • ✅ 好的Prompt:用一些温柔的话语写一封情书,来表达我对你的仰慕和思念。最后,我要求书写字体数要不低于500个字

技巧2:让模型充当某个角色
通过指定模型扮演特定身份,匹配其知识体系与行为逻辑,提升输出质量。

  • 示例Prompt
    我需要你充当一个AI算法面试官的角色,要求你自主的对我进行AI面试过程中常考的面试题,你可以一次说一个问题,然后我回答完,你再出第二道题

关键要素

要素 示例 作用
角色身份 AI算法面试官 定位专业维度
交互规则 一次一题,问答递进 规范对话流程
内容范围 AI面试常考题 限定内容边界

技巧3:使用分隔符标明输入的不同部分
通过中括号、XML标签、三引号等分隔符,区分指令和需要处理的内容,减少模型理解偏差。

示例Prompt
用20个字符总结由三引号分割的文本。"""在此插入文本"""

技巧4:对任务指定步骤
对于可以拆分的任务尽量拆开,为其指定一系列步骤,明确步骤可以让模型更容易实现它们。

示例Prompt

利用下面分步情况来响应用户的输入。
步骤1: """用户输入文本""", 用一句话总结这段文本, 并加上前缀"Summary".
步骤2: 将步骤1中的摘要翻译成英语, 并添加前缀"翻译: "

技巧5:基于文本

基于文本文档,辅助大模型问答,降低模型"幻觉"(一本正经的胡说八道)问题。
即使用参考文本作答 经典的知识库用法,让大模型使用我们提供的信息来组成答案。

3.提示词优化案例

案例:

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

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

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

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

3.1Zero-Shot优化思想

Zero-shot学习(Zero-shot Learning)是指在训练阶段不存在与测试阶段完全相同的类别,但是模型可以使用训练过的知识来推广到测试集中的新类别上。
这种能力被称为“零样本”学习,因为模型在训练时从未见过测试集中的新类别,在模型训练和提示词优化中均有体现。

在模型训练中:

  • 已知马(四脚兽)、虎(有条纹)、熊猫(黑白色)的特征,但未训练过斑马的数据(不认识)
  • 告知模型:斑马是四脚兽、有黑白色的条纹
  • 模型可以在已知数据中进行推理,从而识别斑马。

在这里插入图片描述

在提示词优化中:

  • Zero-shot思想用于基于已训练的能力,不提供任何示例,仅通过语言去描述任务的要求、目标和约束,让模型直接生成结果。

简单来说就是“用语言定义任务,解放(信任)模型的预训练知识”

比如:
请判断""包围的用户评论中的情感倾向,输出 正面 或 负面。
"“这款代餐鸡胸肉饱腹感很强,吃起来也不柴,很推荐!”

3.2Few-shot思想

Few-shot学习(Few-shot Learning)是指少样本学习,当模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习,对应的有one-shot learning,单样本学习,也算样本少到为一的情况下的一种few-shot learning。

在模型训练中(相似度判断方法):

  • 基于少量企鹅样本并结合相似度判断,推论未知图片内含“企鹅”

在提示词优化中:

  • Few-shot主要用于基于少量示例,让模型参考示例回答。

在这里插入图片描述

简单来说就是“用示例定义任务,在模型的预训练知识的基础上,提升模型回答的对齐精度(比如参考示例的格式)”

比如:
请抽取产品名称和核心卖点2个字段,格式为Json,我提供2个示例。

  • 示例1: MacBookPro高效节能,性能强大,适合牛马工作使用
    输出: {“产品名称”: “MacBookPro”, “产品卖点”: “高效节能,性能强大”}
  • 示例2: 联想笔记本拥有RTX4060独立显卡,畅玩游戏,丝滑流畅
    输出: {“产品名称”: “联想笔记本”, “产品卖点”: “畅玩游戏,丝滑流畅”}
  • 请处理: 华为MatepadPro,高清大屏,长效续航,你的好帮手。

LLM文本分类

重要的就是组装message,其实就是把大模型当人,给他举一个例子,让他按照例子去匹配
更简单的理解:其实只需要给大模型描述清楚就好。

from openai import OpenAI

# 1. 获取client对象,OpenAI类对象
client = OpenAI(
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

examples_data = {  # 示例数据
    '新闻报道': '今日,股市经历了一轮震荡,受到宏观经济数据和全球贸易紧张局势的影响。投资者密切关注美联储可能的政策调整,以适应市场的不确定性。',
    '财务报告': '本公司年度财务报告显示,去年公司实现了稳步增长的盈利,同时资产负债表呈现强劲的状况。经济环境的稳定和管理层的有效战略执行为公司的健康发展奠定了基础。',
    '公司公告': '本公司高兴地宣布成功完成最新一轮并购交易,收购了一家在人工智能领域领先的公司。这一战略举措将有助于扩大我们的业务领域,提高市场竞争力。',
    '分析师报告': '最新的行业分析报告指出,科技公司的创新将成为未来增长的主要推动力。云计算、人工智能和数字化转型被认为是引领行业发展的关键因素,投资者应关注相关机会。'
}

# 分类列表
examples_types = ['新闻报道', '财务报道', '公司公告', '分析师报告']

# 提问数据
questions = [
    "今日,央行发布公告宣布降低利率,以刺激经济增长。这一降息举措将影响贷款利率,并在未来几个季度内对金融市场产生影响。",
    "ABC公司今日发布公告称,已成功完成对XYZ公司股权的收购交易。本次交易是ABC公司在扩大业务范围、加强市场竞争力方面的重要举措。据悉,此次收购将进一步巩固ABC公司在行业中的地位,并为未来业务发展提供更广阔的发展空间。详情请见公司官方网站公告栏",
    "公司资产负债表显示,公司偿债能力强劲,现金流充足,为未来投资和扩张提供了坚实的财务基础。",
    "最新的分析报告指出,可再生能源行业预计将在未来几年经历持续增长,投资者应该关注这一领域的投资机会",
    "小明喜欢小新哟"
]


"""
[
  {
    "role": "system",
    "content": "你是金融专家,将文本分类为['新闻报道', '财务报道', '公司公告', '分析师报告'],不清楚的分类为'不清楚'"
  },
  {
    "role": "user",
    "content": "今日,央行发布公告宣布降............"
  },
  {
    "role": "assistant",
    "content": "新闻报道"
  },
  {
    "role": "user",
    "content": "ABC公司今日发布公告称,已成功完成对XYZ公司股............"
  },
  {
    "role": "assistant",
    "content": "财务报告"
  },
  {
    "role": "user",
    "content": "公司资产负债表显示,公司偿债能力强劲,现金流充足............"
  },
  {
    "role": "assistant",
    "content": "公司公告"
  },
  {
    "role": "user",
    "content": "最新的分析报告指出,可再生能源............"
  },
  {
    "role": "assistant",
    "content": "分析师报告"
  },
  {
    "role": "user",
    "content": "要提问的问题"
  }
]
"""

message = [
    {"role": "system", "content": "你是金融专家,将文本分类为['新闻报道', '财务报道', '公司公告', '分析师报告'],不清楚的分类为'不清楚'"},
]

for key, value in examples_data.items():
    message.append({"role": "user", "content": value})  # 添加示例数据
    message.append({"role": "assistant", "content": key})  # 添加示例答案

# 像模型提问
for question in questions:
    response = client.chat.completions.create(model="qwen-plus-2025-07-28", messages=message + [
        {"role": "user", "content": f"按照示例回答文本的分类类别:{question}"}])
    print(response.choices[0].message.content)
    # for chunk in response:
    #     print(chunk.choices[0].delta.content, end="", flush=True)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐