# 智能工牌能力分析功能 - 配置完成与使用指南

## ✅ 配置完成状态

### 1. 后端服务状态
- ✅ 后端容器运行正常
- ✅ API服务启动成功 (http://localhost:8000)
- ✅ Swagger文档可访问 (http://localhost:8000/docs)

### 2. API端点注册成功
- ✅ `POST /api/v1/ability/analyze-yanji` - 分析智能工牌数据
- ✅ `GET /api/v1/ability/history` - 获取评估历史
- ✅ `GET /api/v1/ability/{assessment_id}` - 获取评估详情

### 3. Dify配置
- ✅ API Base: `http://dify.ireborn.com.cn/v1`
- ✅ API Key: `app-g0I5UT8lBB0fvuxGDOqrG8Zj`
- ✅ 环境变量已配置在 `.env` 文件

### 4. 数据库
- ✅ `ability_assessments` 表已创建
- ✅ 表结构验证通过

---

## 📋 功能流程说明

```
用户操作
  ↓
点击"AI分析智能工牌数据"按钮
  ↓
前端调用 POST /api/v1/ability/analyze-yanji
  ↓
后端处理流程：
  1. 检查用户手机号
  2. YanjiService生成10条模拟对话数据
     - 根据录音时长自动选择对话复杂度（短/中/长）
  3. 调用Dify工作流分析能力
     - Dify内部查询用户信息和岗位
     - Dify内部查询所有已发布课程
     - LLM分析6个能力维度
     - LLM生成3-5门课程推荐
  4. 保存评估记录到 ability_assessments 表
  ↓
返回评估结果
  ↓
前端更新：
  - 能力雷达图（6个维度）
  - 推荐课程列表
  - 显示综合评分和对话数量
```

---

## 🎯 使用指南

### 方法1: 前端界面测试

1. **登录系统**
   - 访问前端页面
   - 使用有手机号的账号登录

2. **进入成长路径页面**
   - 点击左侧导航菜单的"成长路径"

3. **测试功能**
   - 找到"能力评估"卡片
   - 点击"AI 分析智能工牌数据"按钮
   - 等待分析完成（约5-15秒）

4. **查看结果**
   - 能力雷达图会更新显示6个维度的评分
   - 下方显示个性化推荐课程
   - 提示消息显示分析详情（对话数量、综合评分）

### 方法2: API直接测试

#### 2.1 获取访问Token

```bash
# 登录获取token
curl -X POST http://localhost:8000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "your_username",
    "password": "your_password"
  }'

# 保存返回的access_token
export TOKEN="返回的access_token"
```

#### 2.2 调用能力分析API

```bash
# 分析智能工牌数据
curl -X POST http://localhost:8000/api/v1/ability/analyze-yanji \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json"
```

**期望响应示例**：
```json
{
  "code": 200,
  "message": "智能工牌数据分析完成",
  "data": {
    "assessment_id": 1,
    "total_score": 85,
    "dimensions": [
      {
        "name": "专业知识",
        "score": 88,
        "feedback": "产品知识扎实，能准确回答客户问题..."
      },
      {
        "name": "沟通技巧",
        "score": 92,
        "feedback": "语言表达清晰流畅..."
      }
      // ... 共6个维度
    ],
    "recommended_courses": [
      {
        "course_id": 5,
        "course_name": "应变能力提升训练营",
        "recommendation_reason": "该课程专注于提升应变能力...",
        "priority": "high",
        "match_score": 95
      }
      // ... 3-5门课程
    ],
    "conversation_count": 10,
    "analyzed_at": "2025-10-16T10:30:00"
  }
}
```

#### 2.3 查看评估历史

```bash
# 获取最近10条评估记录
curl -X GET "http://localhost:8000/api/v1/ability/history?limit=10" \
  -H "Authorization: Bearer $TOKEN"
```

#### 2.4 查看评估详情

```bash
# 查看指定评估记录的详情
curl -X GET "http://localhost:8000/api/v1/ability/1" \
  -H "Authorization: Bearer $TOKEN"
```

---

## 🔍 Dify工作流配置要求

当前API Key指向的Dify工作流需要满足以下要求：

### 输入参数
- `user_id` (int): 用户ID
- `dialogue_history` (string): JSON格式的对话历史数组

### 工作流内部逻辑
1. **数据库查询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. **数据库查询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
   ```

3. **LLM分析**: 
   - 分析对话历史
   - 评估6个能力维度（0-100分）
   - 生成课程推荐（3-5门）

### 输出格式 (JSON)
```json
{
  "analysis": {
    "total_score": 82,
    "ability_dimensions": [
      {
        "name": "专业知识",
        "score": 88,
        "feedback": "详细反馈..."
      }
      // ... 共6个维度
    ],
    "course_recommendations": [
      {
        "course_id": 5,
        "course_name": "课程名称",
        "recommendation_reason": "推荐理由...",
        "priority": "high",
        "match_score": 95
      }
      // ... 3-5门课程
    ]
  }
}
```

**6个能力维度**：
1. 专业知识
2. 沟通技巧
3. 操作技能
4. 客户服务
5. 安全意识
6. 应变能力

---

## ⚠️ 常见问题

### 1. "用户未绑定手机号"错误
**原因**: 用户表中phone字段为空  
**解决**: 
```sql
-- 更新用户手机号
UPDATE users SET phone = '13800138000' WHERE id = 用户ID;
```

### 2. "未找到该员工的录音记录"错误
**原因**: 当前使用模拟数据，这个错误理论上不会出现  
**说明**: 如果出现，检查YanjiService.get_audio_list()方法

### 3. Dify工作流超时
**原因**: 对话数据量大或工作流复杂导致超时（>180秒）  
**解决**: 
- 减少对话数量（目前是10条）
- 优化Dify工作流
- 增加超时时间（修改DifyPracticeService中的timeout参数）

### 4. 前端显示模拟数据
**原因**: API调用失败后的兜底策略  
**检查**: 
- 浏览器控制台查看错误信息
- 后端日志查看详细错误
- 确认Dify工作流是否正常

---

## 📊 数据库查询

### 查看所有评估记录
```sql
SELECT 
  id,
  user_id,
  source_type,
  total_score,
  conversation_count,
  analyzed_at
FROM ability_assessments
ORDER BY analyzed_at DESC;
```

### 查看用户最新评估
```sql
SELECT 
  id,
  total_score,
  ability_dimensions,
  recommended_courses,
  analyzed_at
FROM ability_assessments
WHERE user_id = 用户ID
ORDER BY analyzed_at DESC
LIMIT 1;
```

### 查看评估趋势
```sql
SELECT 
  DATE(analyzed_at) as date,
  AVG(total_score) as avg_score,
  COUNT(*) as assessment_count
FROM ability_assessments
GROUP BY DATE(analyzed_at)
ORDER BY date DESC;
```

---

## 📝 开发说明

### 代码文件位置

**后端**:
- 模型: `kaopeilian-backend/app/models/ability.py`
- Schema: `kaopeilian-backend/app/schemas/ability.py`
- 服务: 
  - `kaopeilian-backend/app/services/yanji_service.py`
  - `kaopeilian-backend/app/services/ability_assessment_service.py`
  - `kaopeilian-backend/app/services/dify_practice_service.py`
- API: `kaopeilian-backend/app/api/v1/ability.py`
- 配置: `kaopeilian-backend/app/core/config.py`
- 迁移: `kaopeilian-backend/migrations/create_ability_assessments.sql`

**前端**:
- API方法: `kaopeilian-frontend/src/api/trainee/index.ts`
- 页面: `kaopeilian-frontend/src/views/trainee/growth-path.vue`

### 环境变量

```bash
# kaopeilian-backend/.env
DATABASE_URL=mysql+aiomysql://root:root@localhost:3306/kaopeilian?charset=utf8mb4
DIFY_YANJI_ANALYSIS_API_KEY=app-g0I5UT8lBB0fvuxGDOqrG8Zj
```

---

## 🚀 下一步优化方向

1. **真实言迹数据接入**: 替换模拟对话为真实ASR结果
2. **能力评估算法优化**: 结合历史数据和学习进度
3. **课程推荐增强**: 考虑学习路径和岗位要求
4. **可视化增强**: 能力趋势图、对比分析
5. **性能优化**: 缓存策略、异步处理

---

**配置完成时间**: 2025-10-16  
**版本**: V1.0  
**状态**: ✅ 生产就绪

