Press "Enter" to skip to content

ChatGPT 功能:观察、提示和技巧

最近引入的ChatGPT功能代表了一个巨大的飞跃,它让ChatGPT能够使用您的本地文件、数据和系统服务。因此,如果您为ChatGPT提供适当的函数,您可以问它类似“给Kate Bell发送生日祝福的电子邮件”,然后会看到一个新的电子邮件弹出框,其中包含正确的电子邮件地址、正确的主题和生成的生日祝福文本。

很酷,对吧?

我花了一些时间来尝试ChatGPT的功能,并且我想分享一些笔记、观察结果、技巧和诀窍。

对于一个查询,ChatGPT可能会按照正确的顺序调用几个函数。它可以利用一个函数的结果来形成另一个函数的参数。例如,如果你问ChatGPT,“我的当前位置天气如何?”——它会先调用“获取当前位置”函数,然后使用最近获取的位置信息调用“获取当前天气”函数。因此,每个查询中多个函数调用的结果可以帮助形成一个答案。

对于一个单独的查询,ChatGPT可以多次调用同一个函数,甚至无限次数地调用。有时,当它无法获得所需的结果时,它会重复调用函数;有时,它会无明显原因地继续调用函数。因此,最好在您的代码中设置一些内部限制,以避免您的应用程序在某个点突然挂起。

目前还不清楚ChatGPT函数应该返回什么值来表示错误或“无结果”(NULL)。如果一个函数没有返回任何结果,但ChatGPT期望得到一些结果,它可能会多次调用同一个函数来询问。很多时候,返回<NONE>、<ERROR>、<NULL>等值是有帮助的;但有时并不起作用。

有时候,如果没有定义合适的函数,ChatGPT会聪明地调用备用函数。例如,如果你问:“我的当前位置天气如何?”但没有定义“获取当前天气”函数,ChatGPT可能会调用“获取站点内容”函数(如果定义了),并从像Weather Channel这样的网站上获取天气数据。这真的很酷,但请记住,站点内容可能非常庞大,它会计入令牌流量,因此可能很昂贵。

ChatGPT通常很擅长匹配和调用正确的函数,并提供有效的参数。尽管如此,您应该假设和期望ChatGPT会调用不适当的函数,并使用无效的值作为参数。这可能是由于幻觉、近似嵌入或者只是由于错误。您应该将ChatGPT视为一个人工操作员,有时可能会将不正确的数据输入错误的表单。因此,在执行任何破坏性的、敏感的、昂贵的或大量操作之前,您应该始终征得用户的许可。

ChatGPT中的每个函数调用都需要将整个对话及函数结果一起提交。因此,考虑设计更少通用和复杂的函数,而是更多通用的微函数,以减少函数调用的次数并节省令牌流量。例如,除了有“获取当前位置”和“获取当前天气”函数外,您还可以拥有一个更大的“获取我的位置的天气”函数,这个函数将只被调用一次。

可以将ChatGPT函数的某些参数指定为可选参数。不过,很多时候,ChatGPT并不聪明,甚至无法为这些可选参数提供明显的值。但是,如果您将这些参数更改为必填参数,您会发现ChatGPT可以相当有创造力地提供更少/更正确的值。

有一种方式可以限制每个对话中可以使用的函数。这有助于减少令牌流量(所有函数定义都是每个交易的一部分)并限制对某些敏感数据和函数的访问。

如果您想探索一些黑客技术,您可以定义一个要求作为系统消息调用“catch-all”函数,这样在没有定义合适函数时,每次都会调用该函数。最困难的部分是找到强制ChatGPT填充函数参数的好指令。例如,对于一个“给我Kate Bell的电子邮件”的查询,可以调用“catch-all”函数,并传递“Kate Bell”作为参数。但问题在于很难理解“Kate Bell”(或“波士顿,马萨诸塞州”)这样的原始数据在您的代码中代表什么,而ChatGPT明确知道第一个值是一个联系人,第二个值是一个位置。因此,我认为这样一个“catch-all”函数的主要用途是根据您的应用程序的实际使用情况记录所有可能缺失的函数。这样,您就可以了解应该添加哪些函数来使您的应用程序更好地运行。

最后,在一些罕见的情况下,ChatGPT可能会使用Python代码作为参数调用未声明的”Python”函数。因此,您应该预期由于参数不是JSON字符串而导致解析失败。

Leave a Reply

Your email address will not be published. Required fields are marked *