#@bubblesjs/vue-ai-chart
一个 Vue 3 AI 聊天组件库,提供完整的 AI 对话界面,包括会话列表侧边栏、聊天内容区域和 Markdown 渲染支持。
#特性
- 🤖 AI 聊天界面:完整的 AI 对话 UI 组件
- 📝 Markdown 支持:内置 Markdown 渲染和代码高亮
- 💬 会话管理:支持会话列表和历史记录
- 🎨 可定制:灵活的插槽系统支持自定义布局
- 🔌 易于集成:简单的 API 连接你的 AI 后端
#安装
pnpm
npm
yarn
pnpm add @bubblesjs/vue-ai-chartnpm install @bubblesjs/vue-ai-chartyarn add @bubblesjs/vue-ai-chart#快速开始
#基础用法
<template>
<AiChart
:create-conversation-request="createConversation"
:chart-request="sendMessage"
:conversation-detail-request="getConversationDetail"
/>
</template>
<script setup lang="ts">
import { AiChart } from '@bubblesjs/vue-ai-chart'
import '@bubblesjs/vue-ai-chart/style.css'
// 创建新会话
const createConversation = async () => {
const response = await fetch('/api/conversations', { method: 'POST' })
return response.json()
}
// 发送消息给 AI
const sendMessage = async (conversationId, message) => {
const response = await fetch(`/api/chat/${conversationId}`, {
method: 'POST',
body: JSON.stringify({ message })
})
return response.json()
}
// 获取会话历史
const getConversationDetail = async (conversationId) => {
const response = await fetch(`/api/conversations/${conversationId}`)
return response.json()
}
</script>#带会话侧边栏
<template>
<AiChart
:is-conversation-list="true"
:conversation-list="conversations"
:create-conversation-request="createConversation"
:chart-request="sendMessage"
:conversation-detail-request="getConversationDetail"
sidebar-width="280px"
/>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { AiChart } from '@bubblesjs/vue-ai-chart'
import '@bubblesjs/vue-ai-chart/style.css'
const conversations = ref([
{ id: '1', title: '对话 1', createdAt: '2024-01-01' },
{ id: '2', title: '对话 2', createdAt: '2024-01-02' }
])
</script>#组件
#AiChart
主聊天组件,整合侧边栏和聊天内容区域。
#Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
isInitChartInputCenter | boolean | true | 聊天为空时输入框居中显示 |
isConversationList | boolean | false | 是否显示会话侧边栏 |
sidebarWidth | string | - | 侧边栏宽度 |
conversationList | Array | - | 会话列表 |
createConversationRequest | Function | 必填 | 创建新会话的函数 |
chartRequest | Function | 必填 | 发送消息的函数 |
conversationDetailRequest | Function | 必填 | 获取会话详情的函数 |
recommendsOption | Object | - | 推荐问题配置 |
markdownCodeRenderConfig | Object | - | Markdown 代码渲染配置 |
chartLogoComponent | Component | - | 自定义 Logo 组件 |
chartInputLayout | string | - | 输入框布局配置 |
#AiMarkdown
独立的 Markdown 渲染组件。
<template>
<AiMarkdown :content="markdownContent" />
</template>
<script setup lang="ts">
import { AiMarkdown } from '@bubblesjs/vue-ai-chart'
const markdownContent = `
# Hello World
这是 **粗体** 和 *斜体* 文本。
\`\`\`javascript
console.log('Hello!')
\`\`\`
`
</script>#AiChartModal
AI 聊天组件的弹窗包装器。
<template>
<AiChartModal v-model:visible="showModal">
<!-- 聊天内容 -->
</AiChartModal>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { AiChartModal } from '@bubblesjs/vue-ai-chart'
const showModal = ref(false)
</script>#类型定义
// 聊天请求类型
interface ChartRequestType {
conversationId: string
message: string
}
// 会话项
interface ConversationItem {
id: string
title: string
createdAt: string
}#自定义
#自定义侧边栏插槽
<template>
<AiChart
:is-conversation-list="true"
:conversation-list="conversations"
:create-conversation-request="createConversation"
:chart-request="sendMessage"
:conversation-detail-request="getConversationDetail"
>
<template #sidebar-header>
<div class="custom-header">我的 AI 助手</div>
</template>
<template #sidebar-footer>
<div class="custom-footer">由 AI 驱动</div>
</template>
</AiChart>
</template>#依赖
此组件依赖:
- Element Plus 用于 UI 组件
- Swiper 用于轮播功能
- dayjs 用于日期格式化