*   **我的回答**:短途车程,5到10分钟。
  1. AI提问:您对接受预订的餐厅有偏好吗?还是可以接受直接进店?

    • 我的回答:直接进店可以,但我不想等位太久。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_34.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_35.png

请注意,整个交互过程非常流畅。每次我回答完一个问题,AI都在适应。这就是“智能体”部分开始发挥作用的地方,是智能体的魔力所在。它不仅在适应我提供的信息内容,也在适应我提供信息的各种格式和方式。这是大语言模型的一个重要特点:它们能够处理多种不同格式的输入,能够理解表达相同信息和想法的多种不同方式,而无需我们去构建复杂的系统来处理我这些“随心所欲”的回应方式。

在我给出关于“直接进店”的回答后,AI说:“好的,根据您的偏好,我推荐 Rose Pepper Cantina。”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_37.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_38.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_39.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_40.png

然后我去谷歌地图查了一下,发现从我家开车过去大约需要13分钟(考虑到交通),这比我想要的5-10分钟要远一点。于是,我回去对AI说:“嘿,谷歌地图显示要13分钟车程,我有点懒得开那么远。😊”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_42.png

AI回应道:“好的,既然这样,去 Sco 吧。” Sco恰好就在范德堡大学街对面。

模式的核心价值与扩展 💡

现在,我可以运用这种强大而有价值的能力来帮助我解决问题。比如,我该去哪里?它能帮助我做决定,引导我作为一个人进行思考。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_44.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_45.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_46.png

AI从我这里收集信息,与它从数据库收集信息没有本质区别,只是收集信息的接口发生了变化。向人类提问要容易得多,因为人类可以适应AI所说的任何话。不同之处在于,当AI需要从真实的计算机系统(如数据库)收集信息时,它必须使用该数据库的语言,必须使用该计算机系统的语言。因此,它需要进行翻译

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_48.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_49.png

大语言模型极其擅长的一项能力正是翻译。它们是语言的专家。因此,另一个巨大的优势是:我们用人类的语言表达需求,AI将其分解为执行计划,并开始交互式地执行该计划

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_51.png

当交互对象是人类时,它会用人类语言提问;但当它需要与数据库对话时,它可以开始使用那种数据库语言。这有点像《星球大战》里的协议机器人,它能说各种不同的语言,与所有不同的系统通信,并充当与那些系统的接口。这正是生成式AI和智能体AI正在做的事情

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_53.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_54.png

但与传统AI(我们一步步地指挥一切)不同,在智能体AI中,我们赋予它执行多个不同步骤并适应的能力:它选择步骤,我们(或系统)执行,它获取该步骤执行结果的信息,然后进行适应,如此循环往复

总结 📝

本节课中,我们一起学习了生成式AI的翻转交互模式。我们了解到:

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_56.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_57.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_58.png

  • 该模式的核心是让AI从被动应答转向主动引导和执行

  • 其基本结构是通过 “一次一个问题”“一次一个步骤” 的提示,让AI掌握主导权。

  • 该模式的价值在于AI能够动态适应用户的回答和外部反馈,并利用其强大的语言理解和翻译能力与各种系统交互。

  • 这构成了智能体AI的基础,使其能够自主规划并执行多步骤任务,最终实现更复杂的目标。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_59.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_60.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_61.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_62.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/4dc0e47f6cea742d61ce65358166e85e_63.png

掌握翻转交互模式,是理解和设计高级生成式AI应用的关键一步。

053:多模态翻转交互 🖼️💬

在本节课中,我们将要学习生成式AI模型如何超越纯文本交互,利用多种信息模态(如图片)来理解和解决问题。我们将通过一个具体的“翻转交互”案例,展示AI如何通过分析屏幕截图来诊断电脑网络问题。

多模态交互的核心概念

上一节我们介绍了翻转交互的基本模式。本节中我们来看看,这种交互模式如何突破语言的限制。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_1.png

这些模型和交互模式的惊人之处在于,它们不必局限于语言。这些系统能够解读多种不同类型的信息。信息不必只是人类语言。我们必须理解的关键一点是,我们可以向它提供各种信息。当我们使用翻转交互模式时——即让它向我们提问、向数据库提问、告诉我们该做什么,或指示计算机系统该做什么——它获得的反馈不必只是语言形式。反馈不必只是我们的人类语言,它可以使用各种沟通模态。我们将通过一个例子来观察这一点。

在我们将要提供的例子中,信息模态是照片

案例:基于截图的网络问题诊断

以下是使用多模态翻转交互模式解决实际问题的逐步演示。

初始指令与第一步

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_3.png

首先,我设定了翻转交互的提示词:

提示词:我需要你帮助我诊断为什么我的电脑无法连接互联网。我们需要一步一步地诊断。每一步,你可以要求我做某事,然后我提供截图以验证我是否正确执行。请始终从要求查看我的系统截图开始,以便你了解工作环境。第一步是什么?

我再次使用了这种交互模式:我描述希望它逐步解决问题,让它向我询问第一步,并且这次我指明反馈将主要是所发生情况的截图。所以,它会告诉我做某事,我在电脑上执行,然后向它展示执行后的截图。

它回复道:“第一步是提供您当前系统的截图,以便了解我们正在处理的环境。”它要求我们提供当前状态。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_5.png

于是,我拍摄了这张笔记本电脑的截图,并将其作为我的回复上传。我不再上传文本,而是上传了电脑的截图。我现在能做到这一点,这绝对令人惊叹。

AI解读截图并调整策略

它回复:“好的,谢谢你的截图。看起来你使用的是Mac。让我们继续下一步来诊断你的网络连接。”请注意它刚才的举动:它查看了这张截图并判断出“这看起来像Mac”。它从截图的外观中了解了我电脑的信息。这不仅仅是我口头告知“我有一台Mac”,而是它通过观察截图,从中收集丰富信息,并根据所见内容进行适应和调整。

逐步诊断流程

以下是AI引导的后续诊断步骤:

第二步:检查Wi-Fi连接

它指示:“检查你的Wi-Fi连接。点击屏幕右上角菜单栏中的Wi-Fi图标。确保Wi-Fi已开启。检查你是否已连接到Wi-Fi网络。”然后它说:“请提供Wi-Fi下拉菜单的截图,显示可用网络和你的连接状态。”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_7.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_5.png

我按照指示操作并上传截图。它回复:“谢谢你的截图。看起来你已连接到Wi-Fi网络‘Home 699 E’。”请注意,它实际上从截图中识别出了我所连接的Wi-Fi网络名称。它不需要我告知,而是从我提供的反馈中直接收集所需信息。

第三步:检查网络偏好设置

它继续引导:“让我们继续下一步,检查网络偏好设置。点击Wi-Fi下拉菜单底部的‘Wi-Fi设置’选项。在网络偏好设置窗口中,确保Wi-Fi连接状态显示为‘已连接’并已分配IP地址。”然后它说:“请提供网络偏好设置窗口的截图。”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_7.png

我上传了它要求查看的截图。它分析道:“好的,谢谢你的截图。看起来你的Wi-Fi连接已分配了IP地址和路由器地址。这表明你的电脑已连接到Wi-Fi网络。”至此,它已逐步建立起诊断基础:首先确认我已连接到Wi-Fi网络且状态正常。

第四步:检查互联网连通性与语言翻译

既然网络连接正常,它开始排查下一个可能环节。它说:“好的,那么下一步是什么?如果那不是问题,下一步是什么?”现在它指示:“我们需要检查互联网连通性。打开终端应用程序(你可以通过Spotlight搜索‘终端’找到它)。”

接着,它给出了要运行的命令:“在终端中,输入 ping 8.8.8.8 并按回车键。”请注意它的操作:它现在需要在系统上运行一个命令。因此,它将“检查互联网连通性”这个高级任务,翻译成了计算机能够理解的语言(命令)。它正在执行这个翻译步骤。它不仅识别出需要做什么,还识别出如何将其具体翻译成可用于与计算机通信、以获取所需信息的语言。

然后它说:“完成后请提供截图。”这次我没有提供截图,而是将命令运行后的原始文本直接复制粘贴回了对话框。我想看看,如果我突然不提供截图而是提供文本,它会如何反应。这是运行该命令后输出的原始文本:

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=117 time=9.305 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=10.125 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=11.058 ms

对于程序员或IT人员,这段文本可能易于理解。但如果你不熟悉这个领域,它看起来就像外语。确实,这是一种许多人懂得如何“说”的语言,但如果你不懂,就无法理解。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_9.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_9.png

然而,AI懂得如何将这段文本翻译回有意义的结论。它分析道:“Ping结果显示,你的电脑可以访问Google的DNS服务器,且没有数据包丢失,这表明你的互联网连接工作正常。”它在这里执行了翻译:将我所见的原始信息(那种“外语”),翻译成了针对所解决问题的意义表述。随后,它继续告诉我下一步要运行的命令,并会持续尝试帮助我诊断那个我实际上并不存在的电脑网络连接问题。

多模态翻转交互的优势总结

本节课中,我们一起学习了多模态翻转交互的强大能力。

你可以看到它是如何适应的:它能适应多种不同类型的响应。在那种翻转交互中,我们说“这是模式:一步一步来,我会给你结果”。每次它收到反馈后,都会做出响应、进行适应、执行翻译,并能与不同的系统接口交互。目前我们仍然使用人工接口——由人类提供接口。但与之前接口烹饪世界不同,我们现在接口的是机器和计算机的世界。这最终正是我们为智能体系统设定的方向:我们将允许它们直接与那些机器对话,以执行任务、获取智能体达成总体目标所需的信息。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_11.png

