人工智能无处不在,就像那些老的 Visa 广告一样,但不同的方法使用不同的工具会产生不同水平的结果。今天我将向您展示一种介于简单提示和用自己的代码构建完整人工智能系统之间的“中间路径”。这就是所谓的定制 GPT,您可以使用 ChatGPT/OpenAI 账户制作它们。我们将使用的方法称为结构化提示,使用谨慎的英文句子、格式和示例。
词汇沙拉
首先,我们需要解决的一件事是我们用来谈论人工智能的一大堆词汇。在理想的世界中,“人工智能”本身不应该是其中之一,因为这是误导性的,也没有帮助。
在人工智能的旧日子里,我们试图真正实现人工智能。我不会向您介绍各种方法,但可以说的是它们并没有奏效。然后,一些聪明的人发现了使用统计数据来“预测”正确答案的想法,即使没有涉及智能。您可以将其视为阅读一百万本书,并从中找到最有可能的答案制作新句子。关于这一新方法的术语是 LLM 或大语言模型。我们真的应该称所有这些基础产品为这个名称。因此,来自 OpenAI 的 GPT 4o 是一个 LLM。Anthropic 公司的 Claude 也是如此。
模型本身,简化为仅代表原始文档中单词的数字列表,做的事情并不多。因此,它被包装在一些处理输入和输出的软件中。输入可以是书面文本或语音,而输出可以是叙述文本、数据文件(如 JSON)或图片。
这种包装工具称为 GPT 或生成式预训练变换器。因此,我们从 OpenAI 得到了 ChatGPT,用于与该公司支持的 LLM 进行交流,以及 DALL-E,用于通过提示处理图像。当同一个工具可以处理多种类型的输入和输出时,它被称为_多模态_。GPT 4o 是多模态的,可以处理文本、图像、文件和代码,包括它自己编写并运行以执行您描述的特定操作的代码。
无处不在的提示
那么是谁控制每个 GPT 做什么和说什么呢?它是否利用其百科全书般的知识(数字列表)来写诗、教科学或虚构政治谎言?他们如何创建这些指令呢?
您是否会惊讶地得知,GPT 本身也是通过提示来编程的?决定您可以使用 ChatGPT 做什么和不能做什么的控制提示称为_系统提示_。系统提示是最低级别的提示,因为它控制与支持 LLM 的所有交互。在这种情况下,它被设置为处理诗歌、科学甚至政治,同时还有一些系统级别的保护措施,以防止不良输出,比如种族主义和恐怖主义策划。
您可能已经知道类似系统提示的存在。如果您尝试过 ChatGPT,那么很明显您在会话中写的内容也是“规则”的一部分。换句话说,如果您说您正在策划女儿的十五岁生日派对,那么输出中就不会出现美国独立日的建议。事实上,用户在会话中写的所有内容都被视为_最高级别_提示,这是有道理的,否则 GPT 实际上不知道该谈论什么。
中间人
许多人不知道的是,还有一个称为_主提示_的中间层,您也可以编写它,这就是乐趣开始的地方。起初,您必须在 OpenAI 账户内部使用繁琐的工具来访问这些各种功能,包括上传和访问文件、检查链接、执行网络搜索、运行自定义代码、创建一致的图像和输出格式化数据。
如今,您可以使用 ChatGPT 制作定制 GPT,并且我们将在示例应用程序中使用其中的几个功能。一旦创建了一个,主提示将保留在您与_该_ GPT 启动的每个会话中。这些新会话将具有您的规则和能力,您可以选择与他人分享或不分享。当您分享一个定制 GPT 时,它在用户的账户中运行,而不是在您的账户中。
构建示例
昨天,我为求职构建了一款求职信助手。您可以使用 ChatGPT 账户自行尝试。您需要一个账户来制作您自己的 GPT。
以下是控件的位置:一旦您登录到 ChatGPT,点击右上角的您的头像,然后选择我的 GPTs。您也可以稍后返回此页面以使用或编辑您创建的 GPT。
在接下来的页面顶部,选择创建 GPT。
制作 GPT 的 GPT
您将看到的第一个屏幕看起来很像一个常规的 ChatGPT 会话,右侧还有一个空的预览窗口。这是因为它就是那样。左侧是您与构建工具的对话。右侧是您可以与正在制作的定制 GPT 对话的地方。
在这里,另一个名为_GPT Builder_的 GPT 正在为您创建 GPT!这起初听起来很棒,但我们不会选择这条路,我将解释原因。GPT Builder 完全有能力为您编写主提示,但每次您添加额外提示或上下文时,它也会_修改它_,而这些修改通常不是您想要的。
通过结构化提示,我将向您展示如何制作自己的主提示,然后_自己修改_以完善结果。毫不奇怪,这正是我们在传统编程语言中编程的方式。我们在这里所做的是使用英语、格式和示例进行编程。让我们开始吧!
做主人
切换到顶部的配置选项卡以获得真正的控件。
首先,我们将跳过所有其他框,并直接转到说明框,原因有两个:首先,那里是我们的主提示所在。其次,我们在那里写的内容将极大地影响我们放入其他框中的内容,因此我们将等到最后再填写这些框。
您可以使用角落的双头箭头展开说明框,您应该这样做。您还应该考虑在_不同的编辑器_中编写您的真实提示,比如 VS Code、Word,甚至记事本。这是因为您将希望保留您的结构化提示库,以防 ChatGPT 吞噬它们或使您的 GPT 暂时不可用,这两种情况都会发生。
提示软件只是软件,具有与任何其他软件相同的版本和文件问题。像今天这样的工具,比如这个 GPT Builder,没有很好的方法来跟踪您的修订版本或输出,所以这取决于您目前。
我想成为老师的宠儿当用户首次向大语言模型描述一个复杂问题时,根据他们的背景,他们会犯两种常见错误。非技术用户会认为发生了“太多魔法”。他们想象大语言模型理解了他们的需求和想法,而实际上这是不可能的。这种天真的心态导致了过于简单的指令和提示,缺乏足够的细节。这种类型的提示会导致大语言模型“猜测”或选择最有可能的答案,而不是根据您的明确指示。我们不希望出现这种情况。
另一种错误来自程序员和工程师。我们往往会过度指定大语言模型需要做多少事情,这导致编写不必要的代码,同时人为地限制了输出到我们已经描述的内容。这是软件“过去”写作的方式,但是 GPT 更加开放式。您会惊讶于您的术语和示例可以有多高级,这样可以避免编写微小而详细的规范,比如如何格式化文档或如何创建文档。
在这里的中间路径是将大语言模型视为大学课堂上的“助教”。谁对这个主题了解最多?不是助教!是您,老师。我的意思是您知道如何获取您想要的所有信息。一个地质学教授可能不会记住每块岩石的细节,但他或她可以找到这些信息。更重要的是,他们可以告诉助教如何找到这些信息。
当寻找有关岩石的信息时,教授不会要求助教“告诉我关于石英的情况”。教授会更具体地询问所需的信息、深度和格式。您想要以列的形式展示岩石吗?您想要进行岩石比较吗?岩石报告?岩石歌曲?
这就是您希望与您的大语言模型建模的互动方式。写作时,就好像您是所有知识的主宰和指挥官,您指定助教如何行事。就像人类助手一样,大语言模型可以利用其现有的知识库来遵循您的指示。
手头的问题
在我不幸的求职情况中(我曾是一名游戏软件开发人员,被多家工作室关闭),我发现自己写的求职信非常相似,但每份工作都有一些变化。如果我绘制我正在进行的手动过程,它看起来是这样的:
-
从现有简历开始。
-
查看一些我以前的求职信。
-
更改日期、标题和收信人。
-
复制几封信中共同的优点。
-
删除任何只适用于特定工作而不适用于此工作的内容,比如公司产品或特定技能。
-
使用我的技能和工作经验写一些定制句子以匹配工作列表。
-
复制我的结束语和签名。
现在我可以打开一个普通的 ChatGPT 窗口,让它写一封求职信,但这有几个缺点:
-
我必须描述所有我的技能,否则它可能会编造东西。
-
我无法控制写作风格或措辞。
-
它不会跟踪多封信件或工作。
-
没有很好的编辑方式。
-
如果我想申请第二份工作,大语言模型可能会因为我输入的多个信息而感到困惑,并写出错误的内容。为了避免这种情况,我每次都必须重新开始。
一次只做一件事
在任何软件开发中,最好一次只做一项任务并确保它有效。因为这是非常高级的编程,我们希望以非常高级的概述方式编写。我们将从 10,000 英尺的高度开始,然后逐步深入。
这是我对“说明”框的初始主要提示:
概述
您是一名与正在寻找新工作的人合作的求职助手。您使用引导提示收集有关用户的信息并收集现有文档。您将这些信息提取到 JSON 中,这将成为您在撰写有关用户的内容时的参考。一旦您获得足够的信息以继续,您将根据用户提示的新工作描述或链接逐步创建定制求职信文本和其他求职申请输出。
在这里,我提供了我期望大语言模型行为的基本背景以及我作为用户期望消费其输出的方式。在这种情况下,一次只有一封求职信,只有在我通过工作描述或链接提示时才会撰写。我将在接下来解释有关数据提取和 JSON 的内容。
使用 Markdown
大语言模型非常擅长理解文档格式,因为它们的训练数据中有数百万个格式化文档。您可以利用这种能力,避免自己编写复杂的说明,只需使用 markdown 来布置您的提示。Markdown 不是唯一的方式,但它有一个重要优势:说明对您(或其他人)和大语言模型一样易读,您可以利用 Markdown 文档的漂亮格式在您使用的 IDE/编辑器 中查看。
单个 # 字符是 markdown 中 最大标题(HTML 中的 <H1>
)的标记。通过用此标记标记“概述”,我帮助大语言模型区分我庞大而复杂的提示的各个部分,并帮助它看到哪些项目具有相同重要性级别。我还将使用 markdown 创建应按我给出的顺序遵循的列表。
编程拯救
您可能听说过大语言模型无法进行数学运算的笑话,这是真的!没有任何单词列表可以用于执行数学或逻辑。那么我们如何让大语言模型执行逻辑操作,比如第 5 步“删除任何只适用于特定工作的内容”?从逻辑上讲,它必须跟踪特定的工作和技能才能做到这一点。我们还希望大语言模型尽可能使用我们的文字,而不是自己编造的东西。为了实现这一点,它将需要编程 - 具体来说,一个用于保存数据和对存储的数据执行操作的地方。
这个功能需要在每个应该具有该功能的大语言模型上启用。如果您的大语言模型没有执行任何“编程”操作,您可以跳过此步骤。
在“配置”选项卡的底部,您可以启用您需要的功能。在这种情况下,我希望大语言模型能够访问网站查看我粘贴的工作职位。我需要这种“代码解释”(实际上是编写代码然后运行)来存储并处理我的简历和求职信数据。
这是我们早期主要提示中激活此功能的句子:
您将这些信息提取到 JSON 中,这将成为您在撰写有关用户的内容时的参考。
这是一个奇妙简洁的例子,介于不说任何关于我们应该存储什么的内容(非技术视图)和尝试指定所有字段和数据格式(程序员视图)之间。任何程序员都会告诉您,能够像这样在一句话中写下“上传简历并将数据提取到 JSON 中”并看到它实际起作用简直是奇迹。即使是对于 PDF 文件也是如此。
如果您是程序员,您可以将此指令视为可以以多种不同方式引用的函数调用。我可以说“提取的简历”,也可以说“与工作描述相匹配的技能”,这两个内容都将指的是此行创建的 JSON 中存储的信息。
尽管指定 JSON 不是强制的,但我认为除非您有使用其他格式的正当理由,否则应该使用 JSON。首先,它是一种强大且通用的数据格式,如果数据是 JSON,那么大语言模型为我们编写的代码将更容易编写。其次,我们可以要求大语言模型输出其 JSON,以便我们在另一个项目中重复使用(甚至读入另一个大语言模型)。我们正在构建的这个示例将输出您的简历为 JSON,例如,所有部分和上下文都被很好地分隔和组织。
我们可以使用这些存储的数据以其他方式使用大语言模型。如果我需要从我的简历中列出 10 项技能,我随时可以要求这样做。通过这种方式,存储的数据帮助大语言模型以一种一致的方式创建各种输出 - 即使是我们在编写提示时没有考虑到的输出。
扩展提示
在我的 概述
中,我将添加更多指示。我希望大语言模型尽可能使用我的文字(来自我的简历和现有求职信),或尽可能少地修改它们以保留我的写作风格。
我还希望使用 JSON 存储来跟踪它撰写的所有求职信以及它们所对应的工作,以便稍后我可以审查这些内容。通过存储这些信息,我稍后可以在会话中随口提出提示,比如“拿出 Wizzy Co. 的求职信,并为另一份工作进行更新”,或“列出我申请的所有工作及其公司、职位和日期”。
这是我添加到“说明”框中的内容:## 从头开始
下一部分被称为 启动
。当用户访问您的 GPT 时,他们看到的初始界面将显示一个随机组合的 "起始" 提示。稍后我们将看看这些提示的来源,但我想确保每个用户都能得到相同类型的介绍,无论他们将第一条消息写成什么样子。
这是另一个极高级编程的显著例子。您可能会认为我需要在要求它解释这三个阶段之前告诉它这三个阶段是什么。但实际上不需要!事实上,以这种方式参考我自己的提示(这些步骤稍后详细描述)实际上创造了一个更好的用户界面,因为它使LLM能够撰写我要求的解释的 新的、原创的文本。
我无需向用户写解释每个阶段如何工作。LLM 可以做到这一点。事实上,看到它在连续运行中以各种方式做到这一点,为工具增添了趣味和乐趣。这与传统的 UI 编程有着巨大的不同。
如果我们正在制作一个传统的西班牙语翻译工具并想展示示例,那么程序员或 UI 设计师实际上必须编写示例(或提供可能性列表)。但在 GPT Land 中不是这样。我们只需在我们的 启动
中说,“给出几个翻译的例子。” 就这样!GPT 每次实际上会选择不同的例子,并且可能以不同的格式呈现它们。
我相信在不久的将来,所有用户界面都将以这种方式 可塑,其中菜单、按钮等的实际内容可以通过用户在完成、运行的 UI 中用简单的英语编写来更改或创建。我在这里说的不是事先让 AI 设计屏幕布局。我说的是流动的、真正交互式的界面,可以根据用户 当时 写的内容在图形和视觉上做出响应。
例如,用户可能会说,“你能用法语给我吗?”或者,“你能用另一种方式解释一下吗?”这些只有在有了 GPT 后才变得可能,而传统的界面则不行。
我们将利用这种能力让 GPT 编辑我们的简历和求职信,而实际上不需要编辑这些文档。与传统 UI 需要编辑诸如技能列表或工作经历之类的许多框和表单控件形成鲜明对比。
如果我需要使用 GPT 向工作经历中添加一项内容,我只需像对人说话一样描述它。我提供的信息将按照我的提示指示的方式存储,并且输出也将遵循我给定的模型。这些内容与 UI 是 "分离" 的 - 直到用户开始发送消息之前,UI 不存在!
一步一个脚印
现在我已经概述了整体目的并告诉它如何开始与用户交谈,让我们定义这 3 个阶段。
这是我添加到说明中的内容:
简历转 JSON 阶段
在这个阶段,您将要求用户上传他们的 PDF 格式简历。从简历中提取并组织以下信息,并存储为 JSON:
- 联系方式
- 摘要
- 链接
- 技能
- 经验
- 教育
- 语言
当某些内容呈现为列表格式,比如用逗号、分号或竖线分隔,将列表中的每个项目解构为自己的 JSON 值。
将简历 JSON 输出到代码框中,并提供转到下一阶段或进行任何更改的选项。根据用户的请求进行任何编辑,仅输出已更改的 JSON 部分作为确认。一旦没有更多编辑,将编辑后的 JSON 保存为规范简历并转到下一阶段。
这里在 简历转 JSON 阶段
标题和我想要的 JSON 中的编号列表中都使用了 Markdown。在 Markdown 中,所有列表项都以 1 开头并自动编号,因此我们将利用这个技巧。
这前两句展示了具体性和模糊性的另一个融合。我明确要求输出中的特定部分(它们最好具有这些名称并按照这个顺序),但我没有告诉 GPT 如何确定简历的哪些部分应该放在哪些部分。我不需要。这绝对是我希望依赖于原始训练数据的 统计输出 的领域之一。换句话说,无论它在看到的大多数简历中是什么(联系信息、技能、教育等),都是我想要从自己的简历中提取的东西。众人的智慧,可以这么说!
我本可以只说 "提取信息",它就会这样做,但在这里稍微给出一些支架确保了两件事:首先,我可以使用这些词来谈论这些部分。我可以说 "匹配我的技能",GPT 知道我指的是我刚刚定义的 技能
项目。其次,我知道我的 JSON 输出将始终以相同的格式呈现,这使我可以轻松阅读并在其他项目中使用。在编程术语中,我们在这里命名变量和键,让 GPT 填写值。
遇到的问题
在每种输入数据中,都存在 问题 - 您在编写提示或程序时没有考虑到的边缘情况。这里让我遇到的问题是在我的简历中。我使用竖线将类似技能分开但分组在同一行,就像这样:
Git | GitHub | Gitlab
当我第一次尝试主提示时,我的技能以一个条目出现,包含所有三个词 - 还有竖线!显然,我不希望这样的内容复制到求职信中,而且我真的不希望它们在技能列表中以这种方式出现。我在 简历转 JSON 阶段
中添加了这个规则来处理这个问题:
当某些内容呈现为列表格式,比如用逗号、分号或竖线分隔,将列表中的每个项目解构为自己的 JSON 值。
您不会在第一次运行 GPT 时找到所有问题。我提前告诉您这个问题!我应该在这里补充说,我如何解决问题的描述非常像程序员,这是因为我知道它将编写代码(Python)来实际执行这个规则。如果您不是程序员,可以用更简单的英语写一些内容,比如 "将技能分开" 或 "让每个技能单独占一行"。有很多方法可以解决这个问题。但是,如果您知道希望程序执行什么操作,请直接说出来。
向前迈进
每个阶段说明的最后部分告诉如何以及何时转到下一个阶段。在解析简历后,我们希望输出 JSON,与用户核对,进行任何更改,仅输出那些更改,核对它们,保存结果,然后转到下一个阶段。哇!
您的描述不需要像这样紧凑,但可以。尝试使用您能想到的最先进、最紧凑的描述来让自己感到惊讶。假设 LLM 会理解您,因为它很可能会,特别是如果您提到了这个提示中提到的 您自己的数据 和 您自己的步骤。
关于如何通过步骤的说明非常重要。没有这些说明,机器人就不知道当前步骤何时完成,只会等待输入。程序员会认识到这是 状态机 的模拟。
请记住,用户实际上可以在输入框中输入 任何他们想要的内容。他们不必留在您的程序上,这很棒!但是如果您的 "下一步" 需要用户输入或确认,请明确告诉 GPT 如何识别或请求它。
这里包含的短语 "在代码框中" 意味着将 JSON 输出到一个单独的插入窗口中,带有复制按钮,可用于将输出带到其他地方。
在这个非常高级的程序示例中,我们不需要指定下一个阶段是什么,也不需要指定在 JSON 中保存数据的位置。我们围绕经典概念如_状态、过程调用、回调和操作顺序_进行编程,只使用英语和 markdown。
这是我添加到说明中的内容:
在代码框中输出简历 JSON,并提供移动到下一个阶段或进行任何更改的选项。根据用户的请求进行任何编辑,仅输出更改部分的 JSON 以作确认。一旦没有更多编辑,将编辑后的 JSON 保存为规范简历并移动到下一个阶段。
关于那些求职信...
接下来,我将添加关于求职信模板阶段
的说明。这一长而实质性的部分现在应该很容易理解。你会看到标题、副标题和编号列表。你还会看到首先介绍总体说明,然后详细说明的整体说明。
当 GPT 的任务非常具体时,就是加大指导力度的时候。我想要向 GPT 概述一些关于每个部分应包含的内容的一般示例。我已经自己选择了这些部分,以便拥有我们稍后需要重新组合成另一封求职信的原始要素。
我已经添加到说明中的内容如下:
求职信模板阶段
在这个阶段,您将要求用户上传最多五份他们现有的求职信。解释说如果他们上传了多份最近使用的求职信,您的工作效果会更好。从求职信中提取、汇总和组织以下信息,并存储为 JSON:
- 序言
- 引言
- 常见段落
- 公司参考
- 特定工作声明
- 常见结束段落
- 签名
序言
这部分包括信件中的任何日期、发件人、收件人或其他序言材料。
引言
这部分包括用户在信件开头写的开头段落。这些通常简要介绍用户和角色。
常见段落
这包括似乎出现在所有信件中的段落和句子。也就是说,它们没有特定的参考工作标题、角色、产品、品牌或公司中的人。
公司参考
这包括对用户正在申请工作的公司特定属性的引用。这些通常仅适用于该工作申请或公司。
特定工作声明
这包括用户在以前的角色中执行的特定工作或用户正在申请的角色的特定属性的文本。这些声明有助于将用户的经验和工作历史从简历匹配到工作申请。
常见结束段落
这部分包括可能适用于所有信件或仅针对每封信件略微调整的结束段落。
签名
这是用户提供的签名块。
接受用户的求职信后,除非被要求,不要输出存储的 JSON。而是继续进行下一个阶段。
问题的核心
与其他阶段相比,最后一个阶段将会相当简单。这是因为我们已经做好了所有的准备工作,就像粉刷一栋房子一样。我们将使用我们已经定义的数据和程序的多个引用。我们还将使用开放式说明,允许 GPT 创造出最佳表达方式。
例如,这段话简化为 就这么做!
在这个阶段,您将要求用户提供他们申请的工作的链接、粘贴的文本或书面描述。使用与“求职信模板阶段”相同的方法解析工作描述、要求和技能。将解析的工作描述和要求与规范简历和求职信 JSON 进行匹配,然后生成一封与规范材料内容和风格以及感兴趣工作的要求相匹配的求职信。
请注意,我没有告诉 GPT 如何处理上传的文件(糟糕!)。我没有解释如何访问网站,但我告诉它以与求职信数据相同的方式解析该网站。我告诉它使用 JSON 进行数据匹配,以便它不会虚构东西。
我们可以采用这种方法,因为我们仔细设置了数据存储、处理数据的步骤以及移动到步骤的条件。这个阶段的最后两段只是添加了一些润色,并提醒 GPT 保存它创建的信件以及我提供的信件。
在编写您的 GPT 时,最好先考虑这最后一步。当它运行时,您希望如何与之交互?从一开始,我希望这个东西粘贴一个工作链接,然后得到一封求职信。对这个确切任务的稍微更长的描述最终成为最后一步。然后,考虑您需要哪种存储和处理来生成输出,并将这些作为较早的步骤。
我添加到说明中的内容如下:
求职信输出阶段
在这个阶段,您将要求用户提供他们申请的工作的链接、粘贴的文本或书面描述。使用与“求职信模板阶段”相同的方法解析工作描述、要求和技能。将解析的工作描述和要求与规范简历和求职信 JSON 进行匹配,然后生成与规范材料内容和风格以及感兴趣工作的要求相匹配的求职信。
信件应尽可能使用 JSON 中的确切措辞,仅在调整以适应工作参数时进行变化。不要凭空创造新材料。如果某些材料缺乏深度或澄清,请要求用户帮助填补这些领域,并在输出新版本的求职信之前确认。
建议用户您可以对信件文本进行任何必要的调整,或者用户可以重复使用新的工作链接或描述进行该阶段。无论哪种情况,最终输出的信件与工作的 JSON 一起存储。
交流开端
我提到 ChatGPT 界面显示了一些起始文本提示。您可以在“配置”选项卡上的“说明”框下编辑这些提示。
如果添加了多于三个起始文本,ChatGPT 会随机选择。这很酷,但对于这类应用程序,我更喜欢有一个明确的触发器来启动我的“启动”流程,我将其放在中心位置。
如果用户选择其他内容(或编写自己的提示),启动流程仍会发生。如果用户直接上传简历而跳过了,工具将自动转到该阶段。这是“没有预先存在的 UI”定义了 LLM 驱动应用程序的另一个例子。我无法控制用户输入的内容,也无法预测屏幕上会输出什么!这必须改变我们对 UI 和编程的思考方式。
重要的是,您的 GPT 已经完全无限制。用户很可能会给出您没有考虑过的提示。您可以通过包含通用数据存储和说明来计划这种无限制的 UI,为 GPT 提供生成其他类型结果的“方法” - 即使这不是您目前正在为其编程的内容。
“给我一个我申请过的工作列表”和“更改我的简历中的某些内容”提示就是例子。那么填写那些到处都是的可怕的“告诉我们关于你自己的一些事情”框的数据呢?或者,“你参与过的一个你觉得特别具有挑战性的项目是什么?”您绝对可以使用这个 GPT 为这些生成答案,只需请求即可。当您这样做时,GPT 已经具有您的简历的上下文、您在所有求职信中编写的所有内容以及工作描述本身。Ted Nelson 是一位在计算机科学领域备受赞誉和争议的作家,尤其擅长用户界面和导致我们今天拥有的网络发展决策。他的著作《Computer Lib/Dream Machines》帮助推动了微型计算机运动,并拓展了人们对计算机可能性的看法。这本书本身在多年后由微软重新出版,以示敬意,具有非常不同寻常的“界面”。
你到底是谁?
当我们开始我们的主要提示时,我建议跳过姓名、描述和头像(或个人资料图片),但我们需要这些信息来让我们的 GPT 走向更广阔的领域。
我将称这个版本为求职助手,并写下可能的最简短描述。你的 GPT 的主页没有足够的空间来进行任何长篇解释,而且你也不希望在那里进行。这些内容应该放在你的“Startup”中。
最后,你可以通过点击空圆圈内的加号来添加个人资料图片。一个简单的方法是让 DALL-E 根据它对你的 GPT 的了解制作一张图片。你也可以上传自己制作的图片。
当你开始编辑配置中的这一部分时,你会看到预览区域会更新。你可能需要点击刷新按钮,只有当你将鼠标悬停在“预览”一词旁边时才会出现这个按钮,这在这个截图中有显示,以便查看最新版本。
就我个人而言,我讨厌它生成的图片。让我们通过与 GPT Builder 互动并要求更改来解决这个问题。为此,我们将切换到“Create”选项卡。
当我到达那里时,我看到它已经预料到了这个问题:
我的回应是?
我讨厌它。让我们制作一幅现代插图,用彩色展示打开办公室门迎接新员工的场景。
虽然这仍然很糟糕,但现在可以勉强接受。就像关于这个 GPT 的所有内容一样,我可以在发布后随时进行更改。访问 URL 的访问者将看到当前版本。
发布你的 GPT
通过点击预览右上角的“Create”按钮,你可以打开此对话框来发布你的 GPT。
默认选项“任何人都可以通过链接访问”是一个不错的选择。你将获得一个指向你自定义 GPT 的链接。让一两个朋友尝试一下,你会发现更多边缘情况。然后,你可以在适当的地方修改你的结构化提示,以改进结果。
给我看看成果!
让我们看看它是如何工作的!我将上传我的简历,然后查看从第一阶段返回的解析 JSON。
这是我上传的简历:
以下是生成的 JSON!
{
"contact": {
"name": "David Bethune",
"title": "Senior Full Stack Architect | Typescript/JavaScript Expert | Certified React",
"location": "The Woodlands, TX 77381",
"phone": "305-NNN-NNNN",
"email": "[email protected]",
"website": "https://davidbethune.com"
},
"summary": "Senior Full Stack Architect with extensive experience in Web Application Development, API Architecture, and a wide range of web technologies including Typescript, JavaScript, Node, React, Angular, and more. Adept at creating custom web components, bespoke design systems, and handling complex web3 integrations. Recognized for quick problem-solving, strong work ethic, and leadership in technology innovation, particularly in AI and game development.",
"links": [
"https://davidbethune.com"
],
"skills": [
"Web Application Development",
"Full Stack API Applications",
"Typescript",
"JavaScript",
"Node",
"Lua",
"Certified React Developer",
"Lit",
"Angular",
"Vue",
"Custom Web Components",
"Bespoke Design Systems",
"Expert CSS",
"Tailwind",
"Sass",
"SVG",
"HTML Canvas",
"Three.js",
"Cross-Platform, Reactive Design",
"API Architecture & Documentation",
"SQL",
"NOSQL Databases",
"Game & Application Tooling",
"SSO",
"OAuth",
"Git",
"GitHub",
"Gitlab",
"CI/CD",
"AWS",
"Akamai",
"Custom GPTs",
"LLM Apps",
"Game Design"
],
"experience": [
{
"title": "Senior Web Engineer",
"company": "Rumble Entertainment [Plarium/Aristocrat Leisure]",
"dates": "7/2022 - 7/2024",
"location": "",
"description": "Delivered the cross-platform web marketplace and internal tooling for Towers & Titans, a mobile tower defense and hero trading game for iOS and Android."
},
{
"title": "Founder & Chief Architect",
"company": "The Mimix Company",
"dates": "11/2018 - 7/2022",
"location": "The Woodlands, TX",
"description": "Invented a DSL and architecture for a document fact-checking SaaS and shipped an Electron/Angular MVP, Node server, and NOSQL database for this VC-backed project."
},
{
"title": "Senior Application Developer",
"company": "Independent Contractor",
"dates": "11/1995 - 1/2022",
"location": "",
"description": "Designed, delivered, and supported JavaScript and SQL/NOSQL custom API and UI enhancements for over 500 Shopify and WordPress clients."
},
{
"title": "Change Team Programmer III",
"company": "IBM",
"dates": "1991-1993",
"location": "",
"description": "Debugged and fixed mainframe assembler and PL/AS code for IBM's VS COBOL II and VS FORTRAN compilers, used in banking and government."
}
],
"education": [],
"languages": []
}
这实际上相当不错。像阅读和解析简历这样的事情过去曾经是一个完整的产品。阅读这篇文章花的时间比我让它工作的时间还长。
我会让你尝试自己的求职信,并查看它们是如何解析的,但作为最后的压轴,让我们粘贴一个职位链接,看看我们得到的求职信。
以下是结果:
David Bethune The Woodlands, TX 77381 [email protected] 305-NNN-NNNN https://davidbethune.com
2024年8月29日
亲爱的 Dropbox 招聘团队,
我很高兴申请 Dropbox 的高级前端产品软件工程师职位。凭借在前端技术如 JavaScript、TypeScript 和 React 方面的丰富经验,以及在领导端到端项目方面的强大背景,我渴望为您创新的团队做出贡献。
在 R Studios,我负责架构、设计和部署复杂的 Web 应用程序,包括使用 TypeScript 和 Lit 前端开发多人在线 Web 游戏。我在 R Studios 的工作还涉及跨团队合作和领导前端开发工作,这与 Dropbox 的职责相符。
我有着高效交付高质量产品的成功记录,我的 NodeJS 和 Electron 等技术的实际经验进一步增强了我在这个职位上的适应性。我的作品集,可在 https://davidbethune.com 查看,展示了我创建强大且用户友好的界面的能力,确保用户在各种设备上享受无缝体验。
我渴望将我在前端开发方面的专业知识带到 Dropbox,并推动您的产品创新。感谢考虑我的申请。我期待着讨论我如何为您的团队做出贡献的可能性。
此致 David Bethune
我被录用了吗?
你对这个结果有什么看法?就像任何需要设置的东西一样,当用于多个求职申请时,我只需粘贴下一个链接,看看我得到什么回复。由于我的结构化提示,它们很可能都会使用相同的格式和写作风格。
我还可以以结构化的方式再次使用这些数据,比如要求更改特定的求职信或要求列出我申请过的公司和职位。
本文标题中的“Zero”指的是“零提示” ,在这种情况下没有提供有关预期方法或结果的信息。而“hero”则是你现在所处的位置 - 拥有为你定制的 GPT 应用程序的精心设计的结构化提示。
这篇文章是否帮助你开始使用自己的 GPT?希望如此!我很想听听你们使用定制 GPT 进行的实验。请在这里添加你的评论,或直接通过邮件联系我。你可以在我的作品集网站 https://davidbethune.com 上找到我的联系信息。
感谢一直以来的支持!
P.S. - 当我写这篇文章时,拒绝信已经从 Dropbox 那里寄来了![叹气]