GAR的初步学习| 豆包MarsCode AI刷题

65 阅读2分钟

RAG,索引增强生成,它可以动态的从知识库中检索,适合于探寻模型中没有的知识。

它的工作有三部,检索,上下文编码,生成。

我们知道当向AI寻求问题的时候,AI不会将你的问题全部识别出来,而是先将你的问题分成一个个小的块,可以是句子,也可以是单个的词,这要看你问的问题是什么,让AI认为是分成大块好还是小块好,你的问题越是需要体现整体性,分割的块也就越大。并且块与块之间有重合部分。同时,在分割时也会提取关键字段,将其翻译,格式转化等。 回答问题使用LLM模型,GPT-3.5-turbo,有4096块令牌,你可以理解为这令牌就是存储空间,将会有2000的令牌负责存问题,2000的令牌负责回答问题。

接下来要让系统回答问题,需要用余弦相似度匹配问题,使用嵌入式模型(Embeddings)将问题放入,查找。这里embeddings有两种方法,一种是embed_documents,适合整体的嵌入,如将一大段话交给系统识别,一种是embed_query ,适合单个问题的询问。 嵌入需要耗费大量的时间,我们用缓存来帮助者这一点,将这这数据保存在向量数据库中,为了寻找存储的数据,用了哈希算法,将文件进过哈希后存储。

向量数据库的选择要根据以下几个方面

数据规模和速度需求:考虑你的数据量大小以及查询速度的要求。一些向量数据库在处理大规模数据时更加出色,而另一些在低延迟查询中表现更好。

持久性和可靠性:根据你的应用场景,确定你是否需要数据的高可用性、备份和故障转移功能。

易用性和社区支持:考虑向量数据库的学习曲线、文档的完整性以及社区的活跃度。

成本:考虑总体拥有成本,包括许可、硬件、运营和维护成本。

特性:考虑你是否需要特定的功能,例如多模态搜索等。

安全性:确保向量数据库符合你的安全和合规要求。

向量存储器索引

通过VectorstoreIndexCreator来创建索引,并在索引的query方法中,通过vectorstore类的as_retriever方法,把向量数据库(Vector Store)直接作为检索器,来完成检索任务。