feat(#674): 豆包大模型 Phase 3 - AI推荐片段编排 + 客户端抽共享层 #754
Reference in New Issue
Block a user
Delete Branch "feat/doubao-ai-integration-phase3"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更说明
#674 接入豆包大模型 Phase 3 完成。
基于 Phase 2(PR #753),完成AI推荐片段编排接入 + 客户端架构统一。
核心变更
1. 客户端抽共享层
packages/shared/ai_client.py— DoubaoClient 统一封装packages/shared/config.py(SharedSettings)2. Worker AI推荐接入豆包
_call_ai_recommend_service改为真实豆包调用3. 降级保障(三层)
4. 响应解析鲁棒性
测试
PR依赖链
代码审查结果 - PR #754
⚠️ 问题(2个需要修改)
packages/shared/ai_client.py 第99行:HTTP客户端未复用,存在性能隐患
chat_completion方法中直接使用httpx.post(...)顶级函数。这会导致每次请求都创建一个新的Client实例,意味着每次请求都会经历 DNS 解析、TCP 握手和 TLS 握手,无法利用连接池(Keep-Alive),在高并发场景下会显著增加延迟和资源消耗。DoubaoClient.__init__中初始化self._http_client = httpx.Client(timeout=self.timeout),并在chat_completion中使用self._http_client.post。同时实现close方法或在类中妥善管理客户端生命周期。apps/worker/worker_app/tasks/ai_tasks.py 第145行:素材ID校验逻辑可能导致渲染失败
_parse_recommend_response中,当 AI 返回的asset_id不在允许的列表中时,代码将其置为空字符串"",但保留了原有的clip_type(如 "showcase")。如果下游渲染逻辑要求 "showcase" 类型的片段必须包含有效的asset_id,这将导致渲染错误或崩溃。asset_id被置空时,应将clip_type修改为 "text"(如果支持)或者记录警告日志并丢弃该片段,而不是保留一个依赖素材但缺少素材的片段结构。💡 建议(2个可选)
apps/api/app/services/ai_service.py:同步HTTP调用阻塞事件循环
apps/api通常运行在异步框架(如 FastAPI)中,而httpx的同步调用会阻塞事件循环。虽然这是从旧代码继承的,但在重构共享库时,建议考虑提供async_chat_completion方法或使用run_in_executor来包装同步调用,以避免阻塞整个服务。packages/shared/ai_client.py 第113行:异常捕获范围过大
except Exception as e捕获了所有异常,包括KeyboardInterrupt或SystemExit(虽然通常在主线程不触发)。建议细化捕获类型,如except (httpx.HTTPError, json.JSONDecodeError, KeyError) as e,避免掩盖未预期的严重错误。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 06:15:50 | 模型:
🗑️ 预览环境已清理
PR #754 已关闭或合并,对应的预览环境已被清理。