# ai-practice **Repository Path**: smartoa/ai-practice ## Basic Information - **Project Name**: ai-practice - **Description**: ai陪练 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-10 - **Last Updated**: 2026-06-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ai-practice `ai-practice` 是一个基于 uni-app / Vue 的移动端 AI 助手项目,主要包含话术课程、训练记录、AI 对话、话术库和个人中心等页面。 > 说明:仓库中的 `人人过关考评助手/` 目录是 React + Vite 页面原型,本文档按要求忽略该原型目录,只说明根目录 uni-app 主项目。 ## 功能概览 - 首页:展示话术课程列表、课程状态、陪练人数和陪练次数。 - 记录页:展示训练/陪练记录。 - 对话页:集成 Dify 聊天组件,支持 AI 对话。 - 话术页:展示话术知识库。 - 我的页:展示用户相关入口。 - Dify 聊天组件:支持流式回复、会话历史、附件上传、语音输入、语音转文字、文字转语音等能力。 ## 技术栈 - uni-app - Vue 3 - SCSS - Dify API - H5 / 小程序 / App 多端配置 - Nginx HTTPS 与反向代理配置 关键配置文件: - `manifest.json`:应用配置、H5 路由配置、小程序/App 配置。 - `pages.json`:页面路由和 tabBar 配置。 - `main.js`:应用入口。 - `App.vue`:应用生命周期入口。 - `nginx/nginx.conf`:H5 静态资源、HTTPS、Node 后端代理配置示例。 - `nginx/aipractice-zs.conf`:可放入 `/etc/nginx/conf.d/` 的简化部署配置。 - `scripts/deploy-linux.sh`:Linux 一键部署脚本。 - `docs/deploy-linux-nginx.md`:完整 Linux + Nginx 部署流程。 ## 目录结构 ```text . ├─ App.vue ├─ main.js ├─ manifest.json ├─ pages.json ├─ package.json ├─ uni.scss ├─ nginx/ │ └─ nginx.conf ├─ pages/ │ ├─ home/ # 首页/话术课程 │ ├─ record/ # 记录页 │ ├─ index/ # AI 对话页 │ ├─ script/ # 话术页 │ └─ mine/ # 我的页 ├─ components/ │ └─ chencc-difyChat/ │ ├─ index.vue │ ├─ config.js │ ├─ services/ │ ├─ composables/ │ └─ README.md └─ static/ ├─ logo.png └─ tab/ ``` ## 页面说明 | 页面 | 路径 | 说明 | | --- | --- | --- | | 首页 | `pages/home/home` | 话术课程列表和课程状态展示 | | 记录 | `pages/record/record` | 训练记录展示 | | 对话 | `pages/index/index` | Dify AI 聊天入口 | | 话术 | `pages/script/script` | 话术知识库 | | 我的 | `pages/mine/mine` | 个人中心 | ## Dify 聊天组件 组件目录: ```text components/chencc-difyChat/ ``` 组件分层: - UI 组件:`index.vue`、`chat-header.vue`、`attachment-upload.vue`、`voice-input.vue`、`history-sidebar.vue`、`message-parser.vue`、`web-search.vue` - 组合函数:`composables/use-chat.js`、`use-conversation.js`、`use-file.js`、`use-voice.js`、`use-app.js` - 服务层:`services/api.js`、`chat-service.js`、`conversation-service.js`、`file-service.js`、`voice-service.js`、`app-service.js` 已封装的 Dify 接口包括: - `POST /chat-messages` - `POST /files/upload` - `GET /files/:file_id/preview` - `POST /chat-messages/:task_id/stop` - `GET /messages` - `GET /conversations` - `DELETE /conversations/:conversation_id` - `POST /audio-to-text` - `POST /text-to-audio` - `GET /parameters` - `GET /meta` ## Dify / 后端代理配置 当前 Dify 配置在: ```text pages/index/index.vue ``` 当前代码将 Dify baseUrl 交给 Node 后端代理,前端只请求相对路径: ```js config: { ...defaultConfig, api: { baseUrl: '/api/dify/v1', authorization: '' } } ``` Node 后端配置在: ```text server/.env ``` 关键变量: ```env PORT=3001 DIFY_BASE_URL=http://10.0.0.3:28080/v1 DIFY_API_KEY=app-your-dify-api-key ``` 生产环境由 Nginx 把 `/api/` 反向代理到 `http://127.0.0.1:3001/api/`,Dify Token 不再写入前端。 ## H5 / HTTPS 部署 完整流程见: ```text docs/deploy-linux-nginx.md ``` 一键部署脚本: ```bash sudo bash scripts/deploy-linux.sh ``` 脚本默认: - 构建 H5 前端并发布到 `/opt/aizs-ui/zs`。 - 部署 Node 后端到 `/opt/aizs-ui/aipractice-server`。 - 创建 systemd 服务 `aipractice-server`。 - 安装 Nginx 配置并 reload。 Nginx 配置包含: - `18888` 端口 HTTPS 服务。 - SSL 证书路径:`/etc/nginx/cert/cert.pem` 和 `/etc/nginx/cert/key.pem`。 - 麦克风权限策略:`Permissions-Policy "microphone=(self)"`。 - `/api/` Node 后端反向代理。 - `/zs` H5 静态资源路径,默认指向 `/opt/aizs-ui/zs`。 - `/aizs` 另一个前端静态资源路径,默认指向 `/opt/aizs-ui/zhushou`。 - `/prod-api/` 后端接口代理,默认指向 `http://127.0.0.1:8880/`。 `manifest.json` 中 H5 配置如下: ```json { "h5": { "publicPath": "/zs/", "router": { "base": "/zs/", "mode": "hash" } } } ``` 因此 H5 部署时默认基础路径是 `/zs/`。 ## 语音输入与语音转文字 新版对语音能力做了 H5 适配增强: - `voice-input.vue` 优先通过 `window` / `navigator` 判断 H5 环境。 - H5 环境使用 `MediaRecorder`。 - `services/api.js` 中的 `audioToText` 对 H5 / Blob URL 使用 `fetch + FormData` 上传。 - 根据 Blob MIME 类型推断音频后缀,例如 `webm`、`mp4`。 - `voice-service.js` 增强了语音转文字响应解析,兼容 `text`、`data.text`、`result`、`content` 等返回结构。 ## 本地运行 ### 方式一:HBuilderX 运行 这是当前项目最直接的运行方式: 1. 使用 HBuilderX 打开项目根目录。 2. 选择“运行到浏览器”或“运行到小程序模拟器”。 3. 如需 App 运行,按 HBuilderX 的 App 调试流程配置。 ### 方式二:命令行运行 当前仓库根目录已提供 H5 和 Node 后端脚本: ```bash npm run dev:h5 -- --port 8082 npm run dev:server ``` ## 当前注意事项 - 项目已包含 Node 后端代理,生产环境建议通过 Nginx 访问 `/api/`。 - AI 对话依赖外部 Dify API,由 Node 后端转发。 - Dify Token 和豆包 TTS Key 只应配置在服务器 `server/.env`,不要提交到 Git。 - Linux 部署优先参考 `docs/deploy-linux-nginx.md`。 - `manifest.json` 已加入 `.gitignore`,后续本地 AppID 或 H5 配置变更可能不会自动提交。 - `人人过关考评助手/` 是设计原型,不是当前主应用逻辑。 ## 本次重新拉取的更新 本次重新从 Gitee 克隆的最新提交为: ```text 8aba669da00fb8b57a2602cae9118c9b2926b781 ``` 相对上次本地记录的 `f29b7d44b5de6aa10d19bb7cb2e87fb09bd3b932`,主项目更新包括: - 新增提交: - `36b7d3b https和dify对接地址调整` - `0e8260e refactor(voice-chat): 优化多平台语音输入适配与调试日志` - `8aba669 删除不需要在文件` - 新增 `nginx/nginx.conf`,提供 HTTPS、Dify 代理、H5 静态资源和后端接口代理配置。 - `pages/index/index.vue` 引入 `defaultConfig`,并将 Dify API 地址改为 `/api/dify/v1`。 - `components/chencc-difyChat/services/api.js` 优化 H5 音频上传和 `audio-to-text` 调用流程。 - `components/chencc-difyChat/services/voice-service.js` 优化语音转文字结果解析和错误提示。 - `components/chencc-difyChat/voice-input.vue` 优化 H5 平台识别和录音管理器清理逻辑。 - `manifest.json` 更新 AppID,并保持 H5 `/zs/` 路由基础路径。 - `.gitignore` 新增 `manifest.json`。