---
title: 利用MapForce和GPT-4进行基于人工智能的客户服务请求情感分析
date: 2023-07-17
categories:
  - data-integration
  - database
  - etl
tags:
  - ai
  - ai-data-integration
  - data-mapping
  - mapforce
  - xmlspy
description: 学习如何利用人工智能技术，在ETL数据映射项目中，高效地对自然语言文本进行情感分析。
---
Status: #blog

Tags:  #ai #ai-data-integration #data-mapping #mapforce #xmlspy

Categories: [data-integration](/blog/zh/category/data-integration.md) | [database + sql](/blog/zh/category/database-sql.md) | [etl](/blog/zh/category/etl.md)
# 利用MapForce和GPT-4进行基于人工智能的客户服务请求情感分析

对文本进行自动情感分析，例如用户评价，一直以来都是一项挑战。由于自然语言的复杂性，系统在分析语境和细微之处时面临困难。这需要大量的 manual (人工) 工作才能克服。

现代人工智能系统，特别是那些基于大型语言模型（LLM），例如 OpenAI 的 GPT-4，具有许多有用的功能，其中之一是它们能够 _非常_ 它擅长对自然语言文本进行情感分析。我们可以利用这项能力，在MapForce中构建一个非常高效的数据库解决方案，例如，它可以自动处理支持数据库中所有新的入库记录，并自动判断某个支持请求或其他客户反馈的情绪倾向 _积极的_, _负面的_, 构成了一个 _错误报告_, 或者应该被视为一种 _功能需求建议_.

![用于装饰的配图，展示了机器学习在情感分析中的应用 ](/blog/images/hero-sentiment-analysis.png)

<!--more-->

## 在 OpenAI 的 Playground 环境中，我们对 GPT-4 进行了初步测试

如果您想跟进这篇博文，或者最终想在您自己的数据库系统中实施这种方法，您需要注册一个OpenAI账户，并获取一个API密钥，以便在您的实施过程中使用。 此外，这将使您能够访问OpenAI门户上的“测试环境”，您可以在其中进行一些初步测试，并获取示例JSON输入，这些输入将帮助您在MapForce中构建正确的JSON请求。

与大型语言模型（LLM）人工智能系统交互时，最重要的一步之一始终是构建合适的提示语。为了获得理想的结果，您需要尽可能精确地描述您的需求。为了达到我们的目的，我们将使用以下提示语：

`“Classify the sentiment in the following statement using these possible results: Negative, Positive, Feature Request, Bug Report.”`

接下来，我们将分析客户的反馈意见。为了在 OpenAI Playground 上进行测试，我们选择模式为“对话”（Mode=Chat），模型为“gpt-4”，温度（Temperature）设置为 1，最大长度（Maximum length）设置为 512，Top P 设置为 1，并将频率惩罚（Frequency penalty）和存在惩罚（Presence penalty）都设置为 0。然后，我们可以输入提示语，输入我们第一个客户反馈意见，然后点击“提交”按钮：

[![在 OpenAI Playground 中进行文本情感分析的测试](/blog/images/01-openaiplayground.png)](01-openaiplayground.png)

GPT-4人工智能模型立即返回“_正面_”，这是正确的答案。我们可以再运行几个例子，以验证我们的提示在其他情况下也能正常工作，并且我们能够获得预期的情感分析结果。

