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

在之前的文章中,我们了解到了编写明确具体的指令关键原则的四种策略的其中两种:

  • 使用分隔符清楚地指示输入的不同部分。
  • 要求 GPT 结构化输出。

接下来,我们将继续了解编写明确具体的指令关键原则的另外两个策略:

  • 要求 GPT 检查是否满足条件。
  • 写示例时提示词要尽量少一些。

编写清晰明确的指令

要求 GPT 检查是否满足条件

如果任务做出了不一定满足的假设,那么我们可以告诉模型先检查这些假设,如果不满足,就指出这一点,并停止尝试完成整个任务。你还可以考虑潜在的边缘情况以及模型应该如何处理它们,以避免意外的错误或结果。比如:

    public static void main(String[] args) {
    
    
        String text = "我说道:“爸爸,你走吧。”\n"
                + "他望车外看了看,说:“我买几个橘子去。你就在此地,不要走动。”\n"
                + "我看那边月台的栅栏外有几个卖东西的等着顾客。走到那边月台,须穿过铁道,须跳下去又爬上去。父亲是一个胖子,走过去自然要费事些。我本来要去的,他不肯,只好让他去。\n"
                + "我看见他戴着黑布小帽,穿着黑布大马褂,深青布棉袍,蹒跚地走到铁道边,慢慢探身下去,尚不大难。可是他穿过铁道,要爬上那边月台,就不容易了。"
                + "他用两手攀着上面,两脚再向上缩;他肥胖的身子向左微倾,显出努力的样子。这时我看见他的背影,我的泪很快地流下来了。我赶紧拭干了泪。怕他看见,也怕别人看见。\n"
                + "我再向外看时,他已抱了朱红的橘子往回走了。过铁道时,他先将橘子散放在地上,自己慢慢爬下,再抱起橘子走。到这边时,我赶紧去搀他。"
                + "他和我走到车上,将橘子一股脑儿放在我的皮大衣上。于是扑扑衣上的泥土,心里很轻松似的。过一会儿说:“我走了,到那边来信!”我望着他走出去。"
                + "他走了几步,回过头看见我,说:“进去吧,里边没人。”等他的背影混入来来往往的人里,再找不着了,我便进来坐下,我的眼泪又来了。\n";
        String prompt = "你将得到一段三个反引号之间的文本。\n"
                +"如果它包含一系列的步骤,请按以下格式重写这些步骤,然后只写出步骤:\n"
                + "第一步:...\n"
                + "第二步:...\n"
                + "...\n"
                + "第N步:...\n\n"
                + "如果文本不包含一系的步骤,则只需写“没有提供步骤”。\n"
                + "```%s```";
        String response = getCompletion(String.format(prompt, text));
        System.out.println(response);
    }

可以看到提示词是:你将获得由三个引号分隔的文本。如果它包含一系列指令,请按以下格式重写这些指令,然后只写出步骤。如果文本不包含一系列指令,则只需写“未提供步骤”。看一下运行的结果:

第一步:父亲要买橘子,让我在车站等他。
第二步:我看到卖东西的人在月台外,想去看看,但父亲不让。
第三步:父亲穿过铁道,要爬上月台,费了很大劲。
第四步:我看到父亲的背影,不禁流泪。
第五步:父亲买了橘子回来,我去搀他。
第六步:父亲把橘子放在我的衣服上,很开心。
第七步:父亲告别我,让我进去等车。
第八步:我看着父亲走远,再次流泪。

现在我要尝试在不同的文本上使用相同的提示词:

public static void main(String[] args) {
    
    
    String text = "天空落着雨,灰蒙蒙的。一条笔直的柏油马路直直通到家门口,白墙红瓦,整个罩在微密的雨帘中,在雨水的冲洗下,愈显干净。" 
            + "雨“啪”的一声落在屋檐上,汇成小流,沿着瓦槽留下来,在砖上留下一排排的小小的坑。" 
            + "窗子雾蒙蒙的,氤氲着一层薄薄的水汽,雨水划过,拉出一道道纵横交错的痕迹,弯曲、纠缠、凌乱,剪不断却理还乱。" 
            + "从窗子里,隐隐显出几个黑色的影子,一高一矮,像是被摆弄着的皮影一样,动着、比划着。";
    String prompt = "你将得到一段三个反引号之间的文本。\n"
            +"如果它包含一系列的步骤,请按以下格式重写这些步骤,然后只写出步骤:\n"
            + "第一步:...\n"
            + "第二步:...\n"
            + "...\n"
            + "第N步:...\n\n"
            + "如果文本不包含一系的步骤,则只需写“没有提供步骤”。\n"
            + "```%s```";
    String response = getCompletion(String.format(prompt, text));
    System.out.println(response);
}

看一下运行的结果:

没有提供步骤。

这段文本只是描述一个下雨的场景,里面没有任何步骤。如果我们使用之前使用过的相同提示词,而是在这个文本上运行它,那么GPT将尝试提取步骤。如果它找不到任何步骤,我们将要求它只说“没有提供步骤”。GPT确定第二段文本没有步骤,所以就输出了”没有提供步骤“。

写示例时提示词要尽量少一些

在要求GPT执行你想要执行的任务之前提供成功执行任务的示例,这时你的提示词要尽量少一些。我们来举一个例子:

    public static void main(String[] args) {
    
    
        String prompt = "你的任务是用连贯的方式回答。\n"
                + "学生:什么是坚持?\n"
                + "老师:坚持就像一条河流,它源远流长,虽然在某些时候可能会受到阻碍,但它总是能够继续前行。\n"
                + "学生:什么是耐心?";
        String response = getCompletion(prompt);
        System.out.println(response);
    }

在这个提示词中,我们告诉GPT它的任务是用问答的风格回答,我们有这样一个学生和老师之间的对话的例子,老师用一些隐喻回答学生的问题,因为GPT有这个少量提示的例子,它将以类似的风格回答下一个问题:

老师:耐心就像一棵树,它需要时间和养分才能成长茁壮。虽然在等待的过程中可能会感到无聊或者焦虑,但只有耐心等待,才能看到最终的成果。

总结

以上就是编写明确具体的指令关键原则的四种策略:

  • 使用分隔符清楚地指示输入的不同部分。
  • 要求 GPT 结构化输出。
  • 要求 GPT 检查是否满足条件。
  • 写示例时提示词要尽量少一些。

在接下来的文章中,我们将继续了解第二个关键原则:给 GPT 一定的“思考”时间,尽请期待。

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

猜你喜欢

转载自blog.csdn.net/heihaozi/article/details/130680512