首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在构建GPT4驱动的软件时编写有效的自动化测试?

如何在构建GPT4驱动的软件时编写有效的自动化测试?
EN

Software Engineering用户
提问于 2023-04-15 19:39:30
回答 3查看 460关注 0票数 3

我目前的部分产品使用GPT-4提示从纯文本中提取信息。由于大型语言模型的行为本质上是不透明的,失败案例无法预测,我想知道标准的软件工程实践如何转化为生成语言模型(如GPT-4 )?

EN

回答 3

Software Engineering用户

发布于 2023-04-16 12:05:01

您的主要目标肯定不是测试GPT-4,这是它的供应商OpenAI的工作。你的目标是测试你编写的软件。因此,对于您的自动化测试,在GPT-4周围有一个稳定的接口,并在测试期间使用一个简单的模拟实现,该实现具有确定性。

到目前为止,这是相当标准的:当处理不可靠或不确定的第三方组件时,应该在自动测试期间替换它们。从这个角度来看,像GPT-4这样的模型语言与搜索引擎API、天气预报API或股票市场API这样的组件并没有什么不同。

但是,我可以想象您的系统以一种专门的方式使用GPT-4的场景,您可以期望从某些输入中获得非常具体的、可能是确定性的输出。因此,您希望有测试,以确保这一工作,即使是在GPT-4模型得到更新。

你写的你想

“从纯文本中提取信息”

这是非常模糊的,可能意味着许多不同的事情,对不同的人。以下是几个例子,这可能意味着

  1. 使用regex查找文本中的某些模式或关键字,或
  2. 列出一些纯文本中的所有名词,或
  3. 分析某一文本是否与某一主题相关,或
  4. 分析某一文本是否符合某种行为守则,或
  5. 若要生成较长文本的简短摘要,请执行以下操作。

对于前四种类型的问题,应该可以建议语言模型以某种规范化的形式生成它的输出(例如,告诉模型省略所有介绍性句子,告诉它使用哪个分隔符,以及您希望输出按字母顺序排列,或者告诉它只回答是/否)。还应该清楚的是,总是以干净的会话开始,没有预先确定的上下文。标准化输出可以相对于预期的输出进行更容易的测试,可能具有一定的耐受性。只有一个正确答案的问题要比有多个正确答案的问题更容易通过测试来解决,或者对于一个人来说,如果答案是正确的就很难决定的问题。

但是,根据某些要求自动测试第五类问题的输出,比如“内容仍然应该是正确的”,可能是不可能的,因为内容正确性不是GPT-4这样的模型所保证的。因此,这种方法是否可行在很大程度上取决于您所想到的特定类型的用例。

我还可以想象像GPT-4这样的组件可以提供一些测试模式或“确定性模式”,如果不是现在,也许在即将发布的版本中。我不知道GPT-4是否提供类似的东西,但它可能值得问供应商或GPT用户的社区。这将使人们能够编写自动化的集成测试或验收测试,而无需进行模拟。

票数 9
EN

Software Engineering用户

发布于 2023-04-15 20:51:11

正如您所说,因为GPT和类似的技术是不透明的,所以不可能通过分析逻辑来确定应该如何以常规的方式进行测试。

通常,在编写自动测试时,程序员使用对目标逻辑、不同代码路径、任何感知的边缘行为以及类似逻辑和典型故障模式的知识和经验的洞察,来设计执行这些不同路径的测试,检查隐式约束,并检查边缘的行为。

由于GPT没有涉及到程序员指定任何约束,也没有可以有效检查的内部元素,因此实际上不可能进行测试(除了一个包含需要处理的所有可能输入的数据集的穷举测试,并指定其正确的输出,这就违背了使用GPT的目标)。

这就是为什么所有真正的程序员都坐在一旁嘲笑“人工智能”的炒作。甚至像费金一样搓着我们的手,刺激我们对服务的需求,解决别人造成的麻烦!

票数 5
EN

Software Engineering用户

发布于 2023-05-03 13:39:44

在测试第三方依赖项时,OpenAI驱动的应用程序的测试需求相对相同。

以下是技术总结:

  • 您的测试与特定的OpenAI模型版本相关联。例如,您可以使用gpt-3.5-turbo-0301验证您的测试。如果将模型的使用升级到较新的版本,则需要更新所有测试数据。
  • 您将OpenAI API视为pure-functions。意思是,相同的输入总是产生相同的输出。当您使用提示符调用API时,该字符串总是提供相同的完成。通过使用不同的提示来增加覆盖率。
  • OpenAI使用OpenAPI标准实现了他们的API。他们还在回购(https://github.com/openai/openai-openapi)中发布了这些API规范。
  • 有一些工具可以让您快速地托管一个OpenAPI规范的模拟。我很快就找到了这个,但是还有其他的:https://stoplight.io/api-mocking
  • 您可以使用特殊提示再现边缘情况,如错误、400个状态代码或完成失败。这是模拟服务器使用基于输入提示符的条件来决定测试异常的响应的地方。
  • 如果pass的某些方面不影响测试,则可以使用pass将一些调用转发给真正的OpenAI API,但这可能需要定制的模拟服务器。

您维护上述所有内容,就像通常维护测试一样。这些技术适用于单元测试和集成测试。

这里没有捷径。针对供应商API进行测试需要设置时间,在进行维护和验证对API的模拟是准确的。

这里的要点是:

  • 测试应该是纯的。相同的输入产生相同的输出。
  • 在没有任何代码更改的情况下重新运行测试会产生与上次相同的测试结果。
  • 工程师的工作是以测试的形式验证边缘情况、错误和未知。
  • 没有必要访问真正的OpenAI APIs。
  • 测试执行应该非常快。
  • 测试应该在任何代码更改上运行。
票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/445059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档