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

目标是让你的 GPT 向向量数据库提交相关查询以触发语义搜索,然后使用返回的文本片段来增强回答。