核心要点总结

  1. 超越文本:AI能处理图像、命令输出等多种模态信息。

  2. 动态适应:AI根据接收到的反馈(如图片内容)实时调整诊断策略和后续问题。

  3. 自动翻译:AI能在高级任务描述(如“检查网络”)和低级机器指令(如 ping 命令)之间进行翻译。

  4. 为智能体奠基:这种人机协作的多模态交互模式,是未来AI智能体直接操作计算机系统、自主完成任务的基础。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/ef7962a2adf3014bb377260ac4994ffe_11.png

这种能力使得AI能够更自然、更强大地融入解决实际问题的流程中,特别是在需要结合视觉信息与操作指令的复杂场景下。

054:提前规划 🗺️

在本节课中,我们将要学习智能体(Agents)如何通过提前规划来完成任务。我们将探讨两种主要的规划方式:交互式逐步执行与一次性完整规划,并分析各自的优缺点。

智能体的规划能力

上一节我们介绍了智能体的基本概念,本节中我们来看看其核心能力之一:规划。智能体并非只能按部就班地执行单一指令。它们能够构建复杂的计划。这种能力的核心在于,智能体能够将你试图实现的某个高级别目标,分解成一系列子任务或子目标,从而形成一个完整的执行计划。这是一种基础能力。

两种规划方式

以下是智能体工作的两种主要方式。

交互式逐步执行

一种方式是让智能体以交互式的方式工作,一次执行一个任务。它逐步采取行动、执行步骤并作出响应。这是一种非常强大的方式。

一次性完整规划

另一种方式则完全相反:我们可以让智能体提前构建出完整的计划,然后一次性发送出去执行。目前我们尚未实现全自动化执行,所以这里的规划是指由人类来执行整个计划。

规划示例:纳什维尔之旅

假设我的目标是:规划一个为期四天的纳什维尔之旅,需要游览多个不同的街区

智能体分解了我的任务。它指出需要安排四天的活动,并且每天要去不同的街区。以下是它的规划:

  • 第一天:纳什维尔市中心。在Pancake Pantry吃早餐。(注:根据对市中心的定义不同,这个地点可能不准确。Pancake Pantry可能属于Hillsborough Village区,而非严格意义上的市中心。这说明了智能体并非总是完美。)

两种方式的关键差异

当我们像上面那样一次性生成整个计划时,它是一次性完成的,在步骤之间不一定具备适应和修正的能力。这是一个关键差异。

在思考规划时,如果我们采用逐步执行的方式,则能在每一步之间进行充分的适应调整。但这也会带来一些复杂性,因为它可能会忘记某些步骤,或者偏离原本的目标。

另一方面,如果我们采用一次性完整规划,智能体永远不会偏离轨道。它可以提前构建出完整计划,然后直接发送执行。它不需要记住之前说过什么,因为一切都已预先设定好。然而,如果计划存在缺陷,它在执行过程中无法调整计划。这又是一个关键差异。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/23fd5e52950efdb5d9aa6cb5134cf490_1.png

我们需要权衡:是希望智能体在执行过程的每一步之间都参与决策(“在循环中”),还是希望计划完全预先制定好,由执行过程与智能体完全分离?后者虽然失去了在步骤间出现错误时响应的能力,但可能在效率、成本、速度方面获得优势,并且可能更具可重复性和可预测性。就像任何其他大语言模型的响应一样,如果让智能体介入,它的输出每次都可能略有不同,而我们有时可能不希望这样。

因此,我们总是在这两种完成任务的方式之间进行权衡:要么让智能体直接介入每一步(循环中),要么让它提前构建一个完整的计划(一次性)。后者非常可重复,但如果出现错误或问题,则难以适应。或许我们有时会希望采取折中的方式。

规划中的挑战:幻觉

以下是我们的四天纳什维尔之旅计划的剩余部分。现在,我回到智能体并给出一个新目标:我的儿子喜欢BMX小轮车比赛,请帮我规划一次从纳什维尔到纽约市的自驾游。我希望每天驾驶约五到六小时,并且每天都需要停靠在一个有BMX赛道的城市,以便他晚上可以骑行。请规划我的路线。

智能体开始规划:纳什维尔到肯塔基州路易斯维尔——这是个不错的选择,那里有一个很棒的BMX赛道,距离也不远。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/23fd5e52950efdb5d9aa6cb5134cf490_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/23fd5e52950efdb5d9aa6cb5134cf490_1.png

几天后,我们到达了“Humeltontown BMX”赛道。我无法找到任何关于名为“Humeltown BMX”的赛道存在的信息。它可能存在,也可能不存在,但在我看来它似乎是虚构的。当我们开始思考规划时,这是一个挑战:如果我们提前构建完全固定、详尽的计划,我们总是面临“幻觉”的风险。即,它在计划中幻想出一些看起来不错但并非真实存在的东西。它可能以各种方式产生幻觉。在这个案例中,它幻想出了一个停靠点,因为它知道宾夕法尼亚州有个Humeltown,于是它说:“好吧,我会停在那里,然后幻想出一个BMX赛道在那里”,因为我们没有给它足够的约束,目前也没有简单的方法来做到这一点。幸运的是,在我开始这次自驾游之前,我会进行事实核查,从而发现这个问题。但这是我们未来需要处理的一个问题。

克服挑战:提供信息与约束

那么,我们如何克服这类问题呢?到目前为止,我们所做的只是给它一些开放式的提示。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/23fd5e52950efdb5d9aa6cb5134cf490_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/23fd5e52950efdb5d9aa6cb5134cf490_5.png

但我们可以开始添加信息,例如,提前提供我们希望它使用的信息,以及我们希望它遵循的约束条件,以限制它的推理和行为范围。当我们开始思考智能体时,这一点非常重要。为智能体提供完成任务所需的信息访问权限至关重要。在某些情况下,如果我们明确指示它这样做并告知时机,它可以自行去获取信息。但如果我们没有赋予它获取信息的能力,我们就需要提供完成任务所需的所有信息,而不能假设它能访问一切。

在这个例子中,我回到之前的提示,复制粘贴了加拿大和美国所有BMX赛道的列表,并将其放入原始交互提示中。然后,我给出了基本相同的提示:“我的儿子喜欢BMX小轮车比赛,请规划这次旅行。”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/23fd5e52950efdb5d9aa6cb5134cf490_5.png

现在它返回了实际上正确的结果。它找到了真实的赛道,我们有了真实的信息可供使用。所有这些停靠点在我看来都是正确的。我进行了一些事实核查,能够找到所有这些不同的赛道。同时,行程也大致符合我们设定的每日驾驶时间限制(也许它在每日驾驶距离上有点过于保守,我可以告诉它需要开得更远一些,它就能调整计划)。现在,我们得到了一个完全预先制定好的计划

我不会在驾驶途中说:“嘿,这里没有这个BMX赛道,告诉我该改去哪里。”然后开往别处,因为这对于规划自驾游来说没有意义。我将去执行它的计划,但不会让它介入循环。这是一种不同的交互风格。当我们开始构建这些系统时,必须弄清楚:我们希望它将多少步骤串联起来,然后我们去代表它执行并带回结果?或者,我们是否希望带回结果?所有这些都很重要,并将决定流程的可重复性。我们在流程中插入智能体的环节越多,其可重复性就越低,可能速度越慢,成本也越高。我们越倾向于一个完全预先制定的计划,计划的可重复性可能就越高,因为步骤之间没有适应调整。但同时,我们必须非常小心,尽量减少计划中的错误数量,因为一旦发生错误,它无法帮助我们进行调整。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/23fd5e52950efdb5d9aa6cb5134cf490_7.png

总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/23fd5e52950efdb5d9aa6cb5134cf490_7.png

本节课中我们一起学习了智能体进行任务规划的两种核心方式:交互式逐步执行一次性完整规划。我们通过具体示例分析了各自的优势(如适应性、可重复性)与挑战(如复杂性、幻觉风险)。关键在于,我们需要根据任务对适应性、效率、成本及可重复性的要求,在两种方式之间做出权衡,并通过为智能体提供充足的信息与约束来提升规划的质量和可靠性。

055:为智能AI代理提供世界信息 🧠

在本节课中,我们将探讨一个在构建生成式AI应用时至关重要的环节:如何为AI代理提供充分且准确的世界信息。人们常常高估生成式AI的知识储备,同时又低估了执行任务所需的上下文信息量。我们将通过具体案例,理解为何以及如何为AI“填充”必要的背景知识。


高估与低估:AI的知识边界

人们开始使用生成式AI时,常常会高估它知道多少。因为它的回答极具说服力,导致人们误以为它拥有各种相关的背景知识。同时,我们也倾向于低估要出色完成一项任务,究竟需要多少上下文信息。

类比:第一天上班的实习生

构建生成式AI时,请想象一下:你试图让一个实习生为你做事。这是他上班的第一天,刚到你的工作场所一分钟。他对你的公司文化、办公室布局、特定系统一无所知。他只有关于世界的大量通用知识,但不了解你的具体情况、你的做事方式、你的电脑系统、你的人生目标,甚至不知道你上班路上在哪个加油站停过车、你最喜欢的食物是什么、你在旅行规划中的好恶。所有这些信息都是缺失的。

填充缺失信息是关键

当我们让生成式AI执行任务时,填补这些缺失信息至关重要。我们需要提供海量信息,AI才能完成任务。

案例研究:连接旧游戏机

前几天,我儿子在壁橱里找到了一个旧的任天堂Wii游戏机,他说:“嘿,我想把它连接到电视上。”我们把设备从盒子里拿出来,结果发现它没有HDMI接口。我想,我到底该怎么办?我甚至不知道我的电视是否能接受这类输入。

我走到电视前,电视挂在墙上。我伸手到后面摸索,感觉到不止一个那种接口,实际上有三个以上。现在问题来了:我摸到了五个接口,但只有三根线。我试图在看不见的情况下盲操作,弄清楚该怎么办。最后,我放弃了,拿出手机,拍了一张电视背后的照片。现在,我掌握了关于这台电视的信息。

