《向量数据库》第七、第八章。
这是《向量数据库》笔记的最后一张,我自己看完整本书,代码都没尝试过。慢点我们探测有没有小批量测试的可能性。
第六章 向量数据库的实践案例
1.搭建图片查询系统
图搜索的步骤。
第一,接受图片,并且进行向量化。
第二,通过 SDK 存到向量数据库的平台;至此,建立图片库完成。
第三,接收待查图片,将接收到的图片向量化,然后与图向量数据库相对比,用算法算 Score,选择 TOP-K 进行显示。
显示的函数用 PyTorch。extract_image() 函数是输入路径,用路径定位图片。
这里有若干个函数,来保证输入数据的分布和建模时候的数据分布是一致的:
(1)Resize(256);
(2)CenterCrop(224);
(3)ToTensor();
(4)Normalize(...)。
2.搭建个人知识库
核心步骤如下:
(1)个人知识预处理,涉及大型知识库分段;
(2)知识向量化,分段完成的数据,向量化后存储到向量数据库中;
(3)知识库管理,端到端应用程序,支持用户上传库文件;
(4)知识问答,提供问题入口,后台接收用户的问题,找到最相似的分段,返回给到大模型。
注意:
1.推荐个人知识库支持 MarkDown 格式;
2.个人知识预处理在于数据分段处理;
3.每一段数据随后都会被交给向量化模型进行处理,分段的效果在很大程度上决定了数据的质量;
4.分词用的是 BeautifulSoup。
知识库管理是基于 Flask 框架来构建知识库的整体录入界面,以及后续的查询界面。
知识问答阶段,分成三个步骤:
1.从 Search 参数中获取用户输入的原始问题文本。BGE 模型是最佳实践,优化查询效果附加额外的提示文本 instruction。
2.针对向量化后的 search_vector 通过 db_sdk.search 查询向量数据库,获取最相似的 5 个分段向量数据。返回这些数据对应的 ID,提交大模型。
3.基于查询到的最相似数据 ID,进一步组装请求大模型参数,例如,OPENAI的接口。
第八章 展望
人类处理数据有两种方式:一是通过预训练将知识更新到大模型;二是通过向量数据库将数据更新到大模型。要注意,大模型在知识更新方面,是有“时间限制”的。这些数据与大模型配合需要依赖更专业的数据库,专门用于存储和处理向量数据的向量数据库。聚焦于向量数据库已经服务的 RAG 场景。
向量数据库平台化有几个好处:(1)帮助人们实现资源分时复用;(2)降低使用门槛,开箱即用。
作者观点,程序员承担的是“中介”的角色,将需求翻译成机器能够识别的程序,称之为“人类通过自然语言调度算力”,这是大模型时代的新范式。这一范式的转变具有深远意义:使得原本需要程序员承担的中介任务,可以通过具有更强泛化能力的大模型来实现。一旦能够通过“自然语言”去调度算力,人们就会减少对于程序员这个“中介”的依赖。
过去几十年,人类已经积累了海量数据,小部分 结构化,大部分非结构化。向量数据库平台化意味着成本和使用门槛都要降低。
DB for AI,要知道只有具备企业级能力的向量数据库才能更好地服务大模型时代,还需要将 AI 能力融入向量数据库之中,称为“智能化”。
企业级的数据库需要在以下几点做到极致:分布式、性能、可靠性、成本、安全性、可用性。
三个层次对向量数据库做智能化提升:接口智能化(对外接口必须基于自然语言)、计算智能化(实现对结果按照语义顺序进行重排序,例如,积极语义、消极语义)、存储智能化(通用的压缩算法,提升存储效率和降本)。
向量数据库是 RAG 技术核心组件。RAG 技术含义,检索阶段(retrieval),检索的效果将直接决定生成阶段结果,即 generation。RAG 是一种结合了检索和生成的自然语言处理技术,通常用于增强语言模型的能力、特别是在需要从大量数据中检索信息并基于这些信息生成文本场景中。

写在读后感之后。其实,因为自己没有写代码,没有做实验,对于笔记也只是 Literal 的摘抄,理解的感受是不太深刻的。但是,笔者深刻地相信,作者是试图写到大家能够理解,并且提出了自己的观点。以后,也会探索小成本的实验方法。