123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- "use strict";
- const common_vendor = require("../../common/vendor.js");
- const _sfc_main = {
- data() {
- return {
- messages: [],
- isRecording: false,
- recorderManager: null,
- innerAudioContext: null,
- scrollTop: 0,
- apiUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
- };
- },
- onLoad() {
- this.recorderManager = common_vendor.index.getRecorderManager();
- this.innerAudioContext = common_vendor.index.createInnerAudioContext();
- this.recorderManager.onStop((res) => {
- this.processAudio(res.tempFilePath);
- });
- },
- methods: {
- startRecording() {
- this.isRecording = true;
- this.recorderManager.start({
- format: "mp3",
- sampleRate: 16e3,
- numberOfChannels: 1
- });
- },
- stopRecording() {
- this.isRecording = false;
- this.recorderManager.stop();
- },
- processAudio(filePath) {
- common_vendor.index.showLoading({
- title: "处理中..."
- });
- this.speechToText(filePath).then((text) => {
- this.addMessage("user", text);
- this.callDashScopeAPI(text);
- }).catch((err) => {
- common_vendor.index.hideLoading();
- common_vendor.index.showToast({
- title: "语音识别失败",
- icon: "none"
- });
- console.error(err);
- });
- },
- speechToText(filePath) {
- return new Promise((resolve) => {
- console.log("录音文件路径:", filePath);
- setTimeout(() => {
- resolve("你好,我需要帮助");
- }, 500);
- });
- },
- callDashScopeAPI(userInput) {
- const requestBody = {
- model: "qwen-plus",
- messages: [
- {
- role: "system",
- content: "You are a helpful assistant."
- },
- {
- role: "user",
- content: userInput
- }
- ]
- };
- common_vendor.index.request({
- url: this.apiUrl,
- method: "POST",
- header: {
- "Content-Type": "application/json",
- "Authorization": "Bearer YOUR_API_KEY"
- // 替换为您的API密钥
- },
- data: requestBody,
- success: (res) => {
- common_vendor.index.hideLoading();
- if (res.statusCode === 200 && res.data && res.data.choices && res.data.choices.length > 0) {
- const assistantMessage = res.data.choices[0].message.content;
- this.addMessage("assistant", assistantMessage);
- this.textToSpeech(assistantMessage);
- } else {
- common_vendor.index.showToast({
- title: "获取回复失败",
- icon: "none"
- });
- console.error("API响应错误:", res);
- }
- },
- fail: (err) => {
- common_vendor.index.hideLoading();
- common_vendor.index.showToast({
- title: "网络请求失败",
- icon: "none"
- });
- console.error(err);
- }
- });
- },
- addMessage(role, content) {
- this.messages.push({ role, content });
- this.$nextTick(() => {
- this.scrollTop = 9999;
- });
- },
- textToSpeech(text) {
- common_vendor.index.request({
- url: "您的文本转语音服务URL",
- method: "POST",
- data: { text },
- success: (res) => {
- if (res.statusCode === 200 && res.data && res.data.audio_url) {
- this.innerAudioContext.src = res.data.audio_url;
- this.innerAudioContext.play();
- }
- }
- });
- }
- }
- };
- function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
- return {
- a: common_vendor.f($data.messages, (message, index, i0) => {
- return {
- a: common_vendor.t(message.content),
- b: index,
- c: common_vendor.n(message.role)
- };
- }),
- b: $data.scrollTop,
- c: common_vendor.t($data.isRecording ? "松开结束" : "按住说话"),
- d: $data.isRecording ? 1 : "",
- e: common_vendor.o((...args) => $options.startRecording && $options.startRecording(...args)),
- f: common_vendor.o((...args) => $options.stopRecording && $options.stopRecording(...args))
- };
- }
- const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
- wx.createPage(MiniProgramPage);
|