【微信小程序变通实现DeepSeek支持语音】

news/2025/3/21 6:32:15/

小程序>微信小程序实现录音转文字,并调用后端服务(Node.js)进行语音识别和,然后调用DeepSeek 处理的完整实现。

整体架构

  1. 前端(小程序>微信小程序):
    • 实现录音功能。
    • 将录音文件上传到后端。
    • 接收后端返回的语音识别结果,并显示在可编辑的文本框中。
    • 调用 DeepSeek 处理文本。
  2. 后端(Node.js):
    • 接收小程序上传的录音文件。
    • 调用腾讯云语音识别(ASR)服务,将语音转换为文字。
    • 返回识别结果给小程序
    • 提供 DeepSeek 处理接口。

步骤 1:后端开发(Node.js)

1. 项目结构

复制

backend/
├── server.js            # 主入口文件
├── config.js            # 配置文件
├── asrService.js        # 腾讯云语音识别服务
├── deepseekService.js   # DeepSeek 处理服务
└── package.json         # 依赖文件
2. 安装依赖

bash

复制

npm install express multer tencentcloud-sdk-nodejs axios
3. 配置文件 (config.js)

javascript

复制

module.exports = {tencentCloud: {secretId: 'your-tencent-secret-id', // 腾讯云 SecretIdsecretKey: 'your-tencent-secret-key', // 腾讯云 SecretKeyregion: 'ap-guangzhou' // 腾讯云区域},deepseek: {apiKey: 'your-deepseek-api-key', // DeepSeek API 密钥apiUrl: 'https://api.deepseek.com/v1/chat/completions' // DeepSeek API 地址}
};
4. 腾讯云语音识别服务 (asrService.js)

javascript

复制

const tencentcloud = require('tencentcloud-sdk-nodejs');
const AsrClient = tencentcloud.asr.v20190614.Client;
const { tencentCloud } = require('./config');const client = new AsrClient({credential: {secretId: tencentCloud.secretId,secretKey: tencentCloud.secretKey,},region: tencentCloud.region,profile: {httpProfile: {endpoint: 'asr.tencentcloudapi.com',},},
});/*** 调用腾讯云语音识别* @param {string} audioBase64 - 音频文件的 base64 数据* @returns {Promise<string>} - 识别结果*/
async function recognizeAudio(audioBase64) {const params = {EngineModelType: '16k_zh', // 16k 中文普通话VoiceFormat: 'wav',        // 音频格式Data: audioBase64          // 音频数据};const response = await client.SentenceRecognition(params);return response.Result;
}module.exports = { recognizeAudio };
5. DeepSeek 处理服务 (deepseekService.js)

javascript

复制

const axios = require('axios');
const { deepseek } = require('./config');/*** 调用 DeepSeek 处理文本* @param {string} text - 需要处理的文本* @returns {Promise<string>} - 处理结果*/
async function processText(text) {const response = await axios.post(deepseek.apiUrl,{model: 'deepseek-chat',messages: [{ role: 'system', content: '你是一个文本处理助手。' },{ role: 'user', content: text }]},{headers: {'Content-Type': 'application/json','Authorization': `Bearer ${deepseek.apiKey}`}});return response.data.choices[0].message.content;
}module.exports = { processText };
6. 主入口文件 (server.js)

javascript

复制

const express = require('express');
const multer = require('multer');
const { recognizeAudio } = require('./asrService');
const { processText } = require('./deepseekService');
const path = require('path');const app = express();
const upload = multer({ dest: 'uploads/' }); // 临时存储上传文件// 语音识别接口
app.post('/api/recognize', upload.single('audio'), async (req, res) => {try {const filePath = req.file.path;const fileData = require('fs').readFileSync(filePath, { encoding: 'base64' });const result = await recognizeAudio(fileData);res.json({ success: true, data: result });} catch (error) {res.status(500).json({ success: false, message: error.message });}
});// DeepSeek 处理接口
app.post('/api/process', express.json(), async (req, res) => {try {const { text } = req.body;const result = await processText(text);res.json({ success: true, data: result });} catch (error) {res.status(500).json({ success: false, message: error.message });}
});// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});

步骤 2:前端开发(小程序>微信小程序

1. 项目结构

复制

miniprogram/
├── pages/
│   ├── index/
│   │   ├── index.js       # 页面逻辑
│   │   ├── index.wxml     # 页面结构
│   │   └── index.wxss     # 页面样式
├── app.js                 # 小程序逻辑
├── app.json               # 小程序配置
└── app.wxss               # 全局样式
2. 页面逻辑 (index.js)

javascript

复制

const app = getApp();Page({data: {isRecording: false,      // 是否正在录音recordTime: 0,           // 录音时长resultText: '',          // 识别结果editedText: '',          // 编辑后的文本isLoading: false         // 加载状态},// 开始录音startRecord() {this.setData({ isRecording: true, recordTime: 0 });this.recorderManager = wx.getRecorderManager();this.recorderManager.start({format: 'wav',         // 录音格式sampleRate: 16000,     // 采样率numberOfChannels: 1,   // 声道数encodeBitRate: 48000   // 编码码率});this.timer = setInterval(() => {this.setData({ recordTime: this.data.recordTime + 1 });}, 1000);this.recorderManager.onStop((res) => {clearInterval(this.timer);this.setData({ isRecording: false });this.uploadAudio(res.tempFilePath); // 上传录音文件});},// 停止录音stopRecord() {if (this.recorderManager) {this.recorderManager.stop();}},// 上传录音文件uploadAudio(filePath) {this.setData({ isLoading: true });wx.uploadFile({url: 'http://localhost:3000/api/recognize', // 后端语音识别接口filePath: filePath,name: 'audio',success: (res) => {const result = JSON.parse(res.data);if (result.success) {this.setData({ resultText: result.data, editedText: result.data });} else {wx.showToast({ title: '识别失败', icon: 'none' });}},fail: (err) => {wx.showToast({ title: '上传失败', icon: 'none' });},complete: () => {this.setData({ isLoading: false });}});},// 编辑文本handleEditText(e) {this.setData({ editedText: e.detail.value });},// 调用 DeepSeek 处理文本processText() {const { editedText } = this.data;if (!editedText) {wx.showToast({ title: '请输入文本', icon: 'none' });return;}this.setData({ isLoading: true });wx.request({url: 'http://localhost:3000/api/process', // 后端 DeepSeek 处理接口method: 'POST',data: { text: editedText },success: (res) => {if (res.data.success) {this.setData({ resultText: res.data.data });} else {wx.showToast({ title: '处理失败', icon: 'none' });}},fail: (err) => {wx.showToast({ title: '网络错误', icon: 'none' });},complete: () => {this.setData({ isLoading: false });}});}
});
3. 页面结构 (index.wxml)

xml

复制

<view class="container"><!-- 录音按钮 --><view class="record-button"><buttonbindtap="{{isRecording ? 'stopRecord' : 'startRecord'}}"class="{{isRecording ? 'stop-button' : 'start-button'}}">{{isRecording ? '停止录音' : '开始录音'}}</button><text class="record-time" wx:if="{{isRecording}}">{{recordTime}}s</text></view><!-- 识别结果 --><view class="result-box"><text class="result-title">识别结果:</text><textareavalue="{{editedText}}"bindinput="handleEditText"placeholder="识别结果将显示在这里"class="result-text"></textarea></view><!-- 处理按钮 --><button bindtap="processText" class="process-button">调用 DeepSeek 处理</button><!-- 处理结果 --><view class="result-box"><text class="result-title">处理结果:</text><textareavalue="{{resultText}}"placeholder="处理结果将显示在这里"disabledclass="result-text"></textarea></view><!-- 加载状态 --><view class="loading" wx:if="{{isLoading}}"><text>处理中...</text></view>
</view>

运行 HTML

4. 页面样式 (index.wxss)

css

复制

.container {padding: 20px;display: flex;flex-direction: column;align-items: center;
}.record-button {display: flex;flex-direction: column;align-items: center;margin-bottom: 20px;
}.start-button {background-color: #07c160;color: white;
}.stop-button {background-color: #f5222d;color: white;
}.record-time {margin-top: 10px;font-size: 14px;color: #666;
}.result-box {width: 100%;margin-top: 20px;
}.result-title {font-size: 16px;font-weight: bold;margin-bottom: 10px;
}.result-text {width: 100%;height: 100px;border: 1px solid #ccc;border-radius: 5px;padding: 10px;font-size: 14px;
}.process-button {margin-top: 20px;background-color: #1890ff;color: white;
}.loading {margin-top: 20px;font-size: 14px;color: #666;
}
5. 小程序配置 (app.json)

json

复制

{"pages": ["pages/index/index"],"window": {"navigationBarTitleText": "录音转文字","navigationBarBackgroundColor": "#07c160","navigationBarTextStyle": "white"}
}

步骤 3:测试

  1. 启动后端服务:

    bash

    复制

    node server.js
    
  2. 在微信开发者工具中运行小程序

  3. 测试录音、语音识别、文本编辑和 DeepSeek 处理功能。


注意事项

  1. 后端部署:
    • 将后端服务部署到云服务器(如腾讯云、阿里云),并配置 HTTPS。
  2. API 密钥安全:
    • 不要将 API 密钥暴露在前端代码中。
  3. 录音权限:

http://www.ppmy.cn/news/1580799.html

相关文章

STC89C52单片机学习——第28节: [12-2] AT24C02数据存储秒表(定时器扫描按键数码管)

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.03.20 51单片机学习——第28节: [12-2] AT24C02数据存储&秒表&#xff08;定时器扫…

亚马逊Prime Day新算法曝光,2025年流量分配机制大调整

亚马逊Prime Day新算法曝光&#xff0c;2025年流量分配机制大调整 亚马逊调整流量分配规则&#xff0c;影响卖家竞争格局 近日&#xff0c;亚马逊内部泄露的一份文件引发了全球跨境电商卖家的广泛关注。据悉&#xff0c;这份文件披露了亚马逊即将在2025年Prime Day正式启用的新…

DRAMiTransformer:空间与通道注意力融合的高效视觉变换块

DRAMiTransformer&#xff1a;空间与通道注意力融合的高效视觉变换块 随着深度学习在计算机视觉领域的快速发展&#xff0c;自注意力机制&#xff08;Self-Attention&#xff09;逐渐成为各种任务的核心组件。然而&#xff0c;传统自注意力机制往往需要较高的计算成本&#xf…

数据采集技术之python网络爬虫(中国天气网的爬取)

一、爬取中国天气网所有地区当天的天气数据&#xff08;PyCharm&#xff09;&#xff1a; 网址&#xff1a;https://www.weather.com.cn/ 下面爬取数据&#xff1a; 因为现在已经到了夜间&#xff0c;所以白天的数据已经不见了&#xff0c;但原理是一样的。 二、代码以及详情…

HarmonyOS Next~HarmonyOS应用开发工具:DevEco Testing

HarmonyOS应用开发工具&#xff1a;DevEco Testing ​ 随着HarmonyOS生态的快速发展&#xff0c;开发者对高效、稳定的应用开发工具需求日益增长。作为HarmonyOS应用开发工具链中的重要组成部分&#xff0c;DevEco Testing凭借其全面的测试能力和智能化特性&#xff0c;成为保…

PLC控制柜在技术创新驱动中功能演进 尤劲恩科技

在智能制造体系中&#xff0c;PLC控制柜不仅承担着传统设备控制的基础功能&#xff0c;更通过工业以太网、PROFIBUS等现场总线技术&#xff0c;构建起分布式控制系统&#xff08;DCS&#xff09;。这种拓扑结构使生产线具备实时数据采集、远程监控和智能决策能力&#xff0c;显…

selenium之基础整理

安装步骤 1&#xff0c;在pycharm中下载selenium库&#xff1a;pip install selenium 2&#xff0c;把下载的chromedriver.exe驱动解压放到python根目录下&#xff08;如果没有检测到该驱动&#xff0c;可以把将chromedriver.exe配置到环境变量path中&#xff09; &#xff08;…

C# 资源管理‌(using 语句)

using不得不知的使用特点&#xff0c;用好了 大大地提高工作效率&#xff01; 一、using 语句&#xff08;资源管理&#xff09;‌‌二、using 语句的应用场景‌‌三、using 语句的底层实现‌‌四、using 声明&#xff08;C# 8.0 新特性&#xff09;‌‌五、using 指令&#xf…