Files
ylhp-ai-project-manager/docs/features/日报_AI_分析功能说明.md
JiaoTianBo de2268d9a9 feat(ai-analysis): 添加日报 AI 分析功能说明文档及实现
- 新增详尽的日报 AI 分析功能使用说明文档,包含功能概述、接口示例、
  技术细节、错误处理和性能指标
- 添加 AsyncConfig 配置,新增日报 AI 分析任务线程池,支持异步并发处理
- 创建 DailyReportAnalysisResult DTO,定义分析结果数据结构
- 实现 DailyReportAnalysisService 接口,支持异步分析日报并保存分析结果
- 实现 DailyReportAnalysisServiceImpl,集成 AI 分析模型调用和业务数据处理
- 设置 AI 分析系统提示词,规范输出 JSON 结构,确保分析质量和准确性
- 异步执行分析任务,线程池采用 CallerRunsPolicy 拒绝策略保证稳定性
- 设计项目上下文构建逻辑,整合项目信息、里程碑、任务和统计数据为 AI 提示
- 实现分析结果持久化,保存识别风险、资源需求,更新项目进度信息
- 日报 AI 分析任务异步执行异常记录,保证主流程稳定不受影响
2026-03-31 19:22:24 +08:00

7.4 KiB
Raw Permalink Blame History

日报 AI 分析功能使用说明

一、功能概述

当外部系统通过开放接口提交日报数据后,系统会自动触发 AI 分析任务,对日报内容进行深度分析,识别项目风险、资源需求,并提供进度建议。

二、核心特性

2.1 异步处理

  • 日报提交后立即返回成功响应
  • AI 分析在后台线程池中并行运行,不阻塞主流程
  • 支持并发处理多个日报分析请求(核心 5 线程,最大 10 线程)

2.2 智能分析

AI 会分析以下维度:

  1. 整体进度评估:判断项目进度是提前、正常还是滞后
  2. 里程碑风险识别:识别可能延期的里程碑及风险等级
  3. 资源需求分析:分析是否需要新增人力、物料、设备等资源
  4. 进度建议:针对当前情况提出可操作的调整建议
  5. 风险识别:识别潜在的项目风险并自动入库

2.3 自动化处理

  • 识别的风险自动保存到 risk
  • 资源需求自动保存到 resource
  • 项目状态根据分析结果自动更新

三、接口调用示例

3.1 请求示例

POST /api/open/daily-report/sync
Content-Type: application/json

{
  "projectId": 123,
  "userId": "zhangsan",
  "reportDate": "2026-03-31",
  "workContent": "完成了项目需求分析文档的编写,与团队成员进行了技术方案讨论,确定了系统架构设计",
  "tomorrowPlan": "开始进行系统架构设计,绘制 UML 图,组织技术评审会议",
  "workIntensity": 4,
  "needHelp": true,
  "helpContent": "需要架构师协助评审技术方案"
}

3.2 响应示例

{
  "code": 200,
  "msg": "日报同步成功",
  "data": null
}

注意:响应中不包含分析结果,因为 AI 分析在后台异步执行。

四、分析结果查看

4.1 查看识别的风险

-- 查询某项目通过日报分析识别的风险
SELECT * FROM risk 
WHERE project_id = 123 
  AND risk_source = 'ai_daily_report'
ORDER BY discover_time DESC;

4.2 查看资源需求

-- 查询某项目通过日报分析识别的资源需求
SELECT * FROM resource 
WHERE project_id = 123 
  AND resource_code LIKE 'RES_DR%'
ORDER BY create_time DESC;

4.3 查看项目状态变化

-- 查询项目状态变化
SELECT id, project_name, status, progress, risk_level 
FROM project 
WHERE id = 123;

五、技术实现细节

5.1 线程池配置

@Bean("dailyReportAnalysisExecutor")
public Executor dailyReportAnalysisExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(5);      // 核心 5 线程
    executor.setMaxPoolSize(10);       // 最大 10 线程
    executor.setQueueCapacity(200);    // 队列容量 200
    executor.setThreadNamePrefix("daily-report-analysis-");
    // ... 其他配置
}

5.2 分析流程

1. OpenApiController 接收日报请求
   ↓
2. OpenApiService.syncDailyReport() 保存日报
   ↓
3. DailyReportAnalysisService.analyzeDailyReportAsync() 异步分析
   ↓
4. 构建项目上下文 (项目信息 + 里程碑 + 任务统计)
   ↓
5. 调用 AI 模型进行分析
   ↓
