如何用 CAMEL SemanticCache 按语义相似度缓存 LLM 响应并验证命中率?

发布时间:2026/11/10 1:17:54

如何用 CAMEL SemanticCache 按语义相似度缓存 LLM 响应并验证命中率? 如何用 CAMEL SemanticCache 按语义相似度缓存 LLM 响应并验证命中率【免费下载链接】camel CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org项目地址: https://gitcode.com/GitHub_Trending/ca/camel当你用 CAMEL 构建应用时LLM 经常会收到大量表述不同但语义相同的请求。SemanticCache就是为这种场景设计的它把查询文本转成向量嵌入存入向量库查询时按余弦相似度检索只有相似度达到阈值才返回缓存的响应。本文基于仓库中的 SemanticCache 源码、端到端示例 和 单元测试走一遍「初始化缓存 → 写入条目 → 相似查询 → 读取命中率」的完整路径。准备条件根据安装文档 docs/get_started/installation.md 和示例脚本头部说明需要满足Python 版本3.10 and 3.14可用python3 --version检查安装 CAMELpip install camel-ai[all]功能齐全的安装方式核心安装为pip install camel-ai用pip show camel-ai验证示例脚本声明的前置依赖faiss-cpu或faiss-gpu向量存储以及可选的sentence-transformers本地嵌入模型。嵌入模型有两条路径示例脚本会按OPENAI_API_KEY是否存在自动选择设置了OPENAI_API_KEY使用OpenAIEmbedding需要联网未设置使用本地SentenceTransformerEncoder(model_nameall-MiniLM-L6-v2)无需 API key。快速跑通官方示例最短路径是直接运行仓库自带示例python examples/caches/semantic_cache_example.py示例按 9 步演示完整功能初始化嵌入模型打印嵌入维度→ 用FaissStorage创建向量存储余弦距离→ 创建SemanticCache阈值 0.85→ 写入 3 条样例 query-response 对 → 用 5 条测试查询验证命中与未命中 → 演示写入相似查询时的自动去重替换 → 打印缓存统计 → 演示find_similar→ 演示禁用与清空。预期输出形态示例文档中的运行结果具体相似度数值随嵌入模型而异与已缓存条目语义相同的查询如Whats the capital city of France?对应已缓存的What is the capital of France?输出✓ CACHE HIT (similarity: ...)并带出响应主题不同的查询如What is the weather like today?输出✗ CACHE MISS最后打印stats中的hits、misses、hit_rate和条目数。自己组装缓存最小可用代码以下是示例脚本中可直接复用的主路径示例源码 第 1–5 步的精简版from camel.caches import SemanticCache from camel.embeddings import SentenceTransformerEncoder from camel.storages import FaissStorage from camel.types import VectorDistance # 1. 嵌入模型本地 all-MiniLM-L6-v2无需 API key embedding_model SentenceTransformerEncoder(model_nameall-MiniLM-L6-v2) vector_dim embedding_model.get_output_dim() # 2. 内存 FAISS 向量存储余弦相似度 vector_storage FaissStorage( vector_dimvector_dim, distanceVectorDistance.COSINE, ) # 3. 创建语义缓存0.85 表示相似度需达到 85% 才算命中 cache SemanticCache( embedding_modelembedding_model, vector_storagevector_storage, similarity_threshold0.85, ) # 4. 写入 query-response 对返回条目 IDmetadata 为可选附加数据 cache_id cache.set( queryWhat is Python programming language?, responsePython is a high-level, interpreted programming language ..., metadata{source: example}, ) # 5. 用措辞不同但语义相似的查询检索 result cache.get_with_score(What is the Python programming language used for?) if result: response, similarity, record result # 命中返回 (响应, 相似度, 完整记录) else: response None # 未命中或无结果若使用 OpenAI 嵌入把第 1 步换成OpenAIEmbedding()即可需设置OPENAI_API_KEY。set()在缓存被禁用enabledFalse时返回Nonequery或response为空会抛出ValueError。验证命中率与命中/未命中行为单次查询判断get_with_score(query)命中时返回三元组(response, similarity, CacheRecord)其中CacheRecord含query、response、query_id、created_at、metadata字段未命中无结果或最高相似度低于阈值返回None。若只想要响应文本用get(query)返回str或None。整体命中率cache.stats返回字典包含hits、misses、hit_rate、size、enabled、similarity_threshold六个键hit_rate单独也有属性。命中率定义为hits / (hits misses)尚未查询过时为0.0。每次get/get_with_score调用无论命中与否都会更新计数。单元测试 test/caches/test_semantic_cache.py 给出了可对照的行为断言相似度0.95≥ 阈值0.85时get返回缓存响应stats[hits] 1相似度0.5 阈值时get返回Nonestats[misses] 1空字符串或纯空白查询直接返回None3次命中 7次未命中时hit_rate 0.3find_similar(query, top_k3)返回按相似度降序的(CacheRecord, similarity)列表且不受阈值过滤——即使相似度低于0.75的条目也会返回适合排查「为什么没命中」。去重替换行为set()写入前会检索是否已存在相似度达到阈值的条目若存在先删除旧条目再写入新条目。示例第 6 步演示了这一点对已缓存的What is Python programming language?写入新的What is Python?后cache.size仍为 3且get(What is Python?)返回更新后的响应。相似度低于阈值时则不替换只追加。边界条件与限制阈值取值similarity_threshold必须在0.0到1.0之间含端点构造时或后续赋值越界都会抛出ValueError默认值为0.85。阈值越高命中要求越严格。相似度归一化不同向量存储后端返回的分数范围可能不同SemanticCache内部会把相似度钳制到0.0–1.0后再与阈值比较。禁用与清空cache.enabled False后get/get_with_score/set均直接返回None不会读写向量库cache.clear()会删除全部条目并将hits、misses归零。存储位置示例使用内存 FAISS进程结束后缓存不保留metadata以 JSON 字符串形式存入 payload以兼容不支持嵌套字典的存储后端。异常处理嵌入生成或向量库查询失败时_query_similar记录 warning 并返回None查询表现为未命中不会抛出异常中断调用方。下一步各方法完整签名与返回类型见 SemanticCache API 参考基类BaseCache/CacheRecord的接口定义在 camel/caches/base.py可对照理解get、set、delete、clear的抽象契约若要把缓存接入真实 LLM 调用链路参考 CAMEL 安装与配置文档 中关于OPENAI_API_KEY等环境变量的设置方式。【免费下载链接】camel CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org项目地址: https://gitcode.com/GitHub_Trending/ca/camel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/10 11:03:58

