GPT动作中的数据检索

GPT动作中的数据检索

GPT中一个常见的任务是数据检索。一个动作可能会:

  • 使用关键字搜索访问API检索数据
  • 使用结构化查询访问关系数据库检索记录
  • 使用语义搜索访问向量数据库检索文本片段

我们将在本指南中探讨与各种检索集成相关的特定考虑事项。

使用API进行数据检索

许多组织依赖第三方软件存储重要数据。例如,Salesforce用于客户数据,Zendesk用于支持数据,Confluence用于内部流程数据,Google Drive用于业务文档。这些提供商通常提供REST API,使外部系统能够搜索和检索信息。

当构建一个与提供商的REST API集成的动作时,请首先查阅现有文档。您需要确认几件事情:

  • 检索方法
    • 搜索 - 每个提供商都支持不同的搜索语义,但通常您需要一个接受关键字或查询字符串并返回匹配文档列表的方法。请参见Google Drive的file.list方法。
    • 获取 - 一旦找到匹配的文档,您需要一种检索它们的方法。请参见Google Drive的file.get方法。
  • 身份验证方案
    • 例如,Google Drive使用OAuth对用户进行身份验证,并确保仅其可用文件可供检索。
  • OpenAPI规范
    • 一些提供商将提供一个OpenAPI规范文档,您可以直接导入到您的动作中。请参见Zendesk的示例。
      • 您可能希望删除您的GPT不会访问的方法的引用,这样可以限制您的GPT可以执行的操作。
    • 对于那些不提供OpenAPI规范文档的提供商,您可以使用ActionsGPT(由OpenAI开发的GPT)创建您自己的文档。

您的目标是让GPT使用动作搜索并检索包含与用户提示相关的上下文的文档。您的GPT遵循您的指示使用提供的搜索和获取方法来实现此目标。

使用关系数据库进行数据检索

组织使用关系数据库存储与业务相关的各种记录。这些记录可能包含有助于改进您的GPT响应的有用上下文。例如,假设您正在构建一个GPT来帮助用户了解保险理赔的状态。如果GPT可以根据索赔号在关系数据库中查找索赔,那么GPT对用户将会更加有用。

当构建一个与关系数据库集成的动作时,有几件事情需要记住:

  • REST API的可用性
    • 许多关系数据库不会原生暴露用于处理查询的REST API。在这种情况下,您可能需要构建或购买中间件,该中间件可以位于您的GPT和数据库之间。
    • 这个中间件应该做到以下几点:
      • 接受正式的查询字符串
      • 将查询字符串传递给数据库
      • 将返回的记录回复给请求者
  • 公共互联网的可访问性
    • 与设计为从公共互联网访问的API不同,关系数据库传统上设计为在组织的应用程序基础设施中使用。因为GPT托管在OpenAI的基础设施上,您需要确保您暴露的任何API都可以在防火墙之外访问。
  • 复杂的查询字符串
    • 关系数据库使用像SQL这样的正式查询语法来检索相关记录。这意味着您需要向GPT提供额外的指示,指示支持的查询语法是什么。好消息是,GPT通常非常擅长根据用户输入生成正式查询。
  • 数据库权限
    • 尽管数据库支持用户级权限,但您的最终用户可能不具有直接访问数据库的权限。如果选择使用服务帐户提供访问权限,请考虑给服务帐户只读权限。这可以避免意外覆盖或删除现有数据。

您的目标是让GPT编写与用户提示相关的正式查询,通过动作提交查询,然后使用返回的记录来增强响应。

使用向量数据库进行数据检索

如果您希望为您的GPT配备最相关的搜索结果,您可能需要考虑将您的GPT与支持语义搜索的向量数据库集成,就像上面描述的那样。市场上有许多托管和自托管的解决方案可供选择,请参阅这里的部分列表。

在构建与向量数据库集成的动作时,有几件事情需要记住:

  • REST API的可用性
    • 许多关系数据库不会原生暴露用于处理查询的REST API。在这种情况下,您可能需要构建或购买中间件,该中间件可以位于您的GPT和数据库之间(有关中间件的更多信息,请参见下文)。
  • 公共互联网的可访问性
    • 与设计为从公共互联网访问的API不同,关系数据库传统上设计为在组织的应用程序基础设施中使用。因为GPT托管在OpenAI的基础设施上,您需要确保您暴露的任何API都可以在防火墙之外访问。
  • 查询嵌入
    • 如上所述,向量数据库通常接受向量嵌入(而不是纯文本)作为查询输入。这意味着您需要使用嵌入式API将查询输入转换为向量嵌入,然后才能将其提交给向量数据库。最好在REST API网关中处理此转换,以便GPT可以提交纯文本查询字符串。
  • 数据库权限
    • 因为向量数据库存储的是文本块而不是完整文档,所以很难维护可能存在于原始源文件上的用户权限。请记住,任何可以访问您的GPT的用户都将可以访问数据库中的所有文本块,因此请合理规划。

向量数据库的中间件

如上所述,向量数据库的中间件通常需要执行两个任务:

  1. 通过REST API公开访问向量数据库
  2. 将纯文本查询字符串转换为向量嵌入

向量数据库的中间件

目标是让您的GPT提交一个相关的查询到向量数据库以触发语义搜索,然后使用返回的文本块来增强响应。