news 2026/6/13 13:10:34

AI问诊助手开发经验总结:语音转文字与 Markdown 渲染实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI问诊助手开发经验总结:语音转文字与 Markdown 渲染实战

项目背景

在医疗信息系统的前端项目中,我们需要为 AI 助手模块实现语音交互和富文本展示功能。本文将重点分享语音转文字Markdown 渲染两个核心功能的实现经验。


一、语音转文字功能实现

1.1 技术选型

经过调研对比,最终选择recorder-core作为录音库:

方案优点缺点
原生 MediaRecorder零依赖不支持 MP3,格式受限
recorder-core支持多种格式,轻量需要额外加载编码器
Web Audio API高度可控复杂度高

1.2 核心实现

1.2.1 初始化配置
importRecorderfrom"recorder-core";import"recorder-core/src/engine/mp3";import"recorder-core/src/engine/mp3-engine";// 创建录音实例this.recorder=Recorder({type:"mp3",// 输出格式sampleRate:16000,// 采样率bitRate:128,// 比特率});
1.2.2 录音流程控制

录音功能需要严格遵循open → start → stop的调用顺序:

// 打开录音设备(必须在用户交互中调用)this.recorder.open(()=>{// 打开成功this.recorder.start();},(msg,isUserNotAllow)=>{// 打开失败(权限问题或设备异常)if(isUserNotAllow){this.$message.error("请在浏览器设置中允许麦克风权限");}});// 停止录音并获取数据this.recorder.stop((blob,duration)=>{// blob 为 MP3 格式的二进制数据this.uploadRecording(blob);});

关键注意事项

  • open()方法是异步的,必须在回调中调用start()
  • 必须在用户交互事件(如点击)中触发,否则浏览器会阻止权限请求
