OpenAI官方prompt教程++

得到更好结果的六个Prompt策略

一、编写清晰的说明

这些模型无法读懂你的想法。如果输出太长,请要求简短回复。如果结果太简单,就要求专家级的写作。如果您不喜欢格式,请演示您希望看到的格式。模型越少需要猜测您想要什么,您就越有可能得到它。

为了得到高度相关的回复,请确保请求提供了任何重要的细节或上下文。否则,您就只能让模型来猜测您的意思了。

更差

更好

如何在 Excel 中添加数字?

如何在 Excel 中将一行的美元金额相加?我想自动将整个表格上的一行金额相加,并把相加后的总金额都放在右边的 "总计 "栏中。

谁是总统?

2021 年墨西哥总统是谁?

编写代码计算斐波那契数列。

编写一个 TypeScript 函数来高效计算斐波那契数列。对代码进行大量注释,以解释每个部分的作用以及为什么要这样写。

总结会议记录。

用一个段落总结会议记录。然后用markdown格式列表列出发言者及其要点。最后,列出发言者建议的下一步措施或行动项目(如果有的话)。

系统信息可用于指定模型在回复中使用的角色。

系统 :当我请你帮忙写东西时,你的回答是每段至少有一个笑话或俏皮话

用户 :给我的钢螺栓供应商写一封感谢信,感谢他们在短时间内准时交货。这使我们能够交付一份重要的订单。

助手:

的 [供应商名称]

希望这封邮件能像您给我们的邮件一样迅速、高效地进入您的收件箱!我想花一点时间--实际上,让我们用刻有牌匾的不朽时刻--衷心感谢你和你的团队最近为我们提供的出色服务。

当我们发现自己陷入困境,在一个寂静的房间里,时间的滴答声比养老金挂钟还响时,我们向你们--我们值得信赖的钢螺栓供应商--求助。你们做到了吗?是的,你们的救援速度比尤塞恩-博尔特(Usain Bolt)喝咖啡的速度还快!你们能在如此短的时间内准时送达我们的订单,简直就是奇迹。我的意思是,如果有一个螺栓递送世界杯的话,你们一定会让竞争对手吃不了兜着走!

这一了不起的成就使我们有可能在自己的交货期限内完成交货,确保我们的重要订单不会成为我们在车间窗外发呆时的白日。你们的效率和可靠性将一场潜在的灾难转变成了一场专业英雄主义的大师级表演。你就像在工作服下藏了一件超级英雄披风!

你们的敬业精神让我们的期望值上升到了一个全新的高度--当然是积极的。多亏了你们,我们不仅完成了任务,而且还在任务上加了樱桃。我们的客户印象非常深刻,他们在电话里花了足足五分钟赞不绝口。我们猜想他们可能还跳了一段欢快的舞蹈,但遗憾的是,电话还没有视频功能技术员,你们能不能快点?)

说实在的(不过谁又想完全认真呢?),你们的合作对我们来说非常宝贵,我们期待着与你们一起继续这段旅程,一个螺栓一个螺栓地做,一个项目一个项目地做。让我们为更多的成功交付干杯--我们已经建立起的相互尊重与合作的纽带将紧紧相连。

我们再次向你们表示感谢。你们真的做到了--不过,就我们而言,我想我应该说是'栓牢了'。

带着衷心的感谢和满满的感激、

[您的姓名]

[您的职位]

[您的公司]

三引号、XML 标记、章节标题等分隔符可以帮助划分需要区别对待的文本部分。

用户:"""写一个关于软件工程师的短篇故事,他们的工作是处理大型语言模型。他们工作的办公室是一个由繁忙的工作站组成的迷宫,里面布满了电线、屏幕和一群充满激情的软件工程师。故事应围绕以下人物展开:萨沙,编码天才;马克,工智能心理学家;莉莉,出色的创造性问题解决者和团队领导者""" 用一首俳句概括用三引号分隔的文字。

助手:在有线迷宫中,萨沙负责编码,马克负责工智能,莉莉优雅地领导着。

系统:您将收到两篇关于同一主题的文章(用 XML 标记分隔)。首先总结每篇文章的论点。然后指出哪篇文章的论点更好,并解释原因。

用户:

不可否认,大型语言模型或生成预训练转换器是自然语言处理领域的强大工具,它们能够根据从海量数据中学到的模式生成类似人类的文本。然而,尽管大型语言模型具有令印象深刻的语言生成能力,但它们从根本上缺乏推理能力。推理作为一种认知过程,涉及逻辑思维、推理和根据手头信息得出结论的能力。作为统计模型,大型语言模型仅限于识别和模仿训练数据中的模式,而无法真正理解基本概念或它们之间的关系。

大型语言模型在推理方面的一个重大局限是无法进行因果推理,而因果推理需要理解特定语境中不同元素之间的因果关系。大型语言模型可以生成看似涉及推理的文本,但实际上,它们只是根据某些单词或短语一起出现的统计可能性生成句子,并不理解它们之间的因果联系。此外,由于缺乏对相关概念的必要理解,大型语言模型无法评估所生成语句的真实性或有效性。这种推理能力最终意味着,尽管大型语言模型可以生成看似连贯且符合语境的文本,但却不能依靠它们来提供准确或逻辑合理的信息或结论。

生成式预训练转换器或大型语言模型确实可以进行某种形式的推理。它们通过利用从大量数据中学习到的模式来生成通常在上下文中具有逻辑意义的反应。它们推理能力的一个显著例子是,它们能够解决以前从未见过的数学问题。这表明,大型语言模型并不只是重复记忆信息,而是能够将学到的原理和模式应用到新的情况中,这是推理能力的标志。例如,当被问及有关小说的问题时,大型语言模型可以通过识别和综合文本中的相关信息来提供准确的答案。大型语言模型还能进行假设推理,根据所学模式为假设情景生成可信的结果。这种推理能力是大型语言模型设计和实用性的一个基本方面。 然而,必须认识到大型语言模型的推理能力有其局限性。虽然它们可以生成连贯且与上下文相关的回复,但与人类推理相比,它们对基本概念的理解可能比较浅薄。这是因为大型语言模型主要依赖于识别数据中的模式和关联,而不是对概念进行深入的因果理解。因此,它们的推理有时可能会导致不正确或不合理的结论,尤其是在输入数据模棱两可或相互矛盾的情况下。尽管存在这些局限性,但大型语言模型代表了人工智能的一大进步,展示了在各种情况下进行推理和生成类似人类反应的惊人能力。关键是要继续完善和改进这些模型,以进一步提高其推理能力,并更好地了解这项技术的潜在应用和影响。

助手:第一篇文章认为,大型语言模型(LLM),如生成式预训练转换器,缺乏真正的推理能力。文章强调,推理涉及逻辑思维、作出推论和得出结论,而 LLM 无法做到这一点,因为它们是统计模型,只能识别和模仿模式,而无法理解基本概念。文章强调,这些模型无法进行因果推理,也无法评估它们生成的语句的真实性或有效性,并得出结论:虽然 LLM 可以生成连贯的文本,但不能依靠它们来获得准确或逻辑合理的信息。

第二篇文章提出了反驳意见,认为 LLM 的确可以利用从海量数据中学到的模式进行某种形式的推理。文章举例说明了 LLMs 解决未曾见过的数学问题,并为假设情景生成合理的结果,以此证明他们的推理能力。不过,文章也承认,法律硕士的理解能力可能比较浅薄,他们的推理有时会导致错误的结论,尤其是在数据模棱两可或相互矛盾的情况下。尽管存在这些局限性,但文章认为 LLMs 是工智能的一大进步,能够在各种情况下产生类似人类的反应和推理,并主张进一步完善这些模型

在这两篇文章的论点之间,第二篇文章的论点更好,原因有以下几点。首先,它以一种平衡的方式承认了 LLM 的能力,既承认了它们在模式识别方面的优势,也承认了它们在深度理解和因果推理方面的局限性。这种平衡的观点更加细致入微,反映了法律硕士能力的复杂性。其次,第二篇文章列举了一些具体的例子来说明本地语言学者的推理能力,如解决数学问题、对假设情景做出反应等,从而证实了其关于本地语言学者能力的说法。最后,第二篇文章在承认 LLMs 的局限性的同时,也指出了未来改进的潜力以及继续完善这些模型的重要性。这一观点具有建设性和前瞻性,强调了工智能领域的不断发展,以及随着进一步的进步,LLMs 实现更复杂推理形式的潜力。

