智能天气播报AI Agent系统如何包装简历?
2025/12/19
项目名称:智能天气播报 AI Agent
核心技术:JDK 21、Spring Boot 3.5.3、Spring MVC、Spring WebFlux(WebClient)、Spring Cache、Spring Data Redis、Redis、Thymeleaf、FreeMarker、Spring AI Alibaba(DashScope/通义千问)、Jackson、Lombok、Maven。
项目描述: 面向 C 端与开放 API 的“生成式内容服务”:根据城市与播报偏好拉取实时天气数据,使用大模型生成 200–300 字个性化播报;在 AI 不可用或外部依赖抖动时,系统通过“模板播报 + 备用播报”稳定输出,保证核心链路可用。系统提供 Web 页面与 REST API 双入口,并通过“业务结果缓存 + 组件级缓存”降低外部天气 API 与大模型调用频次,实现性能与成本的可控。
我的职责:
- 负责核心链路架构设计与落地:Controller → 外部天气拉取 → AI 生成 → 多级降级 → 缓存复用 → 页面/API 返回。
- 设计基于请求参数的 hash 结果缓存,实现同参请求跨入口复用,避免重复触发外部 API 与 AI 生成。
- 抽象模板体系(Prompt/多风格播报/Header&Footer/兜底播报)并封装为 Template Manager,支持快速迭代文案与风格。
- 完成外部依赖治理:超时控制、错误码判定、失败兜底;并实现 Redis 故障熔断式降级,避免雪崩。
项目亮点:
- 构建“AI 三级降级链路”确保稳态输出:AI 调用失败/未配置时自动回退到 FreeMarker 模板播报,模板失败再回退到备用播报,实现“永远有结果”的用户体验(AI → Template → Fallback)。
- 设计基于请求参数的 SHA-256 结果缓存:将城市、风格及建议开关归一化后生成固定长度 hash key,同参请求可直接复用最终播报结果,跨 REST/API 与页面入口共享缓存,避免重复调用第三方天气与大模型。
- 实现两级缓存(本地 ConcurrentHashMap + Redis)降低访问成本:本地缓存承接热数据,Redis 负责跨实例共享;缓存命中后主链路可做到“0 次外部依赖调用”,显著降低 P99 延迟与外部调用成本。
- 实现 Redis 故障熔断式降级:Redis 读写异常后快速熔断,后续请求自动切换到本地缓存,避免故障放大导致的连锁超时与雪崩。
- 模板工程化:Prompt/风格/逻辑分层:Prompt 与播报模板全部模板化管理,支持多风格(FORMAL/CASUAL/HUMOROUS/WARM/POETIC)与条件渲染(穿衣/生活/出行建议),需求变更以改模板为主,降低改代码风险。
- 外部天气 API 调用治理:WebClient 强制超时控制 + 错误码判定,失败时回退 mock 数据,保证主流程“可用性优先”。
面试常见问题
1)你们怎么控制“AI 成本”和“延迟抖动”?
2)为什么既有 Spring Cache 又手写 CacheService?会不会重复?
3)Redis 挂了怎么办?你们服务会不会也挂?
4)外部天气 API 抖动你怎么处理?
如何获取项目源代码、完整教程和问题答案?
