# 智能物业服务助手 - 高情商管家MVP原型

## 🌟 项目定位

这是一位**高情商、专业、贴心的物业管家助手**，不是冷冰冰的机器，而是业主的朋友和贴心管家。

## ✨ 核心特色

### 🎯 高情商沟通
- **先回应，再行动**：无论什么指令，立即先用温暖的语言回应客户
- **同理心表达**：理解业主情绪，特别是紧急情况
- **主动关怀**：在沟通中体现关心和体贴

### 🎙️ 语音对话功能
- **语音输入**：业主可以发送语音，系统自动识别为文字
- **语音回复**：助手可以用语音回复业主，提供更亲切的服务
- **多种语音角色**：温柔女声、稳重男声、儿童声等可选

### 📞 电话通话功能
- **发起呼叫**：主动拨打业主电话，提供快递送达、活动通知等服务
- **接听来电**：自动接听业主来电，提供24小时服务
- **实时对话**：通话中实时识别语音并智能回复
- **通话记录**：自动记录通话时长、对话内容

### 🤖 智能化服务
- 自动识别业主身份
- 智能理解服务需求
- 自动创建标准化工单
- 根据紧急程度设置优先级

## 核心功能

### 1. 高情商沟通
- 收到任何请求，立即先回应客户
- 使用温暖亲切的语言
- 表达关心和理解
- 主动提供帮助

### 2. 语音对话
#### 语音输入（ASR）
- 支持音频URL或Base64编码输入
- 自动转换为文字指令
- 支持MP3/WAV/OGG/M4A格式
- 实时识别，快速响应

#### 语音回复（TTS）
- 将文字转换为语音输出
- 多种语音角色可选：
  - 小何（温柔女声，适合日常对话）
  - Vivi（中英双语女声）
  - 云舟（稳重男声，适合正式场合）
  - 小天（亲切男声，适合日常服务）
- 可调节语速和音量

### 3. 电话通话
#### 发起电话呼叫
```
工具：initiate_phone_call
参数：phone_number（电话号码）、greeting（开场白）
返回：call_id（通话ID）、greeting_audio_url（问候语音）
```

#### 处理来电
```
工具：handle_incoming_call
参数：phone_number（来电号码）
返回：call_id（通话ID）、welcome_audio_url（欢迎语音）
```

#### 通话中的实时对话
```
1. 接收用户语音：process_voice_in_call(call_id, audio_url)
   - 返回：recognized_text（识别的文字）
   
2. AI处理并生成回复

3. 语音回复用户：respond_in_call(call_id, text)
   - 返回：audio_url（回复语音）
   
4. 循环进行直到对话结束
```

#### 结束通话
```
工具：end_phone_call
参数：call_id、farewell（结束语）
返回：通话统计信息（时长、消息数等）
```

### 4. 用户身份识别
- 通过房间号或手机号自动识别业主身份
- 新用户自动创建账户
- 关联用户信息到服务工单

### 5. 智能任务创建
- 智能识别服务类型
- 自动提取关键信息
- 根据紧急程度自动设置优先级

### 6. 工单查询
- 查询用户所有工单
- 查看工单详细信息
- 按状态筛选工单

## 技术架构

```
├── src/
│   ├── agents/
│   │   └── agent.py              # Agent核心逻辑
│   ├── tools/
│   │   ├── voice_tool.py         # 语音识别工具（ASR）
│   │   ├── tts_tool.py           # 语音回复工具（TTS）✨新增
│   │   ├── phone_tool.py         # 电话通话工具 ✨新增
│   │   ├── user_tool.py          # 用户管理工具
│   │   └── task_tool.py          # 任务管理工具
│   └── storage/
│       ├── database/             # 数据库配置
│       └── memory/               # 短期记忆
├── config/
│   └── agent_llm_config.json     # 模型配置
└── scripts/
    └── init_test_data.py         # 测试数据初始化
```

## 数据库设计

### 用户表 (users)
- id: 用户ID
- name: 姓名
- phone: 手机号
- room_number: 房间号
- user_type: 用户类型（owner/staff/admin）

### 任务表 (tasks)
- id: 工单ID
- user_id: 用户ID
- category_id: 类别ID
- title: 任务标题
- description: 详细描述
- location: 服务地点
- status: 状态（pending/in_progress/completed/cancelled）
- priority: 优先级（urgent/high/normal/low）

### 任务类别表 (task_categories)
- id: 类别ID
- name: 类别名称
- keywords: 关键词列表
- icon: 图标标识

## 使用示例

### 示例1：语音回复
```
用户: 请用语音回复我：欢迎致电物业服务中心

助手: 好的，我马上为您生成语音回复，请稍等...
      
      [调用 speak_to_user 工具]
      
      🎙️ 已为您生成语音回复：
      https://example.com/audio.mp3
```

