- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
337 lines
10 KiB
Markdown
337 lines
10 KiB
Markdown
# 智能工牌能力分析实施完成报告
|
||
|
||
## 一、实施概述
|
||
|
||
本次实施完成了智能工牌能力分析与课程推荐功能(V3-Dify查数据库方案),实现了从言迹智能工牌获取对话数据 → 调用Dify工作流分析能力 → 生成课程推荐 → 保存评估记录的完整功能链路。
|
||
|
||
**实施时间**: 2025-10-16
|
||
**实施方案**: 考培练系统规划/全链路联调/言迹智能工牌/智能工牌能力分析实施方案(V3-Dify查数据库).md
|
||
|
||
## 二、已完成工作
|
||
|
||
### 2.1 数据库层
|
||
|
||
✅ **创建ability_assessments表**
|
||
- 文件:`kaopeilian-backend/migrations/create_ability_assessments.sql`
|
||
- 表结构包含:
|
||
- 用户ID、数据来源、综合评分
|
||
- 能力维度评分(JSON)
|
||
- 推荐课程(JSON)
|
||
- 对话数量、分析时间
|
||
- 已成功执行迁移,表创建完成
|
||
|
||
### 2.2 后端层
|
||
|
||
✅ **模型定义**
|
||
- 文件:`kaopeilian-backend/app/models/ability.py`
|
||
- 定义`AbilityAssessment`模型,对应ability_assessments表
|
||
|
||
✅ **Schema定义**
|
||
- 文件:`kaopeilian-backend/app/schemas/ability.py`
|
||
- 定义请求/响应Schema:
|
||
- `AbilityDimension`: 能力维度
|
||
- `CourseRecommendation`: 课程推荐
|
||
- `AbilityAssessmentResponse`: 评估响应
|
||
- `AbilityAssessmentHistory`: 历史记录
|
||
|
||
✅ **扩展YanjiService**
|
||
- 文件:`kaopeilian-backend/app/services/yanji_service.py`
|
||
- 新增方法:
|
||
- `get_audio_list()`: 获取录音列表(模拟)
|
||
- `get_employee_conversations_for_analysis()`: 获取员工对话数据
|
||
- `_generate_mock_conversation()`: 生成模拟对话
|
||
- `_short_conversation_template()`: 短对话模板(<30秒)
|
||
- `_medium_conversation_template()`: 中等对话模板(30秒-5分钟)
|
||
- `_long_conversation_template()`: 长对话模板(>5分钟)
|
||
|
||
✅ **创建AbilityAssessmentService**
|
||
- 文件:`kaopeilian-backend/app/services/ability_assessment_service.py`
|
||
- 核心方法:
|
||
- `analyze_yanji_conversations()`: 分析言迹对话生成评估
|
||
- `get_user_assessment_history()`: 获取评估历史
|
||
- `get_assessment_detail()`: 获取评估详情
|
||
|
||
✅ **扩展DifyPracticeService**
|
||
- 文件:`kaopeilian-backend/app/services/dify_practice_service.py`
|
||
- 新增方法:
|
||
- `analyze_ability_and_recommend_courses()`: 调用Dify能力分析工作流
|
||
|
||
✅ **创建API接口**
|
||
- 文件:`kaopeilian-backend/app/api/v1/ability.py`
|
||
- 接口列表:
|
||
- `POST /api/v1/ability/analyze-yanji`: 分析智能工牌数据
|
||
- `GET /api/v1/ability/history`: 获取评估历史
|
||
- `GET /api/v1/ability/{assessment_id}`: 获取评估详情
|
||
|
||
✅ **注册路由**
|
||
- 文件:`kaopeilian-backend/app/api/v1/__init__.py`
|
||
- 已将ability_router注册到主路由
|
||
|
||
✅ **配置管理**
|
||
- 文件:`kaopeilian-backend/app/core/config.py`
|
||
- 新增配置项:`DIFY_YANJI_ANALYSIS_API_KEY`
|
||
|
||
### 2.3 前端层
|
||
|
||
✅ **API方法**
|
||
- 文件:`kaopeilian-frontend/src/api/trainee/index.ts`
|
||
- 新增方法:`analyzeYanjiBadge()`: 分析智能工牌数据
|
||
|
||
✅ **更新成长路径页面**
|
||
- 文件:`kaopeilian-frontend/src/views/trainee/growth-path.vue`
|
||
- 更新`analyzeSmartBadgeData`方法:
|
||
- 调用真实API替代模拟数据
|
||
- 更新能力雷达图
|
||
- 更新推荐课程列表
|
||
- 完善错误处理
|
||
|
||
## 三、功能流程
|
||
|
||
```
|
||
用户点击"AI分析智能工牌数据"按钮
|
||
↓
|
||
前端调用 analyzeYanjiBadge() API
|
||
↓
|
||
后端 /api/v1/ability/analyze-yanji 接口
|
||
↓
|
||
AbilityAssessmentService.analyze_yanji_conversations()
|
||
├─ YanjiService.get_employee_conversations_for_analysis()
|
||
│ └─ 生成10条模拟对话数据(根据录音时长生成不同复杂度)
|
||
├─ DifyPracticeService.analyze_ability_and_recommend_courses()
|
||
│ └─ 调用Dify工作流(Dify内部查询数据库)
|
||
│ ├─ 查询用户信息和岗位
|
||
│ ├─ 查询所有已发布课程
|
||
│ ├─ LLM分析能力(6个维度)
|
||
│ └─ 生成课程推荐(3-5门)
|
||
└─ 保存评估记录到ability_assessments表
|
||
↓
|
||
返回评估结果(综合评分、维度评分、推荐课程)
|
||
↓
|
||
前端更新雷达图和推荐课程列表
|
||
```
|
||
|
||
## 四、关键技术点
|
||
|
||
### 4.1 模拟对话生成策略
|
||
|
||
由于言迹API暂时没有提供通过手机号直接查询录音的接口,我们实现了智能模拟对话生成:
|
||
|
||
1. **三种复杂度模板**:
|
||
- 短对话(<30秒):4-6轮,简单咨询
|
||
- 中等对话(30秒-5分钟):8-12轮,深入沟通
|
||
- 长对话(>5分钟):15-20轮,完整销售流程
|
||
|
||
2. **场景覆盖**:
|
||
- 面部护理咨询
|
||
- 祛斑/美白需求
|
||
- 抗衰/紧肤项目
|
||
- 价格谈判与成交
|
||
|
||
### 4.2 Dify工作流设计
|
||
|
||
**简化输入原则**:
|
||
- 只传递 `user_id` 和 `dialogue_history`
|
||
- Dify内部自行查询数据库获取用户信息和课程列表
|
||
- 减少API传输数据量,提升性能
|
||
|
||
**输出格式**:
|
||
```json
|
||
{
|
||
"analysis": {
|
||
"total_score": 82,
|
||
"ability_dimensions": [
|
||
{
|
||
"name": "专业知识",
|
||
"score": 88,
|
||
"feedback": "产品知识扎实..."
|
||
}
|
||
],
|
||
"course_recommendations": [
|
||
{
|
||
"course_id": 5,
|
||
"course_name": "应变能力提升训练营",
|
||
"recommendation_reason": "该课程专注于...",
|
||
"priority": "high",
|
||
"match_score": 95
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4.3 前端集成要点
|
||
|
||
1. **错误处理**:
|
||
- 404:暂无智能工牌数据
|
||
- 400:用户未绑定手机号
|
||
- 其他:通用错误提示
|
||
- 失败时使用模拟数据兜底
|
||
|
||
2. **数据转换**:
|
||
- Dify返回的数据直接映射到前端展示
|
||
- 课程详情可后续补充完善
|
||
|
||
## 五、待完成工作
|
||
|
||
### 5.1 Dify工作流配置
|
||
|
||
⚠️ **必须完成**:
|
||
|
||
1. **创建Dify工作流**:
|
||
- 工作流名称:`智能工牌能力分析与课程推荐`
|
||
- 输入参数:`user_id`, `dialogue_history`
|
||
|
||
2. **配置数据库连接**:
|
||
- Host: 数据库地址
|
||
- Port: 3307
|
||
- Database: kaopeilian
|
||
- Username: root
|
||
- Password: nj861021
|
||
|
||
3. **配置查询节点**:
|
||
- 查询1:获取用户信息和岗位
|
||
```sql
|
||
SELECT u.id, u.full_name, u.phone, p.name as position_name, p.skills
|
||
FROM users u
|
||
LEFT JOIN user_positions up ON u.id = up.user_id
|
||
LEFT JOIN positions p ON up.position_id = p.id
|
||
WHERE u.id = {{user_id}}
|
||
```
|
||
|
||
- 查询2:获取所有已发布课程
|
||
```sql
|
||
SELECT id, name, description, category, tags, difficulty_level, duration_hours
|
||
FROM courses
|
||
WHERE status = 'published' AND is_deleted = FALSE
|
||
ORDER BY sort_order
|
||
```
|
||
|
||
4. **配置LLM节点**:
|
||
- 提示词模板:参考实施方案第5.3节
|
||
- 要求输出JSON格式
|
||
- 6个能力维度评分
|
||
- 3-5门课程推荐
|
||
|
||
5. **获取API Key**:
|
||
- 在Dify中发布工作流
|
||
- 获取API Key
|
||
- 配置到 `.env` 文件:
|
||
```
|
||
DIFY_YANJI_ANALYSIS_API_KEY=app-xxxxxx
|
||
```
|
||
|
||
6. **重启后端服务**:
|
||
```bash
|
||
docker-compose restart backend
|
||
```
|
||
|
||
### 5.2 前端优化(可选)
|
||
|
||
- [ ] 从课程详情API补充课程信息(duration、difficulty、learnerCount)
|
||
- [ ] 从recommendation_reason中提取targetWeakPoints和expectedImprovement
|
||
- [ ] 添加评估历史查看功能
|
||
- [ ] 添加评估报告导出功能
|
||
|
||
### 5.3 测试验证(可选)
|
||
|
||
- [ ] 在真实环境测试完整流程
|
||
- [ ] 验证不同对话复杂度的分析效果
|
||
- [ ] 测试错误处理分支
|
||
- [ ] 性能测试(大量对话数据)
|
||
|
||
## 六、测试指南
|
||
|
||
### 6.1 数据库验证
|
||
|
||
```bash
|
||
# 查看表是否存在
|
||
docker exec kaopeilian-mysql-dev mysql -u root -pnj861021 kaopeilian \
|
||
-e "SHOW TABLES LIKE 'ability_assessments';"
|
||
|
||
# 查看表结构
|
||
docker exec kaopeilian-mysql-dev mysql -u root -pnj861021 kaopeilian \
|
||
-e "DESCRIBE ability_assessments;"
|
||
```
|
||
|
||
### 6.2 API测试(需要先配置Dify)
|
||
|
||
```bash
|
||
# 获取用户token
|
||
TOKEN="your_access_token_here"
|
||
|
||
# 调用能力分析API
|
||
curl -X POST http://localhost:8000/api/v1/ability/analyze-yanji \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "Content-Type: application/json"
|
||
|
||
# 查看评估历史
|
||
curl -X GET "http://localhost:8000/api/v1/ability/history?limit=10" \
|
||
-H "Authorization: Bearer $TOKEN"
|
||
```
|
||
|
||
### 6.3 前端测试
|
||
|
||
1. 登录考培练系统
|
||
2. 进入"成长路径"页面
|
||
3. 点击"AI 分析智能工牌数据"按钮
|
||
4. 观察:
|
||
- 能力雷达图是否更新
|
||
- 推荐课程列表是否更新
|
||
- 提示信息是否正确
|
||
|
||
## 七、文件清单
|
||
|
||
### 后端文件(新建)
|
||
- `kaopeilian-backend/migrations/create_ability_assessments.sql`
|
||
- `kaopeilian-backend/app/models/ability.py`
|
||
- `kaopeilian-backend/app/schemas/ability.py`
|
||
- `kaopeilian-backend/app/services/ability_assessment_service.py`
|
||
- `kaopeilian-backend/app/api/v1/ability.py`
|
||
|
||
### 后端文件(修改)
|
||
- `kaopeilian-backend/app/services/yanji_service.py`
|
||
- `kaopeilian-backend/app/services/dify_practice_service.py`
|
||
- `kaopeilian-backend/app/api/v1/__init__.py`
|
||
- `kaopeilian-backend/app/core/config.py`
|
||
|
||
### 前端文件(修改)
|
||
- `kaopeilian-frontend/src/api/trainee/index.ts`
|
||
- `kaopeilian-frontend/src/views/trainee/growth-path.vue`
|
||
|
||
## 八、注意事项
|
||
|
||
1. **数据库权限**:确保Dify能访问数据库(生产环境需要配置防火墙)
|
||
2. **API Key安全**:不要将API Key提交到版本控制
|
||
3. **性能考虑**:对话数据量大时,Dify工作流可能超时(当前设置180秒)
|
||
4. **兜底策略**:前端失败时使用模拟数据,保证用户体验
|
||
5. **用户手机号**:必须在用户表中绑定手机号才能匹配言迹数据
|
||
|
||
## 九、后续优化方向
|
||
|
||
1. **真实言迹数据接入**:
|
||
- 等言迹API提供通过手机号查询录音的接口
|
||
- 替换模拟对话为真实ASR结果
|
||
|
||
2. **能力评估算法优化**:
|
||
- 结合历史评估数据
|
||
- 多维度权重调整
|
||
- 学习进度跟踪
|
||
|
||
3. **课程推荐增强**:
|
||
- 考虑用户学习历史
|
||
- 考虑岗位要求
|
||
- 考虑学习路径
|
||
|
||
4. **可视化增强**:
|
||
- 能力趋势图
|
||
- 对比分析
|
||
- 成长轨迹
|
||
|
||
---
|
||
|
||
**实施状态**: ✅ 代码实施完成,待配置Dify工作流
|
||
**下一步**: 在Dify中创建智能工牌能力分析工作流并配置数据库连接
|
||
**负责人**: 开发团队
|
||
**预计完成时间**: 待定
|
||
|