Vue3接入AI大模型,代码块显示空白?一招解决语法高亮失效问题!

192 阅读2分钟

在Vue3项目中集成AI大模型时,我发现返回结果的代码块内容无法显示——页面留白但无报错。排查发现是AI返回的代码块缺少语言类型标识(如```js),导致markdown解析器无法触发语法高亮。通过以下方案即可快速解决:

🔍 问题复现场景

当AI返回如下未指定语言类型的markdown内容时:

image-20250613140617128.png

image-20250613140556951.png

⚙️ 根本原因分析

Vue3常用的markdown解析器(如marked + highlight.js)依赖三个要素实现代码高亮:

  1. 有效的代码块标记(`````)
  2. 明确的语言类型标识(如jspython
  3. 已注册的语言高亮规则

AI返回的代码块若缺失语言类型标识,解析器会直接跳过渲染流程,造成内容“静默消失”。

🛠️ 解决方案:强制指定默认语言

在初始化语法高亮库时,设置plaintext为默认语言类型(兼容无标识的代码块):

image-20250613142332833.png

✅ 效果对比

场景渲染结果
未处理前(缺语言标识)空白区块(内容丢失)
配置plaintext代码块以纯文本形式正确显示

优化后页面效果: image-20250613143218928.png 虽然无语法高亮,但内容完整可读,避免了信息丢失。


💡 扩展优化建议

  1. AI提示词调整: 在请求AI时添加提示,要求返回代码块时附带语言类型(如:"请用```js包裹JavaScript代码")

  2. 智能语言检测: 用highlight.jshighlightAuto加强自动识别:

    javascript复制代码

    hljs.highlightAuto(code, ['js','ts','python']).value // 限定常见语言范围
    
  3. 组件级兜底处理: 在渲染组件中增加空值保护:

    vue复制代码

    <template>
      <div v-html="parsedContent || '无内容'" />
    </template>
    

经验提示:该问题常见于动态生成markdown的场景(如AI对话、富文本编辑),需特别注意内容协议的完整性。