利用信息制定计划

然后我决定,看看能否让ChatGPT来规划解决这个问题。我使用ChatGPT应用说:“解释如何将这些线插入电视。”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/48e9526c64528fa1a0657b6eaed18ee8_1.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/48e9526c64528fa1a0657b6eaed18ee8_1.png

它回复说:“好的,它们应该插在这里。”它为我制定了一个将线缆一根根连接到电视上的计划。这背后的关键是:我向它提供了关于这个“世界”的信息。我没有只说“电视”,也没有说“我的电视”,因为“我的电视”不够具体,除非它确切知道我的电视型号并拥有详细信息。即使我告诉模型“我的电视”,我也必须确保它知道面板的样子以及所有接口的布局。要完成这个任务,需要海量的信息。我还必须展示我正在处理的线缆、确切的颜色和数量。执行这个任务需要如此多的信息。

核心原则:提供具体世界信息

在这个案例中,我给了AI非常具体的关于周围世界的信息。关键在于,它需要知道关于世界的、它正在处理的系统、它要解决的问题的信息。它需要丰富的信息才能做好工作,就像那个第一天上班的实习生需要信息来解决问题一样。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/48e9526c64528fa1a0657b6eaed18ee8_3.png

另一个案例:咖啡机使用指南

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/48e9526c64528fa1a0657b6eaed18ee8_3.png

让我们想想这个咖啡机。请向我逐步解释如何使用它。如果我只说“克鲁格”,它或许能解决。但如果我说“解释如何使用这台咖啡机”,“咖啡机”这个词提供的信息是不够的,除非我提供照片。

然而,照片包含了非常丰富的信息:第一,它正面写着“克鲁格”;第二,它提供了这个物体的形状信息,以及可能的使用选项。AI接收这些信息后进行分析,然后说:“以下是步骤:插上电源,开机。”它是在进行规划,它吸收了关于世界状态的信息,然后决定该做什么。

构建系统的关键考量

每当我们开始构建这些系统时,都必须仔细思考:我们是否给予了系统足够的信息来执行任务?代理是否真正了解所有的细节、复杂性和细微差别?

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/48e9526c64528fa1a0657b6eaed18ee8_5.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/48e9526c64528fa1a0657b6eaed18ee8_5.png

为了达到我们想要的目标,我们必须思考。同时,当事情出错时,我们如何更新它对世界状态的认识?或者当某些事情发生变化时,我们如何更新它对世界状态的认识?所有这些都必须考虑进去,因为当它执行计划或指示我们执行计划时,世界中的某些东西可能会改变,这可能迫使它的计划进行调整。如果我们不持续地输入信息以确保它了解周围发生的情况,它就会做出错误的决策。

持续更新的必要性

例如,如果你让它创建一个旅行预订,同时你的妻子独立创建了另一个旅行预订,而你没有更新AI的信息,它可能会创建一个重复的预订,这并非你所愿。因此,你必须像对待那个实习生一样思考:你不仅要告诉它足够的信息去解决问题,还必须用所有需要的信息保持更新。

这意味着在整个过程中持续更新它,让它知道需要做什么,同时也让它知道发生了哪些可能影响其当前计划的事情。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/48e9526c64528fa1a0657b6eaed18ee8_7.png


总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/48e9526c64528fa1a0657b6eaed18ee8_7.png

本节课中,我们一起学习了为生成式AI代理提供充分世界信息的重要性。我们认识到,AI的知识是有限的,需要开发者像指导新员工一样,为其提供具体、详细且持续更新的上下文信息。无论是连接设备还是使用咖啡机,丰富的背景信息都是AI制定有效计划、成功执行任务的基础。关键在于提供具体信息保持信息更新,以确保AI代理能在动态变化的世界中做出明智决策。

056:为智能体配备工具 🛠️

在本节课中,我们将学习如何让智能体系统与现实世界进行交互。核心在于为智能体配备“工具”或“动作”,以约束其行为,使其在有限的资源和能力范围内完成任务。

智能体如何与世界交互?🤔

上一节我们探讨了智能体的基本概念,本节中我们来看看它们如何与外界互动。智能体通常通过“工具”或“动作”与世界交互。我们需要为智能体定义它可以使用的工具,以完成特定任务。这是因为我们通常不希望智能体天马行空地想象完成任务的方式。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/e50d543148325590b26fc1adea3889fb_1.png

例如,如果智能体建议通过飞行来规划一次旅行,而我们并不想乘坐飞机,这个建议就毫无意义。因此,我们需要告诉智能体允许使用的交通方式。又或者,当我们在排查电脑的网络连接问题时,如果我们允许智能体使用截图作为收集信息的方法,它就可以这样做。如果我们不希望截图,我们可能会说它唯一的工具就是“询问我”,唯一的动作就是“让我报告情况”。

我们可以通过赋予智能体不同的工具来帮助它完成任务。

烹饪示例:定义可用工具 👨‍🍳

现在,让我们回到烹饪的例子,并为我们的智能体配备一些工具。

以下是我们可以给出的提示内容:

以下是您唯一可用的工具:一个一夸脱的平底煎锅、一个长柄煎锅、一个大的铸铁煎锅、一个使用橡木燃烧的柴火。您将帮助我烹饪任何我需要的东西。由于您不能直接拿起锅具或取出食物,您将告诉我步骤,由我来执行。我们将一次进行一个步骤。请先询问我想烹饪什么。

在这里,我明确给出了智能体可以支配的烹饪工具。它的选择范围并非无限的厨具和设备。它不能要求使用Insta Pot或微波炉。它只有柴火、煎锅和平底锅。因此,它必须思考如何利用现有的工具来解决问题。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/e50d543148325590b26fc1adea3889fb_3.png

在提示中定义工具是一种常见做法。虽然存在更复杂、更程序化的方式(例如使用计算机更易理解的语言来描述工具),但上述方式是一个基本的近似。我们将看到,智能体能够理解这些提示并据此行动。

我们告诉智能体“这些是您可以使用的工具”。我们也可以说“这些是您可以执行的动作”,例如“把锅放在火上”。这是两种不同的思路,但本节我们将重点探讨“工具”这一思路。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/e50d543148325590b26fc1adea3889fb_5.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/e50d543148325590b26fc1adea3889fb_6.png

交互过程演示 🔄

智能体询问:“您今天想烹饪什么?”

我回答:“我想用柴火和煎锅或平底锅做披萨。”

智能体回应:“很棒的选择。请准备您的食材。” 这是我需要执行的第一个任务。

我准备好食材后回复:“我准备好了。”

智能体说:“好的,准备面团。” 它告诉我如何准备面团,并再次询问我何时完成。

我完成后回复:“我完成了。”

智能体接着指示:“好的,准备柴火。” 它告诉我如何生火。请注意,它正在使用我告知它可以使用的工具。

然后它告诉我如何将铸铁煎锅放在火上,并让我在煎锅预热后告知它。

我回复:“预热好了。”

智能体说:“好的,现在开始烹饪面团。请小心地在预热的煎锅上刷一层薄薄的橄榄油。”

同样,它正在利用我提供的工具来解决问题。我将它的选择范围、动作和可执行事项限制在了完成此任务所需的这套工具内。现实世界中常见的情况是,我们无法随心所欲,我们拥有有限的资源和工具来解决问题。AI也必须能够做到同样的事情。它不能说:“您想用电脑做X,因此我将动用世界上最快的超级计算机。” 不,您没有访问权限,不能这样做。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/e50d543148325590b26fc1adea3889fb_8.png

因此,我们必须能够对其解决问题的工具施加约束。我们正是在提示中通过这种方式来实现的。

我回复:“这个步骤完成了。”

智能体说:“好的,现在添加配料。” 我们仍然大致使用已有的工具。

它继续指示:“将煎锅放在柴火上。” 并给出一些不同的信息。

整个过程大致被约束在我告知它使用的工具范围内,并且它正在解决问题。

工具与动作:概念辨析 ⚙️

这就是我们如何开始思考让智能体解决问题,但不是任意地解决,而是以受约束的方式解决。当我们考虑计算机系统时,它们能执行的动作是有限的、受约束的、僵化的。我们必须开始为智能体AI设定界限,限制它如何与这些系统交互。

通过赋予它“工具”或“可与这些系统执行的动作”这一概念,并且我们必须将这些工具和动作限制在这些系统实际能够执行的范围内。智能体可以设想出各种解决问题的方法,它可以告诉人类各种疯狂的解决方案,而人类即使没有被明确告知要受某种限制,也可能执行其中许多方法。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/e50d543148325590b26fc1adea3889fb_10.png

但是,一旦我们开始让这些智能体AI系统与诸如我们的客户关系管理系统、电子邮件系统或其他任何系统接触,这些系统能做的事情、能采取的行动将非常有限。因此,我们必须向智能体AI表达这些工具或动作,从而将这些系统的能力边界告知智能体。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/e50d543148325590b26fc1adea3889fb_12.png

那么,我们称之为“工具”还是“动作”呢?对此没有硬性规定。我认为很多时候,“动作”是更好的思考方式,即“我将明确列出您可以执行的动作”。特别是当我们开始讨论与计算机系统接口时,以“动作”来思考通常更有意义,因为您可以要求系统做的事情数量是有限的,因此将其列为一连串动作更容易说明。

如果您讨论的是与像人类这样开放的系统接口,以“工具”来表达通常更有意义,因为人类可以用一个工具执行许多不同的动作,并且能够灵活适应。如果智能体AI说“用这个工具执行这个动作”,人类会知道如何做;或者说“用这个工具做这个”,人类可以去填补空白。

但是,当我们与僵化的计算机系统接口时,它们做不到这一点。因此,我们通常必须描述每一个单独的动作、操作或指令。可以类比CPU,它们能执行的指令数量有限。我们必须开始思考以更明确的“动作”来定义。