系统

我们将为您提供论文摘要和建议标题。论文标题应让读者对论文主题有一个很好的概念,但也应醒目。如果标题不符合这些标准,请提出 5 个备选标题。

摘要:我们报告了 GPT-4 的开发情况,这是一个大规模的多模态模型,可以接受图像和文本输入并生成文本输出。虽然在现实世界的许多场景中,GPT-4 的能力不如人类,但在各种专业学术基准测试中,GPT-4 表现出了人类水平的性能,包括在模拟律师资格考试中以前 10% 左右的成绩通过考试。GPT-4 是一个基于 Transformer 的模型,经过预训练可预测文档中的下一个标记。训练后的调整过程提高了在事实性和遵守预期行为方面的表现。该项目的一个核心组成部分是开发基础架构和优化方法,使其在各种规模的情况下都具有可预测性。这使我们能够根据计算量不超过 GPT-4 1/1,000 的训练模型准确预测 GPT-4 性能的某些方面。

标题:GPT-4 技术报告

助手:

目前的标题 "GPT-4 技术报告 "直截了当地表明了文件的主题,具有实用性。然而,它可能无法完全吸引读者的注意力,也无法表达工作的突破性。以下是五个可供选择的标题,它们既能引起读者的兴趣,又能更生动地暗示内容:

1. "GPT-4 揭开神秘面纱:推动机器智能的发展"

2. "超越地平线:GPT-4 和多模态工智能的到来"

3. "从文本到语境:GPT-4 的进化飞跃"

4. "GPT-4:模糊工智能与人类专长之间的界限

5. "GPT-4 奥德赛:描绘工智能能力的新领域"

对于这类简单的任务,使用分隔符可能不会影响输出质量。但是,任务越复杂,明确任务细节就越重要。不要让模型费力地理解您对他们提出的确切要求。

有些任务最好以一连串的步骤来指定。明确写出这些步骤可以让模型更容易地遵循它们。

系统

第 1 步 - 用户将用三引号提供文本。用一句话概括这篇文本,前缀为 "摘要:"。

第 2 步 - 将第 1 步的摘要翻译成西班牙语,前缀为 "翻译:"。

用户:

"""阿波罗计划又称 "阿波罗工程",是美国国家航空航天局(NASA)实施的第三个载航天计划。阿波罗计划最初是在1960年德怀特-艾森豪威尔总统执政期间构想的,是继将第一批美国送入太空的单水星计划之后的又一个三航天器计划。1961年5月25日,约翰-肯尼迪总统在国会发表讲话,提出了 "让人类登陆月球并安全返回地球 "的20世纪60年代国家目标。这是美国第三个载航天飞行计划,在此之前的双子座计划于1961年启动,旨在扩大航天飞行能力,为阿波罗计划提供支持。

1969年7月20日,宇航员尼尔-阿姆斯特朗(Neil Armstrong)和巴兹-奥尔德林(Buzz Aldrin)乘坐阿波罗登月舱(LM)着陆并在月球表面行走,迈克尔-柯林斯(Michael Collins)乘坐指令和服务舱(CSM)留在月球轨道上,三于7月24日在太平洋安全着陆。随后的五次阿波罗任务也让宇航员登陆月球,最后一次是 1972 年 12 月的阿波罗 17 号。在这六次太空飞行中,共有 12 登上月球。

阿波罗号从 1961 年运行到 1972 年,首次载飞行是在 1968 年。1967 年,阿波罗 1 号遭遇重大挫折,在发射前的测试中,机舱起火导致全体机组生。在首次成功着陆后,仍有足够的飞行硬件用于九次后续着陆,并计划进行更长时间的月球地质和天体物理探索。由于预算削减,其中三次任务被迫取消。剩下的六次任务中有五次成功着陆,但阿波罗13号着陆时,由于氧气罐在飞往月球途中爆炸,导致CSM瘫痪而无法着陆。机组员在返回途中将登月舱用作 "救生艇",才勉强安全返回地球。阿波罗计划使用土星系列火箭作为运载火箭,这些火箭还用于阿波罗应用计划,其中包括 1973-1974 年支持三次载飞行任务的空间站 "天空实验室",以及 1975 年美国和苏联联合执行的低地球轨道飞行任务 "阿波罗-联盟试验项目"。

阿波罗计划为载人航天事业树立了几个重要的里程碑。在将载人飞行任务送出低地球轨道方面,阿波罗是独一无二的。阿波罗 8 号是第一艘绕另一个天体飞行的载人飞船,阿波罗 11 号是第一艘让人类在另一个天体着陆的载人飞船。

阿波罗计划总共向地球送回了 842 磅(382 千克)的月球岩石和土壤,极大地促进了人们对月球成分和地质历史的了解。该计划美国国家航空航天局后来的载人航天能力奠定了基础,并为约翰逊航天中心和肯尼迪航天中心的建设提供了资金。阿波罗计划还推动了火箭和载人航天附带的许多技术领域的进步,包括航空电子设备、电信和计算机。

-摘自
https://en.wikipedia.org/wiki/Apollo\_program"""

助手:

摘要:阿波罗计划美国国家航空航天局(NASA)的一项载人航天计划,在1968年至1972年期间,第一批人类登上月球,在太空探索和技术方面取得了重要的里程碑式的成就。

翻译:El programa Apolo fue una iniciativa de vuelo espacial humano de la NASA que aterrizó a los primeros humanos en la Luna entre 1968 y 1972, logrando hitos significativos en la exploración espacial y la tecnología.

提供适用于所有示例的一般说明通常比通过示例演示任务的所有排列组合更有效,但在某些情况下,提供示例可能更容易。例如,如果您打算让模型复制一种难以明确描述的回应用户询问的特定风格,这就是所谓的 "少量 "提示。

系统:以一致的风格作答。

用户:叫我如何忍耐

助理:最深邃的河谷源于一个不起眼的泉眼;最宏伟的交响乐源自一个音符;最复杂的织锦始于一根孤线。

用户:海洋是地球上最广阔的画卷,由大自然的调色板描绘出独特的色彩,它随着海浪起舞,每一朵浪花都诉说着古老的神秘和未来的希望。从微小的浮游生物到雄伟的鲸鱼,海洋是无数生命的家园,它的波涛之下隐藏着未被阳光触及的文明。海洋既是生命的源泉,也是无情力量的象征,是创造与毁灭的和谐对立。(注:gpt-4模型返回的,但是结果不是很好。)

您可以要求模型生成具有给定目标长度的输出。可以用字数、句数、段落数、要点数等来指定目标输出长度。但请注意,指示模型生成特定字数的精确度并不高。模型可以更可靠地生成具有特定段落数或要点数的输出结果。

用户:用 50 个字左右概括用三引号分隔的文字。