6. 解析 AI 返回的 JSON 结果
   ↓
7. 保存分析结果到数据库

5.3 AI 提示词设计

系统使用精心设计的 System Prompt确保 AI 输出符合要求的 JSON 格式:

你是一个专业的项目管理 AI 助手,擅长从项目日报中分析项目状态...

任务:
1. 整体进度评估
2. 里程碑风险识别
3. 资源需求分析
4. 进度建议
5. 风险识别

输出格式 (JSON):
{
  "overallProgressAssessment": {...},
  "milestoneRisks": [...],
  "resourceNeeds": [...],
  "progressSuggestions": [...],
  "identifiedRisks": [...]  
}

5.4 项目上下文构建

AI 分析时会注入以下项目信息到提示词中:

【项目基本信息】
- 项目名称XXX
- 项目类型XXX
- 项目状态XXX
- 计划开始日期2026-01-01
- 计划结束日期2026-12-31
- 当前进度45%
- 项目预算1000000 CNY
- 已花费成本450000 CNY

【里程碑信息】
- 需求分析与架构设计 (计划2026-04-30, 状态pending, 进度0%)
- 核心算法模型训练与验证 (计划2026-06-15, 状态pending, 进度0%)
- 系统功能开发完成 (Alpha 版) (计划2026-07-31, 状态pending, 进度0%)

【任务列表】
- T001 [milestone] 需求调研与分析 (计划2026-04-01 ~ 2026-04-15, 状态completed, 进度100%)
- T002 [milestone] 技术架构设计 (计划2026-04-16 ~ 2026-04-30, 状态in_progress, 进度60%)
- T003 [task] 数据库设计 (计划2026-05-01 ~ 2026-05-10, 状态pending, 进度0%)

【任务统计】
- 任务总数15
- 已完成3
- 完成率20.0%

【进度分析】
- 计划工期270 天
- 已过时间90 天
- 预期进度33.3%
- 实际进度25%
- 进度偏差:-8.3%

【历史日报摘要】
1. 2026-03-30: 完成了技术方案评审,确定了系统架构...
2. 2026-03-29: 进行了需求调研,访谈了 5 个业务部门...
3. 2026-03-28: 编写了需求规格说明书初稿...

六、错误处理

6.1 异常场景

场景 处理方式
AI 服务不可用 记录错误日志,不影响日报保存
分析结果为空 跳过保存,记录警告日志
数据库写入失败 事务回滚,记录错误日志
线程池满 由调用线程处理 (CallerRuns 策略)

6.2 日志查看

# 查看日报分析相关日志
grep "日报 AI 分析" logs/application.log

# 查看错误日志
grep "\[日报 AI 分析\] 失败" logs/error.log

七、性能指标

指标 目标值
单次分析耗时 30-60 秒
并发处理能力 10+ 个日报同时分析
队列容量 200 个待分析任务
风险识别准确率 >80%

八、扩展开发

8.1 添加新的分析维度

修改 DailyReportAnalysisServiceImpl.java 中的 DAILY_REPORT_ANALYSIS_SYSTEM_PROMPT,添加新的分析要求。

8.2 调整线程池大小

根据实际负载情况,修改 AsyncConfig.java 中的线程池配置:

executor.setCorePoolSize(10);  // 调整核心线程数
executor.setMaxPoolSize(20);   // 调整最大线程数

8.3 自定义结果处理

修改 saveAnalysisResult() 方法,添加自定义的保存逻辑。

九、常见问题

Q1: 为什么响应中不返回分析结果?

A: 因为 AI 分析是异步执行的,提交日报时分析任务可能还未完成。如果需要查看分析结果,可以通过查询风险表、资源表等获取。

Q2: 分析任务失败会影响日报保存吗?

A: 不会。分析任务在独立的异步线程中执行,即使失败也不影响日报的正常保存。

Q3: 如何重新触发分析?

A: 当前版本暂不支持手动重新触发。可以重新提交同一天的日报 (会触发防重拦截),或者通过数据库直接查看历史分析结果。

Q4: 分析结果准确吗?

A: AI 分析的准确性取决于提供的项目数据质量和日报内容的详细程度。建议提供完整、准确的日报内容以获得更好的分析结果。

十、相关文件

  • DTO: DailyReportAnalysisResult.java
  • Service: DailyReportAnalysisService.java / DailyReportAnalysisServiceImpl.java
  • Controller: OpenApiController.java
  • Config: AsyncConfig.java
  • Test: DailyReportAnalysisServiceTest.java