【大模型驯化-Prompt】企业级大模型Prompt调试技巧与batch批量调用方法

【大模型驯化-Prompt】企业级大模型Prompt调试技巧
 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的博客个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注: 微信公众号 发送 pandas 即可获取
🎇 相关内容
视频**讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

  • 🎯 一、基本介绍
  • 💡 2. 使用方法
    • 2.1 网页版
    • 2.1 接口版
  • 🔍 3. Prompt的一些创建心得
  • 🔧 4. Prompt高阶用法

下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 一、基本介绍

  Prompt 工程是创建提示或指导像 ChatGPT 这样的语言模型输出的过程。它允许用户控制模型的输出并生成符合其特定需求的文本。
   prompt的设计一定要有逻辑和系统性,现在大模型对于文本的分类、抽取、生成、理解等nlp任务都特别的强大,在通用的领域里面基本不会比传统的模型效果差,但是受限于gpu资源和预算,目前对于大规模的任务很多都是通过大模型进行样本的修正和标注,在用小模型进行在线部署,后续如果性能提高、费用降低很多之前的小模型都会基于大模型进行任务的处理。

  • prompt的三要素:
  • 任务:对提示要求模型生成的内容进行清晰而简洁的陈述。
  • 指令:在生成文本时模型应遵循的指令。
  • 角色:模型在生成文本时应扮演的角色。
  • 对于prompt来说,最为重要的几个点,就是上面的三个要素,在设计prompt时,一定需要表达明确和具体,从而使得整体prompt逻辑顺畅。

💡 2. 使用方法

2.1 网页版

  大模型的发展使得当前的工作效率都有了极大的提升,当前不管是pm、运营、研发都不得不提升对大模型的使用,下面介绍一些免费的网页版本大模型使用方法,具体主要有如下的一些工具:
  kimi: 网页地址,这个对话助手是用来写长文章、看论文的超级好手,下面为一个例子具体怎么去用来看论文:
在这里插入图片描述
  对于上述图片中红色框中的东西就是为prompt,对于大多数非大模型开发者来说,都是通过网页对话的方式进行,如上述的prompt为对论文进行摘要,如果想要输出一定的格式,则需要修改上述的输入为:

https://arxiv.org/pdf/2106.09685 请总结该篇文章,输出格式为:
1. 核心思想总结; 2. 论文中的创新点总结; 3. 数据对比理论推导详细介绍

   豆包:地址,这个产品为字节旗下的ai产品,在语音对话上面有极大的优势,可以用来锻炼英语,大家感兴趣的可以下载app来玩玩,目前在产品体验上面还是相当不错的

2.1 接口版

  对于大多数的大模型开发者来说,网页版都只能是临时的处理一个特定的任务,而在企业工作时,通常需要对多个数据进行处理,下面以chatgpt为主的代码调用方法:

from openai import OpenAI
def get_chatgpt_result(prompt_info):
    """
        chatgpt的运行结果
    """
    client = OpenAI(
        api_key="sk-xxx",
    )
    messages = [{"role": "user", "content": prompt_info}]
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=messages,
        temperature=0, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message["content"]

  如上述的代码所示,通过接口调用chatgpt相对来说也比较简单,只需要修改里面的参数传入即可

  

