背景

最近Chatgpt很火,在自然语言谈天和问答方面的才能非常的强劲,但缺乏是Chatgpt的练习数据都是根据2021年之前的网上数据,无法让他帮我回答根据时刻较近的网页内容的问题或许根据私人或公司的私有数据进行谈天问答,即Chatgpt没有插上实时查找网页的才能。虽然当时有new bing,以及chatgpt-retrieve-plugin即将上线,还需求在waiting list里面耐心等待。

最近咱们产品想要把咱们搜集的财政会计相关常识的网址汇集成一个常识库,能够服务于咱们的客户,帮助他们处理财政方面的问题,那么这些专业的私有数据怎样作为一个数据源让chatgpt接入集成,并经过谈天QA的方法来获取信息呢?

本文要叙说的计划即经过chatgpt接入私有数据调集,经过谈天的交互方法进行FAQ。

作用

首要咱们来看下作用,倘若咱们的私有数据来自如下网址:kruzeconsulting.com/cash-burn-r… 该网址内容是有关财政相关常识,那么我需求将网站中的内容爬取下来,然后让chatgpt能够理解网站中的内容,用户经过问答的方法获取到对应的常识内容。当然你能够把常识库相关的一切网址都一股脑的往里扔。

如何通过Chatgpt+Embedding搭建私有数据FAQ

如何通过Chatgpt+Embedding搭建私有数据FAQ

由上面两张图能够看到,自然语言的发问均获得了不错的答案(答案也都来自于咱们给定的网址),并且将答案相关的URL也展现了出来,完成了一次自然语言的查找使命。

原理

要处理私有数据的自然语言查询,我觉得要先处理以下几个问题

  • 私有数据的存储

    私有数据需求处理大数据量存储和查询的问题,因为chatgpt是个大语言模型,1750亿个参数,不可能将自己的数据喂给他微调做对应的子使命模型,成本太高。

    那么必定咱们需求将自己的私有数据存储在自己的私有数据库中,这个时分向量数据库(vector database)就呈现了

  • 怎样经过自然语言进行问答

    自然语言的问答,自然需求借助chatgpt的才能,可是chatgpt的一次Prompt是有字数约束的,我不可能把私有数据一切的数据都一起组装成Prompt来问chatgpt,怎样能够打破Prompt的字数约束呢?一个可行的主意便是将私有数据库中相关的内容抽取出来,作为Prompt来问,这是个卓有成效的方法。那么怎样提取和问答相关性比较大的内容呢,这个时分Embeddings技能就呈现了

什么是Embeddings?

OpenAI的官方文档给出了相关的解说:Text Embeddings用于丈量文本字符串之间的相关性巨细,一段文字你能够看成是有限字符的有序摆放,一次Embedding操作便是将一段文本转化为一个vector向量,即浮点数组。经过核算两个向量之间的间隔来丈量两段文字的相关性。小间隔表示高相关,大间隔表示低相关。

比如说一下几个短语:

  1. “狗咬耗子”
  2. “犬类捕食啮齿动物”
  3. “我家养了只狗”

那很明显1和2是类似的,即使它们之间没有任何相同的文字。那么怎样让核算机知道1和2很类似呢?

假如咱们把之前的短语对应的向量能画在坐标轴上,它看起来像图中那样。短句1和短句2会离得很近,而短句3和他们离得比较远。这样咱们就能够经过向量之间间隔的核算来判别短语之间的类似度巨细。

如何通过Chatgpt+Embedding搭建私有数据FAQ

总结下来Embeddings 能够用于如下场景:

Search (where results are ranked by relevance to a query string)

Clustering (where text strings are grouped by similarity)

Recommendations (where items with related text strings are recommended)

Anomaly detection (where outliers with little relatedness are identified)

Diversity measurement (where similarity distributions are analyzed)

Classification (where text strings are classified by their most similar label)

全体流程

下图是我直接截取@宝玉xp画的流程图,基本上能够很容易得理解整个流程

整个流程能够分为两大部分: 第一大部分:私有数据切片&存储

第二大部分:挑选和发问相关性高的内容整合一齐向Openai发问

如何通过Chatgpt+Embedding搭建私有数据FAQ

第一大部分:私有数据切片&存储:

1、首要需求将原始文本按照固定长度截取为一段一段文本,原因是希望经过openai的Embedding才能生成对应阶段文本的向量数据调集,因为openai对于输入有文本长度的约束,所以需求截取到固定长度。

2、调用openai的Embeddings接口,将一段段文本转成向量,这样每段文本就有一个向量与之对应。

3、将原始文本和对应的向量存储到之前说到的向量数据库中

第二大部分:挑选和发问相关性高的内容整合一齐向Openai发问:

1、将用户输入的问题字符串作为输入,调用openai的Embeddings才能换取对应的vector向量

2、将用户输入文本对应的向量去向量数据库中查询高类似度的向量调集,即对应的相关性文本列表就都查了出来。

3、将从向量数据库中查出来的相关性文本和原始的问题组成一个Prompt直接问chatgpt,既能够得出来结果。

对应的Prompt的结构如下:

You are a helpful assistant. When given CONTEXT you answer questions using only that information, and you always format your output in markdown. You include code snippets if relevant. If you are unsure and the answer is not explicitly written in the CONTEXT provided, you say "Sorry, I don't know how to help with that."  If the CONTEXT includes  source URLs include them under a SOURCES heading at the end of your response. Always include all of the relevant source urls from the CONTEXT, but never list a URL more than once (ignore trailing forward slashes when comparing for uniqueness). Never include URLs that are not in the CONTEXT sections. Never make up URLs`;
CONTEXT:
There are a couple of different ways to calculate a startup's burn rate. One of the easiest methods is to take the average decrease in the company's cash position over the past several months, exclusive of any financing events. For example, if a company had $300,000 in the bank, then $275,000 the next month, then $250,000 the last month, then the metric would be $25,000 a month. You should also include other non-checking account balances, such as your payment processor, a money market account, a savings account, etc. that likely contain dollars that should be included in the analysis...
Q:
How to calculate BURN RATE?
A:

实践

能够根据github.com/gannonh/gpt… Readme的方法建立,本文就不在赘述,实践中选用的向量数据库为Supabase,终究存储在Supabase里面数据方式大约如下:

如何通过Chatgpt+Embedding搭建私有数据FAQ

引证

Supabase技能文档接入AI查找后,能支撑自然语言,能写代码,甚至能debug,估量很多人好奇它是怎样实现的。 https://t.co/WRumhepdR6 by @dotey(宝玉)

github.com/gannonh/gpt…

GitHub – openai/chatgpt-retrieval-plugin: The ChatGPT Retrieval Plugin lets you easily search and find personal or work documents by asking questions in everyday language.

Openai Embeddings