### 示例2：发起电话呼叫
```
用户: 请给13800138000打个电话，告诉业主他的快递已经到了

助手: 好的，我马上为您发起电话呼叫，请稍等...
      
      [调用 initiate_phone_call 工具]
      
      📞 已成功发起呼叫！
      - 通话ID：call_xxx
      - 被叫号码：13800138000
      - 当前状态：已接通
      - 问候语已播放
```

### 示例3：通话中的实时对话
```
用户: 通话call_xxx中，用户说"好的，帮我送上来吧"

助手: 好的，我立即处理通话中的回复，请稍等...
      
      [调用 respond_in_call 工具]
      
      ✅ 通话回复已生成并播放：
      "好的没问题~ 我们会安排工作人员在15分钟内送到..."
```

### 示例4：结束通话
```
用户: 结束通话call_xxx

助手: 好的，我马上为您结束本次通话，请稍等...
      
      [调用 end_phone_call 工具]
      
      📞 通话已顺利结束！
      - 通话时长：40.06秒
      - 结束语已播放
```

### 示例5：普通请求（先回应再处理）
```
用户: 你好，我是A栋1001的业主，有快递到了，帮我取一下，电话13800138000

助手: 好的，我马上为您处理！请稍等片刻...
      
      [调用工具创建工单]
      
      ✅ 已为您安排好啦！
      
      📋 工单号：7
      📝 服务类型：快递代取
      📍 服务地点：A栋1001
      ⏰ 当前状态：待处理
      
      物业人员会尽快为您取件，请保持电话畅通哦～ 有需要随时找我！😊
```

## 支持的服务类型

1. **快递代取** 📦 - 取快递、拿外卖
2. **车辆挪移** 🚗 - 挪车、车位咨询
3. **设施报修** 🔧 - 电梯故障、水电维修、公共设施损坏
4. **清洁服务** 🧹 - 公共区域清洁、垃圾处理
5. **安全服务** 🛡️ - 可疑人员、噪音投诉
6. **其他咨询** 💬 - 物业费查询、入住办理等

## 优先级自动识别

- **urgent（紧急）** ⚡: 电梯困人、火灾隐患、安全威胁
- **high（高）** 🔥: 车位占用、设施故障
- **normal（普通）** 📝: 取快递、日常咨询
- **low（低）** 💭: 一般建议、非紧急问题

## 高情商沟通特点

### 1. 先回应，再行动
```
✅ "好的，我马上为您处理！请稍等片刻..."
✅ "天哪！我立即帮您处理！正在为您创建紧急工单..."
✅ "好的，我马上帮您查询...稍等..."
```

### 2. 温暖亲切的语言
```
✅ 使用"您好"、"好的"、"没问题"、"我来帮您"
✅ 添加表情符号 😊 🙏 📋 ✅
✅ 关怀语句"请保持电话畅通"、"有需要随时找我"
```

### 3. 同理心表达
```
✅ "天哪！"（紧急情况）
✅ "大家的安全是最重要的"
✅ "请您也别太担心"
```

### 4. 主动关怀
```
✅ "有进展我会第一时间通知您"
✅ "如果您需要...都可以随时告诉我"
✅ "还有其他需要帮忙的吗？"
```

## 电话通话完整流程

```
1. 发起/接听电话
   ↓
2. 播放问候语/欢迎语
   ↓
3. 用户说话 → ASR识别为文字
   ↓
4. AI理解并生成回复
   ↓
5. TTS生成语音 → 播放给用户
   ↓
6. 循环步骤3-5
   ↓
7. 结束通话，播放结束语
   ↓
8. 保存通话记录和统计
```

## 测试方法

```bash
# 初始化测试数据
python scripts/init_test_data.py

# 运行Agent测试
# 使用 test_run 工具进行交互测试
```

## 后续优化建议

### 第二阶段（功能增强）
- [ ] 电话服务集成（Twilio、阿里云语音服务等）
- [ ] 任务状态实时更新推送
- [ ] 图片上传（报修上传照片）
- [ ] 多语言支持

### 第三阶段（智能升级）
- [ ] 多轮对话优化
- [ ] 任务进度跟踪
- [ ] 智能派单（根据位置、时间分配）
- [ ] 历史数据分析
- [ ] 通话质量分析

## 技术栈

- **LLM**: Doubao-Seed-2.0-Pro (高级推理模型)
- **ASR**: 支持多种音频格式的语音识别
- **TTS**: 多语音角色的语音合成
- **Database**: Supabase (PostgreSQL)
- **Framework**: LangChain + LangGraph
- **Memory**: 滑动窗口记忆（40条消息）
- **Phone**: 电话通话管理器（支持实时对话）

## 注意事项

1. 用户ID必须是数据库中的真实ID，不能使用房间号
2. 创建工单前必须先获取用户ID
3. 语音识别需要提供音频URL或Base64数据
4. 系统会自动识别紧急情况并设置高优先级
5. **所有请求都会先回应客户，再执行操作**
6. 电话通话需要集成第三方电话服务才能实际拨打

## 联系方式

如有问题或建议，请联系开发团队。
