一个提供基于 MCP(模型上下文协议)工具的 AI 聊天界面的 Nuxt 模块。
主要功能:

Movk Nuxt Docs 已内置 AI Chat 模块。要启用该模块,请在 nuxt.config.ts 中进行配置:
nuxt.config.ts 中添加模块:export default defineNuxtConfig({
aiChat: {
apiPath: '/api/ai-chat',
mcpPath: '/mcp',
model: 'openai/gpt-5-nano',
models: [
'openai/gpt-5-nano',
'anthropic/claude-haiku-4.5',
'google/gemini-2.5-flash',
'openrouter/anthropic/claude-haiku-4.5',
'openrouter/openai/gpt-5-nano',
],
}
})
模块配置选项:
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
apiPath | string | /api/ai-chat | 聊天 API 端点路径 |
mcpPath | string | /mcp | MCP 服务器连接路径 |
model | string | - | AI SDK Gateway、OpenRouter 的模型标识符 |
models | string[] | [] | 可用模型列表(格式为 "provider/model" 或 "model") |
# Using AI SDK Gateway
AI_GATEWAY_API_KEY=your-gateway-key
# Or using OpenRouter directly
OPENROUTER_API_KEY=your-openrouter-key
您可以选择手动安装该模块:
modules/ai-chat 文件夹复制到你的 Nuxt 项目中pnpm add @ai-sdk/mcp @ai-sdk/vue @ai-sdk/gateway @openrouter/ai-sdk-provider ai motion-v shiki shiki-stream
将组件添加到你的应用中:
<template>
<div>
<!-- 打开聊天的按钮 -->
<AiChat tooltip-text="向 AI 提问" />
<!-- 聊天侧滑面板(在应用或布局中放置一次即可) -->
<AiChatSlideover
title="AI 助手"
placeholder="输入你的问题..."
:faq-questions="faqQuestions"
/>
</div>
</template>
<script setup>
const faqQuestions = [
{
category: '快速开始',
items: ['如何安装?', '如何配置?'],
},
{
category: '进阶使用',
items: ['如何自定义?'],
},
]
</script>
使用 AiChatFloatingInput 在页面底部显示一个浮动输入框。
Teleport 将浮动输入渲染到 body 级别,确保它无论在组件层次结构中如何变化都能固定在底部<template>
<div>
<!-- Teleport to body for proper fixed positioning -->
<Teleport to="body">
<ClientOnly>
<LazyAiChatFloatingInput />
</ClientOnly>
</Teleport>
<!-- Chat slideover (required to display responses) -->
<AiChatSlideover title="AI 助手" />
</div>
</template>
使用 useAIChat 组合式函数来控制聊天:
<script setup>
const { open, close, toggle, isOpen, messages, clearMessages } = useAIChat()
// 打开聊天并发送初始消息
open('如何安装这个模块?')
// 打开聊天并清除之前的消息
open('新问题', true)
// 切换聊天可见性
toggle()
// 清除所有消息
clearMessages()
</script>
最简单的集成方式,展示助手按钮。
| Prop | Default | Type |
|---|---|---|
tooltipText | '向 AI 提问' | string鼠标悬停时的提示文本 |
浮动输入框,位于视口下方。无需任何属性。
键盘快捷键:
⌘I / Ctrl+I - 聚焦输入框Escape - 失焦输入框Enter - 提交问题Teleport 和 ClientOnly 包裹以确保正确渲染。在聊天中显示 MCP 工具调用。
| Prop | Default | Type |
|---|---|---|
text | string工具调用的标签文本 | |
isLoading | false | boolean为 true 时显示加载旋转圈 |
模型选择下拉菜单,用于切换 AI 模型。无需任何属性。
nuxt.config.ts 中配置的 models 列表,并使用 useModels 组合式函数管理模型状态。显示 AI 思考过程的可折叠组件。
| Prop | Default | Type |
|---|---|---|
text | string工具调用的标签文本 | |
isStreaming | false | boolean是否正在流式接收思考内容 |
显示聊天为空时的常见问题分类。
| Prop | Default | Type |
|---|---|---|
faqQuestions | FaqCategory[]聊天为空时显示的常见问题分类 |
interface FaqCategory {
category: string
items: string[]
}
完整的侧边栏对话界面。
| Prop | Default | Type |
|---|---|---|
title | 'AI 助手' | string标题栏显示的标题 |
description | ' ' | string标题栏显示的描述 |
placeholder | '输入你的问题...' | string输入框占位符文本 |
faqQuestions | [] | FaqCategory[]聊天为空时显示的常见问题分类 |
用于流式渲染代码块的组件,集成 Shiki 语法高亮。
ProsePre 组件样式| Prop | Default | Type |
|---|---|---|
code | string要高亮显示的代码内容 | |
language | string代码语言(如 'vue'、'javascript'、'typescript') | |
meta | string代码块元数据 |
useAIChat()对话状态管理,提供聊天界面的状态控制和消息管理功能。
false。useModels()模型配置管理,控制可用的 AI 模型列表和当前选中的模型。
nuxt.config.ts 的 aiChat.models 配置读取。openrouter/mistralai/devstral-2512:free。useHighlighter()异步加载 Shiki 代码高亮器实例,用于代码块的语法高亮渲染。
返回一个 Promise,resolve 为配置好的 Shiki Highlighter 实例。
vue, js, ts, css, html, json, yaml, markdown, bash支持的主题:material-theme-palenight(深色模式)material-theme-lighter(浅色模式)const highlighter = await useHighlighter()
// 使用示例
const html = highlighter.codeToHtml(code, {
lang: 'typescript',
theme: 'material-theme-palenight'
})
要自定义 AI 的行为,请创建编辑以下文件中的系统提示词:
server/api/ai-chat.ts
组件使用 Nuxt UI 和 Tailwind CSS 设计令牌。你可以通过修改组件文件或覆盖 UI 属性来自定义外观。
{
"@ai-sdk/gateway": "^3.0.5",
"@ai-sdk/mcp": "^1.0.2",
"@ai-sdk/vue": "^3.0.6",
"@openrouter/ai-sdk-provider": "^1.5.4",
"ai": "^6.0.6",
"motion-v": "^1.7.4",
"shiki": "^3.20.0",
"shiki-stream": "^0.1.2"
}