面向Java开发者的ChatGPT提示词工程(6)

2023-09-01 16:49:48 浏览数 (1)

在使用 GPT 构建应用程序时,我们通常不会直接使用第一次写的提示词,而是通过不断迭代来改进它们,以找到最适合我们想要实现的任务的提示词。虽然第一次写的提示词可能会有一定的可用性,但最重要的是找到适合你的应用程序的提示词的过程,而不是第一个提示是否有效。因此,我们需要不断地尝试和改进,才能找到最佳的提示词。

使用 GPT 构建应用程序的提示词的过程是怎样的呢?首先,我们需要有一个想法和完成的任务。接着,我们可以尝试编写一个清晰具体的提示词,如果需要的话,让系统有时间思考。然后,我们可以运行它,看看结果。如果第一次的结果不够好,那么我们可以通过迭代的过程来找出问题所在,比如指令不够清晰,或者算法没有足够的时间思考。这样,我们就可以不断完善想法和提示,多次循环,直到得到适合你的应用程序的提示。

我个人并没有太关注那些声称有30个完美提示词的文章,因为我认为并不存在适用于所有情况的完美提示词。更重要的是,我们需要为我们的特定应用程序开发一个适合的提示词过程。

示例

我们将使用一个示例任务:使用技术说明书编写手机描述。技术说明书列举了手机的外观、容量、尺寸和重量等等,具体如下:

代码语言:javascript复制
public final static String iPhone14 = "外观n"
          "- 午夜色n"
          "- 紫色n"
          "- 星光色n"
          "- 红色n"
          "- 蓝色n"
          "- 黄色n"
          "n"
          "超瓷晶面板、玻璃背板搭配铝金属边框n"
          "n"
          "容量n"
          "- 128GBn"
          "- 256GBn"
          "- 512GBn"
          "n"
          "尺寸与重量n"
          "- 宽度: 71.5 毫米 (2.82 英寸)n"
          "- 高度: 146.7 毫米 (5.78 英寸)n"
          "- 厚度: 7.80 毫米 (0.31 英寸)n"
          "- 重量: 172 克 (6.07 盎司)n"
          "n"
          "显示屏n"
          "- 超视网膜 XDR 显示屏n"
          "- 6.1 英寸 (对角线) OLED 全面屏n"
          "- 2532 x 1170 像素分辨率,460 ppin"
          "- HDR 显示n"
          "- 原彩显示n"
          "- 广色域 (P3)n"
          "- 触感触控n"
          "- 2000000:1 对比度 (典型)n"
          "- 800 尼特最大亮度 (典型);1200 尼特峰值亮度 (HDR)n"
          "- 采用防油渍防指纹涂层n"
          "- 支持多种语言文字同时显示n"
          "n"
          "显示屏采用曲线优美的圆角设计,四个圆角位于一个标准矩形内。按照标准矩形测量时,屏幕的对角线长度是 6.06 英寸 (实际可视区域较小)。n"
          "n"
          "芯片n"
          "- A15 仿生芯片n"
          "- 6 核中央处理器,具有 2 个性能核心和 4 个能效核心n"
          "- 5 核图形处理器n"
          "- 16 核神经网络引擎n"
          "n"
          "摄像头n"
          "- 1200 万像素主摄:26 毫米焦距,ƒ/1.5 光圈,传感器位移式光学图像防抖功能,七镜式镜头,100% Focus Pixelsn"
          "- 1200 万像素超广角:13 毫米焦距,ƒ/2.4 光圈和 120° 视角,五镜式镜头n"
          "- 2 倍光学变焦 (缩小);最高可达 5 倍数码变焦n";

假设我们想要把这张技术说明书拿来帮助营销团队为一个在线零售网站编写描述。于是,我们写了如下的提示词:

代码语言:javascript复制
public static void main(String[] args) {
    String prompt = "你的任务是帮助营销团队根据技术说明书为手机的零售网站创建描述。n"
              "请根据三个反引号之间的技术说明书编写手机描述。n"
              "```%s```";
    String response = getCompletion(String.format(prompt, iPhone14));
    System.out.println(response);
}

运行一下看看结果:

代码语言:javascript复制
这款手机有多种颜色可供选择,包括午夜色、紫色、星光色、红色、蓝色和黄色。它采用超瓷晶面板、玻璃背板和铝金属边框的设计,外观时尚美观。
手机有三种容量可供选择,分别是128GB、256GB和512GB。它的尺寸为71.5毫米宽、146.7毫米高、7.80毫米厚,重量为172克。
手机采用6.1英寸OLED全面屏,分辨率为2532 x
1170像素,拥有HDR显示和广色域,触感触控,对比度高达2000000:1,最大亮度为800尼特,峰值亮度为1200尼特。
屏幕采用防油渍防指纹涂层,支持多种语言文字同时显示。屏幕四个圆角位于一个标准矩形内,对角线长度为6.06英寸。
手机采用A15仿生芯片,具有6核中央处理器,5核图形处理器和16核神经网络引擎。
手机的摄像头包括1200万像素主摄和1200万像素超广角,支持2倍光学变焦和最高可达5倍数码变焦。
主摄拥有26毫米焦距,ƒ/1.5光圈,传感器位移式光学图像防抖功能,七镜式镜头和100% Focus
Pixels。超广角拥有13毫米焦距,ƒ/2.4光圈和120°视角,五镜式镜头。

