背景
TimeFlow 已切换到 ASR → 文本 LLM → Tool Calling → TTS 组合式语音链路。语音创建日程可以正常调用 Tool 并写入数据库,首次创建时 category=null 也符合预期。
现有自动分类能力只在端到端实时 Agent 的组合根中完成装配;组合式 Agent 创建 ScheduleApplicationService 时未注入 LlmScheduleCategoryClassifier 和 category 事件 publisher,导致创建成功后没有提交异步分类任务,PostgreSQL 与客户端中的 category 持续为 null。
需求
1. 组合式 Agent 注入日程分类器
- 复用现有
LlmScheduleCategoryClassifier 与 OpenAICompatibleJsonLlm。
- 与组合式文本 LLM 使用同一套 OpenAI-compatible
base_url、API Key 和 model 配置。
- 沿用
TIMEFLOW_SCHEDULE_CATEGORY_TIMEOUT_SECONDS 分类专用超时。
- 保持创建日程首次以
category=null 提交,分类继续异步执行。
2. 分类结果继续同步到客户端
- 将现有
WebSocketResultSink.publish_schedule_category_updated 注入组合式日程服务。
- 分类写库 commit 后继续发布
schedule.category.updated。
- 复用现有客户端 SQLite category patch,不新增协议、轮询或平行实现。
3. 保持失败隔离
- 分类失败、超时或事件发送失败不得影响主日程创建成功率。
- 不修改现有 8 种 category 定义、分类 Prompt、JSON 校验和 PostgreSQL 更新条件。
验收标准
- 组合式工厂自动化测试确认分类器、分类专用超时和事件 publisher 均被注入。
- 应用组合根测试确认 mode 2 传递
schedule.category.updated publisher。
- 现有分类器、异步写库、事件和客户端分类 patch 测试保持通过。
- 后端全量测试、Ruff、Mypy 和改动格式检查通过。
实现
由 #330 完成。
背景
TimeFlow 已切换到
ASR → 文本 LLM → Tool Calling → TTS组合式语音链路。语音创建日程可以正常调用 Tool 并写入数据库,首次创建时category=null也符合预期。现有自动分类能力只在端到端实时 Agent 的组合根中完成装配;组合式 Agent 创建
ScheduleApplicationService时未注入LlmScheduleCategoryClassifier和 category 事件 publisher,导致创建成功后没有提交异步分类任务,PostgreSQL 与客户端中的 category 持续为null。需求
1. 组合式 Agent 注入日程分类器
LlmScheduleCategoryClassifier与OpenAICompatibleJsonLlm。base_url、API Key 和 model 配置。TIMEFLOW_SCHEDULE_CATEGORY_TIMEOUT_SECONDS分类专用超时。category=null提交,分类继续异步执行。2. 分类结果继续同步到客户端
WebSocketResultSink.publish_schedule_category_updated注入组合式日程服务。schedule.category.updated。3. 保持失败隔离
验收标准
schedule.category.updatedpublisher。实现
由 #330 完成。