🔍 3. Prompt的一些创建心得

  prompt 通用的一些提示词 :生成、总结、严格按照、提取、xx专家

  • 提示技巧
  • 具体的模板为:按照以下指示生成[任务]:[指令]
  • 其中任务指的是具体的目标,指令指的是生成目标的要求
  • 具体的例子:按照以下指示生成【符合相关法律法规的法律文件】:【文件应符合相关法律法规】
  • 角色技巧
  • 具体的模板为:作为[角色]生成[任务]
  • 其中角色指的是在生产任务时某个领域的专家,任务就是具体的目标
  • 具体的例子:作为【律师】,生成【法律文件】
  • 提示+角色
  • 将上述两个技巧结合起来的具体例子如下所示:
  • 任务:为新智能手机生成产品描述
  • 指令:描述应该是有信息量的,具有说服力,并突出智能手机的独特功能
  • 角色:市场代表 种子词:“创新的”
  • 提示公式:作为市场代表,生成一个有信息量的、有说服力的产品描述,突出新智能手机的创新功能。该智能手机具有以下功能【插入您的功能】
  • 对比提示
  • 具体的模板为:基于[数量]个示例生成文本,这种方式可以使得模型聚焦到某一个点上,大幅提升模型对文本的理解能力,在特定的任务上使用比较多
  • 其中数量为某一个任务的现实存在的对比对象
  • 使用少量示例【3个其他电子阅读器】为这款新电子阅读器生成评论
  • 思考提示
  • 具体的模板:【让我们思考|讨论|谈谈|等一下】+ 任务,该方法在用于生成式内容中比较常用,可以模拟一个人去思考具体的任务,在相对推理的提示中用的比较多
  • 具体的例子:【让我们讨论】人工智能的当前状态
  • 自洽提示
  • 用于确保ChatGPT的输出与提供的输入一致。这种技术对于事实核查、数据验证或文本生成中的一致性检查等任务非常有用。
  • 具体公式:【生成】与以下产品信息一致的产品评论【插入产品信息】
  • 具体例子:以与提供的上下文一致的方式完成以下句子【插入句子】
  • 任务:检查给定新闻文章的一致性
    输入文本:“文章中陈述该城市的人口为500万,但后来又说该城市的人口为700万。”
    提示公式:“请确保以下文本是自洽的:文章中陈述该城市的人口为500万,但后来又说该城市的人口为700万。”
  • 种子词提示
  • 种子词提示是一种通过提供特定的种子词或短语来控制ChatGPT输出的技术。种子词提示的提示公式是种子词或短语
  • 具体的模板:请根据以下【种子词】生成文本
  • 具体例子:作为研究员,请在与种子词“科学”相关且以研究论文的形式书写的情况下完成以下句子:【插入句子】
  • 整合提示
  • 这种方法的具体作用用于将当前的信息和目前已经存在的信息进行融合到一起,生成新的信息的过程
  • 具体公式:将以下信息与关于[具体主题]的现有知识整合:[插入新信息]
  • 多项式提示
  • 这种技术向模型提供一个问题或任务以及一组预定义的选项作为潜在答案,通过这种方法可以取代传统技术来进行文本分类的技术
  • 具体的模板:通过选择以下选项之一回答以下问题:[插入问题] [插入选项1] [插入选项2] [插入选项3]
  • 通过改写上述的模板,增加每个选项的解释,和输出要求就可以得到使用gpt进行文本分类的效果,而且准确率都比较高
  • 控制提示
  • 控制生成提示是一种技术,可让模型在生成文本时对输出进行高度控制。该方法在文本生成的时候特别的适用,通过设计一个生成模板,使得生成的内容按照一定的逻辑进行输出
  • 具体的模板:生成遵循以下语法规则的文本:[插入规则]:[插入上下文]
  • 抽取提示
  • 允许模型在保留其主要思想和信息的同时生成给定文本的较短版本。该方法主要应用在文本的摘要生成中,通过设计对长文本进行主题思想的提取得到想要的核心内容
  • 具体模板:【规则】+【文章】
  • 这种方法在目前的文本摘要抽取中用的比较多,具体会和控制提示一起连用,用控制提示来制定抽取的规则
  • 对抗提示
  • 它允许模型生成抵抗某些类型的攻击或偏见的文本,种技术可用于训练更为稳健和抵抗某些类型攻击或偏见的模型。
  • 具体模板:生成难以分类为【插入标签】的文本
  • 这种方法通常用来进行传统分类模型的样本微调,通过gpt生成大量传统模型无法进行分类的样本,从而丰富传统模型的样本,使得模型的样本更加丰富,最后提升传统模型的鲁棒性
  • 聚类提示
  • 聚类提示是一种技术,它可以让模型根据某些特征或特点将相似的数据点分组在一起,这种方法可以取代传统的基于机器学习聚类的方法
  • 具体的模板:将以下新闻文章根据主题分组成簇:【插入文章】
  • 该方法通常和控制提示一起连用,将控制提示作为聚类的解释说明和游戏规则进行设计
  • 强化学习提示
  • 强化学习提示是一种技术,可以使模型从过去的行动中学习,并随着时间的推移提高其性能
  • 具体模板:使用强化学习将以下文本[插入文本]从[插入语言]翻译成[插入语言]
  • 这种方法在于想要生成与之对应的文本风格
  • ner提取学习
  • ner模型在文本理解和抽取里面是一个比较重要的模型,目前基于gpt进行ner的抽取相对传统的方法准确率基本不会差
  • 具体模板:[插入文章]上执行命名实体识别,并识别和分类人名、组织机构、地点和日期

