feat(kb-workflow): 添加严格失败判断逻辑
- kb-deep-analyzer: 新增判断逻辑,只有AI真正完成分析才算成功 - 失败条件: summary以'共'开头、topics为空、full_analysis为None - kb-workflow: 明确深度分析失败则整个流程失败 - 禁止降级处理或使用模板'假装成功'
This commit is contained in:
+55
-62
@@ -1,67 +1,60 @@
|
||||
# 2026-02-13 语音识别工作记录
|
||||
# 2026-02-13
|
||||
|
||||
## 目标
|
||||
整合说话者分离(speaker diarization)到 kb-whisper 工作流,替换 OCR 为 Whisper 视频转文字
|
||||
## kb-deep-analyzer 技能改进
|
||||
|
||||
## glm-4.7 AI 分析返回问题(2026-02-13 新增)
|
||||
### 批处理模式
|
||||
- 改为分批并发处理(3+3+3+1),避免同时启动所有AI请求
|
||||
- `analyze()` 方法支持 `on_batch_complete` 回调
|
||||
- `batch_size` 参数控制每批数量(默认3)
|
||||
|
||||
### 发现
|
||||
- deep_analyzer 使用 `.json` 文件传给 AI
|
||||
- 实际传给 AI 的是 `text` 字段的前 3000 字
|
||||
- json 文件结构:
|
||||
```
|
||||
├── text: "為什麼我要說美國就變了..." (~4500字)
|
||||
└── segments: 168段 (带时间戳)
|
||||
```
|
||||
### 流式写入功能
|
||||
- 新增 `StreamingWriter` 类,支持多线程并发写入文档不同位置
|
||||
- `initialize_document()` 预先创建带占位符的文档结构
|
||||
- `write_batch()` 每批完成后写入对应位置
|
||||
|
||||
### 三种字幕格式对比
|
||||
| 格式 | 大小 | 特点 |
|
||||
### 文档格式优化
|
||||
- `date` 改为视频发布日期(从 pubtime 提取)
|
||||
- frontmatter 添加 `url` 字段
|
||||
- 删除"建议行动"章节
|
||||
- 删除 `{% if timeline %}` 和最后的分析时间
|
||||
- 新格式更简洁
|
||||
|
||||
### 提交记录
|
||||
- `94370f2` - feat: 改为批处理模式
|
||||
- `c8ddc1e` - feat: 添加流式写入器
|
||||
- `518f8e4` - fix: 优化文档格式
|
||||
|
||||
## 知识库添加:BV1W4f9B6EdC
|
||||
|
||||
### 处理结果
|
||||
- **标题**: 爱泼斯坦案惊天动地?美式司法:"没事,已经结束了"【逸语道破】
|
||||
- **作者**: 沈逸老师
|
||||
- **Whisper**: ✅ 完成(8043字符,971段)
|
||||
- **深度分析**: ⚠️ 代码错误,使用基础模板
|
||||
- **归档**: ✅ 完成
|
||||
|
||||
### 发现并修复的 Bug
|
||||
|
||||
1. **参数名不匹配错误**
|
||||
- 错误: `name 'on_batch_complete' is not defined`
|
||||
- 原因: `analyze()` 用 `on_batch_complete`,内部 `_analyze_chunks_concurrent()` 用 `on_segment_complete`
|
||||
- 修复: 统一使用 `on_segment_complete` 作为内部参数名
|
||||
|
||||
2. **batch_size 未定义**
|
||||
- 错误: `name 'batch_size' is not defined`
|
||||
- 原因: 方法内部多次使用但未作为参数传入
|
||||
- 修复: 在 `_analyze_chunks_concurrent()` 签名中添加 `batch_size: int = 3`
|
||||
|
||||
### 当前状态
|
||||
- glm-4.7 深度分析暂时不可用(代码修复后需重新测试)
|
||||
- 知识库工作流 Whisper 环节正常
|
||||
- 需要重新测试深度分析功能
|
||||
|
||||
## 技能清单
|
||||
| 步骤 | 技能 | 状态 |
|
||||
|------|------|------|
|
||||
| .json | 55KB | 完整元数据 + segments |
|
||||
| .srt | 23KB | 带时间戳的字幕格式 |
|
||||
| .txt | 9KB | 纯文本,无时间戳 |
|
||||
|
||||
### 问题分析
|
||||
1. **截断问题**:只取前 3000 字传给 AI,可能不够全面
|
||||
2. **未利用时间轴**:segments 有 168 段时间信息未使用
|
||||
3. **格式问题**:传给 AI 是纯文本,没有分段结构
|
||||
|
||||
### 待用户确认改进方案
|
||||
- A. 用 `.txt` (9KB) 更简洁的格式?
|
||||
- B. 用 `.srt` (23KB) 带时间戳的格式?
|
||||
- C. 改进 json 解析,把 segments 整理成更易读的格式?
|
||||
- D. 其他方案?
|
||||
|
||||
---
|
||||
|
||||
## Passwordless Sudo 配置成功
|
||||
```bash
|
||||
sudo visudo -f /etc/sudoers.d/nopasswd
|
||||
# 内容:starmen1265 ALL=(ALL) NOPASSWD: ALL
|
||||
sudo chmod 0440 /etc/sudoers.d/nopasswd
|
||||
sudo visudo -c # 验证:parsed OK
|
||||
```
|
||||
|
||||
## 降级操作(解决兼容性问题)
|
||||
| 库 | 从 | 到 | 原因 |
|
||||
|---|---|---|---|
|
||||
| torch | 2.10.0 | 2.8.0 | speechbrain 需要旧 API |
|
||||
| torchaudio | 2.10.0 | 2.8.0 | speechbrain 需要 list_audio_backends() |
|
||||
| NumPy | 2.x | 1.26.4 | pyannote 3.1.1 需要 |
|
||||
| huggingface_hub | 1.4.1 | 0.19.4 | pyannote 3.1.1 需要 use_auth_token |
|
||||
| pyannote.audio | 4.0.4 | 3.1.1 | 4.x 与 torch 2.10 兼容性问题 |
|
||||
|
||||
## 用户指令
|
||||
- 只允许修改 `speaker_diarization.py` 中的 segmentation 配置
|
||||
- 停止所有其他修改
|
||||
- 暂停说话者分离工作
|
||||
|
||||
## 下一步
|
||||
- 使用已有的 kb-whisper 方案(Whisper.cpp)
|
||||
- 暂停说话者分离(speaker diarization)
|
||||
- 等待后续指令
|
||||
|
||||
## 当前环境
|
||||
- whisper.cpp: ~/whisper.cpp
|
||||
- whisper 模型: ggml-base.bin
|
||||
- kb-whisper 脚本: skills/kb-whisper/whisper.py
|
||||
| 链接解析 | kb-link-parser | ✅ |
|
||||
| 元数据提取 | kb-bilibili-metadata | ✅ |
|
||||
| 字幕下载 | kb-bilibili-content | ✅ |
|
||||
| 语音识别 | kb-whisper | ✅ |
|
||||
| 深度分析 | kb-deep-analyzer | ⚠️ 需重测 |
|
||||
|
||||
Reference in New Issue
Block a user