实战连载基于向量数据库的长期记忆的AI1实现思路

magic
2024-09-12 / 0 评论 / 10 阅读 / 正在检测是否收录...

最近开发了基于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

评论 (0)

取消