"""阿波罗计划又称 "阿波罗工程",是美国国家航空航天局(NASA)实施的第三个载人航天计划。阿波罗计划最初是在1960年德怀特-艾森豪威尔总统执政期间构想的,是继将第一批美国人送入太空的单人水星计划之后的又一个三人航天器计划。1961年5月25日,约翰-肯尼迪总统在国会发表讲话,提出了 "让人类登陆月球并安全返回地球 "的20世纪60年代国家目标。这是美国第三个载人航天飞行计划,在此之前的双子座计划于1961年启动,旨在扩大航天飞行能力,为阿波罗计划提供支持。

1969年7月20日,宇航员尼尔-阿姆斯特朗(Neil Armstrong)和巴兹-奥尔德林(Buzz Aldrin)乘坐阿波罗登月舱(LM)着陆并在月球表面行走,迈克尔-柯林斯(Michael Collins)乘坐指令和服务舱(CSM)留在月球轨道上,三人于7月24日在太平洋安全着陆。随后的五次阿波罗任务也让宇航员登陆月球,最后一次是 1972 年 12 月的阿波罗 17 号。在这六次太空飞行中,共有 12 人登上月球。

阿波罗号从 1961 年运行到 1972 年,首次载人飞行是在 1968 年。1967 年,阿波罗 1 号遭遇重大挫折,在发射前的测试中,机舱起火导致全体机组人员生。在首次成功着陆后,仍有足够的飞行硬件用于九次后续着陆,并计划进行更长时间的月球地质和天体物理探索。由于预算削减,其中三次任务被迫取消。剩下的六次任务中有五次成功着陆,但阿波罗13号着陆时,由于氧气罐在飞往月球途中爆炸,导致CSM瘫痪而无法着陆。机组人员在返回途中将登月舱用作 "救生艇",才勉强安全返回地球。阿波罗计划使用土星系列火箭作为运载火箭,这些火箭还用于阿波罗应用计划,其中包括 1973-1974 年支持三次载人飞行任务的空间站 "天空实验室",以及 1975 年美国和苏联联合执行的低地球轨道飞行任务 "阿波罗-联盟试验项目"。

阿波罗计划为载人航天事业树立了几个重要的里程碑。在将载人飞行任务送出低地球轨道方面,阿波罗是独一无二的。阿波罗 8 号是第一艘绕另一个天体飞行的载人飞船,阿波罗 11 号是第一艘让人类在另一个天体着陆的载人飞船。

阿波罗计划总共向地球送回了 842 磅(382 千克)的月球岩石和土壤,极大地促进了人们对月球成分和地质历史的了解。该计划为美国国家航空航天局后来的载人航天能力奠定了基础,并为约翰逊航天中心和肯尼迪航天中心的建设提供了资金。阿波罗计划还推动了火箭和载人航天附带的许多技术领域的进步,包括航空电子设备、电信和计算机。

-摘自

https://en.wikipedia.org/wiki/Apollo\_program"""

助手:阿波罗计划是美国NASA实施的载人航天计划,旨在实现人类登月。自1968年至1972年,共有12人登月。该计划推动了技术进步,增进了对月球的了解。

用户:用两个段落概括用三引号分隔的文字。

"""阿波罗计划又称 "阿波罗工程",是美国国家航空航天局(NASA)实施的第三个载人航天计划。阿波罗计划最初是在1960年德怀特-艾森豪威尔总统执政期间构想的,是继将第一批美国人送入太空的单人水星计划之后的又一个三人航天器计划。1961年5月25日,约翰-肯尼迪总统在国会发表讲话,提出了 "让人类登陆月球并安全返回地球 "的20世纪60年代国家目标。这是美国第三个载人航天飞行计划,在此之前的双子座计划于1961年启动,旨在扩大航天飞行能力,为阿波罗计划提供支持。

1969年7月20日,宇航员尼尔-阿姆斯特朗(Neil Armstrong)和巴兹-奥尔德林(Buzz Aldrin)乘坐阿波罗登月舱(LM)着陆并在月球表面行走,迈克尔-柯林斯(Michael Collins)乘坐指令和服务舱(CSM)留在月球轨道上,三人于7月24日在太平洋安全着陆。随后的五次阿波罗任务也让宇航员登陆月球,最后一次是 1972 年 12 月的阿波罗 17 号。在这六次太空飞行中,共有 12 人登上月球。

阿波罗号从 1961 年运行到 1972 年,首次载人飞行是在 1968 年。1967 年,阿波罗 1 号遭遇重大挫折,在发射前的测试中,机舱起火导致全体机组人员生。在首次成功着陆后,仍有足够的飞行硬件用于九次后续着陆,并计划进行更长时间的月球地质和天体物理探索。由于预算削减,其中三次任务被迫取消。剩下的六次任务中有五次成功着陆,但阿波罗13号着陆时,由于氧气罐在飞往月球途中爆炸,导致CSM瘫痪而无法着陆。机组人员在返回途中将登月舱用作 "救生艇",才勉强安全返回地球。阿波罗计划使用土星系列火箭作为运载火箭,这些火箭还用于阿波罗应用计划,其中包括 1973-1974 年支持三次载人飞行任务的空间站 "天空实验室",以及 1975 年美国和苏联联合执行的低地球轨道飞行任务 "阿波罗-联盟试验项目"。

阿波罗计划为载人航天事业树立了几个重要的里程碑。在将载人飞行任务送出低地球轨道方面,阿波罗是独一无二的。阿波罗 8 号是第一艘绕另一个天体飞行的载人飞船,阿波罗 11 号是第一艘让人类在另一个天体着陆的载人飞船。

阿波罗计划总共向地球送回了 842 磅(382 千克)的月球岩石和土壤,极大地促进了人们对月球成分和地质历史的了解。该计划为美国国家航空航天局后来的载人航天能力奠定了基础,并为约翰逊航天中心和肯尼迪航天中心的建设提供了资金。阿波罗计划还推动了火箭和载人航天附带的许多技术领域的进步,包括航空电子设备、电信和计算机。

-摘自

https://en.wikipedia.org/wiki/Apollo\_program"""

助手:

阿波罗计划是美国国家航空航天局实施的第三个载人航天计划,旨在让人类登陆月球并安全返回地球。1969年7月20日,阿波罗11号宇航员成功登陆月球,共有12人登上月球。阿波罗计划使用土星系列火箭作为运载火箭,还包括支持载人飞行任务的空间站和美苏联合执行的低地球轨道飞行任务。

阿波罗计划为载人航天事业树立了重要里程碑,包括第一艘绕另一个天体飞行的载人飞船和第一艘让人类在另一个天体着陆的载人飞船。该计划还促进了人们对月球成分和地质历史的了解。

用户:用 3 个要点概括用三引号分隔的文本。

"""阿波罗计划又称 "阿波罗工程",是美国国家航空航天局(NASA)实施的第三个载人航天计划。阿波罗计划最初是在1960年德怀特-艾森豪威尔总统执政期间构想的,是继将第一批美国人送入太空的单人水星计划之后的又一个三人航天器计划。1961年5月25日,约翰-肯尼迪总统在国会发表讲话,提出了 "让人类登陆月球并安全返回地球 "的20世纪60年代国家目标。这是美国第三个载人航天飞行计划,在此之前的双子座计划于1961年启动,旨在扩大航天飞行能力,为阿波罗计划提供支持。

1969年7月20日,宇航员尼尔-阿姆斯特朗(Neil Armstrong)和巴兹-奥尔德林(Buzz Aldrin)乘坐阿波罗登月舱(LM)着陆并在月球表面行走,迈克尔-柯林斯(Michael Collins)乘坐指令和服务舱(CSM)留在月球轨道上,三人于7月24日在太平洋安全着陆。随后的五次阿波罗任务也让宇航员登陆月球,最后一次是 1972 年 12 月的阿波罗 17 号。在这六次太空飞行中,共有 12 人登上月球。

阿波罗号从 1961 年运行到 1972 年,首次载人飞行是在 1968 年。1967 年,阿波罗 1 号遭遇重大挫折,在发射前的测试中,机舱起火导致全体机组人员生。在首次成功着陆后,仍有足够的飞行硬件用于九次后续着陆,并计划进行更长时间的月球地质和天体物理探索。由于预算削减,其中三次任务被迫取消。剩下的六次任务中有五次成功着陆,但阿波罗13号着陆时,由于氧气罐在飞往月球途中爆炸,导致CSM瘫痪而无法着陆。机组人员在返回途中将登月舱用作 "救生艇",才勉强安全返回地球。阿波罗计划使用土星系列火箭作为运载火箭,这些火箭还用于阿波罗应用计划,其中包括 1973-1974 年支持三次载人飞行任务的空间站 "天空实验室",以及 1975 年美国和苏联联合执行的低地球轨道飞行任务 "阿波罗-联盟试验项目"。

阿波罗计划为载人航天事业树立了几个重要的里程碑。在将载人飞行任务送出低地球轨道方面,阿波罗是独一无二的。阿波罗 8 号是第一艘绕另一个天体飞行的载人飞船,阿波罗 11 号是第一艘让人类在另一个天体着陆的载人飞船。

阿波罗计划总共向地球送回了 842 磅(382 千克)的月球岩石和土壤,极大地促进了人们对月球成分和地质历史的了解。该计划为美国国家航空航天局后来的载人航天能力奠定了基础,并为约翰逊航天中心和肯尼迪航天中心的建设提供了资金。阿波罗计划还推动了火箭和载人航天附带的许多技术领域的进步,包括航空电子设备、电信和计算机。

-摘自

https://en.wikipedia.org/wiki/Apollo\_program"""