🔧 4. Prompt高阶用法

  通常企业里面实际操作时,我们通常提取的prompt特别的长,但是输入的文本都比较短,这个时候如果每次循环的调用会使得整个模型的耗费特别的多,因此,我们需要将多个输入合并一个batch的输入进行判断,可以极大的降低输入token的耗费情况,具体的实现代码如下所示:

import openai
import re
import datetime
import pandas as pd
import time
import math
import numpy as np


def get_prompt(info):
    """
        对样本进行标签设置
    """
    prompt_info = ("""你是一个xx专家,根据内容解释:
                   第一大类:个别字、词不文明,包含但不仅限于以下类别,且需要关注谐音等近似词汇和表情包
                   1)涉黄涉性或者言语带有猥亵成分,如:靓女、大美女、丝袜、啪啪、炮、妹子、骚、鸡巴、嫖娼等;
                   2)涉政,如:港澳台等领土范围、国家政权、八嘎牙路、牙路等;
                   3)涉恐,如:虚假不实言论等;
   请对内容输出一个概率为0-1之间的概率值,1为越不会引发争议和舆情风险,0为越容易引发争议和舆情风险,如果判断为0则把触发的条件也加上:
       内容评论信息:
       内容1:xx
       笔记2:傻狗门卫,睡得跟死猪似的,
       答案:
       内容1:1
       内容2:0,傻狗
       内容信息:
       {info}
       答案:
       """)
    # print("---", notes)
    notes_str = "\n".join(["笔记" + str(index + 1) + ":" + notes[index] for index in range(len(notes))])
    prompt = prompt_info.format(notes=notes_str)
    print(prompt)
    result = openai.ChatCompletion.create(
        model="gpt-4-0613",
        # model="gpt-3.5-turbo",
        user="user参数可传递一个随机id,用于排查问题,例如traceId、uuid、requestId等",
        messages=[
            {"role": "user", "content": prompt},
        ]
    )
    once = result['choices'][0]['message']['content']
    print("once", once)
    res = once.split('\n')
    out = []
    for tmp in res:
        try:
            sp = re.split(":|:", tmp)
            if len(sp) != 2:
                out.append(['其他'])
                continue
            out.append(sp[-1])
        except Exception as e:
            print("-----", e)
            raise Exception("自定义异常信息")
    # print(out)
    return out

def once_request(result, notes, all_notes):
    label = 'null'
    label_index = []
    try:
        label = get_prompt(notes)
    except Exception as e:
        print(f"the openai is error is: {e}")
    if len(label) == len(notes):
        result.extend(label)
        all_notes.extend(notes)
    notes.clear()

if __name__ == '__main__':
    openai.api_key = "xx"
    openai.api_base = "xx"
    once_request_count = 30
    data = pd.read_csv('xx', sep="\t") 
    result = []
    cnt = 0
    notes = []
    all_notes = []
    predict = []
    for i in data.values:
        notes.append(i[-1])
        if len(notes) < once_request_count:
            continue
        once_request(result, notes, all_notes)
    if len(notes) > 0:
        once_request(result, notes, all_notes)
    cnt += 1

    df1 = pd.DataFrame({
        "text": all_notes,
        "result": result
    })
    print(df1)
    df1.to_csv('result', index=False, sep='\t')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/731121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ajax核心02】底层原理-Promise对象

