diff --git a/docs/assets/architecture-overview.svg b/docs/assets/architecture-overview.svg index 70065cc..b5e5617 100644 --- a/docs/assets/architecture-overview.svg +++ b/docs/assets/architecture-overview.svg @@ -1,172 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - AudioGraphy · 总体架构(Overall Architecture) - 两层架构:流水线状态层(MySQL) + RAG 引擎层(文件索引),由 recording_id 桥接 - - - - 输入层 Input - - 门店录音 - 汽车销售 / 育儿咨询 - .mp3 / .wav / .m4a - - 业务元数据 - 门店 / 坐席 / 客户 - recorded_at / tenant_id - - 人工修正 - 标签/实体人工校对 - 触发增量重算 - - - - 流水线状态层(MySQL · 新增) - Pipeline State Layer — orchestration · version · audit · aggregation - - - recordings - id · path · tenant_id · status · pipeline_state · created_at - - - tag_facts ★(append-only, versioned) - recording_id · tag_path · value · prompt_version · input_hash - - - tag_current - MAX(version) 视图(按 recording+tag_path) - - - tag_stats - 物化聚合(多级标签计数/分布,增量刷新) - - - prompts - entity_zh · tag_* prompt_version 注册表(A/B 切换) - - - vectors_mysql(Phase 1 暴力余弦) - entity_emb · chunk_emb · 10⁵–10⁶ 行,小规模够用 - - - tenants · users · roles - 多租户隔离 + RBAC(管理员/质检员/坐席/只读) - - - 审计 / 重算任务队列 / LLM 调用日志 - - - - RAG 引擎层(文件索引 · 复用 VideoRAG) - RAG Engine Layer — vector · graph · chunk — index once, query many - - - kv_store_llm_response_cache.json ★ - MD5(model,messages) · prompt 不变重打免费 - - - kv_store_video_segments.json - 段级 transcript · timestamp · recorded_at · speaker - - - kv_store_text_chunks.json - chunk 文本 + 溯源(segment_ids[]) - - - graph_chunk_entity_relation.graphml ★ - NetworkX 知识图谱 · 实体/关系/社区/置信度 - - - vdb_entities / vdb_chunks - 实体/文本块向量(Phase 1 走 MySQL) - - - vdb_video_segment_feature.json ✗ - 视觉通道(已砍) — Level 2 换 CLAP 音频嵌入 - - - → 可选增强 Level 2 / 3 - · CLAP 音频嵌入(替代 ImageBind 视觉) - · CAM++ 声纹 → 跨录音说话人链接 - · Neo4j 图存储(大规模时切走 NetworkX) - - - - 服务 Services - - Silero - VAD - - funASR - 中文 ASR - - vLLM - Qwen3.6-27B - - vLLM - Qwen3.6-35B - - bge-m3 - embedding - - CLAP - audio emb - - CAM++ - 声纹 - - OpenAI 兼容 - 协议接入 - LLM/Emb - 零代码 - 仅 ASR - 需改一函数 - - - - - recording_id - - - - - 注册 - 触发 - - - - - - - - - - - - - - - Frontend · React + Arco Design Web · 知识图谱浏览器(AntV G6)· 多级标签看板 · Prompt 版本管理 · 检索溯源链 - +AudioGraphy · 总体架构(Overall Architecture)两层架构:流水线状态层(MySQL) + RAG 引擎层(文件索引),由 recording_id 桥接输入层 Input门店录音汽车销售 / 育儿咨询.mp3 / .wav / .m4a业务元数据门店 / 坐席 / 客户recorded_at / tenant_id人工修正标签/实体人工校对触发增量重算流水线状态层(MySQL · 新增)Pipeline State Layer — orchestration · version · audit · aggregationrecordingsid · path · tenant_id · status · pipeline_state · created_attag_facts ★(append-only, versioned)recording_id · tag_path · value · prompt_version · input_hashtag_currentMAX(version) 视图(按 recording+tag_path)tag_stats物化聚合(多级标签计数/分布,增量刷新)promptsentity_zh · tag_* prompt_version 注册表(A/B 切换)vectors_mysql(Phase 1 暴力余弦)entity_emb · chunk_emb · 10⁵–10⁶ 行,小规模够用tenants · users · roles多租户隔离 + RBAC(管理员/质检员/坐席/只读)审计 / 重算任务队列 / LLM 调用日志RAG 引擎层(文件索引 · 复用 VideoRAG)RAG Engine Layer — vector · graph · chunk — index once, query manykv_store_llm_response_cache.json ★MD5(model,messages) · prompt 不变重打免费kv_store_video_segments.json段级 transcript · timestamp · recorded_at · speakerkv_store_text_chunks.jsonchunk 文本 + 溯源(segment_ids[])graph_chunk_entity_relation.graphml ★NetworkX 知识图谱 · 实体/关系/社区/置信度vdb_entities / vdb_chunks实体/文本块向量(Phase 1 走 MySQL)vdb_video_segment_feature.json ✗视觉通道(已砍) — Level 2 换 CLAP 音频嵌入→ 可选增强 Level 2 / 3· CLAP 音频嵌入(替代 ImageBind 视觉)· CAM++ 声纹 → 跨录音说话人链接· Neo4j 图存储(大规模时切走 NetworkX)服务 ServicesSileroVADfunASR中文 ASRvLLMQwen3.6-27BvLLMQwen3.6-35Bbge-m3embeddingCLAPaudio embCAM++声纹OpenAI 兼容协议接入LLM/Emb零代码仅 ASR需改一函数recording_id注册触发Frontend · React + Arco Design Web · 知识图谱浏览器(AntV G6)· 多级标签看板 · Prompt 版本管理 · 检索溯源链 \ No newline at end of file diff --git a/docs/assets/dataflow-indexing.svg b/docs/assets/dataflow-indexing.svg index 41d2f36..fbcab71 100644 --- a/docs/assets/dataflow-indexing.svg +++ b/docs/assets/dataflow-indexing.svg @@ -1,161 +1 @@ - - - - - - - 索引数据流(Indexing Dataflow) - 绿=新增/替换 · 红=砍掉 · 蓝=保留自 VideoRAG · 紫=服务调用 - - - - - - ① 录音接入 - watchdog / 上传 - 写 recordings 行 - - - - ② VAD 切分 🆕 - Silero 检测语音段 - 跳静音 → ASR 有效 - - - - ③ ASR 转写 🆕 - funASR(中文强) - 每段 → transcript - - - - ④ 声纹 (可选) 🆕 - CAM++ 说话人分离 - 跨录音链接 - - - - ⑤ chunk 打包 - 按 token 预算打包 - + 三级溯源链 - - - - ⑥ bge-m3 向量 - chunk → chunk_emb - → MySQL vectors - - - - ⑦ 实体抽取 - 中文 prompt(强 LLM) - + Gleaning 补抽 - - - - ⑧ 向量编码 - entity → entity_emb - → MySQL vectors - - - ⑨ 图谱合并 - 按名字去重合并 - 类型 Counter 投票 - - - ⑩ 中文归一 🆕 - 别名表 / 编辑距离 - 消近重名实体 - - - ⑪ 边打标 - 借鉴 Graphify: - EXTRACTED/INFERRED - - - ⑫ Leiden 社区 - 基于图拓扑聚类 - 无 embedding - - - ⑬ flush 落盘 - index_done_callback - 生命周期点 checkpoint - - - ⑭ 状态回写 🆕 - recordings.status - = indexed - - - - ⑮ 标签抽取 🆕 - 弱 LLM 判多级标签 - 输入 hash - - - ⑯ tag_facts 🆕 - append-only 写入 - 带 prompt_version - - - ⑰ tag_current 🆕 - MAX(version) 物化 - 查询读这个 - - - ⑱ tag_stats 🆕 - 增量聚合刷新 - 看板读这个 - - - - ✗ MiniCPM-V 视觉 caption(砍掉) - ✗ ImageBind 多模态编码(砍掉) - ✗ video_segment_feature_vdb 视觉检索通道(砍掉) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - → Silero - → funASR - → CAM++ - → bge-m3 - → Qwen3.6-27B - → bge-m3 - → Qwen3.6-35B - - - - - 缓存与幂等(LLM Response Cache · 借鉴 Graphify 思路) - · key = MD5(model, messages) — 经 functools.partial 注入 best/cheap_model_func - · 覆盖:实体抽取 / gleaning / query 改写 / 摘要 / 关键词 / 段过滤 / 标签判定 / 最终回答 - · 同 prompt 重跑全命中免费;prompt 升级 → 仅 dirty 重算(version-gate)→ diff → 增量聚合 - ⚠ Phase 4 流式时需加锁或快照机制(VideoRAG 原生非并发安全) - +索引数据流(Indexing Dataflow)绿=新增/替换 · 红=砍掉 · 蓝=保留自 VideoRAG · 紫=服务调用① 录音接入watchdog / 上传写 recordings 行② VAD 切分 🆕Silero 检测语音段跳静音 → ASR 有效③ ASR 转写 🆕funASR(中文强)每段 → transcript④ 声纹 (可选) 🆕CAM++ 说话人分离跨录音链接⑤ chunk 打包按 token 预算打包+ 三级溯源链⑥ bge-m3 向量chunk → chunk_emb→ MySQL vectors⑦ 实体抽取中文 prompt(强 LLM)+ Gleaning 补抽⑧ 向量编码entity → entity_emb→ MySQL vectors⑨ 图谱合并按名字去重合并类型 Counter 投票⑩ 中文归一 🆕别名表 / 编辑距离消近重名实体⑪ 边打标借鉴 Graphify:EXTRACTED/INFERRED⑫ Leiden 社区基于图拓扑聚类无 embedding⑬ flush 落盘index_done_callback生命周期点 checkpoint⑭ 状态回写 🆕recordings.status= indexed⑮ 标签抽取 🆕弱 LLM 判多级标签输入 hash⑯ tag_facts 🆕append-only 写入带 prompt_version⑰ tag_current 🆕MAX(version) 物化查询读这个⑱ tag_stats 🆕增量聚合刷新看板读这个✗ MiniCPM-V 视觉 caption(砍掉)✗ ImageBind 多模态编码(砍掉)✗ video_segment_feature_vdb 视觉检索通道(砍掉)→ Silero→ funASR→ CAM++→ bge-m3→ Qwen3.6-27B→ bge-m3→ Qwen3.6-35B缓存与幂等(LLM Response Cache · 借鉴 Graphify 思路)· key = MD5(model, messages) — 经 functools.partial 注入 best/cheap_model_func· 覆盖:实体抽取 / gleaning / query 改写 / 摘要 / 关键词 / 段过滤 / 标签判定 / 最终回答· 同 prompt 重跑全命中免费;prompt 升级 → 仅 dirty 重算(version-gate)→ diff → 增量聚合⚠ Phase 4 流式时需加锁或快照机制(VideoRAG 原生非并发安全) \ No newline at end of file diff --git a/docs/assets/dataflow-query.svg b/docs/assets/dataflow-query.svg index 422cb0c..e8c1386 100644 --- a/docs/assets/dataflow-query.svg +++ b/docs/assets/dataflow-query.svg @@ -1,97 +1 @@ - - - - - - - 查询数据流(Query Dataflow) - 四阶段流水线:双通道召回 → union → LLM 过滤 → 精化重排(视觉通道已砍) - - - - 用户问题 - "7月1-15日哪几场 - 接待提了 CS75 Plus - + 金融政策?" - - - - ① 改写 + 关键词 - 弱 LLM - 提取关键实体 - → 命中 LLM 缓存 - - - - - - ②a 朴素文本检索 - MySQL vectors_mysql - 暴力余弦 top-k chunk - - - ②b 图谱检索 - 实体 → 一跳邻居 - 按 relation_counts 排序 - - - ✗ 视觉检索通道 - 已砍 — Level 2 换 CLAP - 音频嵌入(副语言) - - - - - - - ②c 时间过滤 🆕 - recorded_at 范围筛 - - - - - ③ Union 合并 - 去重 - 按 recorded_at 排序 - 保留 source_id 溯源 - - - - - - - - ④ LLM 过滤 - 强 LLM as-judge - 逐段 yes/no 相关 - 去语义无关段 - - - - - - ⑤ 精化重排 - 高精度重转写(替代重新抽帧) - 粗描述 → 查询导向精描述 - + relation_counts 结构信号重排 - - - - - - ⑥ 最终回答 - 强 LLM 综合生成 - 三级溯源链引用时间段 - (实体→chunk→segment) - - - - - - 前端可视化(React + Arco + AntV G6) - · 检索溯源链:横向 timeline + 卡片(点击实体 → 跳图谱浏览器 → 高亮 1-hop 邻居) - · 图谱浏览器:节点点击 → 右侧 EntityPropertyPanel(属性 + source_id + recorded_at + confidence 标签) - · 借鉴 Graphify:节点画布 + 双搜索框(关键词 + 实体定位)+ Leiden 社区着色 + 边 confidence 染色 - · 时间范围 DatePicker(recorded_at 过滤)+ 按 recording 钻取(高亮该录音子图) - ⚠ 大规模(节点 > 2000)开 LOD:聚类合并显示 + Web Worker 布局 - +查询数据流(Query Dataflow)四阶段流水线:双通道召回 → union → LLM 过滤 → 精化重排(视觉通道已砍)用户问题"7月1-15日哪几场接待提了 CS75 Plus+ 金融政策?"① 改写 + 关键词弱 LLM提取关键实体→ 命中 LLM 缓存②a 朴素文本检索MySQL vectors_mysql暴力余弦 top-k chunk②b 图谱检索实体 → 一跳邻居按 relation_counts 排序✗ 视觉检索通道已砍 — Level 2 换 CLAP音频嵌入(副语言)②c 时间过滤 🆕recorded_at 范围筛③ Union 合并去重按 recorded_at 排序保留 source_id 溯源④ LLM 过滤强 LLM as-judge逐段 yes/no 相关去语义无关段⑤ 精化重排高精度重转写(替代重新抽帧)粗描述 → 查询导向精描述+ relation_counts 结构信号重排⑥ 最终回答强 LLM 综合生成三级溯源链引用时间段(实体→chunk→segment)前端可视化(React + Arco + AntV G6)· 检索溯源链:横向 timeline + 卡片(点击实体 → 跳图谱浏览器 → 高亮 1-hop 邻居)· 图谱浏览器:节点点击 → 右侧 EntityPropertyPanel(属性 + source_id + recorded_at + confidence 标签)· 借鉴 Graphify:节点画布 + 双搜索框(关键词 + 实体定位)+ Leiden 社区着色 + 边 confidence 染色· 时间范围 DatePicker(recorded_at 过滤)+ 按 recording 钻取(高亮该录音子图)⚠ 大规模(节点 > 2000)开 LOD:聚类合并显示 + Web Worker 布局 \ No newline at end of file diff --git a/docs/assets/eval-datasets.svg b/docs/assets/eval-datasets.svg index 2ce8f7c..4307396 100644 --- a/docs/assets/eval-datasets.svg +++ b/docs/assets/eval-datasets.svg @@ -1,84 +1 @@ - - - - - - 开源中文语音测试集选型(OSS Chinese Speech Testsets) - 按 AudioRAG 评估维度(ASR / Diarization / 声纹 / 实体抽取)映射 · 标 ★ 为强烈推荐 - - - AudioRAG 评估能力 - - - - ASR CER(中文准确率) - - 说话人分离 DER - - 声纹 EER(跨录音链接) - - 实体抽取 P/R/F1(下游) - - 中英混读 / 方言 - - - - 推荐开源测试集(按推荐度排序) - - - - ★ AliMeeting (SLR119) · 强烈推荐 - 118.75h · 阿里 · ICASSP 2022 M2MeT · CC BY-SA 4.0 - 场景:真实中文多人会议,2-4 说话人重叠 42%,远场 8-ch 麦阵列 + 近场耳机,13 个会议室 8-55m²,RT60 0.3-0.6s - → 用途: ASR CER + 说话人 DER(最贴近门店录音"坐席+客户"对话)· Phase 2/3 评估首选 - ★★★★★ - 匹配度:极高 - - - - ★ AISHELL-4 - ~120h · 希尔贝壳 · CC BY-NC-ND 4.0 · 8 通道会议 - 场景:真实会议录制,含重叠语音、自发口语,与 AliMeeting 互补(不同录制风格) - → 用途: 评估 ASR/DER 在不同声学条件下的鲁棒性,作为 AliMeeting 的对照 - ★★★★ - 匹配度:高 - - - - ★ WenetSpeech · test_meeting / test_net - 22,195 段 · 西工大/wenet · CC BY 4.0 - 来源 YouTube + Podcast,10 个领域(含 talk/interview) - → 用途: ASR CER 基线(互联网/会议两域) - ★★★★ - - - - AISHELL-1 / AISHELL-2 - AISHELL-1: 178h 朗读 · AISHELL-2: 1000h iOS 录制 - CC BY-NC-ND 4.0 · 安静室内环境 - → 用途: ASR CER 朗读基线(验证 funASR 在干净音频上限) - ★★★ - - - - MagicData RAMC - 23012 测试句 · CC BY-NC-ND - 真实对话场景(移动端)· 含打断/重复 - → 用途: ASR CER 对话场景(比朗读更贴近门店) - ★★★ - - - - CN-Celeb · 声纹专用 - ~130h · 3000 说话人 · CC BY-NC 4.0 - 中文名人声纹,含不同录制环境/年龄/性别 - → 用途: 声纹 EER 评估 · Phase 2 CAM++ 跨录音链接基线 - ★★★ - - - - 补充场景测试集(按需引入) - · TAL_CSASR(学而思)— 中英混读,评估"CS75 Plus""Model Y"等中英夹杂识别 - · KeSpeech(19723 句)— 8 大官话区方言,门店坐席/客户跨区域口音评估 - · 自建门店金标集(30-50 chunk)— 真实门店录音人工标注,最贴近业务但成本高 · 用作 A1 黄金集 - +开源中文语音测试集选型(OSS Chinese Speech Testsets)按 AudioRAG 评估维度(ASR / Diarization / 声纹 / 实体抽取)映射 · 标 ★ 为强烈推荐AudioRAG 评估能力ASR CER(中文准确率)说话人分离 DER声纹 EER(跨录音链接)实体抽取 P/R/F1(下游)中英混读 / 方言推荐开源测试集(按推荐度排序)★ AliMeeting (SLR119) · 强烈推荐118.75h · 阿里 · ICASSP 2022 M2MeT · CC BY-SA 4.0场景:真实中文多人会议,2-4 说话人重叠 42%,远场 8-ch 麦阵列 + 近场耳机,13 个会议室 8-55m²,RT60 0.3-0.6s→ 用途: ASR CER + 说话人 DER(最贴近门店录音"坐席+客户"对话)· Phase 2/3 评估首选★★★★★匹配度:极高★ AISHELL-4~120h · 希尔贝壳 · CC BY-NC-ND 4.0 · 8 通道会议场景:真实会议录制,含重叠语音、自发口语,与 AliMeeting 互补(不同录制风格)→ 用途: 评估 ASR/DER 在不同声学条件下的鲁棒性,作为 AliMeeting 的对照★★★★匹配度:高★ WenetSpeech · test_meeting / test_net22,195 段 · 西工大/wenet · CC BY 4.0来源 YouTube + Podcast,10 个领域(含 talk/interview)→ 用途: ASR CER 基线(互联网/会议两域)★★★★AISHELL-1 / AISHELL-2AISHELL-1: 178h 朗读 · AISHELL-2: 1000h iOS 录制CC BY-NC-ND 4.0 · 安静室内环境→ 用途: ASR CER 朗读基线(验证 funASR 在干净音频上限)★★★MagicData RAMC23012 测试句 · CC BY-NC-ND真实对话场景(移动端)· 含打断/重复→ 用途: ASR CER 对话场景(比朗读更贴近门店)★★★CN-Celeb · 声纹专用~130h · 3000 说话人 · CC BY-NC 4.0中文名人声纹,含不同录制环境/年龄/性别→ 用途: 声纹 EER 评估 · Phase 2 CAM++ 跨录音链接基线★★★补充场景测试集(按需引入)· TAL_CSASR(学而思)— 中英混读,评估"CS75 Plus""Model Y"等中英夹杂识别· KeSpeech(19723 句)— 8 大官话区方言,门店坐席/客户跨区域口音评估· 自建门店金标集(30-50 chunk)— 真实门店录音人工标注,最贴近业务但成本高 · 用作 A1 黄金集 \ No newline at end of file diff --git a/docs/assets/readme/reception-graph.jpg b/docs/assets/readme/reception-graph.jpg index 8be28d6..b851cb5 100644 Binary files a/docs/assets/readme/reception-graph.jpg and b/docs/assets/readme/reception-graph.jpg differ diff --git a/docs/assets/readme/reception-timeline.jpg b/docs/assets/readme/reception-timeline.jpg index 2e72e75..63aa5fb 100644 Binary files a/docs/assets/readme/reception-timeline.jpg and b/docs/assets/readme/reception-timeline.jpg differ diff --git a/docs/assets/readme/tag-governance.jpg b/docs/assets/readme/tag-governance.jpg index c4cc853..35b128f 100644 Binary files a/docs/assets/readme/tag-governance.jpg and b/docs/assets/readme/tag-governance.jpg differ diff --git a/docs/assets/storage-layers.svg b/docs/assets/storage-layers.svg index 1c43552..54cf3a4 100644 --- a/docs/assets/storage-layers.svg +++ b/docs/assets/storage-layers.svg @@ -1,105 +1 @@ - - - 存储分层(Storage Layers) - VideoRAG 文件索引(复用) + MySQL 状态层(新增) + BaseStorage 抽象让三类存储可插拔 - - - - BaseStorage 抽象层(VideoRAG 提供,AudioRAG 直接复用) - - BaseKVStorage(字典语义) - - BaseVectorStorage(ANN 语义) - - BaseGraphStorage(图遍历语义) - - - - MySQL 状态层(新增) - orchestration · version · audit · aggregation · vectors (Phase 1) - - - recordings - id·path·tenant_id·status - pipeline_state·recorded_at - - - segments - id·recording_id·idx·start·end - transcript·speaker·vad_conf - - - chunks - id·segment_ids[]·text·token_n - content_hash(去重) - - - tag_facts ★ - rec_id·tag_path·value·version - prompt_version·input_hash·src - - - tag_current(视图) - SELECT MAX(version) GROUP BY - (recording_id, tag_path) - - - tag_stats(物化) - tenant·store·tag_path·value·cnt - 增量 delta 刷新 - - - vectors_mysql(Phase 1 暴力余弦) - entity_emb / chunk_emb · 10⁵-10⁶ 行 · 小规模与 NanoVectorDB 等价 - - - tenants · users · roles · prompts · audit_logs · llm_call_logs - 多租户 RBAC · prompt_version 注册 · 审计 - - - - VideoRAG 文件索引(复用) - working_dir 持久化 · index_done_callback flush · 跨次复用 - - - kv_store_video_path.json - recording → path 映射 - 去重依据 - - - kv_store_video_segments.json - 段级 transcript·timestamp - ·recorded_at·speaker - - - kv_store_text_chunks.json - chunk 文本 + 溯源 - segment_ids[] - - - kv_store_llm_response_cache ★ - MD5(model,messages) - prompt 不变重打免费 - - - graph_chunk_entity_relation.graphml ★ - NetworkX 知识图谱 · 实体/关系/社区 - + confidence(EXTRACTED/INFERRED,借鉴 Graphify) - - - vdb_entities / vdb_chunks - Phase 1 走 MySQL(同义) - Phase 3 可切 NanoVectorDB/HNSW - - - vdb_video_segment_feature.json ✗ - 视觉检索通道(砍掉) - Level 2 → CLAP 音频嵌入 - - - ⚠ 必须 fixed working_dir 才能跨次复用索引 - 默认每次新建时间戳目录不复用;固定后 insert_video 按 video_name 跨次去重生效 - - - - +存储分层(Storage Layers)VideoRAG 文件索引(复用) + MySQL 状态层(新增) + BaseStorage 抽象让三类存储可插拔BaseStorage 抽象层(VideoRAG 提供,AudioRAG 直接复用)BaseKVStorage(字典语义)BaseVectorStorage(ANN 语义)BaseGraphStorage(图遍历语义)MySQL 状态层(新增)orchestration · version · audit · aggregation · vectors (Phase 1)recordingsid·path·tenant_id·statuspipeline_state·recorded_atsegmentsid·recording_id·idx·start·endtranscript·speaker·vad_confchunksid·segment_ids[]·text·token_ncontent_hash(去重)tag_facts ★rec_id·tag_path·value·versionprompt_version·input_hash·srctag_current(视图)SELECT MAX(version) GROUP BY(recording_id, tag_path)tag_stats(物化)tenant·store·tag_path·value·cnt增量 delta 刷新vectors_mysql(Phase 1 暴力余弦)entity_emb / chunk_emb · 10⁵-10⁶ 行 · 小规模与 NanoVectorDB 等价tenants · users · roles · prompts · audit_logs · llm_call_logs多租户 RBAC · prompt_version 注册 · 审计VideoRAG 文件索引(复用)working_dir 持久化 · index_done_callback flush · 跨次复用kv_store_video_path.jsonrecording → path 映射去重依据kv_store_video_segments.json段级 transcript·timestamp·recorded_at·speakerkv_store_text_chunks.jsonchunk 文本 + 溯源segment_ids[]kv_store_llm_response_cache ★MD5(model,messages)prompt 不变重打免费graph_chunk_entity_relation.graphml ★NetworkX 知识图谱 · 实体/关系/社区+ confidence(EXTRACTED/INFERRED,借鉴 Graphify)vdb_entities / vdb_chunksPhase 1 走 MySQL(同义)Phase 3 可切 NanoVectorDB/HNSWvdb_video_segment_feature.json ✗视觉检索通道(砍掉)Level 2 → CLAP 音频嵌入⚠ 必须 fixed working_dir 才能跨次复用索引默认每次新建时间戳目录不复用;固定后 insert_video 按 video_name 跨次去重生效 \ No newline at end of file diff --git a/docs/assets/tag-versioning.svg b/docs/assets/tag-versioning.svg index b376e14..d6635aa 100644 --- a/docs/assets/tag-versioning.svg +++ b/docs/assets/tag-versioning.svg @@ -1,102 +1 @@ - - - - - - - 标签版本化与增量重算(Tag Versioning & Incremental Recompute) - 版本是地基 · diff 驱动最小重算 · LLM 缓存驱动的幂等重打 - - - - Layer 1 · tag_facts - append-only · 不可变 · 版本化真相源 - - - (recording_id, tag_path, value, version, ...) - (R001, 接待.开场, 标准, v=1, - prompt_v=1, hash=abc..., src=llm) - (R001, 接待.开场, 标准, v=2, - prompt_v=2, hash=def..., src=llm) - - - 关键键:prompt_version - 回答"此标签在什么规则下判出来" - 据此圈 dirty · diff · 复现任意版本 - - - 完整配方字段: - value·prompt_version·model_version·source·input_hash·confidence - - - - Layer 2 · tag_current - 当前生效视图 · MAX(version) per (rec, tag_path) - - - R001 · 接待.开场 = 标准 [v2] - R001 · 接待.报价 = 已报 [v2] - R001 · 接待.试乘试驾 = 未试 [v1] - R002 · 接待.开场 = 简洁 [v2] - ... - - - 查询语义 - SELECT ... FROM tag_facts - WHERE version = (SELECT MAX(version) ...) - - - 物化策略 - 触发器 / 定时刷新 / 查询时算 - - - - Layer 3 · tag_stats(物化聚合) - 多级标签计数/分布 · 增量刷新 · 报表/看板读这个 - - - tenant · store · tag_path · value · count - 华东 · 上海店 · 接待.开场=标准 → 42 - 华东 · 上海店 · 接待.开场=简洁 → 18 - 华东 · 杭州店 · 接待.开场=标准 → 35 - 华南 · 深圳店 · 接待.试乘试驾=已 → 28 - - - 增量刷新 - tag_current 变化 → 找祖先链 → tag_stats - -old +new delta(不全量重算) - - - 下钻维度 - tenant → brand → region → store → agent → tag_path - - - - - - 聚合 - 下钻/统计 - - - 重算策略矩阵(Recompute Strategy Matrix) - - - - 单条人工修正 - 1 条 recording · 增量 delta(−旧 +新)· 标脏祖先路径 - - prompt/规则升级(批量重打) - version-gate:重打→diff v2 vs v1→只 commit 变化→标 dirty→增量聚合 - - 滞后数据到达 - 仅重算该 time_window 的聚合 - - 分类法/层级变更 - 全量重算(切新 version · 罕见批跑) - - LLM 缓存驱动的幂等重打(关键福利) - 同 prompt 重打 → MD5(model,messages) 命中缓存 → 0 token → 免费 - 改 prompt 重打 → 仅新 prompt 重算 · diff 再压"真变化" - ⚠ cache 文件膨胀 → 定期清/切工作目录 - - +标签版本化与增量重算(Tag Versioning & Incremental Recompute)版本是地基 · diff 驱动最小重算 · LLM 缓存驱动的幂等重打Layer 1 · tag_factsappend-only · 不可变 · 版本化真相源(recording_id, tag_path, value, version, ...)(R001, 接待.开场, 标准, v=1,prompt_v=1, hash=abc..., src=llm)(R001, 接待.开场, 标准, v=2,prompt_v=2, hash=def..., src=llm)关键键:prompt_version回答"此标签在什么规则下判出来"据此圈 dirty · diff · 复现任意版本完整配方字段:value·prompt_version·model_version·source·input_hash·confidenceLayer 2 · tag_current当前生效视图 · MAX(version) per (rec, tag_path)R001 · 接待.开场 = 标准 [v2]R001 · 接待.报价 = 已报 [v2]R001 · 接待.试乘试驾 = 未试 [v1]R002 · 接待.开场 = 简洁 [v2]...查询语义SELECT ... FROM tag_factsWHERE version = (SELECT MAX(version) ...)物化策略触发器 / 定时刷新 / 查询时算Layer 3 · tag_stats(物化聚合)多级标签计数/分布 · 增量刷新 · 报表/看板读这个tenant · store · tag_path · value · count华东 · 上海店 · 接待.开场=标准 → 42华东 · 上海店 · 接待.开场=简洁 → 18华东 · 杭州店 · 接待.开场=标准 → 35华南 · 深圳店 · 接待.试乘试驾=已 → 28增量刷新tag_current 变化 → 找祖先链 → tag_stats-old +new delta(不全量重算)下钻维度tenant → brand → region → store → agent → tag_path聚合下钻/统计重算策略矩阵(Recompute Strategy Matrix)单条人工修正1 条 recording · 增量 delta(−旧 +新)· 标脏祖先路径prompt/规则升级(批量重打)version-gate:重打→diff v2 vs v1→只 commit 变化→标 dirty→增量聚合滞后数据到达仅重算该 time_window 的聚合分类法/层级变更全量重算(切新 version · 罕见批跑)LLM 缓存驱动的幂等重打(关键福利)同 prompt 重打 → MD5(model,messages) 命中缓存 → 0 token → 免费改 prompt 重打 → 仅新 prompt 重算 · diff 再压"真变化"⚠ cache 文件膨胀 → 定期清/切工作目录 \ No newline at end of file