助手:

1. 阿波罗计划是美国国家航空航天局(NASA)实施的第三个载人航天计划,旨在实现20世纪60年代将人类送上月球并安全返回地球的国家目标

2. 该计划在1969年至1972年间成功使12名宇航员登陆月球,共进行了六次登月任务,其中阿波罗13号因氧气罐爆炸而未能着陆,但机组人员最终安全返回地球。

3. 阿波罗计划不仅实现了人类历史上的重大飞跃,还带回了842磅(382千克)的月球岩石和土壤样本,极大地推动了对月球成分和地质历史的了解,同时为后续的载人航天任务和技术进步奠定了基础。

二、提供参考文本

语言模型可以自信地编造虚假答案,尤其是在被问及深奥的话题或引用和 URL 时。就像一张笔记可以帮助学生在考试中取得更好的成绩一样,为这些模型提供参考文本可以帮助学生在回答问题时减少编造。

如果我们能为模型提供与当前查询相关的可信信息,那么我们就可以指示模型使用所提供的信息来成成答案。

系统:使用所提供的带三引号的文章回答问题。如果在文章中找不到答案,请写 "我找不到答案"。

用户:

"""伊芙·缪尔黑德领衔的英国女子冰壶队在2022年北京冬奥会决赛中击败了日本队,避免了英国代表团本届冬奥会没有金牌的尴尬。双方四年前在平昌冬奥会铜牌赛中也有过交锋,当时日本队取胜。

平昌冬奥会季军日本队在决赛开始就陷入被动,缪尔黑德、赖特、多德斯、达夫组成的英国队的发挥稳定且出色令日本队没有应对之策。

英国队和日本队此前已经在循环赛中有过交锋,当时英国队10-4大胜。占有心里有事的英国人本场比赛开局迅速进入状态取得领先,一直在比分上占优。前6局过后英国4-2领先。第7局比赛是转折点,日本队选手出现严重失误后导致英国队在本局比赛中斩获4分,8-2领先后比赛已经失去了悬念。

最终日本队坚持到第9局后认输,英国队10-3夺得冠军。昨天铜牌赛中击败瑞士队的瑞典收获季军。"""

问题:2022冬奥运女子冰壶队的冠军是谁?

助手:2022年冬奥会女子冰壶队的冠军是由伊芙·缪尔黑德领衔的英国队。

鉴于所有模型的上下文窗口都是有限的,我们需要某种方法来动态查找与所提问题相关的信息。有关如何实现高效知识检索的更多详情,请参阅此篇文章 "构建企业知识库问答系统除LLM外的核心技术-embeddings"。

如果输入内容中已经补充了相关知识,那么就可以直接要求模型通过引用所提供文档中的段落来为其答案添加引文。请注意,输出中的引用可以通过所提供文档中的字符串匹配进行编程验证。

系统:您将收到一份用三引号分隔的文件和一个问题。您的任务是仅使用所提供的文档回答问题,并引用用于回答问题文档段落。如果文件中不包含回答问题所需的信息,则只需写出:"信息不足"。如果提供了问题的答案,则必须注明引文。请使用以下格式引用相关段落({"引用":...})。

用户:"""蒸汽机是一种以蒸汽为工作流体进行机械功的热机。蒸汽机利用蒸汽压力产生的力在汽缸内来回推动活塞。这种推动力可以通过连杆和曲柄转化为做功的旋转力。蒸汽机 "一词通常只适用于上述往复式发动机,而不适用于蒸汽轮机。蒸汽机属于外燃机,工作流体与燃烧产物分离。用于分析这一过程的理想热力学循环称为朗肯循环。在一般用法中,蒸汽机一词既可以指完整的蒸汽设备(包括锅炉等),如铁路蒸汽机车和便携式发动机,也可以仅指活塞或涡轮机械,如梁式蒸汽机和固定式蒸汽机。

虽然早在公元一世纪,人们就已经知道蒸汽驱动的设备,并在 16 世纪记录了一些其他用途,但在 1606 年,Jerónimo de Ayanz y Beaumont 为他发明的第一台用于矿井排水的蒸汽动力水泵申请了专利。托马斯-萨弗里被认为是第一台商业使用的蒸汽动力设备的发明者,这是一台利用蒸汽压力直接作用于水的蒸汽泵。1712 年,托马斯-纽科门发明了第一台商业成功的发动机,可以向机器持续传输动力。1764 年,詹姆斯-瓦特(James Watt)进行了一项关键性的改进,将废蒸汽移到一个单独的容器中进行冷凝,从而大大提高了单位燃料消耗的功耗。到 19 世纪,固定式蒸汽机为工业革命中的工厂提供了动力。蒸汽机取代了桨式蒸汽船的船帆,蒸汽机车也在铁路上运行。

往复活塞式蒸汽机一直是最主要的动力来源,直到 20 世纪初,随着电动机和内燃机设计的进步,蒸汽机在商业应用中逐渐被取代。蒸汽轮机由于成本低、运行速度快、效率高,在发电领域取代了往复式发动机。

-摘自

https://en.wikipedia.org/wiki/Steam\_engine"""

问题:第一台商业成功的蒸汽机是什么?

助手:1712 年,托马斯-纽科门研制出第一台商业成功的发动机,可以为机器持续提供动力。{"引用":托马斯-纽科门于 1712 年开发出第一台商业成功的发动机,可为机器持续传输动力。}

三、将复杂任务拆分成更简单的子任务

软件工程中,将一个复杂的系统分解成一系列模块化组件是一种很好的做法,提交给语言模型的任务也是如此。复杂任务的错误率往往高于简单任务。此外,复杂任务通常可以重新定义为一个由较简单任务组成的工作流,在这个工作流中,前面任务的输出被用来构建后面任务的输入。

对于需要大量独立指令集来处理不同情况的任务,首先对查询类型进行分类,并利用该分类来确定需要哪些指令,可能会有所帮助。这可以通过定义固定类别和硬编码与处理特定类别任务相关的指令来实现。这一过程也可以递归应用,将任务分解为一系列阶段。这种方法的优势在于,每次查询只包含执行任务下一阶段所需的指令,与使用单次查询执行整个任务相比,错误率更低。这还可以降低成本,因为运行较大的提示需要花费更多的成本。

例如,假设客户服务应用程序可以将查询有效地分类如下:

系统:您将收到客户服务询问。将每个查询分为一级类别和二级类别。以 json 格式提供输出结果,并标明键:一级类别和二级类别。

一级类别:账单、技术支持、账户管理或一般查询。

计费二级类别:

- 退订或升级

- 添加付款方式

- 费用解释

- 对收费提出异议

技术支持二级分类

- 故障排除

- 设备兼容性

- 软件更新

帐户管理二级类别

- 密码重置

- 更新个人信息

- 关闭账户

- 账户安全

一般查询二级分类

- 产品信息

- 定价

- 反馈信息

- 与人工对话

用户:我需要让我的网络恢复正常。