目录 一&#xff1a;promise对象是什么 二&#xff1a;语法&#xff08;Promise使用步骤&#xff09; 三&#xff1a;Promise-三种状态 一&#xff1a;promise对象是什么 Promise 对象代表异步操作最终的完成&#xff08;或失败&#xff09;以及其结果值。 即Promise对象是…

番外篇 | YOLOv8算法解析和实战应用:车辆检测 + 车辆追踪 + 行驶速度计算

前言:Hello大家好,我是小哥谈。YOLOv8是ultralytics公司在2023年1月10号开源的,是YOLOv5的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,在还没有开源时就收到了用户的广泛关注。它是一个SOTA模型,建立在以前YOLO版本的成功基础上,并引入了新的功能和改…

JVM的类加载机制

Java中类的加载阶段 类加载 Java中的类加载机制是Java运行时环境的一部分&#xff0c;确保Java类可以被JVM&#xff08;Java虚拟机&#xff09;正确地加载和执行。类加载机制主要分为以下几个阶段&#xff1a; 加载&#xff08;Loading&#xff09;&#xff1a;这个阶段&#x…

剑指offer 算法题(搜索二维矩阵)

剑指offer 第二题 去力扣里测试算法 思路一&#xff1a; 直接暴力遍历二维数组。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {for (unsigned int i{ 0 }; i < matrix.size(); i){for (unsigned int j{ 0 };…

生信软件23 - Samtools和GATK去除PCR重复方法汇总

1. 为什么要去除重复&#xff1f; 在建库测序后&#xff0c; 加上接头的DNA片段进行PCR扩增&#xff08;由于连接flowcell的效率很低&#xff0c;所以需要对片段进行扩增&#xff09;&#xff0c;连接至flowcell上。PCR扩增会导致一个片段会测序多次&#xff0c;当该片段存在变…

Java学习笔记(二)变量原理、常用编码、类型转换

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍Java变量原理、常用编码、类型转换详细使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 1、变量原理 1.1、变量的介绍 变量是程…

Java中setLineWrap(true)和setWrapStyleWord(true)优化TextArea

在 Java Swing 开发中&#xff0c;JTextArea 是一个多行的文本区域组件&#xff0c;常用于显示和编辑大量文本。当处理长文本时&#xff0c;默认行为是不换行并且出现水平滚动条&#xff0c;这通常会降低用户体验。幸运的是&#xff0c;JTextArea 提供了两个非常有用的方法&…

如何卸载windows系统自带游戏

为了清晰地指导如何卸载Windows系统自带游戏&#xff0c;我们可以参考以下步骤进行&#xff1a; 方法一&#xff1a;通过控制面板卸载 打开控制面板进入程序和功能在控制面板中&#xff0c;找到并点击“程序和功能”。在程序列表中&#xff0c;找到你想要卸载的自带游戏。 方…

EtherCAT扫盲,都是知识点

1. 什么是EtherCAT EtherCAT&#xff0c;全称Ethernet for Control Automation Technology&#xff0c;字面意思就是用于控制自动化技术的以太网。它是一种基于以太网的实时工业通信协议&#xff0c;简单说&#xff0c;就是让机器们通过网线互相聊天的高级方式。 EtherCAT 是最…

数仓开发那些事_番外

一位神州的正式员工&#xff08;没错&#xff0c;就是之前文章中出现的实习生&#xff09;&#xff1a;一闪&#xff0c;你今年涨工资了吗&#xff1f; 一闪&#xff1a;mad&#xff0c;一年辛苦到头只涨了500米 神州员工&#xff1a;你去年绩效不是优秀吗&#xff0c;怎么就涨…

C语言基础关键字的含义和使用方法

