Skip to content Skip to footer

ChatGPT 和 Middlesex Fells Trail 分析器

这个自定义 GPT 是关于旅程而不是目的地(还)。

image-20240109142222534

我最近写道,我重新考虑了定制的 GPT。在一阵失望之后,我改变了主意。是的,它们是一个正在进行的工作,是不同的,不是我所期望的,但它们可能出乎意料地有用。

正如我在其他地方讨论的那样,我最近开始了我的第三个自定义 GPT 研究项目。我的第一个不如我的后两个成功。本文深入探讨了一个成功的项目,该项目以一条小径、一场比赛、一个地方命名:米德尔塞克斯丘陵小径分析仪。

去年 12 月(2023 年),我在马萨诸塞州斯托纳姆米德尔塞克斯山的天际线小径上完成了一场超级马拉松(32 英里)。这是一年一度的比赛,这是我第九次参加比赛。我的大部分比赛都是在 Strava 上记录的 GPS。图 1 显示了 Strava 显示屏上的路线。Stava 是一个用于记录和分享体育活动的体育社交媒体平台,是本文描述的实验中使用的 GPS 数据的来源。

我通过让 ChatGPT 分析今年比赛的 GPS 数据来开始这个实验。该实验发展成为一项更大规模的调查,其中包括过去五场比赛的比赛数据。在我的研究过程中,我发现将我的比赛数据和说明捆绑到 GPT 中会很有帮助。因此。Middlesex Fells Trail Analyzer Custom GPT 诞生了,它正在帮助支持我在 ChatGPT/GPT 方面的工作。 感兴趣的主题包括:

  • 使用什么提示/指令模式?
  • 如何设计ChatGPT可以使用的有效知识结构?
  • 如何改进ChatGPT代码生成?

在这个正在进行的实验中,我使用了一个定制的 GPT 来简化实验的设置和准备。这意味着我不必重新加载和不必要地重新处理数据,也不必在每个 ChatGPT 会话中更新配置和提示。

image-20240109142323345

我使用 ChatGPT Plus。在撰写本文时,只有 ChatGPT Plus 用户可以选择创建自定义 GPT。这些是 ChatGPT 前端,可以进行定制以包含私有数据和知识。“私人持有”并不意味着私人持有。目前必须假设所有自定义数据都可以公开,因为 ChatGPT 在保守秘密方面做得不是很好!OpenAI 在他们的研究论文中直言不讳地谈到了这一障碍。在 Andrej Karpathy 的视频“大型语言模型简介”(通过我的 AI Substack 链接)的后半部分也可以看到对 ChatGPT 漏洞的精彩介绍。

ChatGPT Plus 具有一项称为代码解释器的功能,允许它执行 Python 代码。在此实验中,当要求 GPT 解释 GPS 数据、生成图形和执行路线分析时,它不会使用其大型语言模型 (LLM) 直接回答这些请求。相反,它使用 LLM 生成 Python 代码,并在其代码解释器中执行这些代码。Python 代码的输出就是答案。

这篇文章分为多个部分,每个部分都介绍了一个使用我的种族数据进行的实验。在第三部分中,我改用一个名为 Middlesex Fells Trail Analyzer 的定制 GPT。此自定义 GPT 包括五年的比赛数据。在之前的实验中,我只获得了一年的GPX数据。

实验 1

在我的第一个实验中,我要求 ChatGPT “读取一个 GPX 文件(包含带有时间戳的 GPS 点),记录了我在波士顿米德尔塞克斯山的天际线小径上 8.5 小时、32 英里的比赛——超过 25K 个数据点。我使用带有代码解释器的在线 ChatGPT Plus 来“切片和切块”并生成各种图表。图 1 显示了 Strava 中的课程。下面是用于生成图 2 的提示。

您能否展示路线的十分之一英里路段,展示随时间推移速度变化最大的地方。请注意,我在路线上逆时针行驶了 3 次,顺时针行驶了 1 次。仅使用顺时针路线的配速变化。使用显示前 10% 的细分受众群。如果这些线段与地形高程变化高度相关,则以红色突出显示这些线段。如果这些线段与地形高程变化的相关性不高,则以蓝色突出显示这些线段。

虽然 ChatGPT 似乎正确地计算了速度变化和地形高程变化之间的相关性,但我确实发现了其他差异。

我注意到的主要算法缺点是 ChatGPT 没有尝试从 GPX 数据中计算方向性。相反,当被问到时,它说它(错误地)假设前三圈是逆时针的,最后一圈是顺时针的。

image-20240109142354022

第一个实验的示例输出。

