在大模型应用里,将文本数据分块嵌入存储在向量数据库已经是标准做法。然而,传统向量数据库虽然功能强大,但其高昂的RAM和存储需求,以及复杂的部署运维,常常让开发者望而却步。今天,介绍一个名为 Memvid 的开源项目,它提出了一个有趣的思路将文本数据巧妙地“存入”视频文件,完成信息的高效检索。
这个项目能够将数百万级别的文本区块(chunks)压缩并存储在紧凑的视频文件中,同时通过配套的索引文件,实现对这些信息闪电般的语义搜索和亚秒级检索。这意味着,你不再需要依赖庞大而昂贵的数据库服务器,只需管理普通的视频文件即可。

它一次性解决传统文本存储的三大痛点:存储冗余、检索延迟和网络依赖,具备以下的显著优势:
-
极致存储效率:利用视频压缩技术,存储空间可比传统方案节省高达10倍。 -
闪电语义搜索:归功于预计算的语义索引和视频帧的快速跳转能力。 -
零基建,离线优先:知识库就是视频和索引文件,易于分发,生成后即可完全离线运行。
在使用层面也比较简单,通过几行代码即可上手。
from memvid import MemvidEncoder, MemvidChat
# Create video memory from text chunks
chunks = ["Important fact 1", "Important fact 2", "Historical event details", ...]
encoder = MemvidEncoder()
encoder.add_chunks(chunks)
encoder.build_video("memory.mp4", "memory_index.json")
# Chat with your memory
chat = MemvidChat("memory.mp4", "memory_index.json")
chat.start_session()
response = chat.chat("What do you know about historical events?")
print(response)
其处理流程如下:
-
构建记忆:
-
首先,输入的文本(如PDF)被拆分成小的文本区块。 -
每个区块被赋予一个语义“指纹”(向量),并同时生成一个视觉标记(如QR码)。 -
这些视觉标记被逐帧编码进MP4视频文件。 -
一个独立的索引文件会记录下每个文本区块的语义“指纹”及其在视频中的帧位置。 -
检索信息:
-
当用户提问时,问题也被转换成一个语义“指纹”。 -
Memvid利用索引文件,迅速匹配到与问题最相似的文本区块“指纹”。 -
根据索引提供的帧位置,它能直接从视频的对应帧中解码视觉标记,即时提取出原始文本内容。整个过程通常在亚秒级完成。
它将复杂的文本数据转化为易于管理、快速检索的视频记忆,对CPU友好,无需GPU依赖。
小结
Memvid的解决方案让人耳目一新,通过其创新的文本视觉编码与智能索引机制,提供了一种前所未有的高效、经济且便携的解决方案。目前虽然还是一个概念原型阶段,但非常值得大家尝试。
地址:https://github.com/Olow304/memvid
(文:AI工程化)