接下来，点击“查看代码”按钮，将语言选择器从默认的 Python 切换到 JSON，然后复制代码，将其粘贴到 XMLSpy 中，这样我们就可以更好地进行审查 [JSON 网格视图](https://www.altova.com/zh/xmlspy-xml-editor/json-editor-download#Grid_View):

![用于与 GPT-4 AI API 交互的 JSON 请求](/blog/images/02-json-request.png)

JSON 结构看起来非常简单明了。这也有助于我们立即根据这段代码自动生成 JSON Schema，我们稍后将使用它来配置 XMLSpy 和 MapForce 中的 Web 服务请求

![XMLSpy 自动生成的 JSON 请求模式 ](/blog/images/03-json-request-schema.png)

## 使用 XMLSpy 对 OpenAI API 进行测试

下一步，我们希望确保我们正确理解 OpenAI 的聊天 API，并查看由此产生的 JSON 输出结果。我们将使用 XMLSpy 中便捷的 [HTTP 测试窗口](https://www.altova.com/zh/xmlspy-xml-editor/advanced#http-window) 进行手动测试。您可以在主工作窗口下方找到该窗口，它作为一个单独的标签页，位于“消息”窗口的旁边。

在“HTTP”选项卡中，将“HTTP 请求方法”切换为 POST，输入 OpenAI Chat API 的端点 URL，即 [https://api.openai.com/v1/chat/completions](https://api.openai.com/v1/chat/completions)，并将“内容类型”设置为 application/json。然后，将我们在上面的 Playground 中获得的示例 JSON 请求粘贴到“正文”部分：

![使用 XMLSpy 的 HTTP 窗口来测试向 OpenAI API 发送 JSON 请求](/blog/images/04-http-request.png)

现在，为了验证我们的请求，我们需要在请求头（Headers）中提供我们的API密钥。请点击“请求头”选项卡，添加一行，设置“Authorization”为表头，并将值设置为以“Bearer”开头，然后是空格，最后是您的API密钥。如果您在OpenAI上有多个账户，并且需要确保账单正确，您还可以选择添加第二行，将表头设置为“OpenAI-Organization”，并将值设置为OpenAI为您分配的组织ID

![在 XMLSpy 的 HTTP 窗口中，配置请求头信息 ](/blog/images/05-http-headers.png)

显然，在上面的截图中，我们不得不对我们的密钥和组织ID的具体数值进行模糊处理。

现在，我们已经准备好点击“发送”按钮，将上述 HTTP 请求发送到 OpenAI API 接口，以查看我们将收到什么样的响应

![来自 OpenAI API 测试的响应已收到 ](/blog/images/HTTPresponseXMLSpy.png)

第一个好消息是，我们收到了一个状态码为 200 OK 的响应，耗时 780 毫秒，并且收到了类型为 application/json 的内容，这正是我们以 JSON 格式返回的数据。其中包含一条消息，其中包含了人工智能“助手”提供的答案，以“Positive”的形式呈现。因此，我们成功地在 XMLSpy 中复现了之前在 OpenAI Playground 中进行的测试，通过向 API 发送实际的 HTTP 请求，并获得了正确的响应。

接下来，我们将把这个响应保存到一个文件中。您可以通过HTTP测试器窗口中的“保存到文件”按钮来完成此操作。然后，您可以打开该文件，并使用XMLSpy软件，它能够自动根据示例JSON响应消息创建JSON Schema。这次，该Schema描述了我们希望在MapForce中处理的Web服务预期JSON输出的结构。

[![XMLSpy 生成的 JSON 响应模式 ](/blog/images/JSONresponseSchema.png)](JSONresponseSchema.png)

## 示例支持数据库

大多数技术支持管理系统都基于 SQL 或其他数据库后端，因此这种方法可以很容易地应用于所有这些系统。但为了本博文的示例，我们将使用一个简化版的客户反馈数据库，该数据库使用 SQLite

![SQLite 数据库中的客户反馈示例 ](/blog/images/CustomerFeedback-Database-Schema.png)

我们还在其中包含了示例数据，这使得我们能够在 MapForce 中运行集成测试，并分析所有这些客户反馈的情感倾向

![[FeedbackDatabaseData.png]]

## 在 MapForce 中创建数据库映射

现在，我们已经准备好所有必要的组件，可以开始创建我们的 MapForce 转换或 ETL 项目。这个项目将读取数据库中的所有记录，调用 OpenAI API 进行情感分析，并将结果写回数据库。

设计我们的ETL映射的第一步是，将我们的“客户反馈”数据库对象在映射中插入两次——一次作为输入（即...） _提取_ 作为 ETL 流程的一部分，它也会作为最终输出，并且需要将主表对象以及 ID 连接起来。MapForce 可以很方便地连接其他所有列，但实际上我们并不需要这些连接，所以您可以再次删除它们，直到得到以下设计：

![搭建数据库ETL项目 ](/blog/images/database-etl-setup-1.png)

我们在输入和输出之间留出了很大的空间，因为稍后我们将在那里插入我们的Web服务调用。但在执行之前，让我们首先明确定义数据库输出以及相关的数据库操作（即...） _负载_ 通过双击右侧数据库对象，可以访问其作为 ETL (数据抽取、转换、加载) 过程的一部分的相关信息

![数据库更新设置](/blog/images/DatabaseUpdateSettings.png)

请确保第一个单选按钮设置为“无”，因为我们不想在处理第一个记录之前进行任何特殊操作。然后，将第二个列的列标题更改为“如果...则更新”，并将“id”行中的下拉框设置为“等于”。这样可以告诉 MapForce，对于任何通过映射关系提供的“id”，如果该“id”已经存在于数据库中，则更新数据库中的相应数据。这就是我们在这里需要做的所有事情，您可以再次点击“确定”。

现在，是时候插入一个Web服务组件来调用OpenAI API了。点击工具栏上的“插入Web服务函数”按钮。然后，根据我们之前在XMLSpy中测试API时所做的准备工作，配置API所需的各项调用设置。

就像之前一样，我们需要配置HTTP请求方法为POST，并在请求头中包含我们的API密钥，以及（可选地）我们的组织ID。 接下来，我们需要告诉MapForce请求和响应数据的结构，为此，我们将使用之前创建的两个JSON模式：

![OpenAI API 的 Web 服务调用设置 ](/blog/images/WebServiceCallSettings.png)

一旦定义好这些参数，Web服务对象就会出现在MapForce的设计面板中，然后我们可以开始连接相应的线，以实现所需的功能。首先，我们需要为“客户反馈”表中的每一条记录调用一次Web服务，因此我们将它连接到“请求”输入端：

![[InsertWebServiceIntoMapping.png]]

我们的输出结果将以属性值的形式包含在人工智能系统返回的消息中，因此我们将这些结果与我们输出数据库对象中的“情感”列进行关联。

现在剩下的工作就是将所有其他用于Web服务请求的输入连接到API。我们可以使用上面提供的示例JSON文件，从中明确了解需要哪些输入。其中很多输入将是常量，例如用于指定模型的“gpt-4”，以及其他参数的各种取值。

最重要的输入是提示语以及数据库中的反馈信息，因此我们在将这些信息输入到网页服务的内容输入框之前，会将它们连接起来

![[FinalMapping.png]]

通常，在这个阶段，我们就可以完成 [ETL 映射](https://www.altova.com/zh/mapforce/etl-tool) 的设计，并开始执行数据转换。然而，由于 GPT-4 是最先进的模型，并且有很多人在使用它，OpenAI 已经实施了每分钟允许发送的 Web 服务请求数量的限制。如果我们现在运行这个转换，我们很可能会超出这个限制。

因此，我们需要在调用 OpenAI 网页服务接口之间添加一个短暂的暂停（sleep）函数，以便在每次调用之间间隔大约 1 秒。我们可以通过 MapForce v2024 中新增的内置 sleep() 函数轻松实现这一点：

![[MF-Sentiment-Analysis-With-Sleep.png]]

在 MapForce 软件中，“输出预览”选项卡是您现在可以查看转换结果的地方。点击该选项卡后，MapForce 将执行 ETL 映射项目，并生成必要的 SQL 语句，这些语句将根据人工智能执行的情感分析结果，相应地更新您的数据库

![自动生成的用于ETL过程的SQL语句 ](/blog/images/SQLoutput.png)

现在，您可以直接从 MapForce 中执行这段 SQL 代码，从而实际更新您数据库中的数据。

当然，在实际应用中，您希望进一步自动化这个流程，以便自动分析新的客户支持请求。您可以通过将这个 ETL 映射项目部署到位于您内部 IT 基础设施或私有/公共云上的 [MapForce Server](https://www.altova.com/zh/mapforce-server) 实例来实现这一点。然后，您可以使用 [FlowForce Server](https://www.altova.com/zh/flowforceserver) 来自动化工作流程需求，例如，根据某些触发器或事件来确定何时运行此分析。

顺便说一下，这篇博文中所有来自 XMLSpy 和 MapForce 的截图都是在使用新的深色主题下拍摄的，因为这是我个人的偏好。但您当然也可以根据自己的喜好，使用我们的产品，选择新的浅色主题或经典主题。

要尝试在 MapForce 中使用基于人工智能的数据转换，或者在 XMLSpy 中尝试任何人工智能网络服务 API，您可以下载一个 **免费30天试用** 以及其他一些有用的开发工具，由...提供 [下载最新版本的 Altova MissionKit](https://www.altova.com/zh/download) 您可以在我们的网站上下载。我们建议所有与人工智能相关的任务都使用企业版的64位版本。

* * *
