最近开发了基于CHATGPT的AI给开发者使用,通过设置一些有趣的prompt 可以有一些很好的玩法,但在长期的使用过程中遇到一些问题,需要解决。
正好发现目前关于向量数据库的搭建开发资料极度稀缺,更没完整的教程,准备把这次开发过程记录下来。
普通AI遇到的问题
1.token超标,为了能让AI回复客户问题,有连续性,AI理解上面已经答过的问题,我们会把用户的每次回复都传给chatGPT,当连续交互几次,会出现次数过多,或者字数超出触发chatGPT的警告
chatGPT错误内容
2.记忆力失去,例如在10个会话前,我告诉AI,你是小美,等10次会话后,我再问AI,你叫啥,他不知道
3.放飞自我,有时候一些回答跟我们问的问题毫无相关,放飞自我。
4.学习能力,例如AI我问他一些最近微信小程序开发的规则,他是无法知道的,或者问某个大公司今年的财报等等,一些较新的内容。
5.私有文库能力,例如我们某汽车公司有一份产品使用说明,可能几千页,当我们遇到这款汽车遇到某个故障,想跟客服人员一样,立刻得到正确的结果,chatGPT是很难回答正确。
解决方案:向量数据库
遇到这些问题,行业里的解决方案就是使用向量数据库,向量数据库在图像搜索、自然语言处理、推荐系统已经非常成熟。 与传统的数据库(关系、非关系数据库)相比,你可以理解为传统数据库主要记录数据,而向量数据库主要记录特征,既然是特征这也就是说他很少会用到完全匹配说法,核心概念就是相似的特征,相似比例多少,想象目前行业的应用图片搜索,推荐系统是否都是搜索相似性特性。
向量数据库选择,Milvus、Zilliz、pinecone、腾讯云、阿里云,除了腾讯云的2023年08月发布,其他的都可以使用了。为了降低成本,我们就自己搭建Milvus,接下来教程也会教一步一步搭建Milvus向量数据库。
主要的场景
- 搜索(其中结果按与查询字符串的相关性排序)
- 聚类(其中文本字符串按相似性分组)
- 建议(推荐带有相关文本字符串的项目)
- 异常检测(识别出关系很小的异常值)
- 多样性测量(分析相似性分布)
- 分类(其中文本字符串按其最相似的标签进行分类)
我们这次用的是搜索场景
初步设想代码实现过程
整体实现思路
接下来的文章,基本会按照这个思路来逐步实现最终结果。
1. 安装和配置Milvus:
Milvus是一个开源向量数据库,用于存储和检索高维向量。首先,需要安装并配置Milvus,以便将知识库中的文本转换为向量,并能够高效地检索相关的信息。
这里会涉及到Milvus的使用,增删改查,Milvus相关工具的使用教程
2. 构建本地知识库:
创建一个本地知识库,其中包含问题和对应的答案。每个问题都应该有一个唯一的ID,并且答案可以是任何形式的文本。
本地文件处理,PDF切个,文件投喂AI,拿到向量值,写入数据库
3. 使用Golang开发问答系统的后端:
在Golang中编写一个后端服务,用于接收用户的问题,并通过ChatGPT和Milvus来查找最合适的答案。
实现第二步的后端代码
4. 集成ChatGPT API:
使用OpenAI的ChatGPT API,将用户的问题传递给ChatGPT模型,以获取对应的回答。你可以通过发送HTTP请求到ChatGPT API来实现这一点,我使用的模型是text-embedding-ada-002
拿到最终prompt 去跟AI提问
5. 文本向量化:
当用户提出问题时,需要对该问题进行向量化,以便与知识库中的问题向量进行匹配。使用ChatGPT模型的词嵌入(Word Embeddings)来将问题转换为向量。
使用chatGPT 的text-embedding-ada-002模型来把文档变成向量值
6. 利用Milvus进行快速检索:
将所有知识库中的问题向量加载到Milvus中,并设置适当的索引以加快检索速度。当用户提问时,将向量化的问题与Milvus中的向量进行相似度匹配,找到最相似的问题。
用户问题,先查询Milvus
7. 返回答案:
通过ChatGPT获得的回答可能不是最终的答案,因为ChatGPT是一个生成式模型,它可以自由生成文本。将ChatGPT生成的回答与Milvus中找到的答案结合起来,然后将最终的答案返回给用户。
8. 错误处理和反馈:
考虑到ChatGPT可能会产生错误的回答,实现一些错误处理机制,例如询问用户是否满意回答,并将用户的反馈用于改进系统。
9. 用户界面:
开发一个用户界面,允许用户输入问题,并从后端获取回答展示给用户。
代码流程
代码主要分为2个大流程,一个是数据训练,把客户上传的文档数据进行训练,生成特征数据保存到向量数据库,另一个用户提问搜索流程,下面是2个流程图
数据训练流程
数据查询流程
下一篇就是安装和配置Milvus,已经Milvus的使用相关问题。
评论 (0)