亚马逊Nova Sonic和MCP
该项目实现了一个基于WebSocket的双向音频流应用程序,该应用程序与Amazon Nova Sonic模型集成,用于实时语音对话。该应用程序通过现代web界面实现自然的对话交互,同时利用亚马逊强大的Nova Sonic模型来处理和生成响应。
英语| 中文
项目概述
Amazon Nova Sonic是AWS Bedrock提供的高级语音模型,能够处理自然的人声输入并生成高质量的语音响应。本项目演示了如何构建一个完整的应用系统,包括:
- 双向实时音频流:支持连续的语音输入和输出,以获得自然的对话体验
- 多语言支持:内置中英文双语界面,可轻松切换
- 多种语音选项:支持各种AI语音角色(蒂芙尼、马修、艾米等)
- 工具集成系统:通过MCP(模型上下文协议)支持扩展功能
- WebSocket实时通信:确保低延迟音频传输和处理
- 响应式web界面:适应不同设备的现代用户界面
- 音频可视化:实时音频波形显示,增强用户体验
- CLI模式支持:能够通过命令行使用预先录制的音频进行交互
该系统由一个处理双向流媒体和AWS Bedrock集成的服务器以及一个管理音频流和用户交互的现代web客户端组成。它支持实时音频流,与Amazon Nova Sonic模型集成,双向通信处理,以及具有聊天历史管理功能的响应式web界面。
使用说明
系统要求
- 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
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 textMCP服务器配置
通过配置MCP服务器 mcp_config.json 文件:
{
"mcpServers": {
"github.com/tavily-ai/tavily-mcp": {
"command": "npx",
"args": ["-y", "tavily-mcp@0.1.4"],
"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请求
- 插座。IO用于实时通信
- 用于语音转语音模型处理的Nova Sonic客户端
- 用于扩展功能的MCP工具集成系统
Web界面功能
该应用程序提供了一个具有以下功能的现代web界面:
主界面
主界面包含以下关键元素:
- 连接状态指示器:左上角显示当前连接状态,如“已连接到服务器”或错误消息
- 语音角色选择:顶部中央下拉菜单,用于选择不同的AI语音角色
- 设置按钮:打开配置面板的右上齿轮图标
- 音频可视化:中央蓝色圆形区域显示实时音频波形和语音活动
- 控制按钮:
- 左下麦克风按钮:控制麦克风打开/关闭 - 中心呼叫按钮:开始/结束对话(红色表示正在进行对话) - 右下文本按钮:切换文本对话内容的显示/隐藏
对话界面
- 实时显示对话历史
- 支持显示/隐藏文本对话内容
- 显示用户和助手语音活动的音频可视化
- 多语言用户界面支持(英语和中文)
配置面板
Configuration Panel - Prompts Configuration Panel - Language Configuration Panel - MCP Servers
配置面板包含三个主要选项卡:
- 提示选项卡
- 提供系统提示模板选择下拉菜单 - 显示当前系统提示文本内容 - 支持自定义提示编辑
- 语言选项卡
- 提供界面语言选择(支持英文和中文) - 简单直观的语言切换界面
- MCP服务器选项卡
- 显示所有已配置的MCP服务器 - 包括服务器URL、命令、参数和启用状态 - 显示每个服务器提供的可用工具的数量 - 可以展开以查看详细的工具信息
语音角色选择
- 支持多种AI语音角色选项:
- 蒂芙尼(女)-默认声音,自然友好的语调 - 马修(男)-平静专业的男声 - Amy(女)-清晰活泼的女声
- 每个语音角色都有一个表示性别的图标
- 用户可以随时切换语音,更改会立即应用于下一个AI响应
安全考虑
- 所有AWS凭据都应得到适当保护,不得直接嵌入代码中
- WebSocket连接配置了CORS保护
- API安全访问可以通过令牌机制实现
- 考虑在生产环境中启用HTTPS
- MCP工具的执行需要适当的安全限制
贡献指南
欢迎为该项目捐款:
- 分叉存储库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
许可证
此项目根据ISC许可证获得许可-有关详细信息,请参阅许可证文件。