1.2.3 文件上传与接口调用
asyncuploadRecording(mp3Blob){// 构建 FormDataconstformData=newFormData();formData.append("file",mp3Blob,"recording.mp3");// 上传文件constuploadResponse=awaituploadFileApi(formData);constaudioUrl=uploadResponse.data[0].fullUrl;// 调用语音转文字接口constrecognizeResponse=awaitflashRecognizer({audioUrl:audioUrl,chatId:Date.now().toString()});// 将结果显示在输入框this.inputMessage=recognizeResponse.data.text;}

1.3 常见问题与解决方案

问题原因解决方案
start失败:未open调用顺序错误open()回调中调用start()
未加载mp3编码器缺少编码器文件引入mp3-engine模块
录音无声音权限未授予添加权限请求提示

二、Markdown 渲染方案

2.1 方案对比与选择

在实现过程中,我们尝试了三种不同的方案:

方案一:自定义正则解析
formatContent(content){// 处理加粗lethtml=content.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>");// 处理换行html=html.replace(/\n/g,"<br>");// ... 更多规则returnhtml;}

优点:零依赖,轻量
缺点:需要维护大量正则,不支持复杂格式(如表格)

方案二:使用 marked 库
npminstallmarked@4.3.0
import{marked}from"marked";formatContent(content){returnmarked(content);}

问题:Vue2 项目的 webpack 配置不支持 ES Module,导致编译错误

方案三:使用 vue-markdown 组件(最终选择)
npminstallvue-markdown
<template><divclass="ai-content"><vue-markdown:source="content"></vue-markdown></div></template><script>importVueMarkdownfrom"vue-markdown";exportdefault{components:{VueMarkdown},}</script>

优点:专为 Vue 设计,开箱即用,支持完整 Markdown 语法

2.2 样式定制

为了适配项目的 UI 风格,需要对 vue-markdown 生成的标签进行样式覆盖:

.ai-content{line-height:1.8;}/* 标题样式 */.ai-content h1, .ai-content h2, .ai-content h3, .ai-content h4, .ai-content h5, .ai-content h6{margin:2px 0;font-weight:600;}

2.3 支持的 Markdown 格式

语法效果
**加粗**加粗文本
*斜体*斜体文本
- 列表项无序列表
1. 列表项有序列表
---分隔线
|表头||内容|表格
`代码`行内代码

三、功能整合与交互设计

3.1 界面布局

3.2 状态管理

data(){return{chatId:"",// 会话IDmessages:[],// 消息列表inputMessage:"",// 输入内容loading:false,// 发送loadingisRecording:false,// 录音状态recordingLoading:false,// 录音处理loading};}

3.3 交互流程

用户点击录音 → 权限请求 → 开始录音(isRecording=true) ↓ 用户点击停止 → 停止录音 → 上传文件 → 语音转文字 ↓ 结果显示在输入框 → 用户点击发送 → 调用AI接口 ↓ AI回复 → Markdown渲染展示

四、技术总结与最佳实践

4.1 语音转文字要点

  1. 权限处理:必须在用户交互中请求麦克风权限
  2. 异步控制:严格遵循 open → start → stop 的调用顺序
  3. 错误处理:捕获权限拒绝、设备异常等情况
  4. 格式转换:使用 recorder-core 的 MP3 编码器确保兼容性

4.2 Markdown 渲染要点

  1. 方案选择:Vue 项目优先使用 vue-markdown 组件
  2. 样式隔离:使用 scoped CSS 避免全局样式污染
  3. 性能优化:避免在大型文档中频繁更新 Markdown 内容
  4. 安全性:对用户输入的 Markdown 进行 XSS 过滤

关键词:Vue2、语音转文字、Markdown、recorder-core、vue-markdown

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 13:08:58

2026三款顶尖的CMS建站系统对比!选哪个最香?

建站系统怎么选&#xff1f;今天带大家深度对比WordPress、PageAdmin、Drupal三大主流CMS建站系统&#xff0c;看完这篇&#xff0c;保证你不再纠结&#xff01;1、WordPress特点&#xff1a;全球一哥&#xff0c;插件海量生态无敌WordPress堪称建站界的“小白神器”&#xff0…

作者头像 李华
网站建设 2026/6/13 13:07:52

Anthropic新架构:LLM协议栈瘦身与零延迟层解析

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题乍看像科技媒体的夸张头条&#xff0c;但作为在AI基础设施层摸爬滚打十年、亲手部署过上百个LLM服务栈的老兵&a…

作者头像 李华
网站建设 2026/6/13 13:03:02

线上展厅公司评测与选型 | WebGL与云端渲染两大技术路线的服务商对比

模块一&#xff5c;线上展厅行业的两个技术阵营线上展厅在2026年按技术路线大致分为两个阵营——WebGL三维展厅和云端像素流渲染展厅。WebGL方案基于Three.js等轻量级三维引擎&#xff0c;在手机浏览器中直接运行&#xff0c;不需要安装任何App。云端渲染方案将三维场景在云端G…

作者头像 李华
网站建设 2026/6/13 13:01:59

MC9328MX1 LCD与SPI控制器底层编程与调试实战

1. 项目概述&#xff1a;深入MC9328MX1的LCD与SPI控制器编程 在嵌入式系统开发的底层世界里&#xff0c;与硬件直接对话的能力是区分普通应用开发者和资深嵌入式工程师的关键。这种对话&#xff0c;往往是通过读写一系列看似枯燥的寄存器来完成的。今天&#xff0c;我想和你深入…

作者头像 李华
网站建设 2026/6/13 12:59:52

原神高帧率解锁终极指南:3步实现120FPS流畅体验

原神高帧率解锁终极指南&#xff1a;3步实现120FPS流畅体验 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否渴望在原神中享受超越60FPS的丝滑游戏体验&#xff1f;Genshin FPS Unl…

作者头像 李华
网站建设 2026/6/13 12:58:54

免费畅玩Switch游戏:yuzu模拟器终极完整指南

免费畅玩Switch游戏&#xff1a;yuzu模拟器终极完整指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想要在电脑上体验任天堂Switch游戏吗&#xff1f;yuzu模拟器是你的最佳选择&#xff01;作为全球最受欢迎的…

作者头像 李华