Smart Cache 是一个为 OpenClaw/QClaw 设计的本地智能缓存系统,通过缓存 AI 响应来减少 API 调用成本和响应时间。
核心功能:
python
python scripts/cache_manager.py status
python
# 精确查询
python scripts/cache_manager.py query "你好,今天天气怎么样?"
# 语义查询(返回相似度 > 0.85 的结果)
python scripts/cache_manager.py query-semantic "今天天气如何?" --threshold 0.85
python
python scripts/cache_manager.py add "你好" "你好!有什么可以帮助你的吗?"
python
# 清理过期缓存
python scripts/cache_manager.py clean --expired
# 清理全部
python scripts/cache_manager.py clean --all
# 清理特定时间范围
python scripts/cache_manager.py clean --before "2024-01-01"
适用于完全相同的请求。使用 SHA256 哈希作为 key,O(1) 查找时间。
特点:
示例:
text
用户: "什么是Python?"
→ 缓存命中 → 直接返回缓存的回答
适用于语义相似但不完全相同的请求。 需要配置 embedding API 才能启用。
工作原理:
特点:
示例:
text
缓存: "今天天气怎么样?" → "今天晴天,气温25度..."
查询: "今天天气如何?"
→ 相似度 0.92 → 返回缓存的回答
注意: L2 语义匹配需要 embedding API 支持(详见配置说明)。
配置文件位于 ~/.qclaw/smart-cache/config.json:
json
{
"cache_dir": "~/.qclaw/smart-cache/data",
"l1_max_size": 10000,
"l2_max_size": 5000,
"ttl_hours": 168,
"similarity_threshold": 0.85,
"embedding_provider": "openai",
"embedding_model": "text-embedding-3-small",
"api_key": "your-api-key",
"enable_cost_tracking": true
}
配置说明:
参数默认值说明l1_max_size10000L1 缓存最大条目数l2_max_size5000L2 缓存最大条目数ttl_hours168缓存过期时间(小时),约 7 天similarity_threshold0.85L2 语义匹配阈值(0-1)embedding_provideropenaiembedding 提供者: openai、 dashscope、 local``embedding_modeltext-embedding-3-smallembedding 模型名称api_key-API Key(支持 OPENAI_API_KEY / DASHSCOPE_API_KEY 环境变量)enable_cost_trackingtrue是否启用成本追踪
OpenAI(推荐):
json
{
"embedding_provider": "openai",
"embedding_model": "text-embedding-3-small",
"api_key": "sk-..."
}
阿里云 DashScope:
json
{
"embedding_provider": "dashscope",
"embedding_model": "text-embedding-v1",
"api_key": "your-dashscope-key"
}
本地模型(无需 API Key):
json
{
"embedding_provider": "local",
"embedding_model": "all-MiniLM-L6-v2"
}
本地模型需要安装: pip install sentence-transformers
查看节省的成本:
python
python scripts/cache_manager.py stats
输出示例:
text
📊 缓存统计
━━━━━━━━━━━━━━━━━━━━━━━━━━━
总请求数: 1,234
L1命中: 456 (37%)
L2命中: 189 (15%)
缓存未命中: 589 (48%)
💰 成本节省
━━━━━━━━━━━━━━━━━━━━━━━━━━━
节省Token: 89,234
估算节省: $0.27
MCP Server 支持 stdio 和 HTTP 两种模式。
stdio 模式(推荐,用于 OpenClaw):
python
python scripts/mcp_server.py --mode stdio
HTTP 模式(用于其他工具):
python
python scripts/mcp_server.py --mode http --port 8080
python
from scripts.cache_api import SmartCache
cache = SmartCache()
# 查询缓存
result = cache.query("用户的问题")
if result:
print(f"缓存命中!相似度: {result.similarity}")
print(f"回答: {result.response}")
else:
# 调用实际API
response = call_llm_api("用户的问题")
# 存入缓存
cache.store("用户的问题", response)
主缓存管理工具,提供命令行接口:
status - 查看缓存状态query - 精确查询query-semantic - 语义查询(L2,需要 embedding 配置)add - 添加缓存条目clean - 清理缓存stats - 查看统计信息Python API 模块,提供编程接口:
SmartCache - 主缓存类CacheEntry - 缓存条目类CacheStats - 统计信息类向量嵌入工具,支持多种 embedding 来源:
OpenAIEmbeddings - OpenAI Embedding APIDashScopeEmbeddings - 阿里云 DashScope APILocalEmbeddings - 本地 sentence-transformers 模型用法示例:
python
from scripts.embeddings import get_text_embedding, compute_similarity
# 获取单条文本的嵌入向量
emb = get_text_embedding("你好")
# 计算两条文本的相似度
sim = compute_similarity("今天天气怎么样", "今天天气好吗")
MCP 协议服务器,支持与其他 AI 工具集成:
stdio 模式:用于 OpenClaw MCP 集成http 模式:用于其他支持 HTTP 的工具合理设置 TTL:根据内容更新频率设置过期时间
L2 语义缓存需要 API Key:如果未配置 embedding,L2 查询会使用字符级 Jaccard 作为后备方案
调整相似度阈值:
定期清理: bash
# 每周清理一次过期缓存
0 0 * * 0 python ~/.qclaw/smart-cache/scripts/cache_manager.py clean --expired
监控缓存效果:
api_key)~/.qclaw/smart-cache/config.json 中配置了 api_keyOPENAI_API_KEY / DASHSCOPE_API_KEYl1_max_size、 l2_max_size)ttl_hours)cache_manager.py clean --expiredcache_manager.py - 命令行管理工具cache_api.py - Python API 模块mcp_server.py - MCP 协议服务器embeddings.py - 向量嵌入工具api_reference.md - API 详细文档config_template.json - 配置文件模板