​关键字在C语言中扮演着非常重要的角色&#xff0c;它们定义了语言的基本构造和语法规则&#xff0c;通过使用关键字&#xff0c;开发者可以创建变量、定义数据类型、控制程序流程&#xff08;如循环和条件判断&#xff09;、声明函数等。由于这些字是保留的&#xff0c;所以编…

手把手教你实现条纹结构光三维重建(3)——相机投影仪标定

我们都知道&#xff0c;投影仪其实就是个反向相机&#xff0c;如果我们了解双目标定的原理&#xff0c;那么相机和投影仪的标定就不难&#xff0c;关键是我们怎么得到投影仪在图像特征点&#xff08;比如棋盘格角点&#xff09;上的像素位置。 投影仪也类似于一个cmos&#xf…

IO读取properties文件实现JDBC连接池实战

参考文章 Java中的池化思想 面试官&#xff1a;为什么数据库连接很消耗资源&#xff0c;资源都消耗在哪里&#xff1f; 池化思想是什么&#xff1f;连接池是什么&#xff1f; 在Java中&#xff0c;池化思想是一种通过创建和管理可重复使用的对象池来提高性能和资源利用率的编…

【图解IO与Netty系列】Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制

Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制 Netty编解码器编码器解码器编解码器Netty提供的现成编解码器 TCP粘包拆包问题处理Netty心跳检测机制 Netty编解码器 网络传输是以字节流的形式传输的&#xff0c;而我们的应用程序一般不会直接对字节流进行处理&#x…

建筑驱鸟设备 | 建筑专用超声波驱鸟器

从半夜的鸣叫到频繁的鸟粪污染&#xff0c;鸟类活动有时会成为城市居民不得不面对的小小困扰。通过合理的驱鸟方法&#xff0c;我们可以有效地减少鸟类对建筑物的侵扰&#xff0c;保护建筑物的完好和安全&#xff0c;同时维护城市居民的生活质量。 建筑专用超声波驱鸟器&#x…

理解 JTBD 框架和EJ 理念:深挖以用户为中心的设计

在与用户的交流中&#xff0c;我们发现对用户需求的精准洞察普遍困扰着产品经理、设计、企划人员&#xff0c;因为当今消费者行为已经由单品消费转向场景消费&#xff0c;千人千面的个性化需求出现&#xff0c;消费者数据维度极大丰富&#xff0c;这对把握用户体验造成了很大挑…

Android开发系列(五)Jetpack Compose之Icon Image

Icon是用于在界面上显示矢量图标的组件。它提供了很多内置的矢量图标&#xff0c;也支持自定义图标。要使用Icon组件&#xff0c;可以通过指定图标资源的名称或引用来创建一个Icon对象。例如&#xff0c;使用Icons.Default.Home来创建一个默认风格的首页图标。可以通过设置图标…

TrueNAS系统在ARM平台上的移植

随着家庭及中小型企业对存储和共享需求的日益增长&#xff0c;高效、可靠的文件存储系统成为支撑各类应用的关键。 在众多存储系统中&#xff0c;TrueNAS以其卓越的数据完整性与可靠性、简洁高效的应用程序部署和管理、灵活的虚拟化应用添加能力&#xff0c;以及出色的可用性&a…

【第24章】Vue实战篇之用户信息展示

文章目录 前言一、准备1. 获取用户信息2. 存储用户信息3. 加载用户信息 二、用户信息1.昵称2.头像 三、展示总结 前言 这里我们来展示用户昵称和头像。 一、准备 1. 获取用户信息 export const userInfoService ()>{return request.get(/user/info) }2. 存储用户信息 i…

【面试题】风险评估和应急响应的工作流程

风险评估和应急响应是网络安全管理中两个重要的环节。下面分别介绍它们的工作流程&#xff1a; 一、风险评估工作流程&#xff1a; 1.确定评估范围&#xff1a;明确需要评估的信息系统或资产的范围。 2.资产识别&#xff1a;识别并列出所有需要评估的资产&#xff0c;包括硬件…