典籍指数问答模块回答格式修改

1.目标:将AI回答变为类似网上AI一样<think>部分可收缩且显示灰色

2.代码实现:

消息内容渲染部分:

 <div v-if="hasThinkContent(msg.content)" class="think-container">
      <div 
        class="think-toggle"
        @click="toggleThink(msg.id)"
      >
        {{ showThink[msg.id] ? '▲ 隐藏思考过程' : '▼ 显示AI思考过程' }}
      </div>
      <div 
        v-if="showThink[msg.id]"
        class="think-content"
        v-html="formatThinkContent(msg.content)"
      ></div>
    </div>
    
    <!-- 显示正式回答 -->
    <div class="ai-answer">
      {{ extractFinalAnswer(msg.content) }}
    </div>
  </template>

在script部分添加:

// 新增响应式状态
const showThink = ref({})

// 新增工具方法
const hasThinkContent = (content) => {
  return /<think>/.test(content)
}

const extractFinalAnswer = (content) => {
  return content.replace(/<think>[\s\S]*<\/think>/, '').trim()
}

const formatThinkContent = (content) => {
  const match = content.match(/<think>([\s\S]*)<\/think>/)
  if (match) {
    return match[1]
      .replace(/\n/g, '<br>')
      .replace(/ {2}/g, '&nbsp;&nbsp;')
  }
  return ''
}

const toggleThink = (msgId) => {
  showThink.value[msgId] = !showThink.value[msgId]
}

添加样式:

.think-container {
  margin-bottom: 8px;
  border-radius: 4px;
  overflow: hidden;
}

.think-toggle {
  font-size: 12px;
  color: #666;
  background-color: #f5f5f7;
  padding: 4px 8px;
  cursor: pointer;
  user-select: none;
  transition: background-color 0.2s;
}

.think-toggle:hover {
  background-color: #ebebed;
}

.think-content {
  font-size: 12px;
  color: #666;
  background-color: #f8f9fa;
  padding: 8px 12px;
  line-height: 1.5;
  border-left: 3px solid #e0e0e0;
  white-space: pre-wrap;
}

.ai-answer {
  font-size: 14px;
  line-height: 1.6;
  color: #333;
  white-space: pre-wrap;
}

3.效果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值