尽管 ChatGPT 能够生成完整可信的图表,但它在细节上存在一些缺点。

  • ChatGPT 在生成代码时经常犯错误。但是,当它在代码解释器中运行代码时,它能够检测到其中的大多数错误。当检测到错误时,ChatGPT 会纠正它并重试,有时是多次,直到成功生成代码。有关示例,请参阅图 3。在某些情况下,ChatGPT 无法在会话超时之前解决所有错误,并且会失败。
  • ChatGPT 偶尔会误解指令。例如,它偶尔会生成错误类型的图形/绘图。

另一个缺点在于 ChatGPT 用于计算路线的算法。它没有将这条路线视为同一地形上的四个环路,而是将这条路线视为一条长 32 英里的小径——将其分成 1/10 英里的路段。在后面的实验中,我将指示 ChatGPT 整合来自整个循环的 GPX 点。

image-20240109142413687

它说明了 ChatGPT 在生成 Python 代码时反复遇到错误的情况。

实验 2

我要求 ChatGPT 使用 GPX 记录中的速度和海拔数据来估计天际线步道最“技术性”的部分。对ChatGPT的说明如下:

我将为您提供越野赛的 GPX 文件。

请按照以下说明操作:

1.) 将整条路线分成 1/10 英里的路段。

2.) 过滤掉冗余的 GPX 点 — 间隔距离为 0 的点。

3.) 取每段内的所有 GPX 点,并计算该段内所有点的配速和海拔的标准差和平均值。

4.) 通过将配速和点的海拔标准差相乘并减去平均配速来计算每个路段的技术评级。

当越野跑者将一条小径称为“技术性”时,他们通常指的是地形的崎岖程度或涉及多少攀登。无论含义如何,在技术路线段上行驶的速度都较慢。天际线步道既有步道粗糙度,也有丰富的海拔变化。

在这个实验中,ChatGPT 被要求通过将轨迹分解为多个片段,查看每个片段中的 GPX 数据并使用简单的算法来估计路径的技术性。为此,ChatGPT 将路线划分为十分之一英里的路段,并计算了您的配速标准差和平均值以及每段内所有 GPX 点的海拔标准差。然后,ChatGPT 使用这些值来估计每个细分市场的技术水平。

更准确地说,ChatGPT 被要求使用以下公式来估计每个路段的技术评级:

(standard_deviation_pace * standard_deviation_elevation) - mean_pace

衡量方法很简单:跑步者经常改变配速并涉及大量海拔变化的位置可能比其他位置更具技术性。该分数包括从速度变异性中减去平均速度。这样做是为了打折由于步道难度以外的原因(例如吃饭/说话)而涉及配速变化的路段。

对比图 4 和图 5 说明了这种方法的好处。通过将配速和海拔的标准差以及每个步道段的平均配速分数汇总到一个分数中,我们可以创建一个更直观的基于地图的图表,从而更好地理解数据。

image-20240109142440889

当为每个步道段单独绘制时,配速和海拔的标准差以及平均配速图都很复杂。

image-20240109142504012

它汇总了繁忙的图 4。数据转换为纬度/经度图(MAP)。标准差和平均数据已折叠成一个技术性分数,该分数对路线进行颜色编码。

实验二是成功的,因为ChatGPT能够通过结合不直观的措施(图4)来提供直观的概述(图5)。然而,在咨询了熟悉这条小径的越野跑者后,有人认为用于计算小径技术性的启发式方法并不完美。在某些情况下,这些越野跑者(专家)质疑 ChatGPT 对越野路段技术性的评级。

实验 3

在我的第三个实验中,我使用 ChatGPT 创建了一个名为 Middlesex Fells Trail Analyzer (MFTA) 的定制 GPT。我在 MFTA 知识库中放置了我在 Strava 上记录的冬季经典赛五年的 GPS 数据。使用自定义 GPT 的好处是,它消除了为每个新会话手动加载 GPX 数据文件的需要,并避免了处理不必要的 GPX 文件的成本,从而节省了时间。

构建自定义 GPT shell 大约需要 10 分钟。本文不涉及该过程 - 有许多在线资源可以。MFTA 的 ChatGPT 前端如图 6 所示。

image-20240109142532071

图6.截图来自作者拍摄的ChatGPT。这描绘了Middlesex Fells Trail Analyzer Custom GPT的网页前端。

image-20240109142622648

请注意放置指令的“说明”面板。

MFTA 配置网页的上半部分如图 7 所示。“说明”面板,其中包含我将在下面讨论的说明提示,如图所示。

说明的前几段旨在定义项目的角色和范围。在 MFTA 的背景下,ChatGPT 预计将以跟踪专家的身份展示其结果:

您是世界上最好的步道分析专家,在地形评估和步道状况评估方面拥有专业知识。您非常擅长识别具有挑战性的步道特征、分析地形复杂性和评估环境因素。您敏锐的观察能力和对越野动力学的深刻理解有助于您熟练地突出越野赛路线中技术难度最大的部分。

