关于 Sample Nova Sonic Mcp
Sample Nova Sonic Mcp 是一个基于 AWS Bedrock 的 Nova Sonic 模型应用,支持实时双向音频流。它提供网页界面和命令行模式,集成 MCP 工具系统,支持多语言和多种语音选项。
主要功能
- 01双向实时音频流
- 02Nova Sonic 语音模型
- 03MCP 工具集成
- 04WebSocket 实时通信
- 05多语言支持
- 06音频可视化
适用场景
- 01语音对话应用
- 02多语言语音交互
- 03AI 语音助手
- 04实时音频处理
MCP 相关
该项目是 MCP 客户端,通过 MCP 配置文件集成 MCP 服务器,在语音对话应用中暴露 MCP 工具功能以扩展 AI 能力。
详细介绍
Amazon Nova Sonic 与 MCP
本项目实现了一个基于 WebSocket 的双向音频流应用,集成了 Amazon Nova Sonic 大模型,用于实时语音对话。该应用通过现代化网页界面实现自然的会话交互,同时利用 Amazon 强大的 Nova Sonic 大模型进行响应处理和生成。
English | 中文
项目概述
Amazon Nova Sonic 是 AWS Bedrock 提供的高级语音大模型,能够处理自然人声输入并生成高质量的语音响应。本项目展示了如何构建完整的应用系统,包括:
- 双向实时音频流:支持持续的语音输入和输出,提供自然的会话体验
- 多语言支持:内置双语界面(英文和中文),可轻松切换
- 多种语音选项:支持多种 AI 语音角色(tiffany、matthew、amy 等)
- 工具集成系统:通过 MCP(Model Context Protocol)支持扩展功能
- WebSocket 实时通信:确保低延迟的音频传输和处理
- 响应式网页界面:现代化用户界面,适配不同设备
- 音频可视化:实时音频波形显示,增强用户体验
- 命令行模式支持:能够通过命令行与预录制音频交互
该系统包括处理双向流和 AWS Bedrock 集成的服务器,以及管理音频流和用户交互的现代网页客户端。它支持实时音频流、与 Amazon Nova Sonic 大模型集成、双向通信处理以及具有聊天历史管理功能的响应式网页界面。
使用说明
系统需求
- Node.js(v18.0.0 或更高版本)
- 启用了 Bedrock 访问权限的 AWS 账户
- 配置了适当凭证的 AWS CLI
- 支持 WebAudio API 的现代浏览器
- 用于音频捕获和播放的麦克风和扬声器
依赖项
项目使用以下主要依赖项:
{
"dependencies": {
"@aws-sdk/client-bedrock-runtime": "^3.787.0",
"@aws-sdk/credential-providers": "^3.787.0",
"@modelcontextprotocol/sdk": "^1.9.0",
"@smithy/node-http-handler": "^4.0.4",
"@smithy/types": "^4.2.0",
"axios": "^1.8.4",
"cors": "^2.8.5",
"express": "^4.18.0",
"rxjs": "^7.8.2",
"socket.io": "^4.8.1"
}
}
安装步骤
- 克隆存储库:
git clone <repository-url>
cd aws-nova-sonic-mcp
- 安装依赖项:
npm install
- 配置 AWS 凭证:
# Configure AWS CLI with your credentials
aws configure --profile default
- 编译 TypeScript 代码:
npm run build
快速开始
- 启动服务器:
npm start
- 在浏览器中打开:
http://localhost:3000
-
在提示时授予麦克风权限。
-
点击通话按钮开始对话。

