ChimdumebiNebolisa/stadium-sentinel
GitHub: ChimdumebiNebolisa/stadium-sentinel
一款面向场馆活动运营的 AI 语音辅助事件指挥工作台,将多渠道实时报告转化为优先排序的可操作调度任务。
Stars: 0 | Forks: 0
# Stadium Sentinel
Stadium Sentinel 旨在帮助场馆工作人员在活动期间了解并处理实时的事件更新。
## 解决的问题
现场活动的运营部门会接收到来自宾客服务、安保、设施以及无线电频道的碎片化更新。工作人员需要了解发生了什么、由谁负责处理、发生了哪些变化以及下一步需要做什么——而无需在互不关联的工具中来回查找。
Stadium Sentinel 将现场报告和指挥中心更新转化为可操作的事件上下文:优先排序的调度队列、丰富的证据、时间轴、工作人员话术,以及基于 Elastic 运营记忆的语音引导后续步骤。
它不是 CRM、票务系统、分析仪表板、地图产品、座位图产品或通用仪表板。
## 演示
**在线演示:** https://stadium-sentinel-726236175501.us-central1.run.app
| 资源 | 路径 |
|----------|------|
| 首页 | [`artifacts/screenshot-landing.png`](artifacts/screenshot-landing.png) |
| 指挥中心 | [`artifacts/screenshot-command.png`](artifacts/screenshot-command.png) |
| 场馆上下文示意图 | [`artifacts/venue-schematic-1440.png`](artifacts/venue-schematic-1440.png) |
| 工作台布局 | [`artifacts/workbench-1440-final.png`](artifacts/workbench-1440-final.png) |
**演示视频:** _录制后添加链接。_
**快速开始:** 打开在线 URL → **打开运营录入** → **连接运营数据** → **打开指挥中心** → **拉取最新报告**。
## 功能
- **基于 Elastic 的事件拉取** — 连接运营数据,引导种子健康状况,并从运营记忆中拉取当前的事件包
- **丰富的运营上下文** — 为每个事件组装调度时间轴、员工花名册、证据和事件详情
- **调度队列** — 按优先级排序的事件卡片(紧急、高、中、监控)
- **队列完成行为** — 已完成的事件会移至未解决工作下方,并保持可查看状态
- **场馆上下文示意图** — 紧凑的场馆参考图,事件标记映射到实际的队列事件
- **响应清单** — 针对每个事件执行保持联系、确认结果和调度操作
- **实用工具抽屉** — 证据、员工更新、事件日志、报告和来源日志面板
- **Sentinel 语音代理** — 询问 Sentinel,基于实时上下文进行自然的事件问答
- **受保护的草稿 / 审查 / 提交** — 员工更新、报告、后续行动和调度需要明确的语音批准
- **批准的写回** — 在操作员批准后更新时间轴和运营记忆
- **生产级 Cloud Run 部署** — 通过 Cloud Build 使用所需的 `NEXT_PUBLIC_*` 构建参数预构建镜像
## 技术栈
| 层级 | 技术 |
|-------|------------|
| 框架 | Next.js 16 (App Router), React 19, TypeScript |
| 样式 | Tailwind CSS 4 |
| 计算 | Google Cloud Run |
| 构建 / 部署 | Cloud Build, Docker (独立输出) |
| 运营记忆 | Elasticsearch (事件、证据、调度时间轴、事件记忆) |
| Sentinel 后端 | `AGENT_BACKEND_ENABLED=true` 时使用 Vertex AI (Gemini) |
| 单元测试 | Vitest |
| E2E 测试 | Playwright |
## 架构
应用运行时使用**直接的 Elastic 检索和写入路径**。MCP 不是应用内语音或命令循环的一部分。外部 MCP 验证产物可能会单独存在于 `artifacts/batch9-mcp-proof/` 下,仅供附录演示使用。
```
flowchart LR
operator[Staff / command operator]
workbench[Command workbench]
pull[Pull latest reports]
elastic[Elastic operational memory]
sentinel[Sentinel API / Vertex Gemini]
drawers[Evidence timeline source log]
writeback[Approved write-back]
operator --> workbench
workbench --> pull
pull --> elastic
elastic --> workbench
operator --> sentinel
sentinel --> elastic
sentinel --> workbench
workbench --> drawers
operator --> writeback
writeback --> elastic
writeback --> drawers
```
## 设置
### 安装
```
npm ci
cp .env.example .env.local
```
### 环境变量
将 `.env.example` 复制到 `.env.local`。仅使用占位符名称——切勿提交密钥。
**构建时客户端标志**(在 `npm run build` 期间内联):
- `NEXT_PUBLIC_REAL_DEMO_FLOW`
- `NEXT_PUBLIC_ENABLE_ELASTIC_PULL`
- `NEXT_PUBLIC_ENABLE_SENTINEL_AGENT`
- `NEXT_PUBLIC_ENABLE_SENTINEL_VOICE`
- `NEXT_PUBLIC_SHOW_VENUE_ORIENTATION`
- `NEXT_PUBLIC_SHOW_RADIO_TRANSCRIPT`
**运行时服务器**(仅限 Cloud Run 或本地服务器):
- `ELASTICSEARCH_URL`, `ELASTICSEARCH_API_KEY`
- `AGENT_BACKEND_ENABLED`, `GOOGLE_CLOUD_PROJECT`, `GOOGLE_CLOUD_LOCATION`, `VERTEX_MODEL`
- 可选的索引覆盖——参见 `.env.example`
本地 Elastic 填充:`npm run index:elastic`(仅限开发设置)。
### 开发
```
npm run dev
```
打开 http://localhost:3000
### 测试与构建
```
npm test
npm run test:e2e
npm run build
npm run verify:real-demo
```
### 部署
参见 [docs/INGESTION_DEPLOY_CHECKLIST.md](docs/INGESTION_DEPLOY_CHECKLIST.md) 和 [docs/STADIUM_SENTINEL_FINAL_EXECUTION_PLAN.md](docs/STADIUM_SENTINEL_FINAL_EXECUTION_PLAN.md)。使用带有预构建镜像标签的 Cloud Build——在生产环境标志下,不要单独依赖 `gcloud run deploy --source .`。
## 使用方法
1. 打开应用(首页或 `/command`)。
2. 如果指挥中心处于断开连接状态,请在 `/demo/intake` **连接运营数据**。
3. 打开**指挥中心** (`/command`)。
4. 点击**拉取最新报告**以加载基于 Elastic 的事件。
5. 从调度队列中选择一个事件。
6. 查看场馆上下文、响应清单、团队分配和运营时间轴。
7. 打开抽屉标签页:证据、员工更新、事件日志、报告、来源日志。
8. 点击 **Ask Sentinel** 对所选事件进行语音问答。
9. 在出现提示时,批准草拟的员工更新、报告、后续行动或调度。
10. 批准后确认时间轴和来源日志更新。
演示脚本:[docs/real-demo-script.md](docs/real-demo-script.md)
录制清单:[docs/demo-recording-checklist.md](docs/demo-recording-checklist.md)
## 关键技术决策
- **直接的 Elastic 运营记忆** — 在应用运行时直接使用 Elasticsearch 进行拉取、上下文组装和批准的写回
- **无应用内 MCP 声明** — MCP 桥接和 Agent Platform 验证仅限外部使用;参见 `artifacts/batch9-mcp-proof/` 和 [docs/ELASTIC_BUILDER_MCP_SETUP.md](docs/ELASTIC_BUILDER_MCP_SETUP.md)
- **语音优先的 Sentinel 及受保护的批准** — 持续监听循环;若无待批准的验证关卡,随意的确认不会进行提交
- **已完成事件置于活动工作下方** — 已解决的项目保持可选择状态以供审查,而不会阻碍调度焦点
- **仅限媒体元数据** — 证据引用媒体 ID 和描述;无媒体文件存储或渲染 pipeline
- **仅限分类优先级** — 紧急、高、中、监控;产品文案中不使用数字评分
## 限制
- **浏览器语音**依赖于 Web Speech API 和麦克风权限;行为因浏览器而异
- **无线电转录面板**在生产构建中处于关闭状态(`NEXT_PUBLIC_SHOW_RADIO_TRANSCRIPT=false`);相关的 e2e 测试是可选路径
- **MCP 不是应用内的运行时功能**,除非以后明确实现;外部验证独立于 `/command`
- **演示数据**是用于黑客松和录制流程的合成运营种子数据
- **建议**在生产 Cloud Run 上录制演示**之前进行手动麦克风冒烟测试**
## 许可证
MIT 许可证
本仓库目前不包含单独的 `LICENSE` 文件。
## 文档
| 文档 | 用途 |
|-----|---------|
| [docs/STADIUM_SENTINEL_FINAL_EXECUTION_PLAN.md](docs/STADIUM_SENTINEL_FINAL_EXECUTION_PLAN.md) | 阶段、批次和防护准则的真实来源 |
| [docs/INGESTION_DEPLOY_CHECKLIST.md](docs/INGESTION_DEPLOY_CHECKLIST.md) | 数据接入和 Cloud Run 部署清单 |
| [docs/real-demo-script.md](docs/real-demo-script.md) | 在线演示旁白 |
| [docs/demo-recording-checklist.md](docs/demo-recording-checklist.md) | 录制前冒烟测试清单 |
| [docs/devpost-talking-points.md](docs/devpost-talking-points.md) | 提交说明要点 |
| [docs/ELASTIC_BUILDER_MCP_SETUP.md](docs/ELASTIC_BUILDER_MCP_SETUP.md) | 仅限外部 MCP 设置 |
| [artifacts/batch9-mcp-proof/README.md](artifacts/batch9-mcp-proof/README.md) | 外部 MCP 验证产物 |
标签:AI助手, Elasticsearch, 事件管理, 指挥调度, 智慧场馆, 特征检测, 自动化攻击, 语音交互, 请求拦截