阿凡达铸造厂
由微软Foundry提供支持的具有高清化身和实时语音的自主AI行政助理。
咏叹调 是一款完整、逼真的人工智能助手,可以看到、听到和说话,建立在Azure的Voice Live API、GPT-5 Realtime和通过WebRTC的Meg Casual化身上。
不仅仅是检索——完全可操作。 Aria超越了对Microsoft 365数据的只读访问。由Work IQ MCP服务器提供支持,她可以代表您采取实际行动:发送电子邮件、创建会议和更新日历——这些功能超越了当今的Microsoft Copilot体验。
演示

“嘿,艾瑞亚,今天我的日历上有什么?”
Aria以自然语言和实时嘴唇同步的高清化身视频做出回应。她可以通过语音管理你的日历、搜索网络、发送电子邮件和处理团队会议。
为什么是视觉化身?
高清化身不仅仅是视觉糖果,它还解锁了现实世界的场景,在这些场景中,视觉呈现比纯语音或文本界面提供了真正的价值:
无障碍和包容性 --聋哑和重听用户可以依靠化身的精确唇形同步作为视觉语音通道。有认知障碍的用户通过视觉锚和面部线索更好地处理信息。医疗保健和银行业的老年用户发现,一张脸比一个空洞的声音更平易近人。
面向客户的服务台和接待处 --酒店登记、机场问讯台、零售、政府服务。屏幕上的人脸取代了全天候有人值守的办公桌,成本只是其中的一小部分。马耳他政府已经在公共服务中使用化身代理。
大规模的联络中心 --为银行、保险和电信领域的高价值客户提供视频支持。从规模上讲,每分钟客户的化身成本仍然比满载的人类代理便宜得多,而研究一致表明,人们更信任和保留来自面部的信息,而不仅仅是语音。
医疗保健 --面向患者的临床助理,面部可以减少隔离的心理健康检查,以及对“人”比通知反应更好的老年患者的药物提醒。
可通过WorkIQ操作
Aria不仅限于检索信息,她 完全可操作 通过Work IQ MCP服务器。使用委托的Entra ID(OBO)令牌,她可以在Microsoft 365中代表您行事:
| 能力 | 示例 |
|---|---|
| 📧 发送邮件 | *“Aria,向团队发送一封跟进电子邮件,总结今天的会议。”* |
| 📅 创建会议 | *“安排周四下午2点与约翰同步30分钟。”* |
| ✏️ 更新会议 | *“将我明天下午3点的电话改为下午4点,并将Sarah添加到邀请中。”* |
| 📬 阅读和搜索邮件 | *“这周我的经理有什么急事吗?”* |
| 👥 查找人员 | *“查找工程主管的详细联系方式。”* |
| 🔍 网络搜索 | *“Azure AI的最新定价变化是什么?”* |
超越今天的Copilot: 截至2026年3月,对于许多M365操作,Microsoft Copilot在很大程度上仍然是只读的。Aria由Work IQ提供支持,可以创建和发送电子邮件,创建和重新安排会议,并在M365上进行写作操作——所有这些都是通过与照片级逼真的高清化身进行自然语音对话来实现的。这是使该解决方案与众不同的能力差距。
建筑
┌─────────────────────────────────────────────────────────────────┐
│ Browser (React + TypeScript + Vite) │
│ ┌──────────┐ ┌──────────────┐ ┌───────────────────────────┐ │
│ │ MSAL │ │ Conversation │ │ Avatar (WebRTC) │ │
│ │ Auth │ │ Panel │ │ - HD video (H.264) │ │
│ └──────────┘ └──────────────┘ │ - TTS audio output │ │
│ └───────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Mic Capture (AudioWorkletNode → PCM16 → WebSocket) │ │
│ └──────────────────────────────────────────────────────────┘ │
└───────────────────────────┬──────────────────────────────────────┘
│ WebSocket
┌───────────────────────────▼──────────────────────────────────────┐
│ Backend (Express + TypeScript) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ WebSocket Proxy (/ws/voice-live) │ │
│ │ - Entra ID auth (DefaultAzureCredential) │ │
│ │ - Dual OBO token exchange (MCP + Graph API) │ │
│ │ - session.update → Voice Live API (with MCP tools) │ │
│ │ - Function call dispatch (calendar, email, weather) │ │
│ │ - Bidirectional message forwarding │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Direct Graph API (/me/calendarView, /me/messages) │ │
│ │ - OBO token with Calendars.Read + Mail.Read scopes │ │
│ │ - Compact responses optimized for voice (~2-3s) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ REST: /api/health, /api/avatar/config, /api/avatar/ice, /api/ticker, /api/weather, /api/smoke-test │
└───────────────────────────┬──────────────────────────────────────┘
│ WSS (Bearer token)
┌───────────────────────────▼──────────────────────────────────────┐
│ Azure Voice Live API (2026-01-01-preview) │
│ ┌────────────┐ ┌──────────────┐ ┌─────────────────────────┐ │
│ │ GPT-5 │ │ Dragon HD │ │ Meg Casual Avatar │ │
│ │ Realtime │ │ Ava Voice │ │ (WebRTC SDP exchange) │ │
│ │ (reasoning)│ │ (TTS) │ │ 29 gestures, full-body │ │
│ └────────────┘ └──────────────┘ └─────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Work IQ MCP Tools (via OBO delegation) │ │
│ │ Calendar · Mail · Teams · People · Copilot · Word │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘技术栈
| 层 | 技术 |
|---|---|
| 前端 | React 19、TypeScript、Vite 6、顺风CSS 3 |
| 后端 | Express 5、TypeScript、WebSocket(ws) |
| Auth | MSAL.js v5(入口ID重定向+OBO流) |
| 语音 | 语音直播API,Dragon HD Ava3神经语音 |
| Avatar | Meg Casual,WebRTC(H.264),base64编码的SDP |
| LLM | GPT-5实时(gpt-realtime-1.5) |
| 工具 | Work IQ MCP服务器(日历、邮件、团队、人员、Copilot、Word)+Direct Graph API(日历读取、电子邮件读取) |
| 授权范围 | User.Read, Calendars.Read, Mail.Read (图形委托)+代理365 MCP OBO |
| 天气 | Open-Meteo免费API(无需密钥) |
| 基础设施 | 二头肌(Azure AI服务、应用服务、静态Web应用) |
先决条件
- Node.js >= 20
- Azure命令行界面 已登录(
az login) - Azure人工智能服务 a中的资源 支持地区 (东2、西2、北欧、瑞典中部、东南亚、中南部、西欧)
- 应用程序注册 带有SPA重定向URI(
http://localhost:3000) - 应用注册API权限:
User.Read,Calendars.Read,Mail.Read(图形委托,管理员同意)+Agent365工具API范围 - RBAC: 认知服务用户 + Azure人工智能用户 关于人工智能服务资源
快速开始
# Clone and install
git clone https://github.com/ITSpecialist111/Aria-Avatar-Foundry-WorkIQ.git
cd Avatar-Foundry
npm install
# Configure environment
cp .env.example .env
# Edit .env with your Azure resource values (see Environment section below)
# Run development servers
npm run dev
# Client: http://localhost:3000
# Server: http://localhost:8080环境变量
复制 .env.example 到 .env 并填写:
| 变量 | 必填 | 描述 |
|---|---|---|
AZURE_TENANT_ID | 是 | Entra ID租户 |
VOICELIVE_ENDPOINT | 是 | AI服务自定义域(https://.cognitiveservices.azure.com) |
SPEECH_REGION | 是 | Azure区域(eastus2) |
MSAL_CLIENT_ID | 是 | 应用程序注册客户端ID |
MSAL_CLIENT_SECRET | 是\* | 应用程序注册密钥(OBO/MCP工具需要) |
MSAL_TENANT_ID | 是 | 与 AZURE_TENANT_ID |
VITE_MSAL_CLIENT_ID | 是 | 与 MSAL_CLIENT_ID (Vite) |
VITE_MSAL_TENANT_ID | 是 | 与 AZURE_TENANT_ID (Vite) |
WORKIQ_ENVIRONMENT_ID | 否\* | Power Platform环境ID(MCP工具需要) |
VOICELIVE_MODEL | 否 | 实时模型部署名称(默认值: gpt-4o-realtime-preview) |
VOICE_NAME | 无 | TTS语音(默认值: en-US-Ava3:DragonHDLatestNeural) |
AVATAR_CHARACTER | 否 | 头像角色(默认值: meg) |
AVATAR_STYLE | 否 | 头像样式(默认: casual) |
AVATAR_BACKGROUND_URL | 否 | 化身背景图像的公共URL(在服务器端渲染为视频流) |
PROJECT_NAME | 否 | Foundry项目名称(使用工具启用代理模式) |
USER_MEMORY_PATH | 否 | 持久内存文件的路径(默认: ./data/user-memory.json) |
FOLLOW_UP_PATH | 无 | 后续跟踪文件的路径(默认: ./data/follow-ups.json) |
脚本
npm run dev # Start client + server in development mode
npm run build # Production build (both packages)
npm run lint # Lint both packages
npm run clean # Remove dist/ from both packages项目结构
Avatar-Foundry/
├── client/ # React frontend
│ ├── src/
│ │ ├── App.tsx # Main app (login + standard/accessible mode routing)
│ │ ├── auth/ # MSAL config
│ │ ├── components/
│ │ │ ├── AccessibleView.tsx # Full-screen accessible mode (no avatar)
│ │ │ ├── AvatarView.tsx # WebRTC HD avatar + aura ring + cinematic reveal
│ │ │ ├── ConversationPanel.tsx # Tabbed Chat/Activity panel + text input + prompt chips
│ │ │ ├── DashboardCard.tsx # Rich visual cards (timeline, sender circles, checkmarks)
│ │ │ ├── DashboardPanel.tsx # Side panel with Quick Access + Activity feed
│ │ │ ├── DataOverlay.tsx # Jarvis-style data cards overlaying avatar
│ │ │ ├── DemoControls.tsx # 10 demo scenario triggers
│ │ │ ├── ParticleField.tsx # Canvas particle drift behind avatar
│ │ │ ├── QuickLaunchBar.tsx # Floating scenario pills on idle
│ │ │ ├── StatusBar.tsx # Glass morphism header with animated gradient border
│ │ │ ├── TickerBar.tsx # Live ticker: 1s clock, meeting countdown, radio-wave
│ │ │ └── ToolCallOverlay.tsx # Shimmer glass bar during tool calls
│ │ ├── hooks/
│ │ │ ├── useVoiceLive.ts # WebRTC + WebSocket + mic + MCP + auto-reconnect
│ │ │ └── useAccessibility.ts # Font size, contrast, earcons, mode, preferences
│ │ ├── styles/globals.css # Glass morphism, auras, animations, high contrast
│ │ └── types/ # Shared TypeScript types + demo scenarios
│ └── vite.config.ts
├── server/ # Express backend
│ ├── src/
│ │ ├── index.ts # Express + WebSocket proxy + function call dispatch
│ │ ├── config/env.ts # Zod environment validation
│ │ ├── routes/
│ │ │ ├── avatar.ts # Avatar config + ICE token endpoints
│ │ │ ├── health.ts # Health check
│ │ │ ├── session.ts # Session management
│ │ │ ├── smokeTest.ts # /api/smoke-test — OBO + MCP tool discovery test
│ │ │ └── ticker.ts # /api/ticker (weather) + /api/weather endpoints
│ │ └── services/
│ │ ├── voiceLive.ts # Voice Live session config + MCP tools + system prompt
│ │ ├── foundryAgent.ts # Aria system prompt + agent metadata
│ │ ├── calendarService.ts # Direct Graph API calendar reads (bypasses MCP)
│ │ ├── emailService.ts # Direct Graph API email reads (bypasses MCP)
│ │ ├── weather.ts # Open-Meteo weather API (free, no key)
│ │ ├── userMemory.ts # Persistent user memory (JSON file)
│ │ ├── followUpTracker.ts # Follow-up tracking (JSON file)
│ │ ├── meetingCountdown.ts # Proactive meeting reminders (direct Graph API)
│ │ ├── foundryDelegate.ts # Foundry Agent delegation for research
│ │ └── authService.ts # MSAL OBO token exchange (audience-keyed clients)
│ └── tsconfig.json
├── infra/ # Bicep IaC templates
│ ├── main.bicep
│ └── parameters.json
├── .env.example # Environment template
├── CLAUDE.md # AI assistant instructions
└── ROADMAP.md # 20-feature roadmap across 5 phases主要特点
- 高清头像 --逼真的Meg Casual化身,具有自然的空闲动画和唇形同步
- 实时语音 -通过voice Live API实现低于200毫秒延迟的双向语音
- 龙高清语音 —
en-US-Ava3:DragonHDLatestNeural拥有100多种说话风格 - 通过Work IQ完全可操作 --通过委托的M365 MCP工具发送电子邮件、创建/更新/移动会议、创建Word文档等
- 三层工具布线 -用于日历/电子邮件读取的快速自定义Graph API工具(约2-3s),用于M365写入操作的MCP工具(约4-6s),仅用于复杂分析的copilot_chat(约15-20s)
- 直接图形API -日历和电子邮件读取通过使用海外建筑运营管理局令牌的直接Microsoft Graph API调用绕过缓慢的MCP工具,返回针对语音响应优化的紧凑数据
电影UI(零依赖)
所有视觉增强都只使用CSS动画、canvas API和Tailwind CSS,没有额外的npm包。
- 化身存在光环 --状态响应梯度晕:空闲(呼吸蓝紫色脉冲)、说话(亮脉冲)、倾听(祖母绿)、思考(琥珀色圆锥旋转通过
@property --aura-angle) - 电影会话开始 --标志在连接时脉冲更快,放大和模糊,视频随着模糊而淡入,清晰可见——Aria *到达*,而不仅仅是连接
- 玻璃变形症 --每个表面都升级为磨砂玻璃:
backdrop-blur-xl面板、StatusBar上的动画渐变边框、磨砂辅助气泡 - 工具调用覆盖 --在工具调用过程中,带有工具名称、多步进度点和完成复选标记的闪亮玻璃条会向上滑动
- 数据叠加(Jarvis模式) --日历/电子邮件/天气卡从工具结果左侧的头像滑入,10秒后自动淡出——“钢铁侠HUD”时刻
- 粒子场 --基于画布的35个粒子在化身后面漂移。粒子在工具调用期间加速(琥珀色),在讲话期间发光
- 快速启动栏 --5秒空闲后浮动的场景药丸按钮:晨间简报、日程安排会议、电子邮件分类、深入研究
- 对话选项卡 --聊天+活动选项卡,带动画下划线指示器。仪表板卡片已移至“活动”选项卡,以获得更清晰的成绩单
- 文本输入栏 --面板底部的玻璃态射输入,按Enter键发送,会话不活动时禁用
- 提示芯片 --空状态显示带有4个可点击对话启动器的品牌卡
- 丰富的仪表板卡 --带有圆点的日历迷你时间线、电子邮件发件人圆圈、用于动作的自绘SVG复选标记、交错入口动画
- 票务栏升级 --1秒时钟,下次会议实时倒计时,动画无线电波“直播”指示器,梯度分隔器
- 自动重新连接 --意外WebRTC断开连接时的指数回退(1s/2s/4s,最多3次重试),保留成绩单和卡片
核心功能
- 仪表板卡 --显示日历事件、电子邮件、天气、操作和MCP工具结果中快速访问小部件的实时侧面板卡
- 票务酒吧 --屏幕顶部显示天气、会议计数、电子邮件摘要和看板链接
- 天气集成 -实时天气通过Open-Meteo免费API(无需密钥),可用作语音工具和仪表板小部件
- 10个演示场景 --预先构建的触发器:早间简报、电子邮件分类、会议准备、安排会议、起草电子邮件、深入研究、创建文档、跟进检查、团队总结、日终总结
- 烟雾测试终点 —
/api/smoke-test在所有6台服务器上并行测试OBO交换和MCP工具发现,每台服务器定时 - 持久性内存 --Aria跨会话记住用户偏好和事实(JSON文件持久性)
- 后续跟踪 --通过主动提醒跟踪对话中的行动项目
- 会议倒计时 -会议临近时通过直接Graph API主动通知(每5分钟一次,仅在会议存在时发出警报)
- 多步骤任务 --复杂的工作流编排,逐步跟踪进度
- 铸造代理代表团 --将复杂的研究委托给背景GPT-4o代理
- 无障碍模式 --全屏聊天布局(无头像),WCAG 2.1 AA高对比度、可变字体大小、音频耳机、ARIA实时区域、键盘焦点指示器、减少运动和本地存储持久首选项
- 语音打断 --打断助理的话;音频立即中断
- 工具调用音频提示 --MCP工具执行开始时发出双音蜂鸣声
- 自动重试 --VAD取消工具调用响应时自动恢复响应
- 噪声抑制 --麦克风输入上的Azure深度噪声抑制
- 回声消除 --服务器端回声消除(适用于WebRTC头像音频)
- VAD调谐 --可配置阈值(0.8)、静音持续时间(1200ms)和前缀填充(500ms)
- 静音 --静音时发送静音(使server_vad保持活动状态)
- 聊天验证 --通过Entra ID重定向流进行企业SSO+M365授权的OBO
- 主动问候 --Aria在会话开始时以记忆上下文介绍自己
- 对话面板 --带有VQ令牌过滤和ARIA标签的自动滚动成绩单
模式
内联模式(默认)
无需Foundry项目或MCP工具。系统提示直接发送 session.update 有明确的“没有可用工具”说明。语音可以进行对话,但无法访问M365数据。
MCP工具模式(带 WORKIQ_ENVIRONMENT_ID)
Work IQ MCP服务器(日历、邮件等)直接注入Voice Live session.update 作为工具定义。使用OBO令牌交换进行委托M365访问。不需要单独的Foundry Agent——GPT-5实时直接调用MCP工具。
代理模式(带 PROJECT_NAME)
连接到Foundry Agent进行推理和工具调用。Voice Live处理实时语音;代理处理LLM推理。注意:GPT-5尚不支持作为Foundry Agent型号。
已知问题
- VQ令牌工件 --GPT-5实时偶尔泄漏 `` 将令牌或“音频文本”转换为语音。采用三层防御(系统提示+服务器过滤器+客户端过滤器)进行缓解,但仍为模型级别。
- GPT-5代理支持 --GPT-5尚未作为Foundry Agent聊天模式提供(
DeploymentModelNotSupported).改用内联+MCP工具模式。 - WebRTC超时 --Avatar WebRTC在空闲5分钟/30分钟后断开连接。自动重新连接现在实现了指数回退(1s/2s/4s,最多3次重试),在重新连接时保留了成绩单和仪表板卡。
- 头像手势 --Meg Casual提供29种手势,但仅限于批量合成。实时/语音直播模式不支持(仅限自然空闲动画)。
Azure资源
| 资源 | 类型 | 地区 |
|---|---|---|
ai-avatar-foundry-ghosking | 人工智能服务 | 东方2 |
铸造项目: avatar-foundry | AI铸造厂 | 东方2 |
模型部署
| 名称 | 型号 | SKU |
|---|---|---|
gpt-realtime | GPT-4o实时(2025-08-28) | 全球标准 |
gpt-realtime-1.5 | GPT-5实时(2026-02-23) | 全球标准 |
gpt-4o | GPT-4o(2024-08-06) | 全球标准 |
文档
- ROADMAP.md --跨5个阶段和7个冲刺的20个功能路线图
- Voice Live API参考资料
- 语音实时代理快速入门
- 标准化身
- 自定义头像 --从真人视频中训练出逼真的数字双胞胎
- Work IQ MCP服务器
许可证
MIT许可证——见 许可证 了解详情。
