使用 GPT 操作进行数据检索
通过 GPT Actions 使用 API 和数据库检索数据。
GPT 中的操作可以执行的最常见任务之一是数据检索。操作可能会:
- 访问 API 以根据关键字搜索检索数据
- 访问关系数据库以基于结构化查询检索记录
- 访问矢量数据库以基于语义搜索检索文本块
在本指南中,我们将探讨特定于各种类型检索集成的注意事项。
使用 API 检索数据
许多组织依靠第三方软件来存储重要数据。考虑一下用于客户数据的 Salesforce、用于支持数据的 Zendesk、用于内部流程数据的 Confluence 和用于业务文档的 Google Drive。这些提供程序通常提供 REST API,使外部系统能够搜索和检索信息。
在构建操作以与提供程序的 REST API 集成时,请先查看现有文档。您需要确认以下几点:
- 检索方法
- 搜索 - 每个提供程序都支持不同的搜索语义,但通常您需要一个采用关键字或查询字符串并返回匹配文档列表的方法。有关示例,请参阅 Google Drive 的
file.list
方法。 - 获取 - 找到匹配的文档后,您需要一种方法来检索它们。有关示例,请参阅 Google Drive 的
file.get
方法。
- 搜索 - 每个提供程序都支持不同的搜索语义,但通常您需要一个采用关键字或查询字符串并返回匹配文档列表的方法。有关示例,请参阅 Google Drive 的
- 身份验证方案
- 例如,Google Drive 使用 OAuth 对用户进行身份验证,并确保只有他们的可用文件可供检索。
- OpenAPI 规范
- 一些提供商将提供 OpenAPI 规范文档,您可以直接将其导入到您的操作中。有关示例,请参阅 Zendesk。
- 您可能希望删除对 GPT 无法访问的方法的引用,这些方法会限制 GPT 可以执行的操作。
- 对于不提供 OpenAPI 规范文档的提供商,您可以使用 ActionsGPT(由 OpenAI 开发的 GPT)创建自己的规范文档。
- 一些提供商将提供 OpenAPI 规范文档,您可以直接将其导入到您的操作中。有关示例,请参阅 Zendesk。
您的目标是让 GPT 使用该操作来搜索和检索包含与用户提示相关的上下文的文档。您的 GPT 会按照您的说明使用提供的 search 和 get 方法来实现此目标。
使用关系数据库进行数据检索
组织使用关系数据库来存储与其业务相关的各种记录。这些记录可以包含有用的上下文,有助于改进 GPT 的响应。例如,假设您正在构建一个 GPT 来帮助用户了解保险索赔的状态。如果 GPT 可以根据索赔编号在关系数据库中查找索赔,则 GPT 对用户将更加有用。
在构建与关系数据库集成的操作时,需要记住以下几点:
- REST API 的可用性
- 许多关系数据库本身并不公开用于处理查询的 REST API。在这种情况下,您可能需要构建或购买位于 GPT 和数据库之间的中间件。
- 此 middleware 应执行以下操作:
- 接受正式的查询字符串
- 将查询字符串传递给数据库
- 使用返回的记录回复请求者
- 来自公共互联网的可访问性
- 与设计为从公共 Internet 访问的 API 不同,关系数据库传统上设计为在组织的应用程序基础架构中使用。由于 GPT 托管在 OpenAI 的基础设施上,因此您需要确保您公开的任何 API 都可以在防火墙之外访问。
- 复杂查询字符串
- 关系数据库使用正式的查询语法(如 SQL)来检索相关记录。这意味着您需要向 GPT 提供额外的说明,以指示支持哪些查询语法。好消息是 GPT 通常非常擅长根据用户输入生成正式查询。
- 数据库权限
- 尽管数据库支持用户级权限,但您的最终用户很可能没有直接访问数据库的权限。如果您选择使用服务账户提供访问权限,请考虑为服务账户授予只读权限。这可以避免无意中覆盖或删除现有数据。
您的目标是让 GPT 编写与用户提示相关的正式查询,通过操作提交查询,然后使用返回的记录来增强响应。
使用 Vector Databases 进行数据检索
如果您想为您的 GPT 配备最相关的搜索结果,您可以考虑将您的 GPT 与支持上述语义搜索的向量数据库集成。市场上有许多托管和自托管解决方案,请参阅此处的部分列表。
在构建与矢量数据库集成的操作时,需要记住以下几点:
- REST API 的可用性
- 许多关系数据库本身并不公开用于处理查询的 REST API。在这种情况下,你可能需要构建或购买中间件,这些中间件可以位于 GPT 和数据库之间(更多关于中间件的信息见下文)。
- 来自公共互联网的可访问性
- 与设计为从公共 Internet 访问的 API 不同,关系数据库传统上设计为在组织的应用程序基础架构中使用。由于 GPT 托管在 OpenAI 的基础设施上,因此您需要确保您公开的任何 API 都可以在防火墙之外访问。
- 查询嵌入
- 如上所述,矢量数据库通常接受矢量嵌入(而不是纯文本)作为查询输入。这意味着您需要使用嵌入 API 将查询输入转换为向量嵌入,然后才能将其提交到向量数据库。此转换最好在 REST API 网关中处理,以便 GPT 可以提交纯文本查询字符串。
- 数据库权限
- 由于矢量数据库存储文本块而不是完整文档,因此可能很难维护原始源文档上可能存在的用户权限。请记住,任何可以访问您的 GPT 的用户都将可以访问数据库中的所有文本块并进行相应的计划。
矢量数据库中间件
如上所述,矢量数据库的中间件通常需要做两件事:
- 通过 REST API 公开对向量数据库的访问
- 将纯文本查询字符串转换为向量嵌入
目标是让您的 GPT 向矢量数据库提交相关查询以触发语义搜索,然后使用返回的文本块来增强响应。