From 7cd49a5a3fe2b1891100397a8f880736044ff031 Mon Sep 17 00:00:00 2001 From: iomgaa Date: Tue, 7 Jul 2026 06:14:26 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=90=8C=E6=AD=A5=20app/search/=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=BB=93=E6=9E=84=20+=20OCRProvider=20?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=E5=88=B0=20ARCHITECTURE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- research-wiki/ARCHITECTURE.md | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/research-wiki/ARCHITECTURE.md b/research-wiki/ARCHITECTURE.md index da491e6..d3cae31 100644 --- a/research-wiki/ARCHITECTURE.md +++ b/research-wiki/ARCHITECTURE.md @@ -119,12 +119,16 @@ project_root/ │ ├── app/ # 应用层(组合 core + adapters,领域特化) │ ├── tree/ # 模块1:建树 -│ │ ├── index.py # TreeIndex 数据结构(L1/L2/L3Node) -│ │ ├── video_builder.py # VideoTreeBuilder(asyncio 并发) -│ │ ├── text_builder.py # TextTreeBuilder -│ │ ├── embeddings.py # EmbeddingModel(local/remote 双后端) -│ │ ├── enhance/ # 树增强管线(verify/supplement/clean) -│ │ └── subtitle.py # SRT 解析 + 字幕注入 +│ │ ├── index.py # TreeIndex 数据结构(L1/L2/L3Node + Card) +│ │ ├── video_builder.py # VideoTreeBuilder(L2 轴心 + asyncio 并发) +│ │ ├── config.py # TreeConfig 配置 dataclass +│ │ ├── subtitle.py # SRT 解析 + Voronoi 字幕分配 +│ │ ├── verify.py # 交叉校验(entities/visible_text) +│ │ ├── environment.py # 树环境语义搜索(分块 embedding + 祖先去重) +│ │ └── repair/ # 后修复管线 +│ │ ├── detector.py # 缺陷检测(空字段/缺帧/时间间隙) +│ │ ├── regenerator.py # VLM 重描述 + 自底向上级联修复 +│ │ └── supplement.py # Q&A 反向补全 │ ├── harness/ # 模块2:训练 harness │ │ ├── runner.py # 训练循环编排(对标 Trainer) │ │ ├── inference.py # 推理 step @@ -138,8 +142,11 @@ project_root/ │ ├── question_gen/ # 模块3:出题(加载 + 采样 + 未来 LLM 生成) │ │ └── loader.py # benchmark 加载、分层采样 │ ├── search/ # 搜索 Agent 装配 -│ │ ├── prompt.py # PromptManager -│ │ └── skills.py # SkillRegistry +│ │ ├── prompt.py # PromptManager(prompt 加载与拼装) +│ │ ├── skills.py # SkillRegistry + discover_skills +│ │ ├── summarizer.py # 两轮 LLM 摘要(view_node / search_similar 用) +│ │ ├── vision.py # observe_frame(VLM 两轮 + OCR 注入) +│ │ └── tools.py # SearchToolDispatcher(实现 ToolDispatcher) │ ├── retriever/ # 可训练检索器 │ │ ├── recursive.py # RecursiveRetriever (CrossAttention+ACT) │ │ ├── losses.py # NavigationLoss + ACTLoss @@ -219,7 +226,7 @@ project_root/ | `EmbeddingProvider` | `embed(texts)` | 文本嵌入 | `adapters/embedding.py` | | `TreeCache` | `get()`, `set()` | 树索引缓存 | `adapters/redis_cache.py` | | `ASRProvider` | `transcribe(audio_path)` | 语音识别 | `adapters/asr.py` | -| `OCRProvider` | `recognize(image_path)` | OCR | `adapters/ocr.py` | +| `OCRProvider` | `transcribe_frames(frame_paths: list[Path]) -> str` | 帧文字转录 | `adapters/ocr.py` | 判据:这块代码会不会被换实现、或需要在测试里替换成假的?不会,就别抽象。 @@ -229,7 +236,7 @@ project_root/ |----------|-------------|------| | `LLMProvider` | `adapters/llm.py` `GovernedLLMClient` | OpenAI 兼容 API,内置治理栈(§5) | | `VLMProvider` | `adapters/vlm.py` | Qwen VL 等 OpenAI 兼容 VLM API | -| `ToolDispatcher` | `app/search/skills.py` `SkillRegistry` | 按名称分发到已注册工具函数 | +| `ToolDispatcher` | `app/search/tools.py` `SearchToolDispatcher` | 搜索 Agent 工具分发(view_node / search_similar / observe_frame / submit_answer / read_skill) | | `SkillStore` / `PromptStore` | `app/harness/workspace.py` | 文件系统版本化存储(`store/skills/v{N}/`) | | `RunLog` | `app/harness/log.py` `HarnessLog` | SQLite 持久化 | | `TelemetryRecorder` | `adapters/telemetry.py` | SQLite `telemetry.db` |