示例 1:“OpenAI 聊天补全 API(GPT-3.5、GPT-4)– 行”配置
本示例教您如何将 OpenAI 分析连接器与“OpenAI 聊天补全 API(GPT-3.5、GPT-4)– 行”配置一起使用。它指导您完成基本练习,向您展示如何将该功能融入数据模型和图表表达式中。
此连接器配置的功能与“OpenAI 补全 API (GPT-3) - 行”配置的功能非常相似。然而,这两种配置使用不同的模型,从而导致不同的响应。此外,由于这两种配置之间的参数名称不同,请参阅与您的配置匹配的教程示例。有关补全配置,请参阅示例 1:“OpenAI 补全 API (GPT-3) – 行”配置。
您也可以使用 Azure OpenAI 连接器完成此示例。当使用该连接器时,您可以通过 Microsoft Azure 平台而不是 OpenAI 平台与模型进行交互。
在您开始之前
在完成此示例之前,您需要完成以下步骤。
-
创建一个 OpenAI 平台帐户
-
获取 OpenAI API 密钥
-
启用分析连接功能于 Qlik Cloud
-
使用适用的连接器配置创建连接
在加载脚本中使用 OpenAI 连接器
创建一个新的 Qlik Sense 应用程序,您将在其中添加一个加载脚本,以便与 OpenAI 平台进行通信。将可以在应用程序的数据模型中访问使用此脚本加载的表。
遵照下面的步骤。有关额外详细信息,请参阅从 OpenAI 连接选择并加载数据。
创建要发送到 OpenAI 的数据表
第一步是创建一个表,其中包含您发送给 OpenAI 的请求。请求中的数据行称为“补全”。每个项目的文本必须以行的形式包含在表中的单个字段(列)中。此列中的每一行表示 OpenAI API 要完成的文本。
关联字段可以有第二个附加字段,但这需要与配置中指定的字段名称相匹配。这是一个特殊的字段,不会发送到 OpenAI,而是附加到响应中,用于生成 Qlik 数据模型。
在您的应用程序中,打开数据加载编辑器,并将以下代码粘贴到新的脚本部分:
SourceTable:
NoConcatenate
LOAD
RowNo() as RowId,
Text
Inline
[Text
translate from English to French: What is the time you go to work?];
该表包含一个名为 Text 的字段,其中包含我们向 OpenAI 提出的一个问题。附加问题可以作为新的单个单元格添加到现有问题单元格的下方。RowId 字段是关联字段,将在下一步中用于将响应链接到应用程序的数据模型。
创建 OpenAI 加载语句
下一步是创建另一个加载语句来与 OpenAI 通信。使用此语句加载的表指向用于发送请求数据的表和字段的名称。简而言之,脚本正在加载第二个表,以提供 OpenAI 对您的请求项的响应。
要生成脚本的这一部分,可以使用正在使用的连接的选择数据向导。这将生成一个模板脚本,其中包括您提供的属性的名称。或者,您可以在不使用向导的情况下将此表手动添加到脚本编辑器中。
在数据加载编辑器的数据源面板中找到正在使用的连接,然后单击 。这将打开选择数据向导。
使用选择数据向导时,需要提供两个属性:
-
驻留表的名称。这是发送给 OpenAI 的问题的表格。在本例中,它为 SourceTable。
-
数据字段的名称。这是包含发送到 OpenAI 的问题的字段。在本例中,它为 Text。
在表格下,单击名为 openai 的表格的复选框。
单击插入脚本时,新表将添加到加载脚本中。
现在添加了 OpenAI 加载语句,您的加载脚本应该如下所示:
您现在可以运行加载脚本了。
将数据加载到应用程序中
脚本完成后,单击加载数据。这将执行与 OpenAI 的通信,并将表格插入应用程序的数据模型中。
打开数据模型查看器,注意这两个表按预期链接在一起。在预览窗格中,OpenAI 对我们提出的问题的回答包含在第二个表格中。
现在,您可以使用已加载到应用程序中的数据生成分析内容。您不需要在使用此数据创建的任何图表中引用 OpenAI 连接。要了解如何在图表表达式中直接使用 OpenAI 连接(而不是在加载脚本中使用),请参阅在图表表达式中使用 OpenAI 连接器。
在图表表达式中使用 OpenAI 连接器
除了使用加载脚本将 OpenAI 问答添加到应用程序的数据模型中,您还可以在应用程序中的图表中直接执行这些操作。这可以替代在加载脚本中使用表与 OpenAI 通信。
单个字段的数据在您和 OpenAI 之间来回发送。在许多情况下,用于加载脚本连接的代码可以重新用于图表,但有一些显著的差异。
有关额外详细信息,请参阅在可视化表达式中使用 OpenAI 连接。
数据请求量的注意事项
建议只在一行或几行数据的图表表达式中使用 OpenAI 连接。OpenAI 不建议使用图表表达式向 OpenAI 发送大量数据。
了解每个请求发送的行数非常重要。在图表表达式中配置 Azure OpenAI 连接的错误可能会导致意外的大型请求(例如,由于图表中数据模型的使用不当,导致具有相同问题的相同行)。在与第三方平台交互之前,请确保您了解图表表达式计算中使用的字段及其在数据模型中的位置如何影响您与第三方的财务协议和计费安排。外部平台的使用率越高,所产生的成本就越高。
请遵循以下指导原则来缓和和限制您的请求大小:
-
只能在文本和图像图表表达式中使用连接。强烈建议在OpenAI对象中使用 OpenAI 连接,尤其是当您将表达式添加到已添加一个或多个维度的表中时。OpenAI
-
如果图表表达式链接到应用程序的数据模型,请在表达式中使用 If 语句,仅在应用程序中进行单个选择时计算图表。这大大减少了图表发送给 OpenAI 的请求中的行数。OpenAI
-
如果您使用 OpenAI 连接发送大型请求,请在加载脚本中使用该连接,而不是在图表表达式中使用,以便将数据预加载到数据模型中。OpenAI
练习:创建基本图表表达式
执行以下操作:
-
创建一个 Qlik Sense 应用程序,并在高级编辑模式下打开一个新的工作表。
信息注释您用于图表表达式的分析连接需要已经在创建应用程序的空间中创建。您可以在应用程序中的数据加载编辑器中或 Analytics 活动中心的“创建”页面中执行此操作。 有关详细信息,请参阅创建 OpenAI 连接。 -
将文本和图像图表拖到工作表上。
-
在“属性”面板中的数据 > 度量下,添加一个度量,然后单击 以打开表达式编辑器。
-
将以下表达式粘贴到表达式编辑器中:
endpoints.ScriptAggrStr('{"RequestType":"endpoint", "endpoint":{"connectionname":"Chat_Completions_GPT_3.5_4_Rows","column":"choices.message.content"}}', 'Translate this text from english to spanish: The sun was rising over the new tomorrow with a tinge of excitement.')
信息注释在本例中,不使用 if 语句是可以接受的,因为我们只发送一行数据,并且没有到数据模型的连接。在其他情况下,使用 if 语句确保只有在应用程序中选择单个字段值时才计算图表。有关示例,请参阅简单示例。 -
单击应用。
练习:使用变量创建文本输入框
或者,您可以将问题字符串替换为您在应用程序中创建的变量的名称,从而允许创建一个输入框,应用程序使用者可以在其中输入自己的问题,而无需与表达式交互。
这个简单的界面可以用来用实时生成的上下文信息丰富您的应用程序数据。
执行以下操作:
-
创建一个应用程序,并将一些数据和可视化效果添加到新工作表中。
-
单击 以创建变量。对于本练习,赋予其名称 vUserQuestion。将剩余参数留空。
-
在资产面板中,将变量输入图表拖到工作表上。这位于扩展 > Qlik Dashboard 捆绑下。
-
在变量输入图表的属性面板中,展开外观 > 变量。
-
在名称下,选择 vUserQuestion。
-
在显示为下,选择输入框。
-
在资产面板中,将文本和图像图表拖到工作表上。
-
在“属性”面板中的数据 > 度量下,添加一个度量,然后单击 以打开表达式编辑器。
-
将以下表达式粘贴到表达式编辑器中:
if(vUserQuestion <> '', endpoints.scriptAggrStr('{"RequestType":"endpoint", "endpoint":{"connectionname":"Chat_Completions_GPT_3.5_4_Rows","column":"choices.message.content"}}',vUserQuestion))
-
单击应用。
-
重新调整这些输入和响应框的大小以满足您的需求。
您现在应该可以退出编辑模式并在输入框中键入问题。当您按 Enter 键或单击工作表上的其他任何位置时,答复框将填充来自 OpenAI 的答复。
本练习中的 OpenAI 连接根本不与应用程序的数据模型通信,但可以创建更复杂的应用程序,这些应用程序与加载到应用程序中的数据完全集成,并响应您在应用程序中做出的选择。
加载脚本和图表表达式代码之间的差异
在这些图表表达式中,我们重新使用了在前面的加载脚本课程中输入的代码。以下列表突出显示了加载脚本版本和图表表达式之间最重要的区别:
-
我们将 ScriptEval 更改为 ScriptAggrStr。这概述了我们正在发送一行数据,并期望返回一行数据。在处理自定义数据(如本例中的变量或常量)时,这是必需的。“Str”表示我们正在发送和接收文本值。
-
我们添加了一个新属性 column,值为 choices.message.content。它嵌套在 endpoint 对象内部。需要对配置字符串进行此添加,以指定要从连接器返回的字段。在图表表达式中,只使用一个字段,并且必须指定是哪个字段。
有关更多信息,请参阅服务器端扩展语法。