mcpField
S
Sample Nova Sonic Mcp

Sample Nova Sonic Mcp

github.com/aws-samples聊天应用3147 周前更新

关于 Sample Nova Sonic Mcp

Sample Nova Sonic Mcp 是一个基于 AWS Bedrock 的 Nova Sonic 模型应用,支持实时双向音频流。它提供网页界面和命令行模式,集成 MCP 工具系统,支持多语言和多种语音选项。

主要功能

  1. 01双向实时音频流
  2. 02Nova Sonic 语音模型
  3. 03MCP 工具集成
  4. 04WebSocket 实时通信
  5. 05多语言支持
  6. 06音频可视化

适用场景

  1. 01语音对话应用
  2. 02多语言语音交互
  3. 03AI 语音助手
  4. 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"
  }
}
安装步骤
  1. 克隆存储库:
git clone <repository-url>
cd aws-nova-sonic-mcp
  1. 安装依赖项:
npm install
  1. 配置 AWS 凭证:
# Configure AWS CLI with your credentials
aws configure --profile default
  1. 编译 TypeScript 代码:
npm run build
快速开始
  1. 启动服务器:
npm start
  1. 在浏览器中打开:
http://localhost:3000
  1. 在提示时授予麦克风权限。

  2. 点击通话按钮开始对话。

应用界面

应用加载后,您将看到如上所示的界面。该界面分为以下主要部分:

  • 顶部状态栏:显示连接状态和语音角色选择器
  • 中央交互区域:大型蓝色圆形音频可视化显示区域
  • 底部控制栏:麦克风控制、通话控制和文本显示按钮
配置选项
系统提示词

您可以通过界面上的配置按钮自定义系统提示词。该系统提供多个预设模板,您也可以编写自定义提示词。

// 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
故障排除
  1. 麦克风访问问题
  • 问题:浏览器显示"麦克风权限被拒绝"
  • 解决方案:
    // 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
    }
    
  1. 音频播放问题
  • 问题:没有音频输出

  • 解决方案:

    // Verify if AudioContext is initialized
    if (audioContext.state === "suspended") {
      await audioContext.resume();
    }
    
    // Check audio player
    if (!audioPlayer.initialized) {
      await audioPlayer.start();
    }
    
  1. 连接问题
  • 检查服务器日志
  • 验证 AWS 凭证配置
  • 验证 WebSocket 连接:
    socket.on("connect_error", (error) => {
      console.error("Connection failed:", error);
    });
    
  1. 会话超时问题
  • 问题:会话在一段时间不活动后断开连接
  • 解决方案:系统具有 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 界面:

主界面

Main Interface

主界面包含以下关键元素:

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

Configuration Panel - Prompts Configuration Panel - Language Configuration Panel - MCP Servers

配置面板包含三个主要选项卡:

  1. 提示词选项卡

    • 提供系统提示词模板选择下拉菜单
    • 显示当前系统提示词文本内容
    • 支持自定义提示词编辑
  2. 语言选项卡

    • 提供界面语言选择(支持英文和中文)
    • 简洁直观的语言切换界面
  3. MCP 服务选项卡

    • 显示所有已配置的 MCP 服务
    • 包括服务器 URL、命令、参数和启用状态
    • 显示每个服务器提供的可用工具数量
    • 可以展开以查看详细的工具信息
语音角色选择

Voice Personas

  • 支持多个 AI 语音角色选项:
    • Tiffany(女性)- 默认语音,自然友好的语调
    • Matthew(男性)- 沉着专业的男性语音
    • Amy(女性)- 清晰活泼的女性语音
  • 每个语音角色都配有指示性别的图标
  • 用户可以随时切换语音,更改立即应用于下一个 AI 回复

安全考虑

  • 所有 AWS 凭证应妥善保护,不应直接嵌入代码中
  • WebSocket 连接配置了 CORS 保护
  • API 安全访问可通过令牌机制实现
  • 考虑在生产环境中启用 HTTPS
  • MCP 工具执行需要适当的安全限制

贡献指南

欢迎为本项目做出贡献:

  1. Fork 此仓库
  2. 创建您的功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推送到分支(git push origin feature/amazing-feature)
  5. 开启 Pull Request

许可证

本项目采用 ISC 许可证授权 - 详见 LICENSE 文件。

相关资源

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。