你有没有想过,用视频 MP4 的格式来存储 AI 文本?
关于 AI 内存管理,目前标准的做法是把文本数据分块存储在向量数据库里面,这也带来了对 RAM 、存储空间、运维的高需求。
这两天在逛 X 的时候发现了一个挺有意思的项目: Memvid 。
开发者脑洞大开,与传统向量数据库的存储方式不同,他选择将整个知识库压缩成 MP4 文件进行存储。
相当于一个可移植、高效且自包含的 AI 内存 SQLite 。
它通过将文本编码为视频帧中的二维码,无需任何基础设施,即可实现比矢量数据库节省 10x 倍的存储空间。
同时还保持毫秒级的语义搜索速度。
上线 3 周内就在 GitHub 上收获 8k+ 星标。
目前的星标数量也已经涨到了 9k 。2.0 版本也即将推出。
指路链接:
https://github.com/Olow304/memvid
接下来,我们一起看一下它的优势和底层原理是什么。
一、底层原理+核心优势
在更加深入探索这个项目之前,我们先来看看这个项目是怎么发生的。
故事开始于项目主开发者对传统向量数据库的高昂内存和云成本感到困扰。
由于他本人在视频压缩领域有着 30 年的经验,于是他灵机一动,将文本块转换为二维码,将其编码为视频帧,然后让 H.264 等视频编解码器对其进行压缩。
得到的结果是:10000 个 PDF 文件被压缩成一个 1.4GB 的视频文件,内存占用从 8GB 降至仅 200MB ,搜索速度与领先解决方案不相上下。
文本 → 二维码 → 视频帧
从上面的结果,我们能发现 Memvid 首要优势在于视频压缩这样的操作让存储空间小了 10x 倍。
这是因为每个文本块都会变成一个二维码,并被打包到视频帧中。而现代视频编解码器对重复视觉模式(二维码)的压缩效果远优于原始嵌入。
随着下一代编解码器(AV1、H.266)的更新,压缩后的内存占用会更小,并且无需更改代码。
毫秒级的检索速度
Memvid 的索引方式:通过索引直接查找帧 → 二维码解码 → 文本数据。
只需要一次查找,一次解码,就能得到文本块,无需服务器往返,从而实现低于 100 毫秒的检索时间。
对话功能
Memvid 内置对话功能,可与知识库进行上下文感知的对话,同时支持直接导入 PDF 文档并自动索引处理。
其他优势
零基础设施
整个操作不再需要数据库、服务器,不用 Docker ,只需要 Python 和 MP4 视频文件。
便携性
MP4 的格式也带来了真正的便携性,毕竟视频可以轻松复制或者进行流式传输。
离线运行
编码之后,查找解码等操作均可在离线状态下运行。
具体性能表现
索引速度:使用 CPU 每秒可索引 10k 个文本块。
搜索速度:在 100 毫秒内可以搜索 1M 块(包括解码)。
存储:100MB 的文本可被压缩为 1-2MB 的视频。
RAM 内存:无论文本块大小,固定 500MB RAM 内存需求。
二、Memvid v2 预告
Memvid 2.0 也即将发布。
旨在 v1 版本上更进一步,构建一个可用于与知识库进行交流的动态记忆引擎。
具体的更新将包括:
实时记忆引擎:不断添加新数据并让 LLM 在各个会话中记住它。 智能编解码器:根据内容自动选择 AV1/HEVC 。 时间旅行 debugging :倒回聊天或对任何聊天建立分支来进行审查或测试。 智能调用:本地缓存猜测用户需要什么并在 5 毫秒内加载。 胶囊上下文:通过可共享的 .mv2 胶囊建立上下文关系。每个胶囊都有自己的规则和有效期。
三、上手指南
安装
pip install memvid
# For PDF support
pip install memvid PyPDF2
快速入门
from memvid import MemvidEncoder, MemvidChat
# Create video memory from text
chunks = ["NASA founded 1958", "Apollo 11 landed 1969", "ISS launched 1998"]
encoder = MemvidEncoder()
encoder.add_chunks(chunks)
encoder.build_video("space.mp4", "space_index.json")
# Chat with your memory
chat = MemvidChat("space.mp4", "space_index.json")
response = chat.chat("When did humans land on the moon?")
print(response) # References Apollo 11 in 1969
实例
文档助理
from memvid import MemvidEncoder
import os
encoder = MemvidEncoder(chunk_size=512)
# Index all markdown files
for file in os.listdir("docs"):
if file.endswith(".md"):
with open(f"docs/{file}") as f:
encoder.add_text(f.read(), metadata={"file": file})
encoder.build_video("docs.mp4", "docs_index.json")
PDF 库搜索
# Index multiple PDFs
encoder = MemvidEncoder()
encoder.add_pdf("deep_learning.pdf")
encoder.add_pdf("machine_learning.pdf")
encoder.build_video("ml_library.mp4", "ml_index.json")
# Semantic search across all books
from memvid import MemvidRetriever
retriever = MemvidRetriever("ml_library.mp4", "ml_index.json")
results = retriever.search("backpropagation", top_k=5)
交互式 Web 用户界面
from memvid import MemvidInteractive
# Launch at http://localhost:7860
interactive = MemvidInteractive("knowledge.mp4", "index.json")
interactive.run()
高级功能
规模优化
# Maximum compression for huge datasets
encoder.build_video(
"compressed.mp4",
"index.json",
fps=60, # More frames/second
frame_size=256, # Smaller QR codes
video_codec='h265', # Better compression
crf=28 # Quality tradeoff
)
自定义嵌入
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-mpnet-base-v2')
encoder = MemvidEncoder(embedding_model=model)
并行处理
encoder = MemvidEncoder(n_workers=8)
encoder.add_chunks_parallel(million_chunks)
CLI 使用
# Process documents
python examples/file_chat.py --input-dir /docs --provider openai
# Advanced codecs
python examples/file_chat.py --files doc.pdf --codec h265
# Load existing
python examples/file_chat.py --load-existing output/memory
四、最后
Memvid 最大的突破点在于无需庞大的基础设施或高昂的云成本,通过将文本块编码成视频帧的创新方式,让每个人都能轻松访问和扩展 AI 内存。
有需要的小伙伴可以去了解一波~
>/ 本期作者:Tashi & JackCui
>/ JackCui:AI领域从业者,毕业于东北大学,大厂算法工程师,热爱技术分享。
没有评论:
发表评论