应用加载后,您将看到如上所示的界面。该界面分为以下主要部分:
- 顶部状态栏:显示连接状态和语音角色选择器
- 中央交互区域:大型蓝色圆形音频可视化显示区域
- 底部控制栏:麦克风控制、通话控制和文本显示按钮
配置选项
系统提示词
您可以通过界面上的配置按钮自定义系统提示词。该系统提供多个预设模板,您也可以编写自定义提示词。
// Custom system prompt example
const SYSTEM_PROMPT =
"You are an assistant. The user and you will have a spoken conversation...";
socket.emit("systemPrompt", SYSTEM_PROMPT);
语音配置
支持多种 AI 语音角色,可从用户头像下拉菜单中选择:
// Voice configuration example
socket.emit("voiceConfig", { voiceId: "tiffany" });
语言设置
支持英文和中文界面切换:
// Language setting options
const currentLanguage = "en"; // English, can be set to "zh" for Chinese
updateUITexts(); // Update interface text
MCP 服务配置
通过 mcp_config.json 文件配置 MCP 服务:
{
"mcpServers": {
"github.com/tavily-ai/tavily-mcp": {
"command": "npx",
"args": ["-y", "[email protected]"],
"env": {
"TAVILY_API_KEY": "your-api-key"
},
"disabled": false,
"autoApprove": []
}
}
}
命令行界面(CLI)模式
您可以使用 CLI 模式处理预录制的音频文件:
# Run in CLI mode
npm run cli -- --input=/path/to/audio.wav
故障排除
- 麦克风访问问题
- 问题:浏览器显示"麦克风权限被拒绝"
- 解决方案:
// Check microphone permissions const permissions = await navigator.permissions.query({ name: "microphone" }); if (permissions.state === "denied") { console.error("Microphone access permission required"); // Display instructions to guide users to enable permissions }
- 音频播放问题
-
问题:没有音频输出
-
解决方案:
// Verify if AudioContext is initialized if (audioContext.state === "suspended") { await audioContext.resume(); } // Check audio player if (!audioPlayer.initialized) { await audioPlayer.start(); }
- 连接问题
- 检查服务器日志
- 验证 AWS 凭证配置
- 验证 WebSocket 连接:
socket.on("connect_error", (error) => { console.error("Connection failed:", error); });
- 会话超时问题
- 问题:会话在一段时间不活动后断开连接
- 解决方案:系统具有 5 分钟自动会话清理功能,可以在
server.ts中调整
客户端音频处理
- 使用 WebAudio API 捕获和处理音频
- 16kHz 采样率,单声道 PCM 格式
- 实时音频可视化显示
- 音频中断(Barge-in)支持,允许用户随时打断 AI 回复
服务器端音频处理
- 使用 HTTP/2 流式传输实现高效通信
- 支持多个会话的并发处理
- 自动会话清理机制,防止资源泄漏
基础设施
该应用程序运行在 Node.js 服务器上,包含以下关键组件:
- Express.js 服务器处理 WebSocket 连接和 HTTP 请求
- Socket.IO 用于实时通信
- Nova Sonic 客户端用于语音转语音模型处理
- MCP 工具集成系统,用于扩展功能
Web 界面功能
该应用程序提供具有以下功能的现代 Web 界面:
主界面

主界面包含以下关键元素:
- 连接状态指示器:左上角显示当前连接状态,例如"已连接到服务器"或错误消息
- 语音角色选择:顶部中央下拉菜单,用于选择不同的 AI 语音角色
- 设置按钮:右上角齿轮图标,用于打开配置面板
- 音频可视化:中央蓝色圆形区域,显示实时音频波形和语音活动
- 控制按钮:
- 左下麦克风按钮:控制麦克风开/关
- 中心通话按钮:启动/结束对话(红色表示对话进行中)
- 右下文本按钮:切换显示/隐藏文本对话内容
对话界面
- 实时显示对话历史记录
- 支持显示/隐藏文本对话内容
- 音频可视化显示用户和助手的语音活动
- 多语言 UI 支持(支持英文和中文)
配置面板

配置面板包含三个主要选项卡:
-
提示词选项卡
- 提供系统提示词模板选择下拉菜单
- 显示当前系统提示词文本内容
- 支持自定义提示词编辑
-
语言选项卡
- 提供界面语言选择(支持英文和中文)
- 简洁直观的语言切换界面
-
MCP 服务选项卡
- 显示所有已配置的 MCP 服务
- 包括服务器 URL、命令、参数和启用状态
- 显示每个服务器提供的可用工具数量
- 可以展开以查看详细的工具信息
语音角色选择

- 支持多个 AI 语音角色选项:
- Tiffany(女性)- 默认语音,自然友好的语调
- Matthew(男性)- 沉着专业的男性语音
- Amy(女性)- 清晰活泼的女性语音
- 每个语音角色都配有指示性别的图标
- 用户可以随时切换语音,更改立即应用于下一个 AI 回复
安全考虑
- 所有 AWS 凭证应妥善保护,不应直接嵌入代码中
- WebSocket 连接配置了 CORS 保护
- API 安全访问可通过令牌机制实现
- 考虑在生产环境中启用 HTTPS
- MCP 工具执行需要适当的安全限制
贡献指南
欢迎为本项目做出贡献:
- Fork 此仓库
- 创建您的功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 开启 Pull Request
许可证
本项目采用 ISC 许可证授权 - 详见 LICENSE 文件。
相关资源
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。