ModelCache
LLM 语义缓存系统,通过向量检索复用相似问题答案,降低推理成本 30-70%
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
LLM 语义缓存系统,通过向量检索复用相似问题答案,降低推理成本 30-70%
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个真实场景:某公司的智能客服系统每天处理上万次用户咨询,其中相当比例是高度相似的问题——"如何重置密码"、"验证码收不到怎么办"、"账户被锁如何处理"。每次都让大模型重新推理一遍,不仅浪费算力,响应延迟也高。用户等待时间长,体验差。
ModelCache 的核心价值,就是解决这个问题:当用户再次提出语义相似的问题时,直接从缓存中返回之前已经生成过的优质答案,既节省成本,又实现毫秒级响应。
ModelCache 由蚂蚁集团旗下 AI 团队 codefuse-ai 开发并开源,定位为 LLM(大语言模型)的语义缓存系统。项目最早于 2023 年中开源,GitHub 获得了 943 stars、61 forks、7 个 open issues,说明其已经在开发者社区获得了一定的认可。
该项目填补了一个实际需求:业界普遍关注模型推理优化(模型量化、KV Cache、Flash Attention),但对"下游应用层缓存"这一环缺乏系统化工具。ModelCache 将 RAG(检索增强生成)中的向量检索技术,巧妙移植到了 LLM 调用缓存场景,形成了一套完整的语义缓存解决方案。
ModelCache 的设计思路可以类比为图书馆的"索引系统 + 书架 + 借阅记录":
当用户发起查询时,系统首先将自然语言问题通过 Embedding 模型转换为高维向量。这是语义理解的核心环节。ModelCache 支持多种 Embedding 框架:
向量化的质量直接决定缓存命中率——两句话表达相同意图但用词不同,Embedding 模型能否识别出来,是系统能力的关键。
将查询向量与缓存中的历史向量进行相似度搜索。ModelCache 支持多种向量数据库后端:
存储原始问题、答案、元数据:
三层之间通过 DataManager 统一调度,EvictionManager 负责缓存淘汰策略(LRU、LFU、ARC 等)。
图1:ModelCache 模块架构(来源:GitHub 官方文档)
从代码结构来看,ModelCache 采用了经典的适配器(Adapter)模式,核心代码组织如下:
modelcache/
├── adapter/ # 对齐 OpenAI ChatCompletion API
├── embedding/ # 多种 Embedding 模型支持
├── manager/
│ ├── scalar_data/ # 标量数据存储(MySQL/SQLite/ES)
│ ├── vector_data/ # 向量数据存储(Milvus/Redis/FAISS/Chroma)
│ └── eviction/ # 缓存淘汰策略(LRU/LFU/ARC/W-TinyLFU)
├── processor/ # 前后置处理器
├── similarity_evaluation/ # 相似度评估
└── utils/ # 工具函数
adapter/ 目录实现了 OpenAI ChatCompletion 接口的透明封装。调用方无需修改代码,只需传入 cache_obj 参数,系统自动完成:
adapter_query.py):接收问题 → Embedding → 向量检索 → 命中则返回缓存答案 → 未命中则透传给 LLMadapter_insert.py):LLM 生成答案后,同时写入向量库和标量库adapter_remove.py):支持手动删除特定缓存条目EmbeddingDispatcher 使用 ProcessPoolExecutor + ThreadPoolExecutor 实现多进程并行 Embedding 生成,支持自定义 worker 数量,避免 Embedding 成为性能瓶颈。
from modelcache.cache import Cache
from modelcache.embedding import EmbeddingModel
cache, _ = await Cache.init(
sql_storage="sqlite", # 内置,无需安装
vector_storage="faiss", # 内置,无需安装
embedding_model=EmbeddingModel.HUGGINGFACE_ALL_MPNET_BASE_V2
)
# 查询(自动命中检测)
result = await cache.query("如何重置密码?")
# 写入(首次插入)
await cache.insert("如何重置密码?", "请访问账户设置页面,点击重置密码链接。")
docker network create modelcache
docker-compose up --build
docker-compose 中已内置 MySQL + Milvus(嵌入式 etcd),开箱即用。
在 LLM 推理成本居高不下的背景下,语义缓存是一种被低估的工程优化手段。LangChain、LlamaIndex 等框架均未提供开箱即用的语义缓存方案,而 ModelCache 恰好填补了这一空白。对于日均调用量超过 10 万次的企业级应用,合理的缓存策略可以将 LLM 调用成本降低 30%-70%。
此外,ModelCache 对多租户场景的支持(Redis Search 模式)也值得关注:不同用户的查询在 Redis 命名空间中隔离,既保证了数据安全,又避免了跨租户的语义干扰。
该项目的发展轨迹(从本地 SQLite 到分布式 Milvus/Redis,从单语言到 BGE-M3 多语言)也反映了其从原型验证走向生产可用的演进路径。对于需要构建高效、低成本 LLM 应用的团队,ModelCache 是一个值得优先测试的组件。
| 维度 | 评分 | 说明 |
|---|---|---|
| 架构设计 | ★★★★☆ | 模块化清晰,适配器模式优雅,扩展性好 |
| 代码规范 | ★★★★☆ | 完整的类型注解、文档字符串、单元测试 |
| 测试覆盖 | ★★★★☆ | pytest + pytest-cov,要求覆盖率 >80% |
| 文档质量 | ★★★★☆ | 中英双语 README,完整 Quick Start |
| 部署便利性 | ★★★★☆ | docker-compose 一键启动,Demo 模式零配置 |