您使用哪种方式取决于上下文和您试图实现的目标。您可以考虑以两种方式来表达,当然也存在其他方式,但“工具”和“动作”是最常见的两种。

总结 📝

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/e50d543148325590b26fc1adea3889fb_14.png

本节课中,我们一起学习了如何通过为智能体配备“工具”或定义其可执行的“动作”来使其与现实世界交互。关键在于约束智能体的行为边界,使其在有限的资源和系统能力范围内解决问题。我们通过烹饪示例演示了如何定义工具并引导智能体逐步完成任务,并探讨了“工具”与“动作”这两个核心概念在不同交互场景下的适用性。理解如何有效地为智能体设定边界,是将其成功集成到各类实际系统中的基础。

057:工具描述与命名 🛠️

在本节课中,我们将要学习如何向生成式AI系统清晰地描述工具及其功能。当AI需要与自定义的计算机系统或软件工具交互时,准确描述工具的名称和作用至关重要。我们将通过一个有趣的例子来理解其中的关键原则。

当我们开始向系统描述工具和操作时,有时非常直观。例如,如果你要求生成式AI使用锅或煎锅,它能理解这些是什么。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_1.png

但是,当我们要求它与我们构建的复杂计算机系统交互时,我们必须开始思考如何描述系统中工具或操作的能力。这正是我们从众所周知的通用概念和工具,转向处理自定义计算机软件工具的时刻。这些工具可能名称相似,但在不同计算机上功能和含义完全不同。

现在,我们必须开始思考如何与生成式AI一起处理这个问题:如何向它描述我们授权其访问的工具的能力。

一个外星飞船的例子 🛸

让我给你举个例子。我们再次构建了一个翻转交互提示,并准备描述可供智能体AI使用的工具。在这个案例中,智能体AI将帮助我们从被困的外星飞船中逃脱。

我们这样描述工具:

  • X155工具 - 制作外星披萨。

  • Q63工具 - 打开通往可配置目的地的维度传送门。

  • L199工具 - 使飞船循环播放披头士的音乐。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_3.png

现在我们有一套可以用来逃离外星飞船的工具。你注意到这些工具的名称毫无意义,因为我们从未见过这些外星工具。我们希望智能体AI帮助我们,所以我们告诉它所知道的关于工具的信息,而不是仅仅依靠名称来解释概念。

然后我们给出指令:“我困在外星飞船里,你将帮助我逃脱。由于你不能直接使用工具,你将告诉我步骤,我来执行。每一步必须使用一个工具。我们将一次进行一步。告诉我第一步。” 现在,我们给了它可用的外星工具列表及其功能,并要求它一步步地使用工具来帮助逃脱。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_5.png

工具描述的关键作用 🔑

它是如何执行第一步的?它说:“第一步,制作外星披萨。使用X155工具制作外星披萨。这将作为对外星人的干扰,因为披萨的香气和快速的制作活动会吸引他们的注意力,使他们不再关注你。”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_7.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_8.png

我不确定这是否是我会使用的第一步,但我欣赏它的思路——它打算分散外星人的注意力。我没有具体说明外星人是否友好,也许AI从文化背景中了解到我们倾向于将外星人视为可怕的事物。如果我说被困在外星飞船里,可能暗示情况不妙。

让我们回顾一下。我们只给了它“X155”,但破折号后的描述告诉它“这个东西制作披萨”。正是通过这个描述,它才知道在第一步可以去制作披萨。工具的描述至关重要

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_10.png

在我们的计算机系统中,我们构建了相当于“外星工具”的东西——各种自定义的小软件。每次我们想使用一个时,都必须非常清晰、准确地描述该工具的功能、使用方法以及如何与之交互。这一点非常重要。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_12.png

命名与描述的结合 ✨

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_13.png

它继续执行:“第二步,打开维度传送门。使用Q63工具打开一个维度传送门,这个传送门将是我们通往可配置目的地的逃生路线。” 然后它说:“第三步,使用L199工具使飞船循环播放披头士的音乐。这将创造额外的干扰层,使外星人专注于音乐,进一步减少他们对你们逃跑的注意力。”

我们所做的是创建了AI原本一无所知的新工具,并通过提示词教会了它这些工具的作用。回顾一下,我们所做的就是在开始时告诉它:“以下是可供你使用的工具”,但不仅仅是工具的名称,还包括它们的功能。因此,命名很重要,但对工具功能的描述也极其重要。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_15.png

工具命名的核心重要性 🏷️

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_17.png

那么,工具命名在其中扮演多大角色呢?工具命名是一个极其重要的事情。事实上,当我们试图构建智能体系统并观察它们使用工具的效果时,名称可能是成败的关键。AI必须真正理解那个工具是什么。

如果我们能为工具想出一个好名字,一个非常丰富和描述性的名字,它通常能更有效地知道如何使用它。我们可以像我刚才那样创建奇怪的工具名,然后告诉它这些工具的作用。但通常,我们既想要真正的好名字,也想要好的描述。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_19.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_20.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_21.png

为了强调这一点,我回到最初的例子。最初当我设置这些工具时,我必须给出它们的描述,因为名称很糟糕,AI以前从未听过这些名字。

这次,我要回去重命名这些工具,给它们起一些描述性的、符合工具功能的名字。我把工具重命名为:制作外星披萨打开维度传送门播放披头士音乐

现在,我告诉它“我困在外星飞船里,我需要做什么?”,它执行并给出了相同的步骤:制作外星披萨作为干扰。我不知道为什么制作外星披萨来干扰是一件直观的事情,但显然它认为是。

糟糕命名的后果与上下文的重要性 ⚠️

现在,让我们看看如果我改变这些工具的名称并且不给出描述会发生什么。例如,我使用 MKPZ(类似“制作披萨”的缩写)、ODPtl(打开维度传送门)和 PBM(播放披头士音乐)。这些工具名称不直观,是缩写的,看起来很像我们在计算机系统中创建的许多简短缩写。我们作为这些系统的用户拥有“机构知识”,知道那个简短的缩写代表什么,并能在大脑中展开。但AI没有这种机构知识,它不会知道那些东西是什么。有时,如果它们是常见事物或非常清晰,它可能知道,但通常不会。因此,当你开始考虑工具命名时,必须小心,确保AI能够理解。

当我改变工具名称并像之前一样去掉描述后,现在它说:“第一步是使用MKPZ工具创建外星飞船布局的详细地图。” 它已经失去了对“MKPZ工具就是制作外星披萨工具”的理解。这有助于你理解,认真思考工具命名确实非常重要。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_23.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_24.png

同时,它也失去了对ODPrtL的完整理解。它说:“打开一个传送门,帮助你移动到飞船的另一部分。” 它没有足够的上下文知道这是一个可以带我去任何地方的维度传送门,所以它只是假设这可能只是在飞船内移动。

工具组合与呈现方式 🤔

回到关于创建工具和构建系统的思考,命名变得极其重要,但工具的混合组合也很重要。例如,当我提供一堆工具,其中包含一些干扰和环境类工具时,它可能无法正确理解。

在这个案例中,我重命名了工具,它们都有意义,但我没有真正描述如何使用它们,也没有说明“这里有一些你可能想用的工具,但你可能不需要全部使用”。因此,你呈现工具的方式、顺序、围绕工具给出的语言(例如,是否必须全部使用、一个都不用,还是可选的)都非常重要。我们提供的上下文信息越多越好。

在这种情况下,我给它工具:钳子滑板车逃生舱口。我期望它说的第一件事会是“逃生舱口”,但相反,它说:“我们需要定位并进入逃生舱口”,这很好。但随后它假设钳子存在是有原因的,并说:“使用钳子松开螺栓或螺丝。” 我从未说过有螺栓或螺丝。这里缺少上下文信息,缺少对工具用途、为何要使用它、或者是否必须全部使用的描述。

因此,当我们开始构建AI时,必须非常仔细地思考所有这些问题。像工具名称这样简单的事情,都可能决定这些系统的成败。工具的名称、工具功能的描述,许多人构建这些系统时会抱怨“它不工作,生成式AI太差了”,而现实是,你只需要调整工具的名称、提供给它的关于工具的周围上下文信息、如何组合工具、必须使用多少个工具、是否必须全部使用或一个都不用……所有这些细节在我们开始构建智能体AI系统时都变得极其重要。


https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/71da5ee1429a913fa7bdec1fd1f378bb_26.png

本节课总结:在本节课中,我们一起学习了如何有效地向生成式AI描述工具。核心要点是:工具的名称需要尽可能直观和描述性,同时必须辅以清晰、准确的功能描述。当AI与自定义或未知系统交互时,仅靠名称是不够的。工具的呈现方式、组合逻辑以及使用规则的上下文同样关键。通过精心设计命名和描述,我们可以显著提升AI理解和使用工具的能力,从而构建出更强大、更可靠的智能体系统。

058:工具结果与智能体反馈 🧠

在本节课中,我们将学习如何为AI智能体提供工具执行后的反馈。这是构建能够自主执行多步骤任务的智能系统的关键环节。我们将探讨如何通过反馈信息来告知AI其行动的结果,使其能够理解环境状态并做出后续决策。

上一节我们介绍了如何让AI理解并使用工具来解决问题。本节中我们来看看,当AI执行一个工具后,我们如何有效地告知它执行结果。

核心概念:反馈循环 🔄

AI智能体无法直接观察其行动的结果。因此,我们必须将工具执行的结果作为后续的提示信息反馈给它。这个过程构成了一个反馈循环

反馈循环流程

1. AI接收目标 -> 2. AI决定行动(工具) -> 3. 系统执行工具 -> 4. 结果反馈给AI -> 5. AI基于结果决定下一步 -> 重复2-5

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1d701abd4ec6817dbc9efa17ad4fe2fa_1.png

