将您的知识库带入OpenAI的GPTs与MyScale

将您在美妆与时尚领域的丰富知识融入OpenAI的GPTs和MyScale

2023年11月6日,OpenAI宣布发布GPTs。在这个无代码平台上,作为专业(或业余)开发人员,您可以使用工具和提示构建定制的GPTs或聊天机器人,有效改变与OpenAI的GPT的交互方式。以前的交互需要使用动态提示来从GPT中检索响应,使用LangChain(新窗口打开)LlamaIndex(新窗口打开)。现在,OpenAI的GPTs通过调用外部API或工具来处理您的动态提示。

这也改变了我们(在MyScale)如何构建RAG系统,从使用服务器端上下文构建提示到将这些上下文注入到GPTs模型中。

MyScale简化了您将上下文注入到GPTs中的方式。例如,OpenAI的方法是通过Web UI将文件上传到GPT平台。而MyScale允许您使用SQL WHERE子句(新窗口打开)混合结构化数据过滤和语义搜索,以更低的成本处理和存储更大的知识库,并且可以在多个GPTs之间共享一个知识库。

立即在GPT Store上尝试MyScaleGPT,或使用我们在Hugging Face上托管的API,将MyScale的开放式知识库与您的应用集成。

BYOK:携带自己的知识

GPT在过去一年中已经发展了很多,并且在共享知识领域里已经知道了更多。然而,仍然有一些特定的主题它一无所知或者不确定 – 比如领域特定的知识和时事。因此,正如在我们的早期文章中所描述的那样,将一个外部知识库(存储在MyScale中)集成到GPT中是必要的,提高其真实性和实用性。

在我们使用MyScale构建RAG时,我们将LLM引入到了我们的链条(或堆栈)中。这一次,我们需要将一个MyScale数据库带到GPTs平台上。遗憾的是,当前无法直接建立GPTs和MyScale之间的连接。因此,我们调整了查询接口,并将其作为REST API提供。

由于我们之前成功地使用了OpenAI函数调用(新窗口打开),现在我们可以设计一个类似的接口,让GPT可以使用类似SQL的过滤字符串编写向量搜索查询。参数以OpenAPI(新窗口打开)的方式编写,如下所示:

向不同的表提供查询条目

我们有时可能需要查询不同的表。这可以通过单独的API条目实现。每个API条目都拥有自己的模式和文档下的提示。GPTs将读取适用的API文档,并将正确的查询写入相应的表中。

值得注意的是,我们之前介绍的方法,如自查询检索器(新窗口打开)向量SQL(新窗口打开),需要动态或半动态的提示来描述表结构。而GPTs则类似于在LangChain中使用不同工具查询表的对话代理(新窗口打开)

例如,API条目可以在OpenAPI 3.0中以如下方式编写:

在配置了GPT“Actions”以进行知识库检索后,我们只需填写“Instructions”,告诉GPT如何查询知识库并回答用户的问题:

注意:尽力回答问题。可以自由使用任何可用工具查找相关信息。在调用搜索函数时,请保留查询中的所有细节。在使用MyScale知识库进行字符串数组查询时,请使用has(column, value to match)。对于发布日期,请使用parseDateTime32BestEffort()将时间戳值从字符串格式转换为日期时间对象。使用该函数不要对日期时间类型的列进行转换。应始终添加用到的文件的参考链接。

将数据库托管为OpenAPI

GPT会根据OpenAI 3.0标准适应API。有些应用程序,例如数据库,没有OpenAPI接口。因此,我们需要使用中间件将GPT与MyScale集成。

我们将数据库托管在Hugging Face(打开新窗口)上,使用flask-restx(打开新窗口)简化和自动化实现,使代码简短、清晰且易于阅读:app.py(打开新窗口)funcs.py(打开新窗口)

这种方法的好处是提示和函数绑定在一起。因此,您无需过多考虑提示、功能和可扩展性的组合;以人类可读的格式编写即可。GPT将从导出的OpenAI JSON文件中读取此文档。

注意:flask-restx仅生成Swagger 2.0格式的API。您必须首先使用Swagger Editor(打开新窗口)将其转换为OpenAPI 3.0格式。您可以作为参考使用我们在Hugging Face上的JSON API(打开新窗口)

使用API的上下文运行GPT

通过适当的指令,GPT将使用特殊函数仔细处理不同的数据类型。这些数据类型的示例包括ClickHouse SQL函数,如数组列的has(column, value)以及时间戳列的parseDateTime32BestEffort(value)

在向API发送正确的查询后,它(或API)将使用WHERE子句字符串中的过滤器构造我们的向量搜索查询。返回的值被格式化为字符串,作为从数据库检索的额外知识。如下代码示例所描述,这个实现非常简单。

GPT确实是OpenAI开发者界面的重要改进。工程师们无需编写过多代码来构建他们的聊天机器人,工具现在可以与提示一起自包含。我们认为为GPT创建一个生态系统是美妙的事情。另一方面,这也将鼓励开源社区重新思考结合LLM和工具的现有方式。

我们非常兴奋地迎接这个新挑战,正如以往一样,我们正在寻找将向量数据库(如MyScale)与LLM集成的新方法。我们坚信,将存储在外部数据库中的外部知识库引入将提高您的LLM的真实性和实用性。