米德尔塞克斯山步道分析仪专门为跑步者分析天际线步道,重点关注技术挑战。它提供了对地形、高程变化和潜在障碍物的见解。此外,此 GPT 可以分析用户上传的 GPX 文件,提供有关特定步道部分、高程剖面和其他技术细节的详细信息。它还可以提供有关天气因素的建议,建议训练策略,并推荐合适的装备来应对小径的独特挑战。

您是米德尔塞克斯山(Middlesex Fells)天际线步道的专家。天际线步道通常以顺时针或逆时针方向进行。比赛起点/终点位于赛道最北端的停车场。比赛路线可以由多个环路组成。在分析 GPX 文件描述的路线时,请按照说明进行操作。在开始分析之前,请阅读所有说明。

遵循其在“说明”面板中的角色准则是 ChatGPT 执行路由分析的说明:

您的路线分析说明:

  1. 检查路线中的所有 GPX 点。过滤掉重复的 GPX 点 — 与另一个点具有相同地理位置和时间戳的 GPX 点是该点的重复点。删除其中一个重复点。
  2. 遍历所有 GPX 点并将它们放入 100 个地理空间步道段。每个步道段都应不相交 - 在地理空间上不与另一个步道段重叠。您可以将每个路径段视为偶然地理定位 GPX 点的“箱”。
  3. 取每个步道段内的所有GPX点,计算每个步道段内所有点的配速标准差、平均配速和高程标准差。
  4. 通过将配速和点的海拔标准差相乘并减去平均配速来计算每个路段的技术评级。

ChatGPT 的路由分析指令 #2 已从之前的实验中更新。早些时候,ChatGPT 将同一赛道上的所有四圈划分为 1/10 英里的路段,就好像它是一条长长的路一样。但是,更新后的指令要求 ChatGPT 将落在路径同一位置的 GPX 点合并为一个段。

以下 Python 代码说明包含提示,可帮助 ChatGPT/MFTA 避免过去容易犯的常见编码错误。回想一下图 3。

您的 Python 代码说明:

1.在处理GPX路由数据时,不要使用gpxpy模块,它在您的环境中不可用。使用替代方法进行分析。

2.为避免除零问题,两点之间的距离不应设置为零,当两点具有相同的坐标时,请使用0.0001米。

  1. 阅读知识库中的 CODE_SAMPLES.txt 中的 Python 代码。使用此处的示例来帮助你指导代码选择。