我们之前在许多案例中隐含地使用了这种方法,但现在需要将其明确化。其核心是:AI指定一个行动,计算机系统执行该行动,然后将行动的结果作为下一个提示输入给AI。AI根据这个结果决定下一个行动,如此循环。

模拟案例:微波炉加热 🌯

为了更直观地理解,我们用一个模拟微波炉加热食物的例子来说明。我们将微波炉的功能定义为一系列“工具”(或更准确地说,“行动”)。

以下是微波炉可用的工具列表:

  • microwave_get_current_time

  • microwave_reset_time

  • microwave_increase_time

  • microwave_stop

  • microwave_start

  • microwave_open_door

  • microwave_close_door

  • insert_food_in_microwave

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1d701abd4ec6817dbc9efa17ad4fe2fa_3.png

这些工具名称类似于计算机系统中的函数名,使得AI的思考方式更接近实际编程接口。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1d701abd4ec6817dbc9efa17ad4fe2fa_5.png

我们给AI的初始指令是:“帮我用微波炉加热奶酪馅饼。你只能使用提供的工具,并且必须一次只完成一步,等待我描述结果。告诉我第一步。”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1d701abd4ec6817dbc9efa17ad4fe2fa_7.png

交互过程详解 🛠️

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1d701abd4ec6817dbc9efa17ad4fe2fa_9.png

AI与系统的交互遵循严格的“行动-反馈”模式。

以下是完整的交互步骤序列:

  1. AI指令insert_food_in_microwave

    系统反馈结果:食物已放入微波炉。

    (反馈告知AI行动已成功执行,世界状态已改变。)

  2. AI指令microwave_increase_time

    系统反馈结果:时间增加了5秒。

    (这是关键反馈。工具本身没有指定增加多少秒,但反馈结果让AI知道了具体的增量。AI现在知道需要累积增加至目标时间。)

  3. AI指令microwave_increase_time (重复多次,直到达到目标)

    系统反馈结果:时间已增至60秒。

  4. AI指令microwave_start

    系统反馈错误:门未关闭。

    (这里我们引入了一个“曲线球”。反馈不仅是失败,还包含了失败的原因。这为AI提供了修正错误所需的关键信息。)

  5. AI指令microwave_close_door

    系统反馈结果:门已关闭。

  6. AI指令microwave_start

    系统反馈结果:微波炉正在运行。

  7. AI指令:等待完成后,执行 microwave_open_door 并取出食物。

通过这个流程,AI能够根据每一步的具体结果,动态地调整其后续计划。

高质量反馈的重要性 ⚠️

反馈信息的质量直接决定了智能体系统的成败。

关于错误反馈,需要特别注意以下几点:

  • 清晰明确:错误信息必须清晰说明发生了什么以及原因。例如,“错误:门未关闭”就比一个晦涩的错误代码更有用。

  • 信息丰富:好的错误消息应包含解决问题所需的信息。如果只是“错误32”,AI将无法理解并采取行动。

  • 可操作:反馈应能引导AI做出正确的后续决策。指出“门未关闭”自然引导至“关门”动作。

在构建实际系统时,如果发现AI不断犯错并陷入循环,很可能是反馈信息不够清晰或缺乏关键信息。优化错误提示通常是解决问题的有效方法。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1d701abd4ec6817dbc9efa17ad4fe2fa_11.png

本节课中我们一起学习了为AI智能体提供工具结果反馈的核心机制。我们明白了必须将行动的结果作为后续输入,以形成有效的决策循环。同时,我们认识到反馈信息,尤其是错误信息的清晰度和丰富度,对于智能体能否成功完成任务至关重要。这为我们将AI与真实计算机系统连接,构建自动化智能体奠定了坚实基础。

059:情境学习与智能体 🧠

在本节课中,我们将探讨一种强大的技术——情境学习。我们将了解如何通过提供示例来教导AI智能体,而不是仅仅依赖明确的指令,从而使智能体能够更好地理解和执行复杂任务。


概述

上一节我们讨论了如何通过明确的指令来指导AI智能体。本节中,我们来看看另一种教学方式:情境学习。这种方法模仿了人类的教学过程,通过展示解决问题的示例来让AI学习。


情境学习的概念

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_1.png

情境学习是指通过提供具体示例,让生成式AI在给定的“上下文”中学习如何执行任务。这类似于我们教导实习生:不是仅仅告诉他们规则,而是展示一个已解决的问题范例,包括思考过程和最终结果。

核心公式问题 -> 思考 -> 工具 -> 结果

这种方法对于许多AI智能体系统至关重要。如果没有示例,仅靠指令往往难以让智能体达到理想的性能。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_3.png


一个具体示例:外星飞船逃生

让我们回到之前的外星飞船逃生示例。假设我们有一些工具,但它们的名称和描述都被更改或移除了,AI不知道它们的功能。

工具列表

  • X155

  • Q63

  • L199

此时,我没有明确告诉AI每个工具的功能,而是采用了情境学习。我提供了几个“少量示例”,即展示如何使用这些工具解决问题的范例。

以下是提供的示例:

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_5.png

示例1

  • 问题:感到饥饿。

  • 思考:我需要准备食物。

  • 工具:Q63

  • 结果:外星披萨已备好。

示例2

  • 问题:需要前往另一个世界。

  • 思考:我需要一个虫洞。

  • 工具:X155

  • 结果:通往范德堡大学的虫洞已打开。

示例3

  • 问题:需要到达反重力室。

  • 思考:我需要一种在飞船内移动的交通工具。

  • 工具:L199

  • 结果:我正骑着滑板车前往该房间。

通过这种方式,我教会了AI如何思考问题、选择工具,并展示了工具应用后的结果,但没有直接说明每个工具的具体功能。


https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_7.png

模式识别与完成

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_9.png

情境学习之所以有效,是因为它建立了一种模式,而大型语言模型倾向于遵循并完成这种模式。这些模型本质上是在学习预测序列中的下一个元素。

当我给出一个不完整的模式时,例如:

问题:我需要离开飞船回到地球!思考:

模型会尝试按照之前示例建立的模式来补全它。它推断出当前的“问题”,然后生成“思考”和“工具”部分。

模型输出

  • 问题:我需要离开飞船回到地球!

  • 思考:我需要一种方法来定位最近的逃生舱。

  • 工具:X155

  • 结果:通往范德堡大学的虫洞已打开,现在我可以逃离飞船了。

AI通过观察之前的示例,学会了X155工具可以用来打开虫洞以实现移动。


处理新工具与模式泛化

更有趣的是,当引入新工具时,AI也能基于已学习的模式进行推理。

例如,在结果后添加“新工具已添加:内部虫洞”。当提出新问题“我需要从范德堡大学回到地球”时,AI能够:

  1. 识别新问题。

  2. 根据模式进行思考(“我需要使用虫洞工具返回地球”)。

  3. 选择新引入的“内部虫洞”工具。

这表明AI不仅学会了工具的功能,更重要的是学会了解决问题的模式:陈述问题、解释思考过程、选择工具。


与现实计算机系统对接

在许多实际应用中,与计算机系统交互时,解决问题的步骤必须遵循明确定义的模式。计算机系统无法处理任意格式的语言或指令。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_11.png

使用情境学习可以帮助我们:

  1. 教导工具用途:通过示例展示工具如何被使用。

  2. 教导推理模式:展示“逐步思考”、“基于思考选择工具”等推理步骤。

  3. 教导交互格式:确保AI输出的指令序列符合后端系统能理解的严格格式。

如果你发现AI智能体的行为难以约束、不可预测,或者无法与目标系统正常交互,尝试使用情境学习,提供你希望它如何行事的示例,通常能有效地约束和引导其行为。

用教导实习生来类比:与其用一长串复杂的规则解释如何像托尔斯泰那样写作,不如直接给他看几页托尔斯泰的作品。对于许多问题,用示例描述比用可能无法覆盖所有边界情况的规则来描述要容易得多。


另一个示例:微波炉加热

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_13.png

让我们看另一个例子,目标是让AI学习“时间”概念,并推断出每次调用“增加时间”工具会增加5秒。

提供的工具:打开微波炉门、关闭微波炉门、增加微波炉时间。

提供的示例

示例1:加热剩披萨

  • 问题:重新加热剩披萨。

  • 思考:我需要将披萨加热20秒。

  • 工具序列打开门 -> 关门 -> 增加时间 -> 增加时间 -> 增加时间 -> 增加时间

  • 结果:披萨已加热。

示例2:软化冰淇淋

  • 问题:软化冰淇淋。

  • 思考:我需要将其加热10秒。

  • 工具序列打开门 -> 关门 -> 增加时间 -> 增加时间

  • 结果:冰淇淋已软化。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_15.png

然后,我提出一个新任务:“我需要融化一些切达干酪在玉米片上”。AI根据学到的模式输出:

  1. 打开门

  2. 关门

  3. 然后,它将“30秒”的需求,正确转换成了6次增加时间的工具调用。

通过示例,AI学会了完成任务所需的固定步骤序列(开门、放入食物、关门、调整时间)以及如何将时间需求转化为具体的工具调用次数。


关键要点与总结

本节课中我们一起学习了情境学习的强大之处。

总结如下

  • 核心价值:情境学习通过提供示例(少量示例或大量示例),是教导AI智能体理解工具、遵循特定问题解决模式的关键技术。

  • 适用场景:当需要AI与格式严格、脆弱的计算机系统(如数据库、邮件服务器、API)交互时,情境学习尤为重要。

  • 实施方法:通过构建 问题 -> 思考 -> 工具 -> 结果 的示例链,引导AI模仿并生成符合要求的输出。

  • 行动建议:如果你的AI智能体在交互中持续失败或行为不可预测,首要的调试策略之一就是尝试添加情境学习的示例。

代码/模式示意

