# Voice2order **Repository Path**: ws066/voice2order ## Basic Information - **Project Name**: Voice2order - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-08 - **Last Updated**: 2026-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Voice2Txt Voice2Txt 是一个语音下单系统 MVP,基于需求文档生成了前后端分离工程。当前版本已经能跑通 ToC 端录音转文字、Agent 解析 SKU 与数量、订单预览、确认下单、2 分钟内撤销、商家确认、改价、完成、售后和操作日志。 ## 目录结构 ```text Voice2Txt/ UserStory/required.md # 需求文档 backend/ # Spring Boot 后端 frontend/ # Vue 3 + Ant Design Vue 前端 toc-uniappx/ # ToC uni-app x 项目 scripts/ # Windows 启动脚本 ``` ## 技术栈 - 后端:Java 17、Spring Boot 3.3、Spring Web、Validation、Actuator - 前端:Vue 3、Vite、TypeScript、Ant Design Vue、Pinia、Axios - ToC 端:uni-app x、UVue、UTS - 当前数据:内存数据,启动后自动生成演示 SKU ## 已实现功能 ### C 端 - ToC 端类微信按住说话、松开发送、上滑取消 - 对接第三方语音转文字接口并将识别文本回填输入框 - 将文本和语音内容发送到后端 Agent 代理解析 SKU 与数量 - 保留文字输入模拟识别,方便联调和兜底 - 语音文本标准化 - SKU 与数量解析 - 订单预览与价格计算 - 创建订单 - 2 分钟内撤销订单 ### ToB 后台 - 工作台统计 - SKU 列表、新增、编辑、上下架 - 订单列表、明细、状态流转 - 商家确认订单 - 商家改价 - 订单完成与售后 - 语音识别记录 - 识别成功记录可在后台直接下单 - 操作日志 ## 启动方式 ### 1. 启动后端 ```powershell cd G:\AIPro\Voice2Txt\backend mvn spring-boot:run ``` 后端地址: ```text http://localhost:8080 ``` 健康检查: ```text http://localhost:8080/actuator/health ``` ### 2. 启动前端 PowerShell 当前策略可能会拦截 `npm.ps1`,建议使用 `npm.cmd`。 ```powershell cd G:\AIPro\Voice2Txt\frontend npm.cmd install npm.cmd run dev ``` 前端地址: ```text http://localhost:5173 ``` ### 3. 运行 ToC uni-app x 使用 HBuilderX 打开: ```text G:\AIPro\Voice2Txt\toc-uniappx ``` 先启动后端,再在 HBuilderX 中选择运行到浏览器、Android 设备或小程序模拟器。真机运行时 [common/config.uts](G:\AIPro\Voice2Txt\toc-uniappx\common\config.uts) 需要使用电脑局域网 IP,当前已配置为 `http://192.168.3.4:8080/api`。 ### 4. 使用启动脚本 ```powershell cd G:\AIPro\Voice2Txt .\scripts\start-backend.ps1 .\scripts\start-frontend.ps1 ``` ## 演示流程 1. 打开前端 `http://localhost:5173`。 2. 进入“C 端下单”。 3. 使用示例文本:“我要 2 箱椰子水,再来 3 盒燕麦奶,送到上次地址”。 4. 点击“识别并解析”。 5. 检查订单预览和价格。 6. 点击“确认下单”。 7. 在“订单管理”中确认订单、改价、完成或进入售后。 8. 在“识别记录”和“操作日志”中查看追踪信息。 ## 常用接口 ```text GET /api/b/dashboard GET /api/b/skus POST /api/b/skus PUT /api/b/skus/{id} POST /api/c/voice/upload POST /api/c/voice/recognize POST /api/c/voice/transcribe POST /api/c/order/preview POST /api/c/order POST /api/c/order/{id}/cancel GET /api/b/orders POST /api/b/orders/{id}/confirm POST /api/b/orders/{id}/adjust-price POST /api/b/orders/{id}/complete POST /api/b/orders/{id}/after-sale GET /api/b/voice-records POST /api/b/voice-records/{id}/order GET /api/b/operation-logs ``` ## 验证命令 ```powershell cd G:\AIPro\Voice2Txt\backend mvn test cd G:\AIPro\Voice2Txt\frontend npm.cmd run build ``` ## 第三方语音转文字配置 ToC 端录音文件会先上传到后端代理接口 `POST /api/c/voice/transcribe`,由后端转发到第三方语音转文字服务,避免在客户端暴露密钥。默认未启用,配置示例: ```yaml voice2txt: speech: enabled: true endpoint: 'https://speech-provider.example.com/v1/transcriptions' auth-header: Authorization auth-value: 'Bearer ' file-field: file language: zh-CN text-json-path: text ``` 第三方响应如果是 JSON,`text-json-path` 用点号路径提取识别文本,例如 `data.text`;如果响应体本身就是纯文本,也可以直接使用。 ## Agent 解析配置 用户点击“识别并解析”后,ToC 端会把文本和录音文件一起上传到 `POST /api/c/voice/recognize`。后端优先请求 Agent 代理解析 SKU 与数量,未配置或调用失败时自动退回本地 SKU 解析。 ```yaml voice2txt: agent: enabled: true proxy-url: 'https://agent-proxy.example.com/voice-order/parse' api-key: '' api-key-header: X-API-Key ``` 后端发送给 Agent 的 JSON 包含 `text`、`audio` 和当前可售 `skus`。Agent 响应建议返回: ```json { "normalizedText": "我要 2 箱椰子水,再来 3 盒燕麦奶", "remark": "送到上次地址", "items": [ { "skuId": "SKU_ID", "quantity": 2, "unit": "箱", "confidence": 0.98 } ] } ``` `items` 也支持用 `skuCode` 或 `skuName` 匹配已有 SKU。 ## 后续建议 1. 将内存数据替换为 MyBatis + MySQL。 2. 引入 Redis 实现订单撤销窗口、库存预占和幂等控制。 3. 增加登录鉴权、后台角色权限和接口权限控制。 4. 将单服务拆分为 sku-service、voice-service、order-service 等 Spring Cloud 服务。 5. 补充单元测试、接口测试和端到端测试。