助手:\`\`\`json

{

"primary": "Technical Support", --一级类别:技术支持

"secondary": "Troubleshooting" --二级类别:故障排除

}

\`\`\`

根据客户查询的分类,可以向模型提供一系列更具体的指令,以便其处理下一步工作。例如,假设客户需要 "故障排除 "方面的帮助。

系统:您将收到需要技术支持故障排除的客户服务查询。

通过以下方式帮助用户

- 要求用户检查所有连接路由器的电缆是否连接好。请注意,随着时间的推移,电缆松脱是很常见的。

- 如果所有电缆都已连接,但问题仍然存在,请询问用户使用的路由器型号。

- 现在,您要告诉他们如何重启设备:

-- 如果型号是 MTD-327J,建议他们按下红色按钮并保持 5 秒钟,然后等待 5 分钟再测试连接。

-- 如果型号是 MTD-327S,建议他们拔下插头并重新插入,然后等待 5 分钟再测试连接。

- 如果客户在重启设备并等待 5 分钟后问题仍然存在,则通过输出 {"请求 IT 支持"}将其连接到 IT 支持。

- 如果用户开始询问与此主题无关的问题,那么请确认他们是否愿意结束当前关于故障排除的聊天,并根据以下方案对他们的请求进行分类

将他们的询问分为一级类别和二级类别。以 json 格式提供输出,键为:一级类别和二级类别。

一级类别:账单、技术支持、账户管理或一般查询。

计费二级类别:

- 退订或升级

- 添加付款方式

- 费用解释

- 对收费提出异议

技术支持二级类别:

- 故障排除

- 设备兼容性

- 软件更新

账户管理二级类别

- 密码重置

- 更新个人信息

- 关闭账户

- 账户安全

一般查询二级类别

- 产品信息

- 定价

- 反馈信息

- 与人工对话

用户:我需要让我的网络恢复正常。

助手:为了帮助您恢复网络连接,您能否先检查一下连接路由器的所有电缆是否连接牢固?随着时间的推移,电缆松脱是很常见的。检查完毕后请告诉我。

请注意,当对话的状态发生变化时,模型被指示发出特殊的字符串来表示。这样,我们就能把系统变成一个状态机,由状态决定注入哪些指令。通过跟踪状态、与该状态相关的指令以及允许从该状态进行的状态转换,我们可以在用户体验周围设置防护栏,而这是结构化程度较低的方法难以实现的。

由于模型的上下文长度是固定的,因此用户和助手之间的对话(整个对话都包含在上下文窗口中)不可能无限期地进行下去。

解决这个问题有多种变通方法,其中之一就是总结对话中的前几轮对话。一旦输入的大小达到预定的阈值长度,就会触发对部分对话进行总结的查询,先前对话的总结可以作为系统信息的一部分。或者,也可以在整个对话过程中在后台异步总结之前的对话

另一种解决方案是动态选择与当前查询最相关的对话内容。请参阅此篇文章 "构建企业知识库问答系统除LLM外的核心技术-embeddings"。

由于模型的上下文长度是固定的,因此在单次查询中,它们不能用于总结一个长度超过上下文长度减去生成摘要长度的文本。

要概括一本书等超长文档,我们可以使用查询序列来概括文档的每个部分。章节摘要可以连接起来并进行总结,从而产生摘要的摘要。这个过程可以递归进行,直到整个文档汇总完毕。如果需要使用前面章节的信息来理解后面章节的内容,那么还有一个有用的技巧,那就是在总结书中任何给定内容的同时,对该内容之前的文本进行流水账式总结。

四、给模型思考时间

有时,如果我们明确指示模型在得出结论之前先从第一性原理进行推理,会得到更好的结果。例如,假设我们想要一个模型来评估学生数学问题的解答。最明显的方法是简单地问模型学生的解法是否正确。

系统:判断学生的解答是否正确。

用户:

问题陈述:我正在建造一个太阳能发电装置,需要有人帮我计算财务费用。

- 土地成本为 100 美元/平方英尺

- 我可以以每平方英尺 250 美元的价格购买太阳能电池板

- 我通过谈判签订了一份维护合同,每年的固定费用为 10 万美元,每平方英尺的额外费用为 10 美元。

运营第一年的总成本与平方英尺数的函数关系是什么?

学生的解答:设 x 为安装面积(平方英尺)。

1. 土地成本:100x

2. 太阳能电池板成本:250x

3. 维护成本:100,000 + 100x

总成本:100x + 250x + 100,000 + 100x = 450x + 100,000

助手:学生的解答是正确的。

但实际上学生的解并不正确!我们可以通过提示模型先生成自己的解决方案,让模型成功注意到这一点。

系统:首先自己想出解决问题的办法。然后将自己的解法与学生的解法进行比较,评估学生的解法是否正确。在自己完成问题之前,不要决定学生的解法是否正确。

用户:

问题陈述:我正在建造一个太阳能发电装置,需要有人帮我计算财务费用。

土地成本为 100 美元/平方英尺

我可以以每平方英尺 250 美元的价格购买太阳能电池板

我通过谈判签订了一份维护合同,每年的固定费用为 10 万美元,每平方英尺的额外费用为 10 美元。

运营第一年的总成本与平方英尺数的函数关系是什么?

学生的解答:设 x 为安装面积(平方英尺)。

土地成本:100x

太阳能电池板成本:250x

维护成本:100,000 + 100x

总成本:100x + 250x + 100,000 + 100x = 450x + 100,000

助手:

设 x 为安装面积(平方英尺)。

1. 土地成本:100x

2. 太阳能电池板成本:250x

3. 维护成本:100,000 + 10x

总成本:100x + 250x + 100,000 + 10x = 360x + 100,000

前面的策略表明,在回答具体问题之前,模型有时必须对问题进行详细推理。对于某些应用,模型得出最终答案的推理过程不宜与用户共享。例如,在辅导应用中,我们可能希望鼓励学生自己找出答案,但模型对学生解决方案的推理过程可能会向学生透露答案。

内心独白是一种可以用来缓解这种情况的策略。内部独白的原理是指示模型将本应对用户隐藏的部分输出转化为结构化格式,以便于解析。然后,在向用户展示输出结果之前,先对输出结果进行解析,只让部分输出结果可见。

系统:请按照以下步骤回答用户的问题。

第 1 步 - 首先自己想出解决问题的办法。不要依赖学生的解决方案,因为它可能是不正确的。在此步骤中,请将您的所有工作括在三引号 ("""") 中。

第 2 步 - 将您的解法与学生的解法进行比较,并评估学生的解法是否正确。将此步骤中的所有工作用三引号("""")括起来。

第 3 步 - 如果学生出错了,确定在不泄露答案的情况下,可以给学生什么提示。将这一步的所有工作用三引号("""")括起来。

第 4 步 - 如果学生犯了错误,则将上一步的提示提供给学生(不带三重引号)。不要写 "第 4 步--......",而是写 "提示:"。

用户:

问题陈述:一个盒子里有 4 个红球和 6 个蓝球。从盒子里不加替换地抽出两个球。抽出的球中一个是红球,另一个是蓝球的概率是多少?

学生解答:(4/10)*(6/9) = 24/90 = 4/15

助手:

步骤 1:要解决这个问题,我们需要计算在不替换的情况下,从一个装有 4 个红球和 6 个蓝球的盒子中以任意顺序抽出一个红球和一个蓝球的概率

有两种情况需要考虑:

先抽红球,再抽蓝球。

先抽蓝球,再抽红球。

先抽红球后抽蓝球的概率是:

(4/10) * (6/9)

先抽蓝球后抽红球的概率是:(6/10) * (4/9)

(6/10) * (4/9)

其中一个球是红球,另一个球是蓝球的总概率是这两个概率之和:

(4/10) * (6/9) + (6/10) * (4/9)

让我们来计算一下:

\= (24/90) + (24/90)

\= 48/90

\= 8/15

步骤 2:该学生的解法只计算了先抽红球后抽蓝球的概率,即 (4/10) * (6/9) = 24/90 = 4/15。然而,该学生没有考虑先抽蓝球后抽红球的情况。因此,该学生的解法是不正确的,因为它只考虑了两种可能情况中的一种。

步骤 3:给该学生的提示是考虑所有可能的顺序,即先抽出红球,后抽出蓝球,并记住这 些都是单独的事件,应将它们相加以求得总概率

提示:记住要考虑抽到一个红球和一个蓝球的所有可能情况。抽球的顺序对计算有什么影响?想一想,将这些不同事件的概率相加,得出总概率

另外,也可以通过一系列查询来实现这一目标,其中除最后一个查询外,其他查询的输出结果都不对最终用户公开。

首先,我们可以要求模型自己解决问题。由于这个初始查询不需要学生的解决方案,因此可以省略。这样做的另一个好处是,模型的解法不会因学生尝试的解法而产生偏差。

用户:一个盒子里有 4 个红球和 6 个蓝球。从盒子里不加替换地抽出两个球。其中一个是红球,另一个是蓝球的概率是多少?

助手:要想知道抽出的球中一个是红色,另一个是蓝色的概率,我们可以分两步来计算:

1. 先抽到红球再抽到蓝球的概率

2. 先抽到蓝球再抽到红球的概率

然后,我们将这些概率相加,因为任一事件都满足条件。

1. 先抽红球后抽蓝球:

先抽到红球的概率是 10 分之 4(因为有 4 个红球和 6 个蓝球,总共 10 个)。抽到红球后,盒子里还剩下 9 个球(3 个红球和 6 个蓝球)。所以,接下来抽到蓝球的概率是 9 中 6。

P({Red then Blue}) = (4/10)*(6/9) P({Red then Blue}) = (4/10)*(6/9)

P({Red then Blue}) = (4/10)*(2/3)

P({Red then Blue}) = 8/30

P({Red then Blue}) = 4/15

2. 先抽蓝球,再抽红球:

先抽到蓝球的概率是十分之六。抽到蓝球后,盒子里还剩下 9 个球(4 个红球和 5 个蓝球)。所以,接下来抽到红球的概率是九分之四。

P({Blue then Red}) = (6/10)*(4/9)

P({Blue then Red}) =(3/5)*(4/9)

P({Blue then Red}) = 12/45

P({Blue then Red}) = 4/15

把这些概率相加

P({One Red, One Blue}) = P(Red then Blue) + P(Blue then Red)]

P({One Red, One Blue}) = 4/15+4/15

P({One Red, One Blue}) = 8/15

因此,抽出的球中一个是红球,另一个是蓝球的概率是 8/15

接下来,我们可以让模型利用所有可用信息来评估学生解法的正确性。

系统:将您的解法与学生的解法进行比较,并评估学生的解法是否正确。

用户:

问题陈述:""一个盒子里有 4 个红球和 6 个蓝球。从盒子里不加替换地抽出两个球。抽出的球中一个是红球,另一个是蓝球的概率是多少?"""

您的解答:"""有两种可能的成功结果:要么我们先抽到一个红球,然后再抽到一个蓝球;要么我们先抽到一个蓝球,然后再抽到一个红球。我们先找出这两种结果的概率,然后把它们相加。

1) 先抽红球,后抽蓝球:先抽到红球的概率是 4/10,因为一共有 4 个红球和 10 个蓝球。抽到红球后,还剩下 3 个红球和 6 个蓝球,所以接下来抽到蓝球的概率是 6/9。所以这种结果的概率是 (4/10)*(6/9)。

2) 先抽蓝球,再抽红球:先抽到蓝球的概率是 6/10,因为一共有 6 个蓝球和 10 个红球。抽到蓝球后,还剩下 4 个红球和 5 个蓝球,所以接下来抽到红球的概率是 4/9。所以这个结果的概率是 (6/10)*(4/9)。

现在我们把这两种结果的概率相加:(4/10)*(6/9) + (6/10)*(4/9) = 24/90 + 24/90 = 48/90。这个分数简化为 8/15,所以抽到一个红球和一个蓝球的概率是 $oxed{rac{8}{15}}$。"""

学生的解答 """(4/10)*(6/9) = 24/90 = 4/15"""

助手:

学生的解法只计算了两个成功结果之一(先抽到红球再抽到蓝球)的概率,并就此打住。学生正确地计算出这个概率是 4/15,但是他们没有考虑到第二个成功结果(先抽到蓝球再抽到红球)。

你的解决方案正确地识别并计算了两种成功结果的概率,然后将它们相加,求出以任何顺序抽到一个红球和一个蓝球的总概率。正如你所计算的,正确的总概率是 8/15。

因此,该学生的解法是不正确的,因为它只考虑了两种可能成功结果中的一种,而没有提供在不考虑抽球顺序的情况下抽到一个红球和一个蓝球的总概率。

最后,我们可以让模型通过自己的分析,以一个乐于助人的导师的角色来构建一个回复。

系统:你是一名数学辅导员。如果学生出错了,以不透露答案的方式向学生提供提示。如果学生没有出错,只需给他们一个鼓励性的评价。

用户:

问题陈述:""一个盒子里有 4 个红球和 6 个蓝球。从盒子里不加替换地抽出两个球。抽出的球中一个是红球,另一个是蓝球的概率是多少?"""

您的解答:"""有两种可能的成功结果:要么我们先抽到一个红球,然后再抽到一个蓝球;要么我们先抽到一个蓝球,然后再抽到一个红球。我们先找出这两种结果的概率,然后把它们相加。

先抽红球,后抽蓝球:先抽到红球的概率是 4/10,因为一共有 4 个红球和 10 个蓝球。抽到红球后,还剩下 3 个红球和 6 个蓝球,所以接下来抽到蓝球的概率是 6/9。所以这种结果的概率是 (4/10)*(6/9)。

先抽蓝球,再抽红球:先抽到蓝球的概率是 6/10,因为一共有 6 个蓝球和 10 个红球。抽到蓝球后,还剩下 4 个红球和 5 个蓝球,所以接下来抽到红球的概率是 4/9。所以这个结果的概率是 (6/10)*(4/9)。

现在我们把这两种结果的概率相加:(4/10)*(6/9) + (6/10)*(4/9) = 24/90 + 24/90 = 48/90。这个分数简化为 8/15,所以抽到一个红球和一个蓝球的概率是8/15。"""

学生的解答 """(4/10)*(6/9) = 24/90 = 4/15"""

分析:""""学生的解法不正确。他们只计算了先抽到红球再抽到蓝球的概率,却没有考虑先抽到蓝球再抽到红球的另一种可能的成功结果。正如您所演示的,正确的解法是将两种成功结果的概率相加,得出概率为 8/15"""

助手:

您的分析是正确的。在计算涉及多个步骤或阶段的情景中的概率时,考虑所有可能的成功结果非常重要。请记住,在这类问题中,必须分别计算导致成功结果的每个不同事件序列,然后将这些概率相加,得出成功的总概率。继续努力,找出并纠正这类错误!

假设我们正在使用一个模型来列出与特定问题相关的信息源摘录。在列出每个摘录后,模型需要确定是否应该开始写另一个摘录,还是应该停止。如果源文件很大,模型很容易过早停止,无法列出所有相关摘录。在这种情况下,通常可以通过提示模型进行后续查询来找到之前遗漏的摘录,从而获得更好的性能。

系统:

您将收到一份用三引号分隔的文件。你的任务是选择与以下问题相关的摘录:"人工智能历史上发生了哪些重大范式转变"。

确保摘录包含解释这些内容所需的所有相关上下文,换句话说,不要摘录缺少重要上下文的小片段。提供如下 JSON 格式的输出:

{"摘录":"..."},

...

{"摘录t":"..."}]

用户:"""此处是非常长的一篇文章,将近一万字,我就不放了,大家理解Prompt的使用逻辑就好"""

助手:

[{"摘录":"人工智能作为一门学术学科创立于 1956 年,此后经历了数次乐观主义浪潮,[4][5] 随后是失望和资金损失(被称为 "人工智能寒冬"),[6][7] 接着是新方法、成功和重新获得资金。[5][8] 人工智能研究尝试并放弃了许多不同的方法,包括模拟大脑、模拟人类解决问题、形式逻辑、大型知识数据库和模仿动物行为、}

{"摘录":"到 20 世纪 50 年代,出现了两种关于如何实现机器智能的设想。一种被称为符号 AI 或 GOFAI,是利用计算机创建世界的符号表征和能够推理世界的系统。第二种观点被称为联结主义方法,试图通过学习实现智能。"}、

{"摘录":"20 世纪 80 年代中期,杰弗里-辛顿(Geoffrey Hinton)、戴维-鲁梅尔哈特(David Rumelhart)等人重拾对神经网络和 "连接主义 "的兴趣、

{"摘录":"人工智能在 20 世纪 90 年代末和 21 世纪初逐渐恢复了声誉,为具体问题找到了具体的解决方案"}、

{"摘录":"更快的计算机、算法的改进以及对海量数据的访问,使得机器学习和感知取得了进步;对数据要求极高的深度学习方法在 2012 年左右开始主导准确率基准"}、

{"摘录":"深度学习[128]在网络的输入和输出之间使用多层神经元。多层神经元可以从原始输入中逐步提取更高层次的特征。"}、

{"摘录":"深度学习通常将卷积神经网络用于多个或所有层、}

{"摘录":"在递归神经网络(RNN)中,信号将通过层传播不止一次;[133] 因此,RNN 是深度学习的一个例子。"}]

用户:

还有更多相关摘录吗?注意不要重复摘录。还要确保摘录内容包含解释这些内容所需的所有相关上下文--换句话说,不要摘录缺少重要上下文的小片段。

助手:[{"摘录":"20 世纪 80 年代初,人工智能研究专家系统[35] 的商业成功而重新焕发生机,专家系统是一种模拟人类专家知识分析能力的人工智能程序。到 1985 年,人工智能市场已超过 10 亿美元。与此同时,日本的第五代计算机项目激励美国和英国政府恢复了对学术研究的资助"}、

{"摘录":"许多研究人员开始怀疑符号方法能否模仿人类认知的所有过程,尤其是感知、机器人、学习和模式识别。一些研究人员开始研究用 "亚符号 "方法来解决特定的人工智能问题。"}、

{"摘录":"许多学术研究人员开始担心,人工智能不再追求创造多功能、全智能机器的最初目标。目前的研究大多涉及统计人工智能,而统计人工智能绝大多数用于解决特定问题,甚至包括深度学习等非常成功的技术。"}、

{"摘录":"这种担忧导致了人工通用智能(或称 "AGI/")这一子领域的出现,到 2010 年代,该领域已拥有数个资金雄厚的机构。"}]

五、使用外部工具

通过其他工具的输出来弥补模型的不足。例如,文本检索系统(有时称为 RAG 或检索增强生成)可以告诉模型相关文档的信息。像 OpenAI 的代码解释器(Code Interpreter)这样的代码执行引擎可以帮助模型进行数学运算和运行代码。如果某项任务可以通过工具而不是语言模型更可靠或更高效地完成,那么就将其卸载,以获得两者的最佳效果。

如果将外部信息源作为输入的一部分,模型可以利用外部信息源。这可以帮助模型生成更多信息和最新回复。例如,如果用户询问有关特定电影的问题,那么在模型输入中添加有关电影的高质量信息(如演员、导演等......)可能会很有用。嵌入可用于实现高效的知识检索,以便在运行时将相关信息动态添加到模型输入中。

文本嵌入是一个可以衡量文本字符串之间相关性的向量。相似或相关的字符串会比不相关的字符串靠得更近。这一事实以及快速向量搜索算法的存在,意味着嵌入可以用来实现高效的知识检索。特别是,文本语料库可以分割成若干块,每个块都可以嵌入和存储。然后,可以嵌入给定的查询,并执行矢量搜索,从语料库中找到与查询最相关的嵌入文本块(即在嵌入空间中最接近的文本块)。

嵌入的具体案例可参考此篇文章:<构建企业知识库问答系统除LLM外的核心技术-embeddings>

语言模型本身无法准确地进行算术运算或长时间计算。在需要的情况下,可以指示模型编写和运行代码,而不是自己进行计算。特别是,可以指示模型将需要运行的代码放入指定格式(如三重回车键)中。产生输出后,可以提取并运行代码。最后,如有必要,可将代码执行引擎(即 Python 解释器)的输出作为下一次查询的输入提供给模型。

系统:您可以通过用三层反斜线括起来来编写和执行 Python 代码,例如\`\`\`代码到这里\`\`\`。用它来执行计算。

用户:求下列多项式的所有实值根:3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10.

代码执行的另一个良好用例是调用外部应用程序接口。如果一个模型在正确使用 API 方面得到了指导,它就可以编写使用该 API 的代码。可以通过向模型提供说明如何使用 API 的文档和/或代码示例,指导模型如何使用 API。

系統:您可以用三层反斜线括起来编写和执行 Python 代码。还请注意,您可以访问以下模块,帮助用户向好友发送信息:

\`\`\`python

导入消息

message.write(to="Bob", message="Hey, want to meetup after work?")\`\`\`

用户:告诉丽丝,我10点在咖啡店等她。

助手:\`\`\`python

import message

message.write(to="Alice", message="I'll meet you at the coffee shop at 10.")

\`\`\`

警告:执行由模型生成的代码本身并不安全,因此任何应用程序都应采取预防措施。特别是需要一个沙盒代码执行环境,以限制不受信任的代码可能造成的危害。

聊天完成 API 允许在请求中传递函数描述列表。这样,模型就能根据提供的模式生成函数参数。生成的函数参数由 API 以 JSON 格式返回,可用于执行函数调用。函数调用提供的输出可以在下一个请求中反馈到模型中,以结束循环。这是使用 OpenAI 模型调用外部函数的推荐方式。要了解更多信息,请参阅我们的文本生成入门指南中的函数调用部分,以及 OpenAI Cookbook 中的更多函数调用示例。

六、系统的测试变化

如果能对性能进行测量,提高性能就会变得更容易。在某些情况下,对提示符的修改会在一些孤立的示例上取得更好的性能,但在更具代表性的示例集上却会导致整体性能下降。因此,为了确保修改对性能的净积极影响,可能有必要定义一个综合测试套件(也称为 "评估")。

有时,很难说清一项改变(如新指令或新设计)会使系统变好还是变坏。通过观察一些示例可能会发现哪个更好,但在样本量较小的情况下,很难区分是真正的改进还是随机的运气。也许改变有助于提高某些输入的性能,但会降低其他输入的性能。

评估程序(或 "evals")有助于优化系统设计。好的 evals 包括:

  1. 能代表真实世界的使用情况(或至少具有多样性)
  2. 包含许多测试案例,以提高统计能力(指导原则见下表)
  3. 易于自动化或重复

检测差异

95% 置信度所需的样本量

30%

10

10%

100

3%

1000

1%

10000

对输出结果的评估可以由计算机、人工或混合方式完成。计算机可以根据客观标准(例如只有一个正确答案的问题)以及一些主观或模糊标准自动进行评估,其中模型输出由其他模型查询进行评估。OpenAI Evals 是一个开源软件框架,提供创建自动 evals 的工具。(OpenAI Evals在github上的地址为
https://github.com/openai/evals

存在一系列被认为质量同样高的可能输出时(例如,对于答案较长的问题),基于模型的 evals 就会非常有用。哪些内容可以通过基于模型的评估进行实际评估,哪些内容需要人工评估,这两者之间的界限是模糊的,并且随着模型能力的提高而不断变化。

假设已知问题的正确答案应参考一组特定的已知事实。那么我们就可以使用模型查询来计算答案中包含了多少所需的事实。

例如,使用以下系统信息:

系统:您将收到用三引号分隔的文本,这些文本应该是问题的答案。请检查下列信息是否直接包含在答案中:

尼尔-阿姆斯特朗是第一个登上月球的人。

尼尔-阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。

针对每个要点,执行以下步骤:

1 - 重述要点。

2 - 提供答案中与该要点最接近的引文。

3 - 考虑不了解题目的人在阅读引文时能否直接推断出该观点。在下定决心之前,解释一下为什么或为什么不能。

4 - 如果 3 的答案为 "是",则写 "是",否则写 "否"。

最后,统计有多少个 "是 "的答案。以 {"count":<此处插入计数>}。

下面是一个输入示例,两点都满足:

<插入上述系统信息 >

用户:"""尼尔-阿姆斯特朗因成为第一个踏上月球的人类而闻名于世。这一历史性事件发生在 1969 年 7 月 21 日的阿波罗 11 号任务中。

助手:1 - 尼尔-阿姆斯特朗是第一个登上月球的人。

- 引用 "尼尔-阿姆斯特朗因是第一个踏上月球的人类而闻名于世"。

- 说明:引文直接指出尼尔-阿姆斯特朗是第一个登上月球的人:引文直接指出尼尔-阿姆斯特朗是第一个登上月球的人类。阅读这句话的人不需要任何其他信息就能明白尼尔-阿姆斯特朗是第一个登上月球的人。

- 答案:是

2 - 尼尔-阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。

- 引用:"这一历史性事件发生在 1969 年 7 月 21 日,阿波罗 11 号执行任务期间。

- 解释:引文直接提供了尼尔-阿姆斯特朗首次登上月球的日期。阅读这句话的人无需进一步解释就能明白事件发生的具体日期。

- 答案:是

{"计数":2}

下面是一个只满足一点的输入示例:

<插入上述系统信息 >

用户:"""尼尔-阿姆斯特朗创造了历史,他走下登月舱,成为在月球上行走的第一人"""

助手:1 - 尼尔-阿姆斯特朗是第一个登上月球的人。

- 引用 "尼尔-阿姆斯特朗走下登月舱,成为第一个在月球上行走的人,创造了历史"。

- 阅读引文的人可以直接推断出这一点,因为它明确指出尼尔-阿姆斯特朗是第一个在月球上行走的人。

- 是

2 - 尼尔-阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。

- 引用:答案中没有引用尼尔-阿姆斯特朗首次登上月球的日期。

- 阅读答案的人无法推断出 1969 年 7 月 21 日这一具体日期,因为答案中没有以任何方式提及或暗示这一日期。

- 否

{"计数":1}

下面是一个输入示例,没有一个输入是满意的:

<插入上述系统信息 >

用户:

1. 69年夏天,一次伟大的航行,阿波罗11号,像传奇之手一样大胆。

2.阿姆斯特朗迈出了一步,历史就此展开,他说 "一小步" 迈向新世界

助手:1. 尼尔-阿姆斯特朗是第一个登上月球的人。

- 引用:"阿姆斯特朗迈出一步,历史就此展开"。

- 解释:"阿姆斯特朗迈出了一步,历史展开了":引文暗示阿姆斯特朗迈出一步的举动具有重要的历史意义,表明这是第一次或独一无二的事件。但是,如果没有事先了解,人们可能无法直接推断出他是第一个登上月球的人,只能推断出他的行动很重要。

- 答案:否

2. 尼尔-阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。

- 引用:"69年夏天,一次伟大的航行"。

- 解释:"69 年夏天,一次伟大的航行":引文提供了年份 "69",并提到了 "航行",这可能与阿波罗 11 号任务有关。然而,它并没有直接说明 1969 年 7 月 21 日的确切日期,也没有明确将这次航行与阿姆斯特朗的月球漫步联系起来。

- 答案:否

{"计数":0}

这种基于模型的评估有许多可能的变体。考虑以下变体,它可以跟踪候选答案和黄金标准答案之间的重叠类型,还可以跟踪候选答案是否与黄金标准答案的任何部分相矛盾

系统:

使用以下步骤来回应用户输入。请在继续之前完整重述每个步骤,例如 "步骤 1:推理......"。

第 1 步:逐步说明所提交答案中的信息与专家答案相比是否存在以下情况:不相交、相等、子集、超集或重叠(即存在某些相交,但不是子集/超集)。

第 2 步:逐步推理提交的答案是否与专家答案的任何方面相矛盾

第 3 步:输出结构类似于 JSON 的对象:{"覆盖类型":"不相交 "或 "相等 "或 "子集 "或 "超集 "或 "重叠","矛盾":true 或 false}

下面是一个输入示例,答案不标准,但与专家的答案并不矛盾

<插入上述系统信息 >

问题 """尼尔-阿姆斯特朗最著名的事件是什么,发生在哪一天?假设为世界标准时间。"""

提交答案:"""他不是登上过月球吗?"""

专家回答:"""尼尔-阿姆斯特朗因第一个登上月球而闻名于世。这一历史性事件发生在 1969 年 7 月 21 日。"""

助手:第1步:逐步推理提交答案中的信息与专家答案中的信息相比,是否存在以下情况:不相交、相等、子集、超集或重叠(即存在一定的交集,但不是子集/超集)。

- 提交的答案指出尼尔-阿姆斯特朗因在月球上行走而闻名,这是专家答案中提供的部分信息。

- 专家答案提供了更多细节,包括事件的具体日期(1969 年 7 月 21 日),并明确指出阿姆斯特朗是第一个在月球上行走的人。

- 因此,提交的答案中的信息是专家答案中提供的信息的子集,因为它包含的细节较少,但在其提及的范围内是准确的。

第 2 步:逐步说明提交的答案是否与专家答复的任何方面相矛盾

- 提交的答复没有提供任何直接与专家答复相矛盾的信息。它只是缺乏专家答复中的具体内容和补充细节。

- 两个答案都同意尼尔-阿姆斯特朗因在月球上行走而闻名,专家答案通过提供日期和强调阿姆斯特朗作为第一个在月球上行走的人的地位,对此进行了扩展。

步第3步:输出结构类似的 JSON 对象:

{"覆盖类型":"子集", "矛盾": 否}

下面是一个输入示例,其答案与专家答案直接矛盾

<插入上述系统信息 >

问题 """尼尔-阿姆斯特朗最著名的事件是什么,发生在哪一天?假设为世界标准时间。"""

提交答案:"""1969 年 7 月 21 日,尼尔-阿姆斯特朗成为继巴兹-奥尔德林之后第二个登上月球的人。

专家回答:"""尼尔-阿姆斯特朗因第一个登上月球而闻名于世。这一历史性事件发生在 1969 年 7 月 21 日。"""

助手:步骤 1:逐步推理所提交答案中的信息与专家答案中的信息相比是否存在以下情况:不相交、相等、子集、超集或重叠(即存在一定的交集,但不是子集/超集)。

- 两个答案都指出尼尔-阿姆斯特朗最著名的事件是在月球上行走。

- 两个答案提供的事件发生日期相同:1969 年 7 月 21 日。

- 提交的答案错误地指出尼尔-阿姆斯特朗是第二个登上月球的人,而专家答案则正确地指出他是第一个。

- 鉴于两份答案讨论的事件和日期相同,但关于阿姆斯特朗登月顺序的细节不同,因此信息是重叠的。它们在事件和日期上有共同的信息,但在阿姆斯特朗取得成就的重要细节上存在差异。

第 2 步:逐步推理提交的答案是否与专家答案的任何方面相矛盾

- 提交的答案与专家关于尼尔-阿姆斯特朗登月顺序的答案相矛盾。提交的答案称他是第二个人,而专家答案正确地指出他是第一个。

- 这一矛盾直接影响了提交答案相对于专家答案的准确性。

第 3 步:输出结构类似的 JSON 对象:

{"覆盖类型":"重叠", "矛盾": 否}

下面是一个带有正确答案的输入示例,它也提供了一些不必要的细节:

<插入上述系统信息 >

问题 """尼尔-阿姆斯特朗最著名的事件是什么,发生在哪一天?假设为世界标准时间。"""

提交答案:"""世界标准时间 1969 年 7 月 21 日 02:56 左右,尼尔-阿姆斯特朗成为第一个踏上月球表面的人类,这标志着人类历史上的一个不朽成就"""

专家回答:"""尼尔-阿姆斯特朗因成为第一个登上月球的人而最为著名。这一历史性事件发生在 1969 年 7 月 21 日。"""

助手:第1步:逐步推理所提交答案中的信息与专家答案中的信息相比是否存在以下情况:不相交、相等、子集、超集或重叠(即存在一定的交集,但不是子集/超集)。

- 两个答案都指出尼尔-阿姆斯特朗最著名的事件是成为第一个登上月球的人。

- 两个答案提供的事件发生日期相同:1969 年 7 月 21 日。

- 提交的答案提供了关于该事件发生的确切时间(大约 02:56 UTC)的补充信息,并将其描述为 "人类历史上的不朽成就"。

- 由于提交的答案包含了专家答案中的所有信息以及更多细节,因此提交的答案是专家答案的超集。

第 2 步:逐步说明提交的答案是否与专家答案的任何方面相矛盾

- 关于尼尔-阿姆斯特朗最著名的事件或发生日期,提交的答案与专家答案之间没有矛盾

- 提交的答案中提供的附加详细信息与专家答案中提供的信息并不矛盾,而是对专家答案中提供的信息进行了详细说明。

第 3 步:输出结构类似的 JSON 对象:

{"覆盖类型":"超集", "矛盾":否}

参考文章:

https://platform.openai.com/docs/guides/prompt-engineering/six-strategies-for-getting-better-results