# moya_chat_app **Repository Path**: lsq2025/moya_chat_app ## Basic Information - **Project Name**: moya_chat_app - **Description**: use flutter develop a ai app chat with moya(AI Robot) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-10 - **Last Updated**: 2026-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Crypto AI Copilot 一个围绕夜间陪伴、倾听与睡眠场景设计的 Flutter 应用,当前已接入登录认证、流式聊天、记忆库展示、语音输入以及睡眠日记/机器人之梦等功能。 ## 当前功能 ### 1. 认证与登录 - 用户登录 / 注册 - 本地保存 `access_token`、`refresh_token`、`user_id`、`username` - 应用启动时自动恢复登录态 ### 2. 聊天功能 - 基于 SSE 的流式聊天 - 明确区分 `thinking`、`executing`、`answering`、`complete` 四个阶段 - 发送聊天请求时携带 `history` - 单次应用会话内复用稳定 `session_id`,支持多轮上下文连续性 - 最终回答可展示数据来源 `sources` ### 3. 记忆库 - 拉取指定用户画像与记忆列表 - 支持新增 / 删除记忆 - 支持在独立页面查看记忆内容 ### 4. 陪伴扩展能力 - 睡眠日记弹窗 - 机器人之梦弹窗 - 语音录音与 ASR 识别 - Moya 状态展示、电量展示、主题管理 ## 技术栈 - `Flutter` - `Provider` - `Dio` - `HTTP`(当前仅用于 SSE 流式聊天) - `flutter_secure_storage` - `shared_preferences` - `record` - `permission_handler` ## 当前项目结构 ```text lib/ ├── main.dart ├── models/ │ ├── chat_message.dart │ ├── memory.dart │ └── user_profile.dart ├── providers/ │ ├── asr_provider.dart │ ├── auth_provider.dart │ ├── moya_provider.dart │ └── theme_provider.dart ├── screens/ │ ├── chat_screen.dart │ ├── login_screen.dart │ └── memory_screen.dart ├── services/ │ ├── api_service.dart │ ├── asr_service.dart │ ├── auth_interceptor.dart │ ├── auth_service.dart │ ├── chat_provider.dart │ ├── http_client.dart │ └── token_storage.dart └── widgets/ ├── battery_indicator.dart ├── moya_avatar.dart ├── status_card.dart └── voice_input_button.dart ``` ## 接口与地址 当前代码里存在两组后端地址: ### 1. 业务 API / 认证 API - 基地址:`http://120.77.206.206:30022` - 用途:登录、注册、刷新令牌、用户资料、记忆相关接口 常见接口: - `POST /api/auth/login` - `POST /api/auth/register` - `POST /api/auth/refresh` - `POST /api/auth/logout` - `GET /api/user/profile` - `GET /api/user/{user_id}/profile` - `PUT /api/user/{user_id}/profile` - `POST /api/memory/{user_id}` - `DELETE /api/memory/{user_id}/{memory_id}` ### 2. Agent 流式聊天 API - 基地址:`http://120.77.206.206:30082` - 用途:SSE 流式聊天 聊天接口: - `POST /internal/v1/assistant/chat` 请求体示例: ```json { "message": "最近总是睡不着", "user_id": "123", "session_id": "moya-session-1713337200000", "history": [ {"role": "user", "content": "我这几天压力很大"}, {"role": "assistant", "content": "我在,慢慢说"} ] } ``` SSE 数据阶段示例: ```text event: thinking data: {"phase":"thinking","type":"status","content":"正在分析..."} event: executing data: {"phase":"executing","type":"status","content":"正在查询数据...","metadata":{"tools":["chat.rank.topn"]}} event: answering data: {"phase":"answering","type":"delta","content":"最近"} event: complete data: {"phase":"complete","type":"final","content":"...","metadata":{"sources":[{"tool":"chat.rank.topn","summary":"..."}]}} ``` ## 本地开发 ### 安装依赖 ```bash flutter pub get ``` ### 运行应用 ```bash flutter run -d macos flutter run -d chrome ``` ## 部署说明 ### Web 静态部署 项目根目录包含: - `Dockerfile` - `nginx.conf` 当前 Docker 方案用于托管 `build/web` 产物,而不是在镜像内执行 Flutter 构建。 典型流程: ```bash export PATH="/opt/flutter/bin:$PATH" cd /cloud/apps/moya_chat_app_v2 flutter pub get flutter build web docker build -t moya-chat-app:web . ``` ## 当前实现说明 - 聊天主链已经支持上下文历史透传 - 聊天会话在 `ChatProvider` 生命周期内复用稳定 `session_id` - 登录后优先使用本地保存的真实 `user_id` 获取画像和发起聊天 - 普通 REST 接口已经统一收敛到 `Dio/HttpClient` - SSE 流式聊天仍保留 `http` 实现,便于稳定解析流式分块 - 睡眠日记与机器人之梦当前仍为 mock 数据 ## 注意事项 1. 认证接口与聊天接口不是同一个端口 2. 流式聊天依赖后端 SSE 支持 3. Web 端登出时只清理认证相关键,不会清空全部本地偏好 4. 当前 README 以仓库现状为准,不再使用早期 `8000` 端口说明 ## 后续建议 - 将环境地址提取为统一配置,避免 IP/端口硬编码 - 为 SSE 聊天增加更健壮的错误码和断流处理 - 将睡眠日记与机器人之梦接入真实后端 - 重构 `ChatMessage` 的流式缓冲模型,减少显示层与数据层耦合