第三个编码提示(上面的 #3)指示 ChatGPT 读取其知识库中的文件。此时,自定义 GPT 最多可以上传 20 个文件以形成其知识库。在图 8 中,我们看到了本实验中 MFTA 的知识库。它包括五个文件,其中包含五年的GPX比赛数据,以及一个包含代码示例的文件。``

image-20240109142645283

实验 3 中使用的 MFTA 知识库。

代码示例文件包含以前由 ChatGPT 生成并与此应用程序一起使用的 Python 代码。该文件包括成功演示如何摄取 GPX 数据、执行分析和绘图函数的代码示例。

ChatGPT/MFTA 的最后一组指令包含输出指令。我通常要求提供图表和统计数据。请求示例:

  • 总共有多少GPX点?
  • 显示所有步道段的图形,其中显示了平均配速和高程的标准差以及高程的标准差。
  • 将细分市场显示为绘制在图表上的地图,并以蓝色突出显示技术细分市场的底部 20%(最低分)。

该实验确定了 ChatGPT/MFTA 性能可以改进的领域,例如:

  • 尽管 Python 代码说明中的规则 1 和 2 帮助 ChatGPT 避免了一些错误,但这些错误仍然发生,尽管频率较低。
  • 将“(y)ou may think of each trail segment as a 'bin' of continguous geo定位 GPX 点”附加到 #2 路线分析指令中,有助于引导 ChatGPT 避免使用不必要的聚类算法来实现此步骤。有时,ChatGPT 曾尝试使用 K-means 对 GPX 点进行分类——这对于此应用程序来说是一个不必要且昂贵的(计算)解决方案。它的使用通常会使会话超时。我们能帮助 ChatGPT 自行改进算法选择吗?
  • 同样,在指示 ChatGPT 引用 似乎有助于引导 ChatGPT 远离前面描述的 Python 代码错误。我们能否进一步降低这些错误发生的频率?CODE_SAMPLES.txt also

尽管我观察到了一些改进,但上述结论是基于小样本量的轶事证据。但是,这些错误经常发生,因此需要进一步调查。

实验 4

在前面的实验中,我描述了如何使用指令和知识文件配置自定义 GPT。本节通过添加培训手册,为米德尔塞克斯山步道分析仪GPT的知识添加更多结构,从而扩展了这项工作。《培训手册》将前面的代码示例文件以及许多指令合并到一个更简洁的结构中,位于一个文件中。

培训手册的使用源于 OpenAI 开发者论坛上的讨论。本节的结论是,在使用自定义 GPT 时,最好保持说明尽可能简洁,并尽可能多地将有关应用程序的知识移动到文件中(例如,在本例中为培训手册)。

image-20240109142733799

这是本实验中使用的知识设计的草图。GPT 指令现在指向知识文件(培训手册)中的条目,这些条目也可能指向同一文件中的代码块。

图 9 概述了 Middlesex Fells Trail Analyzer GPT 的说明如何引用知识文件(培训手册),以获取有关如何执行任务的更多详细信息。举例来说,考虑一个任务“X”:

"Do X" -> "To do X, consider these approaches... X1"

上面表达式的左侧是 GPT 执行 X 的指令,右侧是训练手册中执行 X1 的提示。右侧还可以引用同一培训手册中的示例代码。请考虑以下示例,该示例引用了CODE_BLOCKX1A。

"X1" -> "To do X1, consider these sample implementations: CODE_BLOCKX1A..."

图 10 和图 11 描绘了本实验中使用的 GPT 说明和培训手册的部分内容。

image-20240109142818268

GPT 说明提供了对突出显示的培训手册的参考。

image-20240109142841086

《培训手册》的一部分是其中的一部分。请注意其对指令和代码块的引用。

在本实验中,《培训手册》没有引入任何在上一个实验中尚未获得的新信息。相反,它使用了相同的提示和编码示例,但以更结构化和简洁的格式呈现它们。事实证明,这种算法和编码提示的重组对 ChatGPT 很有帮助。

我在六个会话中测试了 Middlesex Fells Trail Analyzer Custom GPT。三节课有培训手册,三节课没有培训手册。这是一个小样本测试,其结果应被视为轶事。然而,它很有启发性。所有测试都使用以下提示来启动它。

Pick a race from your knowledge base and analyze the route.

将培训手册包含在自定义 GPT 配置中的所有三个案例都成功完成。在未提供《培训手册》的所有三种情况下,它都没有提供。不成功的会话失败,因为会话在 ChatGPT 处理错误时超时。

ChatGPT在使用培训手册的三个成功案例中并不完美。在一个例子中,ChatGPT 在计算跟踪段的技术性时忽略了一条指令。在另一个例子中,ChatGPT 必须解决编码错误。然而,在这些测试中,没有出现早期错误,这是未使用培训手册的不成功案例的特征。我所说的早期阶段,是指对代码生成产品来说比语法错误更根本的错误。例如,早期阶段可以参考为代码解释器不可用的模块/包生成代码,或者为该应用程序选择不适当的算法。例如,使用 K-means 将 GPX 点分配给 bin 对于此应用程序来说既不必要又昂贵,并且会使会话超时。对于 ChatGPT 来说,早期错误修复起来更耗时,并且更快地导致会话超时。

自定义 GPT 在训练手册的指导下进行算法和代码选择。与之前的实验相比,这种方法似乎是有效的。但是,我确实遇到了一些问题。最重要的问题是 ChatGPT 遗漏了我指示它包含的路线分析算法的一部分。具体来说,它未能计算配速的标准差。更令人担忧的是,它没有通知我这次失败。我必须检查它的工作才能发现问题,如图 12 所示。

image-20240109142907674

ChatGPT 承认它没有按照指示将速度偏差标准纳入其计算中。

ChatGPT 可以有选择地强调某些指令而不是其他指令,尤其是对于大型/复杂的指令。例如,ChatGPT 可能会在提示的开头和结尾附近加倍关注指令,而对中间的指令不太关注 [1]。

未来的工作将指导通过 GPT 教学/培训手册知识架构来提高 ChatGPT 的性能,以最大限度地减少此类错误。

我将以图 13 结束——这是本实验中 Middlesex Fells Trail Analyzer Custom GPT 输出的图表之一的插图。尽管它的生成并不完美(缺少每个路段的配速项的标准偏差),但它仍然大致正确——粗略地反映了米德尔塞克斯山天际线步道的实际技术性。但是,还有改进的余地!

image-20240109142932955

每个步道段的步道技术性措施。

使用私有信息自定义大型语言模型体验正在快速推进。自定义 GPT、Microsoft Copilot Studio 和相关工具就是这方面的例子。虽然自定义 GPT 的工具集对我来说仍然很粗糙,但它说明了一些迷人的可能性。同时,它帮助我将我的比赛数据和指令捆绑到一个自定义 GPT 中,从而简化了实验设置和准备,并最大限度地减少了在每次 ChatGPT 会话中重新加载和不必要地重新处理数据、配置和提示的需要。

Middlesex Fells Trail Analyzer Custom GPT 帮助支持了我使用 ChatGPT/GPT 的工作。我期待着在未来发现这些和其他自定义 GPT 应用程序的有趣新方面。