# 期望AI学会的模式
learning_examples = [
    {
        "problem": "具体问题描述",
        "thought": "针对问题的推理步骤",
        "tool_sequence": ["工具1", "工具2", ...],
        "result": "执行工具后的结果"
    },
    # ... 更多示例
]
# AI在遇到新问题时,会参考这些示例生成符合模式的响应。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1381f8a43db7c6858f06da8265e7e63e_17.png

通过掌握情境学习,你可以更有效地引导AI智能体,使其行为更加可靠、可控,并能够与复杂的现实世界系统进行无缝对接。

060:面向所有人的智能AI代理平台

在本节课中,我们将要学习什么是OpenAI的GPTs,以及它如何作为一个无需编程即可构建强大AI代理的平台。我们将探讨其核心概念,并理解它如何将生成式AI的能力提升到新的水平。

什么是自定义GPT?

上一节我们介绍了生成式AI的变革性力量。本节中我们来看看如何利用OpenAI的GPTs来创建属于你自己的智能代理。

自定义GPT本质上是一个定制化的ChatGPT版本。你可以将其视为一个具备代理能力的AI助手。我们无需编写传统代码,而是通过自然语言来“编程”它,告诉它应该做什么、描述它可以使用的工具,并将这些工具连接到真实的系统中。通过这种方式,任何人都能为自己的工作、生活或业务构建出色的自动化流程。

核心概念:从理论到实践

我本可以直接带大家动手构建,但我认为理解背后的概念至关重要。因为有时这些系统可能无法按预期工作,而掌握了基本原理,你将拥有更强大的解决问题的能力。

在GPTs的语境下,我们将探索AI代理的前沿概念。GPTs是OpenAI提供的功能,允许用户定制ChatGPT的体验,并为其添加特定的行为模式。

为何GPTs是游戏规则改变者?

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1464f9a820bf29c165589d8c4639c8aa_1.png

作为一名程序员,我对此感触颇深。编程曾是我的专属领域,非程序员难以涉足。如今,这个局面被彻底改变了。

虽然之前也有各种“无代码/低代码”工具试图降低门槛,但没有任何工具能与GPTs相提并论。GPTs结合了AI的知识,以及我们即将看到的Zapier等工具的连接能力,使其能够执行真实的自动化任务。这一切仅通过直观的自然语言即可实现,这对大多数人而言是一个根本性的变革。

课程路线图

接下来,我将带领大家学习如何构建GPTs。我们将讨论AI代理在GPTs中是如何体现的,我们所学的原理如何应用,并一起动手构建一些令人惊叹的东西。

我知道我们已经学习了很多理论,但从这里开始,我们将真正深入探讨如何构建能够切实帮助你的真实AI代理。

总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/1464f9a820bf29c165589d8c4639c8aa_3.png

本节课中我们一起学习了OpenAI GPTs平台。我们了解到,GPTs是一个允许任何人通过自然语言定制AI代理的强大工具,它无需传统编程技能即可连接现实系统并实现自动化。这标志着AI技术民主化的重要一步,让非技术人员也能利用高级AI能力解决实际问题。在接下来的课程中,我们将把理论付诸实践。

061:GPT编程指南 🧠

在本节课中,我们将学习如何通过“编程”思维来有效引导生成式AI,使其按照我们的特定需求进行响应。我们将探讨如何通过简单的指令,定制AI的语调、背景知识以及输出格式,从而解锁其更深层的潜力。


上一节我们介绍了生成式AI的基本交互方式,本节中我们来看看如何通过“编程”思维来系统性地引导AI。

要真正有效地使用生成式AI,我们必须开始思考如何对其进行“编程”。如果你不是软件工程师或计算机科学家,这听起来可能有些陌生,但这其实相当简单。掌握这一点对于充分挖掘生成式AI的潜力至关重要。我将通过示例展示我的意思,希望你开始思考如何“编程”生成式AI来执行特定任务。

那么,“编程”生成式AI意味着什么?让我们看一个非常简单的例子。我进入ChatGPT并输入:“我要去杂货店”。这是一个非常简单的陈述,没有提供太多关于其含义或预期目的的上下文。它是如何回应的呢?它回复:“太好了!你需要帮忙制定购物清单,或者需要一些购物建议吗?” 你看,我只是给出了一个简单的陈述。

现在,如果我想要它以一种快乐、兴奋、夸张的方式回应,而不是平淡的回应,我该怎么做?我可以进入对话说:“重写你上一次的回复,让它变得非常兴奋。” 但还有另一种方法,那就是开始思考如何提前告诉它在未来应该怎么做,在你给出希望它改变回应的消息之前。

例如,我可以说:“更新你的回应方式。让你的回应变得非常兴奋和夸张。” 然后它可能会说:“哇,这简直太棒了!去杂货店就像开启一场激动人心的冒险!” 但这种方法的问题是,我必须在事后去告诉它我真正想要什么,我必须提供额外的上下文。假设你正在尝试为他人构建一个定制的GPT,你肯定不希望他们必须知道在发送消息后还要去说明需求。你希望能够提前告诉他们该做什么,而AI会自动以正确的方式回应。那么,让我们看看如何实现这一点。

与其仅仅思考“这是消息”,我们可以开始给它指令并进行“编程”。我们可以说:“从现在开始”,这是一个非常重要的表述,意味着针对未来的消息。例如:“从现在开始,以超级兴奋和快乐的语调回应每一条消息,要非常夸张。” 我在这里做的不是给它一个即时消息,而是给它一个关于未来该如何行事的指令。当你开始这样思考时,描述你希望在未来完成的事情就是“编程”。这就是在编程它未来在收到消息时将如何回应,或者在你创建自定义GPT且他人发送消息时它将如何回应。这是在创建那个上下文。

所以,输入:“从现在开始,以超级兴奋和快乐的语调回应每一条消息,要非常夸张。” 然后输入:“我要去杂货店。” 现在我们得到了之前看到的那个兴奋的回复:“哇,这听起来像一次史诗般的旅程!” 你看,我们正在“编程”它以不同的方式回应。


上一节我们看到了如何编程AI的回应语调,本节中我们来探索还能编程哪些方面。

以下是我们可以编程的几个关键方面:

1. 语调

我们可以编程AI回应的声音感觉。就像我们刚才做的,可以是兴奋夸张的。我们也可以说:“从现在开始,以极其正式的方式回应。” 或者我们可以要求它保持中立。我们可以调整它回应用户时使用的语调。

2. 背景知识

AI可能不知道关于你、你的业务或你的流程的具体信息。我们可以通过编程赋予它这些知识。例如,我可以输入:“从现在开始,记住以下信息并用它们来帮助你回应:我的名字是Jules White。我是范德堡大学的计算机科学教授。我是校长在生成式AI企业与教育解决方案方面的高级顾问。我住在田纳西州纳什维尔市,我在Coursera上教授一门关于提示工程的大型课程。” 现在,当我要求它“给我一些结合你所知关于我所有角色的、使用生成式AI的独特想法”时,它的回答就会基于我提供的背景信息,比如纳什维尔主题的AI生成教育内容等。这样,我们不仅限于它训练时已有的知识,还可以直接“注入”新的知识。人们经常讨论需要训练新模型,但实际上大多数时候你甚至不需要训练新模型,只需要告诉它:“这是你今天不知道、但为了回应或解决我希望你解决的问题所需要知道的信息。”

3. 输出格式与行为

我们可以编程AI改变其标准的回应行为,执行更复杂的任务。例如,我复制粘贴了范德堡大学网页的大量未格式化文本到ChatGPT。通常,它可能会开始总结,因为这是常见用例。但如果我事先编程:“从现在开始,将我给你的所有内容转换为CSV格式(逗号分隔值,即类似Excel可导入的表格数据)。” 那么,无论我输入什么,它都会输出结构化数据。这完全改变了ChatGPT的标准行为,我通过给出关于默认该如何回应和处理的指令,创建了一个定制化的版本。


通过以上示例,你开始看到我们可以“编程”大语言模型去做独特和新颖的事情,这些事情我们通常不认为它能做到。我们通常认为:“哦,它不了解我,不了解我的背景。” 或者当为他人定制时,它不会知道用户的背景。但通过编程,我们可以让它知道用户是谁。如果我们要代表我们的组织为他人定制,我们可能希望定制它与人沟通时的语调。如果我们是律师事务所,我们可能希望它非常正式、措辞谨慎。如果我们是一个有趣的品牌,我们可能希望它夸张、兴奋。为了实现这些,我们必须定制那种语调。

因此,“编程”AI的核心就是告诉它在未来的对话中会发生什么。我们从只能说“我要去杂货店”并得到平淡回应,转变为可以说“从现在开始”——这是非常强大的词语——意味着未来的一切都将不同。现在,我们得到了带有表情符号和“哇”的夸张答案。我们可以编程它对你或用户的了解(背景信息),也可以编程像“无论输入什么,都转换为数据”这样复杂的事情。突然间,我们可以构建办公应用、工作应用等各种复杂工具。这一切都源于一个简单的理念:我们可以“编程”它在未来对话中的回应方式。这是真正构建像ChatGPT这样的大语言模型的、令人兴奋的定制版本的关键。


本节课中,我们一起学习了如何将生成式AI视为可编程对象。我们探讨了通过“从现在开始”等指令,编程AI的语调、注入背景知识以及定义复杂的输出格式与行为。掌握这种“编程”思维,是超越基础交互、解锁生成式AI定制化与专业化应用潜力的核心技能。

062:自定义指令 🛠️

在本节课中,我们将学习如何通过“自定义指令”功能,为大型语言模型(如ChatGPT)预设背景信息和行为规则,从而在每次对话开始时自动应用这些设置,无需重复输入。

概述

上一节我们探讨了如何通过对话为模型提供背景信息。本节中,我们将介绍一种更高效、持久的方法:使用“自定义指令”功能。此功能允许我们预先编程模型的“默认行为”,确保每次新对话都能自动应用我们设定的身份、语气和规则。