GPT 似乎很好地写了一个描述,很好地完成了我要求它做的事情,也就是从技术说明书开始写手机描述。但当我们看到这个时,感觉有点长。也许我们想让它短一点。用“最多100个字”来尝试给出更好的提示词,以期望手机描述长度更短。

代码语言:javascript复制
public static void main(String[] args) {
    String prompt = "你的任务是帮助营销团队根据技术说明书为手机的零售网站创建描述。n"
              "请根据三个反引号之间的技术说明书编写手机描述。n"
              "最多使用100个字。n"
              "```%s```";
    String response = getCompletion(String.format(prompt, iPhone14));
    System.out.println(response);
}

运行一下看看结果:

代码语言:javascript复制
这款手机有多种颜色可选,外观采用超瓷晶面板、玻璃背板和铝金属边框。
容量有128GB、256GB和512GB可选。屏幕为6.1英寸OLED全面屏,支持HDR显示和多种语言文字同时显示。
芯片采用A15仿生芯片,摄像头有1200万像素主摄和超广角,支持2倍光学变焦和5倍数码变焦。

这实际上看起来是一个更好的简短描述,介绍了一款手机。让我们再检查一下手机描述的长度,有137个字。GPT 在遵循非常精确的字数限制方面还可以,但不是很好。但这实际上还不错。

在完善网站文本的过程中,我们可能会发现这个网站并不是面向所有消费者销售的,而是专注于向摄影爱好者销售,因为他们更加关注手机的摄像头。因此,我们需要进一步修改提示词,以更加精确地描述手机的摄像头,以满足目标受众的需求。

代码语言:javascript复制
public static void main(String[] args) {
    String prompt = "你的任务是帮助营销团队根据技术说明书为手机的零售网站创建描述。n"
              "请根据三个反引号之间的技术说明书编写手机描述。n"
              "描述是为摄影爱好者准备的,所以重点是手机的摄像头。n"
              "最多使用100个字。n"
              "```%s```";
    String response = getCompletion(String.format(prompt, iPhone14));
    System.out.println(response);
}

运行一下看看结果:

代码语言:javascript复制
拍摄更清晰、更生动的照片,这款手机的摄像头是你的不二选择。主摄像头和超广角摄像头都有1200万像素,支持2倍光学变焦和5倍数码变焦。外观有多种颜色可选,配备超瓷晶面板、玻璃背板和铝金属边框,容量可达512GB。

看起来不错,我们可以了解到手机的主摄像头和超广角摄像头的像素和变焦。通过改变提示词,我们可以让它更专注于我们想要的特定特征。当我看到这个时,我们可能会决定在描述的最后还要包括手机的重量。所以,也许我们可以进一步改进这个提示。

代码语言:javascript复制
public static void main(String[] args) {
    String prompt = "你的任务是帮助营销团队根据技术说明书为手机的零售网站创建描述。n"
              "请根据三个反引号之间的技术说明书编写手机描述。n"
              "描述是为摄影爱好者准备的,所以重点是手机的摄像头。n"
              "在描述的最后包括重量。n"
              "最多使用100个字。n"
              "```%s```";
    String response = getCompletion(String.format(prompt, iPhone14));
    System.out.println(response);
}

运行一下看看结果:

代码语言:javascript复制
拍摄更清晰、更生动的照片,1200万像素主摄和超广角摄像头,2倍光学变焦,最高可达5倍数码变焦。手机重量172克。

我们刚刚看到的是许多开发人员将经历的迭代提示词开发的简短示例。

总结

在尝试使用提示词时,有时候我们会发现提示词并不能完全满足我们的需求。这时候,我们需要考虑如何澄清我们的说明,或者给予更多的思考空间,以便更接近我们想要的结果。然而,成为一名成功的提示词工程师并不在于知道完美的提示词,而在于拥有一个好的开发过程,以开发出对我们的应用程序有效的提示词。

在本文中,我们仅提供了一个例子来说明如何开发提示词。对于更复杂的应用程序,我们可能需要使用多个例子,例如10个、50个或100个资料简介,然后迭代地开发提示,并对大量案例进行评估。然而,在大多数应用程序的早期开发阶段,很多人像我们一样只使用一个例子。但是,对于更成熟的应用程序,评估提示词在多个资料简介上的表现可能是有用的,例如在多个资料简介上测试不同的提示词,以查看其在平均或最差情况下的表现如何。通常情况下,只有当应用程序更成熟时,才会这样做,并且必须有这些指标来推动提示改进的最后几步。

0 人点赞