https://supabase.com/docs

Supabase的人工智能文档 简直逆天

Supabase技术文档接入AI搜索后,能支持自然语言,能写代码,甚至能debug,估计很多人好奇它是怎么实现的。

集成ChatGPT的AI文档检索要解决两个问题:1. 检索;2. 对话

比如说如图一所示,我问了一个问题:“如何使用Nextjs连接supabase, 请用中文回复”

第一步要做的就是把所有满足这个输入条件的文章都找出来。但按照以前全文检索的思路,分词、再查找,几乎不可能,因为原始文档都是英文的,而我输入的是中文,根本无法按照关键字去检索。 这里用的是一种Embeddings的技术,OpenAI针对Embeddings提供了API,输入文本后,可以得到一串数字。

那么什么是Embeddings呢? Embeddings是用来测量“关联性”的,可以用来:

• 搜索:看你搜索的问题和一组文本的相似度如何

• 建议:两种产品的相似度如何

• 分类:如何对文本进行分类

OpenAI提供了Embeddings的API,可以事先将所有的文档转成文本向量数据,然后将结果存储到支持向量的数据库。

如果你数据不大,存成csv文件,然后加载到内存,借助内存搜索也是一样的。

当用户提问的时候,把用户的问题也借助Embeddings API也变成文本向量,然后使用向量搜索,就能找出来哪些结果是接近的。

比如我提的问题,文档中的“Use Supabase with NextJS”就很接近。

借助Embeddings,就能帮助用户检索到想要的结果了。 但这还不够,因为光检索到结果,只能给用户返回文档,而不能按照用户的要求返回中文,甚至生成代码。这时候就要借助ChatGPT的和prompt了。

ChatGPT 有一个庞大的知识库,它能理解用户的指令,能写代码,但是它对你的文档却一无所知,所以用户在提问时,你需要把匹配到的文档,生成prompt,喂给ChatGPT,让ChatGPT将“用户的问题”、“搜索到的文档”结合自己的知识库,返回给用户最终的结果。

继续以图一中我的问题为例,给ChatGPT的prompt大概长这样:

有了这些信息,就足够ChatGPT帮助你按照Supabase上匹配的文档,给你回复甚至生成代码了。

supabase相关文档

https://supabase.com/blog/openai-embeddings-postgres-vector

开源参考实现:

https://github.com/gannonh/gpt3.5-turbo-pgvector