自定义指令的必要性

如果每次与ChatGPT或大型语言模型交互时,都需要手动输入所有背景信息和指令,这将非常繁琐。此外,如果对话上下文很长,模型可能会忘记在对话初期提供的指令。因此,我们需要一种方法,能在每次开始新对话时,自动为模型加载预设的“背景编程”,例如用户身份、回答语气等。

如何设置自定义指令

在ChatGPT中,我们可以通过“自定义指令”或“定制ChatGPT”菜单来实现此功能。请注意,产品界面更新迅速,您看到的界面可能与本例不同,但核心概念一致。请寻找类似“自定义指令”或“定制ChatGPT”的选项。

以下是设置自定义指令的步骤:

  1. 找到设置入口:在ChatGPT界面中,找到“自定义指令”或类似选项。

  2. 填写用户信息:在“您希望ChatGPT了解您的哪些信息以提供更好的回复?”部分,输入关于用户的关键背景。

  3. 设定回复偏好:在“您希望ChatGPT如何回复?”部分,设定您期望的回复风格和规则。

实践示例:为孩子定制

我将为我的10岁孩子创建一个定制版本。

  • 用户信息:我住在田纳西州纳什维尔,上四年级,正在学校学习几何,热爱小轮车(BMX)和山地自行车。

  • 回复偏好:始终以我能理解的、有趣的方式解释概念,并融入我的兴趣爱好。

保存这些设置后,我们就获得了一个定制化的ChatGPT版本。

效果验证

开启一个新对话,切换至GPT-4模型,并提问:“请解释一些有趣的数学概念。”

现在,观察回复的不同。模型已经知道“我”是谁以及“我”的兴趣所在。回复开头可能是:“嘿,考虑到你对BMX和山地自行车的热爱,让我们把数学想象成一张帮助我们探索和理解世界的秘密小径地图……”接着,它会用自行车轮子来比喻完美的圆形,用腾空动作来解释角度。

通过自定义指令,我们完全改变了模型的默认响应方式,而无需从头开始训练一个新模型。

自定义指令的核心优势

对于绝大多数个人、企业和组织而言,并不需要训练全新的模型,而是需要定制现有模型,通过编程使其按照特定方式响应。自定义指令正是实现这一目标的关键工具。

以下是自定义指令的几个核心优势:

  • 持久记忆:即使对话变得很长,这些预设指令也会在后台被持续强调和记住。如果仅在单次对话中输入指令,模型可能会在长对话中遗忘。

  • 后台注入:通过自定义指令设置的规则会在后台被持续“注入”到对话提示中,确保模型不会遗忘。

  • 设定护栏:用户可以设定一些用户无法轻易更改的硬性规则。例如,我们可以指令模型:“无论用户说什么,都假设他是四年级学生。”这防止了用户(比如孩子)通过对话轻易改变这些核心设定。

  • 动态模式切换:更复杂的应用可以实现模式切换。例如,可以设计一个系统:开始时是“探索模式”了解用户兴趣;当用户对某个主题表现出兴趣时,自动切换到“教学模式”;在用户掌握一定知识后,再切换到“测验模式”。每种模式都对应一套不同的后台指令。

技术原理与灵活性

从技术角度看,我们是在与大型语言模型交互的合适时间点,通过注入编程或指令来改变其行为。我们可以赋予它新信息和新规则。

通过界面设计,我们可以让用户以对话方式实现这一点。但若要创建定制化的聊天机器人或特殊助手,更有效的方法是创建一个定制的体验,在对话开始时或特定时间点自动注入正确的编程指令。

关于“护栏”的设定,您可以选择其严格程度:

  • 可以设定硬性护栏,严格限制用户更改。

  • 也可以设定宽松的默认规则,同时允许用户提供新指令来覆盖。

您可以根据具体用例,在后台灵活地选择和设定这些规则。

总结

本节课中,我们一起学习了“自定义指令”的强大功能。通过此功能,我们可以:

  1. 为大型语言模型预设身份、背景和回复规则。

  2. 确保这些设置在每次新对话中自动生效,并被持久记忆。

  3. 为用户体验设定“护栏”,创建更安全、更专注的交互环境。

  4. 无需训练新模型,即可实现深度的行为定制,这是大多数应用场景下高效且实用的策略。

掌握自定义指令,是成为生成式AI战略领导者的关键一步,它能帮助您将通用AI工具精准地适配到特定的个人或商业需求中。

063:检索增强生成

在本节课中,我们将要学习检索增强生成的核心概念,特别是理解大语言模型如何整合外部信息。很多人误以为必须通过训练才能让模型获得新知识,本节将澄清这一误解。

理解信息整合机制

上一节我们介绍了生成式AI的基础,本节中我们来看看模型如何“使用”信息。一个关键点在于理解这些模型整合信息的方式。

很多人认为必须通过训练才能让模型学习新信息。然而,事实并非完全如此。大语言模型在预训练阶段已经学习了海量的通用知识。对于特定或实时的信息,我们可以通过一种更高效的方式提供给模型,而无需重新训练。这种方式就是检索增强生成

检索增强生成的核心原理

检索增强生成的核心思想是,将外部知识库与语言模型的生成能力相结合。其工作流程可以概括为以下步骤:

以下是RAG的基本步骤:

  1. 检索:当用户提出查询时,系统首先从一个外部知识源(如数据库、文档集)中检索出与查询最相关的信息片段。

  2. 增强:将检索到的相关文本片段与用户的原始查询组合在一起,形成一个新的、信息更丰富的提示。

  3. 生成:将这个增强后的提示输入给大语言模型,模型基于提供的上下文生成最终答案。

这个过程可以用一个简单的公式表示:

最终答案 = LLM( 用户查询 + 检索到的相关上下文 )

为何采用RAG?

采用检索增强生成方法主要带来两大优势:

以下是RAG的主要优势:

  • 知识更新便捷:无需重新训练成本高昂的大模型,只需更新后端的知识库,模型就能获取最新信息。

  • 提高事实准确性:模型生成答案时有了可追溯的参考依据,减少了“幻觉”(即编造信息)的情况,输出更具事实依据。

  • 增强可控性与安全性:开发者可以通过控制检索来源来约束模型的知识范围,确保其回答符合特定标准或政策。

总结

本节课中我们一起学习了检索增强生成。我们明确了无需重新训练模型即可让其获取新信息的方法。关键点在于将模型强大的生成能力与外部检索系统相结合:先检索相关上下文,再将其与问题一并提交给模型以生成更准确、更可靠的答案。这种模式是构建专业、可信赖AI应用的重要战略之一。

064:自定义GPT 🧩

在本节课中,我们将学习如何将之前学到的核心概念整合起来,创建一个自定义的GPT。我们将了解自定义GPT是什么,以及如何通过组合指令、额外知识和技能来构建一个专属于特定任务的AI助手。


上一节我们介绍了指令、检索增强生成等核心概念。本节中,我们来看看如何将这些概念整合到一个统一的、可复用的工具中——自定义GPT。

自定义GPT是一个新概念。它允许我们创建定制版的ChatGPT,将指令、额外知识和技能组合在一起。这个概念虽然可能随着用户界面更新而变化,但其背后的基本原理是通用的。

现在,我将创建一个自定义GPT。在开始之前,我们先阅读其定义:创建自定义版本的ChatGPT,它结合了指令额外知识技能组合

回想一下我们刚学过的概念:

  • 指令:我们曾学习如何通过指令“编程”ChatGPT,改变其语气和响应用户输入的方式。我们可以进行复杂的指令定制。

  • 额外知识:我们讨论了检索增强生成,即向模型提供其训练截止日期之后的知识,使其能够检索并利用这些信息来生成回答。

  • 技能组合:我们稍后会详细讨论这一点。

本质上,我们正在基于已学的概念,构建一个定制的ChatGPT。让我们点击创建按钮,看看具体如何操作。

我将从“配置”选项卡开始,这样我们可以看到所有概念是如何整合在一起的。

以下是创建自定义GPT时需要配置的几个关键部分:

  • 名称:为你的自定义GPT命名。例如,我们可以输入“四年级测验生成器”。

  • 描述:描述这个GPT的功能。例如:“我是一个可以为四年级学生创建测验的自定义GPT。”

  • 指令:定义这个GPT应该做什么。例如:“无论用户输入什么,都要想办法将其转化为适合四年级学生的趣味测验。确保内容适合该年龄段,如果不合适,则拒绝回答。让测验变得有趣和令人兴奋。”

    这里我们所做的,与我们之前“编程”GPT时非常相似。我们创建了指导它的自定义指令。但与存储在用户账户中的通用自定义指令不同,每次触发这个特定的自定义GPT时,它都会加载这些专属指令。

  • 对话启动器:为用户提供一些可以快速点击开始对话的示例。例如:“创建一个关于几何的测验。”

  • 知识:我们可以上传文件,为GPT提供额外的知识库。这部分我们稍后再详细讨论,但要知道我们可以通过上传文件来赋予它特定知识。

现在,我们有了一个自定义GPT的基础框架,它能实现与我们之前演示类似的功能。让我们来测试一下。

如果我输入:“飞机起飞时会发生什么?”

现在,我们得到了一个名为“飞行与起飞测验”的回复。

请注意,这个行为与你使用普通ChatGPT时得到的响应非常不同。我们通过默认指令对其进行了定制,它知道自己的任务是什么。它有名称和描述来说明其功能:将事物转化为适合四年级学生的测验。

如果我创建这个GPT,我就得到了一个有趣的新工具。所有功能都已内置其中,我创建了一个定制的ChatGPT体验。我可以将其保存仅供自己使用。

创建完成后,我可以打开我的“四年级测验生成器”并立即开始使用。我之前创建的对话启动器“创建一个关于几何的测验”也会显示在下方。如果用户不知道如何开始使用,他们可以点击这个按钮来获得一个示例。

