← ClaudeAtlas

workflow-stop-designlisted

工作流暂停逻辑设计方案
aiskillstore/marketplace · ★ 329 · AI & Automation · score 77
Install: claude install-skill aiskillstore/marketplace
## 1. Redis 状态管理方案 ### 1.1 状态键设计 **Redis Key 结构:** ```typescript // Key 格式: agent_runtime_stopping:{appId}:{chatId} const WORKFLOW_STATUS_PREFIX = 'agent_runtime_stopping'; type WorkflowStatusKey = `${typeof WORKFLOW_STATUS_PREFIX}:${string}:${string}`; // 示例: agent_runtime_stopping:app_123456:chat_789012 ``` **状态值设计:** - **存在键 (值为 1)**: 工作流应该停止 - **不存在键**: 工作流正常运行 - **设计简化**: 不使用状态枚举,仅通过键的存在与否判断 **参数类型定义:** ```typescript type WorkflowStatusParams = { appId: string; chatId: string; }; ``` ### 1.2 状态生命周期管理 **状态转换流程:** ``` 正常运行(无键) → 停止中(键存在) → 完成(删除键) ``` **TTL 设置:** - **停止标志 TTL**: 60 秒 - 原因: 避免因意外情况导致的键泄漏 - 正常情况下会在工作流完成时主动删除 - **工作流完成后**: 直接删除 Redis 键 - 原因: 不需要保留终态,减少 Redis 内存占用 ### 1.3 核心函数说明 **1. setAgentRuntimeStop** - **功能**: 设置停止标志 - **参数**: `{ appId, chatId }` - **实现**: 使用 `SETEX` 命令,设置键值为 1,TTL 60 秒 **2. shouldWorkflowStop** - **功能**: 检查工作流是否应该停止 - **参数**: `{ appId, chatId }` - **返回**: `Promise<boolean>` - true=应该停止, false=继续运行 - **实现**: GET 命令获取键值,存在则返回 true **3. delAgentRuntimeStopSign** - **功能**: 删除停止标志 - **参数**: `{ appId, chatId }` - **实现**: DEL 命令删除键 **4. waitForWorkflowComplete** - **功能**: 等待工作流完成(停止标志被删除) - **参数**: `{ appId, chatId, timeout?, pollInterval? }` - **实现**: 轮询检查停止标志是否被删除,超时返回 ### 1.4 边界情况处理 **1. Redis 操作失败** - **错误处理**: 所有 Redis 操作都包含 `.catch()` 错误处理 - **降级策略**: - `shouldWorkflowStop`: 出错时返回 `false` (认为不需要停止,继续运行) - `delAgentRuntimeStopSign`: 出错时记录错误日志,但不影响主流程 - **设计原因**: Redis 异常不应阻塞工作流运行,降级到继续执行策略 **2. TTL 自动清理** - *