Upscayl 图像超分:本地 5 步放大 4 倍老照片

Upscayl 图像超分:本地 5 步放大 4 倍老照片 【免费下载链接】upscayl 🆙 Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 截图放大就糊、手机老…

2026/11/10 10:52:44

RAG工程化三支柱:分块、混合召回与质量评估实战

1. 这不是“搭个RAG玩玩”,而是一场系统性工程攻坚 你搜“RAG实战”,满屏是“5分钟用LangChain搭个知识库”、“三行代码接入大模型”。我试过,也写过这类教程——但真正把RAG从Demo推进到生产环境,连续跑三个月不掉链子、用户提问…

2026/11/10 14:09:34

德兴安监局电工证上岗必备,外省证能不能转过来?

德兴安监局电工证上岗必备,外省证能不能转过来? 之前考的证在外省能不能转过来?这个是很多电工朋友最关心的问题。特别是像你这样在南阳卧龙区工作的建筑工人,经常听说“德兴安监局电工证”是上岗必备的,但很多人心里都有疑问,我之前在外地考的电工证能…

2026/11/10 14:09:34

高唐低压电工证培训机构怎么选才靠谱?郑州报考避坑指南

高唐低压电工证培训机构怎么选才靠谱?郑州报考避坑指南 怕考不过白交培训费?别急,选对培训机构才是关键。高唐低压电工证培训机构五花八门,有的培训不到位,有的考试不过率高,结果钱花了,证书没拿到,还得重新来一遍,费时费力又费钱。特别是对新手来说…

2026/11/10 14:09:34

电工证的使用期限保姆级教程:怕考不过白交培训费?这期讲透彻了!

电工证的使用期限保姆级教程:怕考不过白交培训费?这期讲透彻了! 怕考不过白交培训费?电工证的使用期限和全国通用性你搞清楚了吗?很多人花大钱考了证,结果发现要么用不上,要么用不了多久就得换新证,白忙活一场。今天我就从信阳浉河区初次报考人员的角…

2026/11/10 14:09:34

蓟县考电工证电话报名入口与办理流程

蓟县考电工证电话报名入口与办理流程 工地太忙根本没时间复习考试,这几乎是每个在一线干活的工友都会遇到的难题。尤其是像电工证这样的 上岗必备…

2026/11/10 14:09:34

逊克电工证怎么考最稳妥?全国通用的实操考试不慌指南

逊克电工证怎么考最稳妥?全国通用的实操考试不慌指南 实操考试心里没底怕挂科?别慌!很多人第一次考电工证时,就因为对流程不熟悉、对实操考试心存疑虑而失利。尤其是拿着【逊克电工证】,想要在全国范围内通用,必须从报名到考试每一步都做到万无一失。本…

2026/11/10 8:12:38

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/10 0:01:28

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了 你是不是也担心自己学历不高,考电工证报名费太贵,根本报不上名?别急,今天就来给你讲讲,怎么用最少的钱,把证拿到手,还能在工地上多挣点钱。 电工证报名费多少钱?网上查询是关键…

2026/11/10 0:01:29

绍兴考电工证培训机构怎么选?2026河南最新政策别错过

绍兴考电工证培训机构怎么选?2026河南最新政策别错过 怕考不过白交培训费?你不是一个人。2026河南最新政策出台,对电工证考试、报名、培训、复审都有明确规定。选择绍兴考电工证培训机构,别再踩坑,下面一步步教你避坑。…

2026/11/9 6:30:27

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