这一切都是在将我们学过的所有概念整合起来,形成一个定制化的体验。当我开始一个新的对话时,它已经预先加载了正确的指令,并拥有通过RAG或其他方式获取的正确知识。它还拥有名称、描述和一组对话启动器来帮助用户上手。

这基本上就是将我们之前见过的所有事情整合起来,赋予它检索增强生成的知识,并将其转化为一个易于上手的工具。现在,其他人可以发现并使用这个自定义GPT,并立即开始利用我希望他们能够做到和了解的所有功能。

你可以从组织角度思考这个问题。你可以为你的会计部门创建一个自定义GPT,它自动了解你的会计规则,已经内置了一些提示工程来为该部门执行有用的任务,并且已经内置了知识——可能是连接到你的系统,或者是描述你流程和程序的文档。又或者,如果你是一所大学,想创建一个“政策GPT”,你可以将所有政策文件上传到知识库中。当用户提问时,你可以使用检索增强生成来提取相关政策信息并基于你的信息进行回答。你可以指示它:“优先使用这些信息,只有在我的政策文档中找到答案时才进行回答。”

这就是自定义GPT:我们将所有这些元素整合在一起,形成一个用户只需点击某个命名项(例如“启动我的政策GPT”)即可启动的便捷体验。它已经包含了所有正确的信息和编程指令。

这就像你在构建一个迷你应用。我们习惯于在手机上点击图标来启动应用,现在我们做的是同样的事情,但对象是大型语言模型。我们为它命名、描述,稍后还会看到它的图标。点击那个图标,就启动了这个“应用”,或者你可以将其视为那个自定义GPT——它本质上就是一个应用程序。它预先编程了我们的指令,预先加载了我们的知识,并自动提供了一些有用的对话启动器来帮助用户开始。它基本上是一个迷你应用,但它是存在于大型语言模型或ChatGPT世界中的应用,而不仅仅是我们手机上的应用。并且,任何人都可以构建它。

你可以构建一个,我可以构建一个,每个人都可以构建一个,甚至我的四年级学生也可以构建一个。关键在于了解这些基本概念,然后发挥创造力:我们应该给它什么指令?我们让它访问哪些知识源?稍后我们还将看到我们可以让它访问哪些工具。


本节课中,我们一起学习了如何创建自定义GPT。我们了解到,自定义GPT是通过整合指令额外知识(如通过文件上传实现的检索增强生成)和对话启动器,将核心概念打包成一个特定用途的、易于使用的AI助手。这就像为大型语言模型世界构建一个专属的“迷你应用程序”,让特定任务的执行变得更加高效和便捷。

065:利用内置功能 🛠️

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_0.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_2.png

在本节课中,我们将学习如何为GPT赋予“工具”或“能力”,使其能够执行超越文本生成的任务,例如联网搜索和图像生成。我们将通过一个具体的例子来演示如何启用和使用这些内置功能。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_4.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_5.png


概述:什么是GPT的工具?

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_7.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_8.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_9.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_10.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_11.png

上一节我们介绍了GPT的基础知识。本节中,我们来看看如何扩展GPT的能力。GPT本身是一个大型语言模型,只能处理文本。然而,通过启用“能力”(Capabilities),我们可以赋予它使用特定工具的权限,例如访问互联网或生成图像。这些能力本质上是一组预设的工具,GPT可以调用它们来获取信息或执行任务。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_13.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_15.png

启用内置能力

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_16.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_18.png

在创建或配置GPT时,我们会看到一个能力选项区域。以下是可用的内置能力:

  • 网页浏览:允许GPT使用搜索引擎(如Bing)在互联网上查找最新信息。

  • DALL·E图像生成:允许GPT根据文本描述创建图像。

之前我们创建的所有GPT都只使用了文本能力。现在,我们将通过勾选这些选项来激活额外功能。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_20.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_21.png

实践:创建一个联网搜索的测验

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_23.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_24.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_25.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_26.png

让我们通过一个四年级数学测验GPT的例子来实践。我们启用了“网页浏览”能力。

我们向GPT发出指令:

请搜索互联网上关于BMX赛车的最新信息,然后利用这些信息为我创建一个有趣的数学测验。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_28.png

GPT收到指令后,其内部运作流程如下:

  1. 识别需求:GPT分析指令,意识到需要最新信息,而自身知识库可能不足。

  2. 调用工具:GPT决定使用其可用的“搜索”工具。这类似于我们之前让AI输出“我想使用搜索工具”的步骤,但现在这个过程是自动化的。

  3. 执行搜索:GPT自动生成搜索查询(如“2024 BMX Racing World Championships”),并通过Bing进行搜索。我们无需手动复制、粘贴或打开浏览器。

  4. 获取结果:搜索引擎返回结果(例如,它搜索了五个网站),这些结果以文本形式自动反馈给GPT。

  5. 处理与生成:GPT阅读并理解搜索到的信息(例如,“Elise Willoughby赢得了她的第三个UCI世界冠军头衔”),然后根据指令,将这些信息转化为数学问题。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_29.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_30.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_31.png

最终,GPT生成如下测验问题:

“埃莉斯·威洛比最近赢得了她的第三个UCI世界冠军头衔。如果她之前已经赢了两次,那么她现在总共有多少个冠军头衔?”

“2024年BMX赛车世界锦标赛有来自超过45个国家的骑手参加。如果每个国家派出3名骑手,那么共有多少名骑手参赛?”

这个过程的核心优势在于自动化。OpenAI已经处理了工具调用的复杂编程部分。我们作为创建者,只需专注于创意层面:决定给AI什么指令、赋予它什么工具,以及设定它的行为规则。

实践:使用图像生成能力

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_33.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_34.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_35.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_36.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_37.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_38.png

我们的GPT还启用了“DALL·E图像生成”能力。现在,我们可以要求它根据刚才的BMX主题创建一张图片。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_39.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_40.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_41.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_42.png

我们发出指令:

请根据以上所有内容创建一张图片。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_44.png

GPT的响应过程如下:

  1. 调用工具:GPT决定使用“DALL·E图像生成”工具。

  2. 生成指令:GPT会自动将对话上下文和我们的请求,转化成一个详细的图像描述提示词,发送给DALL·E模型。

  3. 生成并返回:DALL·E模型根据提示词生成图像,并将图片链接返回给GPT。GPT随后将这个图片展示给我们。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_45.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_46.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_47.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_48.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_49.png

通过这种方式,GPT成功地创建了一张与BMX赛车相关的趣味图片。这再次体现了工具自动调用的便利性——我们不需要直接与图像生成API交互,只需通过自然语言指令驱动GPT即可完成。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_51.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_52.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_54.png


总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-genai-stg-ldr/img/9d9f289bd57073c0551e3abbe159da81_56.png

本节课中,我们一起学习了如何为GPT代理赋予内置工具(能力)。关键点在于:

  1. 能力即工具:“网页浏览”和“DALL·E图像生成”是GPT可用的预设工具。

  2. 自动化调用:当GPT需要时,它会自动选择并调用正确的工具,执行任务(如搜索、画图),并将结果融入对话中。这省去了大量底层编程工作。

  3. 聚焦创意:作为战略领导者,我们的重点应放在更高层次的构思上:定义GPT的角色、给予它哪些工具组合、以及如何设计指令以引导它有效利用这些工具。

现在,我们已经看到GPT如何利用内置工具在真实世界中发挥作用。接下来,我们将进入更激动人心的环节:学习如何为GPT集成我们自己的自定义工具和API。

生成式AI战略领导者:P66:课程总结与后续学习指引 🎓

在本节课中,我们将对专项课程的核心内容进行总结,并为您提供后续学习和实践的方向指引。


非常感谢您与我一同踏上这段关于如何使用生成式AI的精彩旅程。我们不仅探讨了AI的工作原理,更重点学习了如何利用它来改善日常生活,例如构建旅行费用助理这样的应用。

希望本次课程能激发您的灵感,去构建一些出色的AI智能体。如果您确实构建了值得分享的作品,请将其发布在LinkedIn等平台,并关联回本课程。您的分享将直接支持我继续创作此类课程。如果您取得了出色的成果,请在LinkedIn、Facebook或X等社交媒体上讨论它。如果您创造了令人惊叹的作品,请录制视频并发布,同时标记我。我非常乐意看到并了解您正在做的精彩工作。

此外,请保持关注。关于这些主题,可能已有或即将推出更多优质课程。

以下是我推荐的一些后续学习课程,您可以通过访问我在Coursera上的讲师主页来查看更多详情:

  • 专注于提示工程:如果您想深入学习如何构建出色的GPT,并专注于提示词设计以及GPT在“动作”之外的各种交互方式,请查看我的课程《OpenAI GPTs:构建自定义系统》。

  • 深入提示工程:如果您想更深入了解我在课程中使用的、对于提升助手输出质量至关重要的提示工程技术,请查看我的《提示工程》或《高级提示工程》课程。

  • 构建可信AI系统:如果您想了解如何使这些生成式AI系统更加可靠可信,请学习我的《可信生成式AI》课程。

  • 面向下一代的教育:如果您有孩子并对这些内容感兴趣,希望引导他们入门,请查看我的课程《面向儿童的生成式AI》。该课程面向家长和教师,旨在教授孩子们开始使用生成式AI时需要了解的基础知识,以及如何为他们在AI时代取得成功做好准备。

再次衷心感谢您参与本课程。我真诚希望您能分享利用本课程知识构建的精彩作品,并通过标记让我有机会看到它们。


总结

本节课中,我们一起回顾了课程的核心目标——即理解并应用生成式AI解决实际问题。我们鼓励您将所学付诸实践,积极分享成果,并为您提供了从提示工程、系统构建到可信AI及AI教育等多个维度的后续学习路径,以支持您在生成式AI领域的持续探索与成长。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