2879 lines
127 KiB
Markdown
2879 lines
127 KiB
Markdown
# 延安精神(大湾区)学习展示中心 — 技术实现方案
|
||
|
||
> 本文档将《终极目标导向创新升级方案》中的产品设计和系统架构,转化为可落地的技术架构、技术选型、数据模型和工程实施方案。
|
||
>
|
||
> 编制日期:2026-07-12
|
||
|
||
---
|
||
|
||
## 一、总体技术架构
|
||
|
||
### 1.1 技术分层模型
|
||
|
||
系统采用六层架构,从下到上依次为基础设施层、数据资产层、AI能力层、公共平台层、应用服务层和用户触达层。
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────────────┐
|
||
│ 用户触达层 │
|
||
│ 线下终端(触屏/VR/环幕/UWB/RFID) │ 线上(Web/小程序/APP) │ 节点终端 │
|
||
├──────────────────────────────────────────────────────────────────────┤
|
||
│ 应用服务层 │
|
||
│ F1自适应叙事 F2情境任务 F3文物数字生命 F4成长护照 │
|
||
│ F5云上共同体 F6青年共创 F7行动实验室 F8星火节点OS │
|
||
├──────────────────────────────────────────────────────────────────────┤
|
||
│ 公共平台层 │
|
||
│ X1体验编排引擎 X2成长护照档案 X3内容治理中心 S9节点协同 │
|
||
├──────────────────────────────────────────────────────────────────────┤
|
||
│ AI能力层 │
|
||
│ 可信叙事引擎 学习成长引擎 编审助手引擎 策展助手引擎 │
|
||
├──────────────────────────────────────────────────────────────────────┤
|
||
│ 数据资产层 │
|
||
│ 知识图谱(Neo4j) │ 向量库(Milvus) │ 内容仓(MinIO) │ 业务库(PG) │
|
||
│ 时序库(ClickHouse) │ 缓存(Redis) │ 消息(Kafka) │
|
||
├──────────────────────────────────────────────────────────────────────┤
|
||
│ 基础设施层 │
|
||
│ 私有云(K8s) │ GPU集群 │ 5G专网 │ IoT网关 │ CDN │ 安防网络 │
|
||
└──────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 1.2 技术栈总览
|
||
|
||
| 层级 | 技术选型 | 选型理由 |
|
||
|------|---------|---------|
|
||
| 前端框架 | React 18 + TypeScript / React Native | 线上Web端+移动端统一技术栈,生态成熟 |
|
||
| 3D/WebGL | Three.js + WebGPU / Unity WebGL | 云展馆3D渲染 + 轻量化Web3D访问 |
|
||
| VR/AR | Unity 2022 LTS + XR Interaction Toolkit | 主流XR开发平台,支持Pico/Meta Quest |
|
||
| 后端框架 | Spring Boot 3 (Java 21) / FastAPI (Python) | Java负责业务微服务,Python负责AI推理服务 |
|
||
| 微服务 | Spring Cloud + Nacos + Gateway | 国产化兼容,服务注册发现+配置中心+网关 |
|
||
| 数据库 | PostgreSQL 16 + ClickHouse + Redis 7 | 业务OLTP + 分析OLAP + 缓存 |
|
||
| 知识图谱 | Neo4j 5.x | 图数据库标杆,支持Cypher语义查询 |
|
||
| 向量数据库 | Milvus 2.x | 开源高性能向量检索,支持亿级向量 |
|
||
| 对象存储 | MinIO (私有化) | S3兼容,支持私有化部署,用于3D模型/视频/图片 |
|
||
| 消息队列 | Kafka 3.x | 高吞吐事件流,支撑实时客流和体验编排 |
|
||
| 大模型 | Qwen2.5 / GLM-4 (私有化部署) | 国产开源大模型,支持中文+英文双语 |
|
||
| RAG框架 | LlamaIndex + LangChain | 主流RAG框架,支持多源检索+引用溯源 |
|
||
| 数字人 | Unreal Engine 5 + MetaHuman + AI口型同步 | 高保真数字人,支持实时驱动 |
|
||
| 容器编排 | Kubernetes 1.28 + Helm | 容器化部署,支持弹性扩缩容 |
|
||
| CI/CD | GitLab CI + ArgoCD | GitOps发布流程,支持灰度和回滚 |
|
||
| 监控 | Prometheus + Grafana + Loki | 指标+日志+链路追踪一体化 |
|
||
| IoT | MQTT (EMQX) + Modbus网关 | 支持温湿度/客流/安防设备统一接入 |
|
||
| CDN | 阿里云CDN / 腾讯云CDN (港澳节点) | 港澳及海外访问加速 |
|
||
|
||
### 1.3 系统部署拓扑
|
||
|
||
```
|
||
┌──────────────┐
|
||
│ 公网入口 │
|
||
│ WAF + SLB │
|
||
└──────┬───────┘
|
||
│
|
||
┌──────────┴──────────┐
|
||
│ │
|
||
┌─────┴─────┐ ┌──────┴──────┐
|
||
│ 线上云区 │ │ 线下场馆区 │
|
||
│ (公有云) │ │ (私有云) │
|
||
└─────┬─────┘ └──────┬──────┘
|
||
│ │
|
||
┌──────────┴──────────┐ ┌───────┴────────┐
|
||
│ │ │ │
|
||
┌─────┴─────┐ ┌───────┴──┴──┐ ┌───────┴──────┐
|
||
│ Web/小程序 │ │ AI推理GPU集群│ │ IoT/安防/VR │
|
||
│ API网关 │ │ K8s集群 │ │ 设备网络 │
|
||
│ CDN节点 │ │ 数据库集群 │ │ 边缘计算盒子 │
|
||
└───────────┘ └─────────────┘ └──────────────┘
|
||
```
|
||
|
||
**部署策略**:
|
||
|
||
- **AI推理+数据库+知识图谱**:部署在场馆私有云,保证数据安全和低延迟;
|
||
- **Web端/小程序/云展馆**:部署在公有云,通过CDN加速港澳访问;
|
||
- **两区通过VPN专线互联**,数据按需同步;
|
||
- **全国节点**:通过S9节点协同系统远程部署组件包,各节点可独立运行。
|
||
|
||
---
|
||
|
||
## 二、AI可信知识引擎技术实现
|
||
|
||
### 2.1 整体架构
|
||
|
||
AI引擎是全馆公共能力底座,不是单一展项。采用"知识图谱 + RAG + 大模型微调"三层架构。
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ AI能力输出层 │
|
||
│ 可信馆员API 学习教练API 策展助手API 编审助手API │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 推理与编排层 │
|
||
│ 意图识别 → 路由选择 → 检索增强 → 生成 → 审核护栏 │
|
||
│ (LlamaIndex编排 + 自研路由 + 安全过滤) │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 知识检索层 │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ 知识图谱 │ │ 向量知识库│ │ 史料文档库│ │
|
||
│ │ (Neo4j) │ │ (Milvus) │ │ (PG+FTS) │ │
|
||
│ └──────────┘ └──────────┘ └──────────┘ │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 模型层 │
|
||
│ 基座大模型(Qwen2.5-72B) + 领域微调LoRA + 安全护栏模型 │
|
||
└──────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 知识图谱构建
|
||
|
||
#### 2.2.1 图谱本体设计
|
||
|
||
```
|
||
节点类型(Node Labels):
|
||
- Event 历史事件 (如: 大生产运动、延安整风)
|
||
- Person 历史人物 (如: 毛泽东、朱德、东江纵队指战员)
|
||
- Artifact 革命文物 (如: 纺车、窑洞桌椅、作战地图)
|
||
- Document 文献档案 (如: 《论持久战》、整风文献)
|
||
- Place 历史地点 (如: 延安、南泥湾、华南抗日根据地)
|
||
- Concept 精神概念 (如: 实事求是、群众路线、自力更生)
|
||
- Course 课程内容 (如: 小学红色故事课、干部廉政党课)
|
||
- Era 历史时期 (如: 延安十三年、抗战时期、改革开放)
|
||
|
||
关系类型(Relationship Types):
|
||
- OCCURRED_AT 事件→地点
|
||
- PARTICIPATED 人物→事件
|
||
- USED_ARTIFACT 事件→文物
|
||
- CITED_IN 文献→事件
|
||
- EMBODIES 事件→概念
|
||
- BELONGS_TO 事件→时期
|
||
- CONNECTS_TO 课程→事件/文物/概念
|
||
- RELATED_TO 通用关联
|
||
```
|
||
|
||
#### 2.2.2 图谱构建流程
|
||
|
||
```
|
||
权威史料入库
|
||
↓
|
||
实体识别与抽取 (NER + 人工校验)
|
||
↓
|
||
关系抽取 (RE + 专家审核)
|
||
↓
|
||
实体对齐与消歧
|
||
↓
|
||
图谱入库 (Neo4j Cypher导入)
|
||
↓
|
||
专家审核确认
|
||
↓
|
||
版本发布 (带版本号和审核标记)
|
||
```
|
||
|
||
**技术实现**:
|
||
|
||
- 使用HanLP/LTP进行中文NER,识别史料文本中的人物、地点、事件;
|
||
- 关系抽取使用大模型辅助 + 人工审核双重确认;
|
||
- 每个实体和关系必须标注史料来源(文献名+页码+原文片段);
|
||
- 图谱版本化管理:每次发布生成新版本快照,支持回滚。
|
||
|
||
#### 2.2.3 查询接口
|
||
|
||
```cypher
|
||
// 示例:查询"大生产运动"关联的所有文物、人物和概念
|
||
MATCH (e:Event {name: '大生产运动'})-[:USED_ARTIFACT]->(a:Artifact),
|
||
(e)-[:PARTICIPATED]->(p:Person),
|
||
(e)-[:EMBODIES]->(c:Concept)
|
||
RETURN a, p, c
|
||
```
|
||
|
||
提供REST API封装常用图谱查询,供各旗舰产品调用。
|
||
|
||
### 2.3 RAG检索增强系统
|
||
|
||
#### 2.3.1 架构
|
||
|
||
```
|
||
用户提问
|
||
↓
|
||
意图识别 (分类: 史实查询/概念解释/课程推荐/创作辅助)
|
||
↓
|
||
┌─────────────────────────────────────┐
|
||
│ 多级检索 │
|
||
│ 第一级: 知识图谱精确匹配 (Neo4j) │
|
||
│ 第二级: 向量语义检索 (Milvus) │
|
||
│ 第三级: 全文检索 (PostgreSQL FTS) │
|
||
└─────────────────────────────────────┘
|
||
↓
|
||
检索结果融合与排序 (Reciprocal Rank Fusion)
|
||
↓
|
||
上下文构建 (拼接检索结果 + 来源标注)
|
||
↓
|
||
大模型生成 (Qwen2.5 + 安全护栏)
|
||
↓
|
||
输出审核 (事实校验 + 政治合规过滤)
|
||
↓
|
||
返回回答 + 来源引用 + 不确定性说明
|
||
```
|
||
|
||
#### 2.3.2 向量库构建
|
||
|
||
- **Embedding模型**:使用BGE-M3(中文优化,支持中英双语);
|
||
- **分块策略**:史料文档按段落分块,每块保留来源元数据(文献名、页码、章节);
|
||
- **索引类型**:HNSW(高召回率+低延迟);
|
||
- **更新机制**:新史料入库后自动Embedding并增量插入向量库。
|
||
|
||
#### 2.3.3 引用溯源机制
|
||
|
||
每条AI回答必须包含:
|
||
|
||
```json
|
||
{
|
||
"answer": "延安大生产运动始于1939年...",
|
||
"sources": [
|
||
{
|
||
"document": "《延安精神研究》第3卷",
|
||
"page": 45,
|
||
"excerpt": "1939年2月,毛泽东在延安干部生产动员大会上提出...",
|
||
"verified": true
|
||
}
|
||
],
|
||
"confidence": "high",
|
||
"uncertainty_note": null
|
||
}
|
||
```
|
||
|
||
当检索结果不足时,返回:
|
||
|
||
```json
|
||
{
|
||
"answer": "关于该问题的史料依据尚不充分,建议咨询现场讲解员或查阅文献库。",
|
||
"sources": [],
|
||
"confidence": "low",
|
||
"uncertainty_note": "未找到权威史料支撑,已转交人工"
|
||
}
|
||
```
|
||
|
||
### 2.4 大模型微调方案
|
||
|
||
#### 2.4.1 基座模型选择
|
||
|
||
| 候选模型 | 参数量 | 优势 | 劣势 |
|
||
|---------|-------|------|------|
|
||
| Qwen2.5-72B | 72B | 中文能力强,开源许可清晰 | 推理资源需求大 |
|
||
| Qwen2.5-14B | 14B | 资源需求适中,可多卡部署 | 复杂推理略弱 |
|
||
| GLM-4-9B | 9B | 中文优化,推理效率高 | 知识广度略逊 |
|
||
|
||
**推荐策略**:
|
||
|
||
- **主力模型**:Qwen2.5-72B(4×A100 80G推理),用于复杂问答和内容生成;
|
||
- **轻量模型**:Qwen2.5-14B(2×A100 40G推理),用于实时导览和简单问答;
|
||
- **路由策略**:意图识别后自动路由到合适模型,平衡质量和延迟。
|
||
|
||
#### 2.4.2 微调数据准备
|
||
|
||
```
|
||
训练数据来源:
|
||
1. 延安精神理论著作 (经中国延安精神研究会授权)
|
||
2. 党史权威文献 (中央党史和文献研究院公开出版物)
|
||
3. 东江纵队华南抗战史 (广东省委党史研究室编审)
|
||
4. 广东改革开放史 (官方出版物)
|
||
5. 自贸区发展实践 (官方报告)
|
||
6. 太极文化史料 (非遗传承人提供)
|
||
7. 知识图谱结构化数据 (转化为指令对)
|
||
|
||
数据格式 (指令微调):
|
||
{"instruction": "用小学生能理解的语言解释什么是延安大生产运动",
|
||
"input": "",
|
||
"output": "在延安时期,因为物资非常缺少...",
|
||
"source": "《延安精神研究》第3卷p45",
|
||
"audience_level": "primary"}
|
||
```
|
||
|
||
#### 2.4.3 微调方法
|
||
|
||
- **方法**:LoRA (Low-Rank Adaptation),rank=64,alpha=128;
|
||
- **训练框架**:LLaMA-Factory / DeepSpeed;
|
||
- **训练数据量**:首期10,000条高质量指令对(经专家审核);
|
||
- **评估方式**:党史专家盲评 + 自动化事实校验 + 政治安全测试集;
|
||
- **迭代频率**:每季度补充新数据并重新微调。
|
||
|
||
#### 2.4.4 安全护栏
|
||
|
||
```
|
||
用户输入
|
||
↓
|
||
输入安全过滤 (敏感词 + 意图安全分类)
|
||
↓
|
||
RAG检索 + 大模型生成
|
||
↓
|
||
输出安全过滤:
|
||
- 事实校验: 与知识图谱交叉验证关键事实
|
||
- 政治合规: 对标三级审核规则自动检查
|
||
- 人物保护: 禁止模拟革命领袖发表新言论
|
||
- 来源强制: 无来源回答降级为"不确定"
|
||
↓
|
||
安全通过 → 返回用户
|
||
安全未通过 → 转人工审核 / 返回安全兜底回复
|
||
```
|
||
|
||
**技术实现**:
|
||
|
||
- 输入过滤:基于规则引擎(Drools)+ 轻量分类模型(BERT微调);
|
||
- 输出过滤:事实校验API(与Neo4j图谱比对)+ 规则引擎 + 关键词拦截;
|
||
- 全过程日志:记录输入、检索结果、生成内容、过滤结果、模型版本,支持审计追溯。
|
||
|
||
### 2.5 四种AI角色API设计
|
||
|
||
#### 可信馆员API
|
||
|
||
```
|
||
POST /api/ai/librarian/ask
|
||
Request:
|
||
{
|
||
"question": "延安整风运动的核心内容是什么?",
|
||
"audience": "adult", // primary/secondary/university/adult/hk_macau
|
||
"language": "zh-CN", // zh-CN / zh-HK / en
|
||
"context": { // 可选的上下文
|
||
"current_artifact_id": "art_001",
|
||
"current_zone": "zone_b"
|
||
}
|
||
}
|
||
|
||
Response:
|
||
{
|
||
"answer": "延安整风运动的核心内容是...",
|
||
"sources": [...],
|
||
"confidence": "high",
|
||
"follow_up_questions": ["整风运动对今天有什么启示?"],
|
||
"related_artifacts": ["art_002", "art_005"],
|
||
"request_id": "req_xxx" // 全链路追踪ID
|
||
}
|
||
```
|
||
|
||
#### 学习教练API
|
||
|
||
```
|
||
POST /api/ai/coach/reflect
|
||
Request:
|
||
{
|
||
"task_id": "task_nanniwan",
|
||
"team_answer": "我们决定优先种植粮食...",
|
||
"audience": "secondary"
|
||
}
|
||
|
||
Response:
|
||
{
|
||
"feedback": "你们的方案考虑了粮食优先,这符合当时'不饿死一个人'的紧迫需求。但你们是否考虑了...",
|
||
"historical_comparison": "历史上,八路军选择了...",
|
||
"follow_up_questions": ["如果工具不足怎么办?"],
|
||
"evidence_used": ["doc_003", "artifact_012"]
|
||
}
|
||
```
|
||
|
||
#### 策展助手API
|
||
|
||
```
|
||
POST /api/ai/curator/search
|
||
Request:
|
||
{
|
||
"topic": "南泥湾大生产",
|
||
"content_type": "all", // image/video/3d/document/course
|
||
"audience": "primary"
|
||
}
|
||
|
||
Response:
|
||
{
|
||
"results": [
|
||
{"type": "artifact", "id": "art_001", "title": "纺车", "relevance": 0.95},
|
||
{"type": "document", "id": "doc_003", "title": "毛泽东生产动员讲话", "relevance": 0.92}
|
||
],
|
||
"suggested_narrative": "建议以南泥湾纺车为起点,连接..."
|
||
}
|
||
```
|
||
|
||
#### 编审助手API
|
||
|
||
```
|
||
POST /api/ai/reviewer/check
|
||
Request:
|
||
{
|
||
"content": "1942年延安开展了大生产运动...",
|
||
"content_type": "exhibit_text"
|
||
}
|
||
|
||
Response:
|
||
{
|
||
"issues": [
|
||
{"type": "fact_check", "severity": "warning", "detail": "大生产运动始于1939年,非1942年", "source": "《延安精神研究》p45"},
|
||
{"type": "missing_source", "severity": "error", "detail": "该段落未标注史料来源"}
|
||
],
|
||
"compliance_status": "needs_revision",
|
||
"suggested_fixes": [...]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 三、三引擎技术实现
|
||
|
||
### 3.1 可信叙事引擎
|
||
|
||
#### 职责
|
||
|
||
把同一权威史料转化为面向不同人群的准确表达。不是AI临场改写历史,而是在已审核内容组件中进行安全编排。
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────┐
|
||
│ 可信叙事引擎 │
|
||
├────────────────┬────────────────┬──────────────────┤
|
||
│ 内容组件仓库 │ 叙事编排引擎 │ 分层表达引擎 │
|
||
│ (已审核内容块) │ (路线生成器) │ (分众适配器) │
|
||
├────────────────┼────────────────┼──────────────────┤
|
||
│ 组件元数据: │ 编排规则: │ 适配规则: │
|
||
│ - 史料来源 │ - 人群→组件集 │ - 小学: 简化表述 │
|
||
│ - 适用人群 │ - 时长→节点数 │ - 中学: 因果逻辑 │
|
||
│ - 时长估算 │ - 客流→备选节点 │ - 干部: 理论深度 │
|
||
│ - 空间位置 │ - 教学目标→必选 │ - 港澳: 双语+轻量 │
|
||
│ - 版本号 │ 节点 │ │
|
||
└────────────────┴────────────────┴──────────────────┘
|
||
```
|
||
|
||
#### 内容组件数据模型
|
||
|
||
```sql
|
||
CREATE TABLE content_components (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
title TEXT NOT NULL,
|
||
content_type VARCHAR(32) NOT NULL, -- text/audio/video/3d/interactive
|
||
source_refs JSONB NOT NULL, -- 史料来源引用列表
|
||
audience_tags JSONB NOT NULL, -- ["primary","secondary","adult","hk_macau"]
|
||
duration_min INT, -- 预估时长(分钟)
|
||
zone_id VARCHAR(32), -- 所在空间区域
|
||
learning_objectives JSONB, -- 教学目标列表
|
||
language_versions JSONB, -- {"zh-CN": "...", "zh-HK": "...", "en": "..."}
|
||
review_status VARCHAR(32) DEFAULT 'draft', -- draft/reviewed/published
|
||
reviewer_id VARCHAR(64),
|
||
reviewed_at TIMESTAMP,
|
||
version INT DEFAULT 1,
|
||
created_at TIMESTAMP DEFAULT NOW(),
|
||
updated_at TIMESTAMP DEFAULT NOW()
|
||
);
|
||
```
|
||
|
||
#### 叙事路线生成算法
|
||
|
||
```python
|
||
def generate_narrative_route(audience, duration_min, learning_goals, current_load):
|
||
"""
|
||
audience: 用户人群类型
|
||
duration_min: 可用时长
|
||
learning_goals: 学习目标列表
|
||
current_load: 各区域实时客流负载
|
||
"""
|
||
# 1. 检索适用该人群的已审核内容组件
|
||
components = query_components(
|
||
audience_tags=[audience],
|
||
review_status='published'
|
||
)
|
||
|
||
# 2. 按教学目标筛选必选节点
|
||
must_include = filter_by_goals(components, learning_goals)
|
||
|
||
# 3. 按时长约束贪心填充
|
||
route = greedy_fill(must_include, components, duration_min)
|
||
|
||
# 4. 客流负载感知:拥挤区域替换为备选节点
|
||
route = replace_overloaded_nodes(route, current_load)
|
||
|
||
# 5. 空间路径优化:按物理位置排序减少折返
|
||
route = optimize_physical_path(route)
|
||
|
||
return route
|
||
```
|
||
|
||
#### 关键API
|
||
|
||
```
|
||
POST /api/narrative/route/generate
|
||
GET /api/narrative/route/{route_id}
|
||
POST /api/narrative/route/{route_id}/adapt (实时客流适配)
|
||
GET /api/narrative/learnings/{user_id} (个人学习脉络)
|
||
```
|
||
|
||
### 3.2 学习成长引擎
|
||
|
||
#### 职责
|
||
|
||
管理每个人从提问、体验到行动和再传播的成长路径。对应F4成长护照。
|
||
|
||
#### 数据模型
|
||
|
||
```sql
|
||
-- 成长护照主表
|
||
CREATE TABLE growth_passports (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
user_id VARCHAR(64) NOT NULL,
|
||
passport_type VARCHAR(32) NOT NULL, -- youth/party/hk_macau/researcher
|
||
created_at TIMESTAMP DEFAULT NOW(),
|
||
status VARCHAR(32) DEFAULT 'active'
|
||
);
|
||
|
||
-- 学习记录
|
||
CREATE TABLE learning_records (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
passport_id VARCHAR(64) REFERENCES growth_passports(id),
|
||
record_type VARCHAR(32) NOT NULL, -- pre_visit/visit/post_visit
|
||
event_type VARCHAR(64) NOT NULL, -- question_asked/artifact_viewed/
|
||
-- task_completed/ai_interaction/
|
||
-- understanding_expressed/action_chosen/
|
||
-- feedback_submitted
|
||
event_data JSONB NOT NULL, -- 事件详情
|
||
artifact_ids JSONB, -- 关联文物
|
||
source_refs JSONB, -- 关联史料
|
||
timestamp TIMESTAMP DEFAULT NOW()
|
||
);
|
||
|
||
-- 行动承诺
|
||
CREATE TABLE action_commitments (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
passport_id VARCHAR(64) REFERENCES growth_passports(id),
|
||
action_type VARCHAR(32) NOT NULL, -- individual/team/bay_area
|
||
action_content TEXT NOT NULL,
|
||
target_days INT NOT NULL, -- 7/30/90
|
||
status VARCHAR(32) DEFAULT 'pending', -- pending/in_progress/completed/expired
|
||
created_at TIMESTAMP DEFAULT NOW(),
|
||
feedback_7d JSONB,
|
||
feedback_30d JSONB,
|
||
feedback_90d JSONB
|
||
);
|
||
|
||
-- 团队学习
|
||
CREATE TABLE team_learning (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
team_name VARCHAR(128),
|
||
organization VARCHAR(128),
|
||
learning_goal TEXT,
|
||
route_id VARCHAR(64),
|
||
member_ids JSONB NOT NULL,
|
||
created_at TIMESTAMP DEFAULT NOW()
|
||
);
|
||
```
|
||
|
||
#### 7/30/90天回访机制
|
||
|
||
```
|
||
用户离馆时选择行动
|
||
↓
|
||
系统创建action_commitment记录
|
||
↓
|
||
定时任务(Scheduled Task):
|
||
- 第7天: 推送回顾消息(微信/短信/邮件) → 用户点击 → 记录feedback_7d
|
||
- 第30天: 推送进展反馈表单 → 用户提交 → 记录feedback_30d
|
||
- 第90天: 推送成果提交入口 → 用户提交作品/实践记录 → 记录feedback_90d
|
||
↓
|
||
反馈数据进入S8数据中台 → 计算北极星指标
|
||
```
|
||
|
||
**技术实现**:
|
||
|
||
- 定时任务:使用XXL-Job分布式任务调度;
|
||
- 消息推送:微信模板消息 + 短信网关 + 邮件SMTP;
|
||
- 反馈表单:H5页面 + 小程序页面,数据写入PostgreSQL。
|
||
|
||
### 3.3 复制运营引擎
|
||
|
||
#### 职责
|
||
|
||
把内容、课程、体验和运营方法打包输出到全国节点。对应F8星火节点和S9节点协同。
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ 旗舰中心 (L4) │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ 组件仓库 │ │ 版本管理 │ │ 节点管理 │ │
|
||
│ │ Registry │ │ Release │ │ Registry │ │
|
||
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
|
||
│ │ │ │ │
|
||
│ └──────┬──────┘ │ │
|
||
│ │ │ │
|
||
│ 组件打包发布 │ │
|
||
│ │ │ │
|
||
└──────────────┼────────────────────┘ │
|
||
│ (HTTPS API / 离线包) │
|
||
┌──────────┼──────────┐ │
|
||
│ │ │ │
|
||
┌───┴───┐ ┌───┴───┐ ┌───┴───┐ │
|
||
│ L1节点 │ │ L2节点 │ │ L3节点 │ ... │
|
||
│ 微节点 │ │ 标准节点│ │ 城市节点│ │
|
||
└───────┘ └───────┘ └───────┘ │
|
||
```
|
||
|
||
#### 组件包格式
|
||
|
||
```json
|
||
{
|
||
"package_id": "pkg_2026_q3_v1",
|
||
"package_type": "standard_exhibition",
|
||
"version": "1.0.0",
|
||
"contents": {
|
||
"knowledge": {
|
||
"graph_snapshot": "kg_2026q3.graphml",
|
||
"vector_index": "vec_2026q3.bin",
|
||
"term_dict": "terms_bilingual.json"
|
||
},
|
||
"courses": [
|
||
{"id": "course_001", "files": ["course_001.json", "course_001_media.zip"]}
|
||
],
|
||
"experiences": [
|
||
{"id": "task_nanniwan", "files": ["task_nanniwan.json", "task_nanniwan_3d.glb"]}
|
||
],
|
||
"operations": {
|
||
"sop_documents": "sop_2026q3.pdf",
|
||
"config_templates": "config_templates.json"
|
||
},
|
||
"tech": {
|
||
"api_specs": "openapi_2026q3.yaml",
|
||
"deploy_templates": "helm_charts/",
|
||
"data_dictionary": "data_dict_2026q3.json"
|
||
}
|
||
},
|
||
"min_hardware": {"screen": true, "internet": true},
|
||
"install_script": "install.sh",
|
||
"checksum": "sha256:..."
|
||
}
|
||
```
|
||
|
||
#### 节点协同API
|
||
|
||
```
|
||
POST /api/s9/node/register 节点注册
|
||
GET /api/s9/node/{node_id} 节点信息
|
||
POST /api/s9/package/publish 发布组件包
|
||
GET /api/s9/package/list 可用组件包列表
|
||
POST /api/s9/node/{node_id}/deploy 向节点部署组件包
|
||
GET /api/s9/node/{node_id}/health 节点健康状态
|
||
POST /api/s9/node/{node_id}/content 节点提交本地内容
|
||
GET /api/s9/metrics/compare 节点效果对比
|
||
```
|
||
|
||
---
|
||
|
||
## 四、八个旗舰产品技术实现
|
||
|
||
### 4.1 F1"一馆千面"自适应叙事空间
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ F1 自适应叙事空间系统 │
|
||
├────────────────┬────────────────┬────────────────────┤
|
||
│ 入馆选择终端 │ 空间联动控制 │ 学习脉络生成 │
|
||
│ (自助机/小程序) │ (X1编排引擎) │ (离馆报告) │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ 用户画像采集: │ 设备联动: │ 报告内容: │
|
||
│ - 人群类型(选择) │ - 屏幕内容切换 │ - 路线节点列表 │
|
||
│ - 学习问题(选择) │ - 灯光场景切换 │ - 查看过的文物 │
|
||
│ - 可用时长(选择) │ - 音频导览切换 │ - 完成的任务 │
|
||
│ - 语言(选择) │ - AI讲解适配 │ - AI问答记录 │
|
||
│ │ - 互动任务推送 │ - 个人理解表达 │
|
||
│ │ - 客流实时感知 │ - 推荐后续学习 │
|
||
└────────────────┴────────────────┴────────────────────┘
|
||
```
|
||
|
||
#### 空间联动控制技术
|
||
|
||
**X1全场景体验编排引擎**是F1的技术核心:
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ X1 体验编排引擎 │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 输入: │
|
||
│ - 用户路线(来自可信叙事引擎) │
|
||
│ - 实时位置(UWB定位) │
|
||
│ - 实时客流(摄像头+IoT) │
|
||
│ - 设备状态(监控) │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 编排逻辑: │
|
||
│ 1. 用户进入区域 → 匹配路线节点 │
|
||
│ 2. 查询该节点对应的内容组件 │
|
||
│ 3. 下发指令到对应设备: │
|
||
│ - 屏幕: 播放对应内容(WebSocket推送) │
|
||
│ - 灯光: 切换场景灯光(DMX/Art-Net协议) │
|
||
│ - 音频: 播放对应导览(RTP/RTSP流) │
|
||
│ - AI终端: 加载对应讲解上下文 │
|
||
│ - 互动设备: 激活对应任务 │
|
||
│ 4. 客流拥挤 → 切换备选节点 → 重新下发指令 │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 输出: │
|
||
│ - 设备控制指令(WebSocket/MQTT) │
|
||
│ - 用户学习记录(写入学习成长引擎) │
|
||
│ - 客流调度信号(反馈给S3智慧场馆) │
|
||
└──────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**设备控制协议**:
|
||
|
||
| 设备类型 | 控制协议 | 技术方案 |
|
||
|---------|---------|---------|
|
||
| LED屏幕/投影 | WebSocket + 媒体服务器API | 通过媒体服务器(如Resolume)控制播放内容 |
|
||
| 灯光系统 | Art-Net / sACN (DMX512 over IP) | 灯光场景预设 + 编排引擎触发切换 |
|
||
| 音频系统 | RTP / RTSP / AirPlay | 分区音频矩阵控制,按区域播放不同内容 |
|
||
| VR/AR设备 | Unity + WebSocket | Unity客户端接收编排指令,切换场景 |
|
||
| 互动终端 | WebSocket + REST API | 触屏终端接收任务推送和内容更新 |
|
||
| AI数字人 | gRPC + Unreal Engine | 远程驱动数字人表情、口型和语音 |
|
||
|
||
#### UWB室内定位
|
||
|
||
```
|
||
硬件: UWB锚点(天花板安装) + UWB标签(手环/胸卡)
|
||
精度: 10-30cm
|
||
频率: 10Hz更新
|
||
数据流:
|
||
UWB锚点 → 位置引擎(TDOA算法) → 位置坐标(x,y,z)
|
||
→ Kafka → X1编排引擎 → 区域判定 → 设备联动
|
||
```
|
||
|
||
#### 具体场景示例:香港中学生小陈的45分钟参观
|
||
|
||
```
|
||
入场前 (参观前一天):
|
||
├── 小陈通过学校统一预约,收到微信小程序链接
|
||
├── 打开小程序导学页面:
|
||
│ ├── 选择人群类型: 「中学生」
|
||
│ ├── 选择学习问题: 「延安精神和我们有什么关系?」
|
||
│ ├── 选择可用时长: 「45分钟」
|
||
│ ├── 选择语言: 「繁体中文」
|
||
│ └── 系统生成推荐路线 (6个节点,含1个VR体验)
|
||
├── 系统推送导学材料:
|
||
│ ├── 3分钟短视频: 「延安在哪里?为什么去延安?」
|
||
│ └── 预习思考题: 「如果你是1939年的香港青年,你会去延安吗?」
|
||
└── 小陈完成预习,系统记录到成长护照
|
||
|
||
入馆 (第0分钟):
|
||
├── 小陈在入馆终端刷身份证 + 扫小程序码
|
||
├── 系统识别身份,调取已生成的路线
|
||
├── 领取UWB手环(编号关联到小陈的护照)
|
||
└── 路线推送至小程序:
|
||
节点1→延安十三年全景(8min) → 节点2→南泥湾大生产文物(10min)
|
||
→ 节点3→VR沉浸体验:南泥湾(8min) → 节点4→东江纵队展区(7min)
|
||
→ 节点5→改革开放蛇口展区(7min) → 节点6→行动选择(5min)
|
||
|
||
节点1: 延安十三年全景 (第0-8分钟):
|
||
├── UWB检测小陈进入「序厅A区」
|
||
├── X1编排引擎下发指令:
|
||
│ ├── 环形屏幕: 播放繁体中文字幕版「延安十三年」全景影像
|
||
│ ├── 灯光: 暖黄色调(窑洞氛围)
|
||
│ ├── 音频: 繁体中文语音导览
|
||
│ └── AI终端: 加载「中学生+繁体」讲解上下文
|
||
├── 小陈通过AI终端提问:
|
||
│ 「为什么延安能成为革命中心?」
|
||
│ → AI可信馆员回答(附史料引用,繁体中文)
|
||
└── 系统记录: AI问答1次,停留8分钟
|
||
|
||
节点2: 南泥湾大生产文物 (第8-18分钟):
|
||
├── UWB检测小陈进入「文物展区B区」
|
||
├── X1编排引擎下发指令:
|
||
│ ├── 展柜屏幕: 播放纺车3D旋转动画 + 繁体说明
|
||
│ ├── 灯光: 聚焦展柜,环境光降低
|
||
│ └── 互动终端: 激活「纺车操作体验」互动
|
||
├── 小陈扫描文物二维码 → 手机显示纺车五层内容星图
|
||
├── 小陈操作互动终端体验虚拟纺纱
|
||
└── 系统记录: 查看文物3件,互动1次,停留10分钟
|
||
|
||
节点3: VR沉浸体验 (第18-28分钟):
|
||
├── 小陈到达VR体验区,排队等待(约3分钟)
|
||
│ └── 排队区屏幕播放: 南泥湾历史背景 + VR操作教学
|
||
├── 进入VR工位,佩戴Pico头显 + 触觉背心
|
||
├── VR场景加载: 南泥湾大生产(繁体中文UI)
|
||
├── 体验内容:
|
||
│ ├── 挥锄开荒(座椅前倾+背心振动+微风)
|
||
│ ├── 操作纺车(座椅节律振动+背心腰部振动)
|
||
│ └── 丰收场景(座椅加速感+全身振动+温暖气流)
|
||
├── VR内AI NPC(老乡形象)讲解大生产背景
|
||
└── 系统记录: VR体验完成,停留10分钟(含排队)
|
||
|
||
节点4: 东江纵队展区 (第28-35分钟):
|
||
├── UWB检测小陈进入「华南抗战D区」
|
||
├── X1编排引擎下发指令:
|
||
│ ├── 屏幕播放: 东江纵队港九大队营救文化名人
|
||
│ ├── 灯光: 冷色调(战争氛围)
|
||
│ └── AI终端: 加载东江纵队相关史料上下文
|
||
├── 小陈发现「香港」相关内容,产生共鸣
|
||
├── AI终端提问:
|
||
│ 「东江纵队和香港有什么关系?」
|
||
│ → AI回答港九大队营救何香凝、茅盾等文化名人
|
||
└── 系统记录: AI问答1次,查看文物2件,停留7分钟
|
||
|
||
节点5: 改革开放蛇口展区 (第35-42分钟):
|
||
├── UWB检测小陈进入「改革开放E区」
|
||
├── X1编排引擎下发指令:
|
||
│ ├── 屏幕播放: 蛇口工业区「时间就是金钱」场景
|
||
│ ├── 灯光: 明亮现代色调
|
||
│ └── 互动终端: 激活「如果你是蛇口建设者」决策互动
|
||
├── 小陈完成互动决策,系统生成对比分析
|
||
└── 系统记录: 互动1次,停留7分钟
|
||
|
||
节点6: 行动选择 (第42-47分钟):
|
||
├── 小陈进入「行动实验室F区」
|
||
├── 终端展示: 基于参观记录推荐的行动方向
|
||
│ ├── 个人行动: 「采访一位长辈,记录他们知道的延安故事」
|
||
│ ├── 团队行动: 「和同学一起制作一个关于东江纵队的短视频」
|
||
│ └── 湾区行动: 「参加湾区青年红色文化研学营」
|
||
├── 小陈选择: 团队行动「制作东江纵队短视频」
|
||
├── 系统生成行动卡片,写入成长护照
|
||
└── 系统设置: 7天/30天/90天回访提醒
|
||
|
||
离馆 (第47分钟):
|
||
├── 小陈在小程序查看离馆报告:
|
||
│ ├── 路线完成度: 6/6节点 (100%)
|
||
│ ├── 查看文物: 8件
|
||
│ ├── AI问答: 2次
|
||
│ ├── VR体验: 1次
|
||
│ ├── 互动任务: 2次
|
||
│ ├── 理解表达: (待填写)
|
||
│ └── 行动承诺: 制作东江纵队短视频(30天)
|
||
├── 小陈填写理解表达:
|
||
│ 「我以前觉得延安精神离我很远,但看到东江纵队在香港的故事,
|
||
│ 我觉得延安精神就是不怕困难、敢做别人没做过的事。」
|
||
├── 报告生成PDF,可分享到社交媒体
|
||
└── UWB手环归还
|
||
|
||
离馆后:
|
||
├── 第7天: 微信推送回顾消息 + 东江纵队延伸阅读
|
||
├── 第30天: 推送进展反馈表单 → 小陈提交短视频初稿
|
||
├── 第90天: 推送成果提交 → 小陈提交完成的短视频
|
||
├── 优秀视频入选F6青年共创平台展示
|
||
└── 小陈的成长护照记录完整闭环
|
||
```
|
||
|
||
### 4.2 F2"十三年·十三问"历史情境任务剧场
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ F2 情境任务剧场系统 │
|
||
├────────────────┬────────────────┬────────────────────┤
|
||
│ 任务引擎 │ 团队协作终端 │ AI复盘引擎 │
|
||
│ (剧本+状态机) │ (多屏互动) │ (学习教练API) │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ 任务定义: │ 协作方式: │ 复盘内容: │
|
||
│ - 历史问题 │ - 主屏: 情境展示 │ - 团队方案 vs 历史 │
|
||
│ - 角色分配 │ - 分屏: 证据查看 │ - AI追问(史料引用) │
|
||
│ - 资源约束 │ - 个人终端: 决策 │ - 证据使用分析 │
|
||
│ - 证据集 │ - 团队屏: 方案汇总│ - 现实连接问题 │
|
||
│ - 历史事实 │ │ │
|
||
│ - 评价维度 │ │ │
|
||
└────────────────┴────────────────┴────────────────────┘
|
||
```
|
||
|
||
#### 任务状态机
|
||
|
||
```python
|
||
class TaskStateMachine:
|
||
states = [
|
||
"INTRO", # 任务介绍
|
||
"ROLE_ASSIGN", # 角色分配
|
||
"EVIDENCE_REVIEW", # 证据查看
|
||
"TEAM_DISCUSSION", # 团队讨论
|
||
"DECISION_SUBMIT", # 方案提交
|
||
"HISTORY_REVEAL", # 历史揭示
|
||
"AI_REVIEW", # AI复盘
|
||
"REALITY_LINK", # 现实连接
|
||
"REPORT_GENERATE" # 报告生成
|
||
]
|
||
|
||
transitions = [
|
||
("INTRO", "ROLE_ASSIGN"),
|
||
("ROLE_ASSIGN", "EVIDENCE_REVIEW"),
|
||
("EVIDENCE_REVIEW", "TEAM_DISCUSSION"),
|
||
("TEAM_DISCUSSION", "DECISION_SUBMIT"),
|
||
("DECISION_SUBMIT", "HISTORY_REVEAL"),
|
||
("HISTORY_REVEAL", "AI_REVIEW"),
|
||
("AI_REVIEW", "REALITY_LINK"),
|
||
("REALITY_LINK", "REPORT_GENERATE")
|
||
]
|
||
```
|
||
|
||
#### 任务定义数据模型
|
||
|
||
```sql
|
||
CREATE TABLE scenario_tasks (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
title TEXT NOT NULL,
|
||
era VARCHAR(32) NOT NULL, -- 延安十三年中的具体时期
|
||
historical_question TEXT NOT NULL, -- 真实历史问题
|
||
duration_min INT DEFAULT 20,
|
||
roles JSONB NOT NULL, -- 角色列表及资源约束
|
||
evidence JSONB NOT NULL, -- 证据集(文物/档案/地图/口述史)
|
||
historical_fact JSONB NOT NULL, -- 真实历史进程和结果
|
||
reality_question TEXT, -- 当代湾区现实连接问题
|
||
evaluation_dims JSONB NOT NULL, -- 评价维度
|
||
review_status VARCHAR(32) DEFAULT 'draft',
|
||
version INT DEFAULT 1
|
||
);
|
||
```
|
||
|
||
#### 复盘报告生成
|
||
|
||
```
|
||
团队方案提交
|
||
↓
|
||
AI学习教练API分析:
|
||
- 提取团队方案关键词
|
||
- 与历史事实比对
|
||
- 分析证据使用情况
|
||
- 生成追问问题
|
||
↓
|
||
报告模板渲染:
|
||
- 使用过的史料列表
|
||
- 团队方案摘要
|
||
- 历史事实对比
|
||
- AI复盘评语
|
||
- 现实行动建议
|
||
↓
|
||
PDF/H5报告生成 → 推送到团队终端 → 存入成长护照
|
||
```
|
||
|
||
#### 具体场景示例:南泥湾大生产任务剧本
|
||
|
||
```json
|
||
{
|
||
"task_id": "task_nanniwan",
|
||
"title": "如何在「不饿死一个人」的前提下实现自给?",
|
||
"era": "1941-1943",
|
||
"duration_min": 20,
|
||
"historical_question": "1941年,国民党对陕甘宁边区实行经济封锁,外援断绝。你是八路军三五九旅的一员,奉命进驻南泥湾开荒生产。你面前有5000亩荒地、有限的农具和种子、即将到来的冬天。你如何制定生产计划,确保部队和百姓都能度过难关?",
|
||
"roles": [
|
||
{
|
||
"role_id": "commander",
|
||
"title": "旅长",
|
||
"resources": ["5000亩荒地", "2000名战士", "有限农具", "3个月时间"],
|
||
"constraints": ["不能向百姓征粮", "必须保留一定战斗训练时间", "冬天前必须有收成"],
|
||
"decision_power": "最终决策权"
|
||
},
|
||
{
|
||
"role_id": "production_chief",
|
||
"title": "生产队长",
|
||
"resources": ["种子库存清单", "农具清单", "劳动力分配表"],
|
||
"constraints": ["种子有限必须合理分配", "农具不足需要自制"],
|
||
"decision_power": "生产方案建议权"
|
||
},
|
||
{
|
||
"role_id": "logistics",
|
||
"title": "后勤处长",
|
||
"resources": ["粮食储备清单", "百姓人口数据", "冬季物资需求"],
|
||
"constraints": ["现有粮食只够45天", "百姓也需要粮食"],
|
||
"decision_power": "粮食分配建议权"
|
||
},
|
||
{
|
||
"role_id": "political",
|
||
"title": "政治指导员",
|
||
"resources": ["战士思想状况报告", "动员材料"],
|
||
"constraints": ["战士情绪波动", "有人质疑「当兵的为什么要种地」"],
|
||
"decision_power": "动员方案建议权"
|
||
}
|
||
],
|
||
"evidence": [
|
||
{
|
||
"type": "document",
|
||
"id": "doc_mao_1939",
|
||
"title": "毛泽东:自己动手,丰衣足食(1939年生产动员讲话)",
|
||
"excerpt": "「我们不要饿死一个人,也不要困死一个人...我们要自己动手,解决吃穿问题。」",
|
||
"source": "《毛泽东选集》第二卷"
|
||
},
|
||
{
|
||
"type": "artifact",
|
||
"id": "art_spinning_wheel",
|
||
"title": "三五九旅纺车",
|
||
"description": "战士们用废木料自制的纺车,用于纺纱织布",
|
||
"image_url": "art_spinning_wheel.jpg",
|
||
"model_3d_url": "art_spinning_wheel.glb"
|
||
},
|
||
{
|
||
"type": "document",
|
||
"id": "doc_wangzhen_report",
|
||
"title": "王震:三五九旅南泥湾生产报告(1943年)",
|
||
"excerpt": "「第一年开荒一万亩,产粮千余石;第二年开荒两万六千亩...」",
|
||
"source": "陕甘宁边区财政经济史"
|
||
},
|
||
{
|
||
"type": "photo",
|
||
"id": "photo_nanniwan_1942",
|
||
"title": "南泥湾开荒照片(1942年)",
|
||
"description": "战士们在荒地上挥锄开荒的历史照片"
|
||
},
|
||
{
|
||
"type": "oral_history",
|
||
"id": "oral_veteran_001",
|
||
"title": "老战士口述:南泥湾的第一个冬天",
|
||
"excerpt": "「没有房子,我们就挖窑洞;没有农具,就用废铁打锄头...」",
|
||
"source": "延安革命纪念馆口述史项目"
|
||
}
|
||
],
|
||
"historical_fact": {
|
||
"what_happened": "三五九旅1941年3月进驻南泥湾,当年开荒1.1万亩,产粮1200石。到1943年,开荒面积达26.1万亩,产粮3.7万石,实现了「不要公家一粒米、一寸布、一文钱」的自给目标。",
|
||
"key_decisions": [
|
||
"优先种植生长周期短的粮食作物(小米、玉米)",
|
||
"组织战士自制农具(用废铁打造锄头、犁)",
|
||
"挖窑洞解决住宿,不占用百姓房屋",
|
||
"开展生产竞赛,激发劳动热情",
|
||
"保留每日2小时军事训练"
|
||
],
|
||
"outcome": "南泥湾从「荒山臭水黑泥潭」变为「陕北好江南」,成为大生产运动的旗帜。",
|
||
"spirit_connection": "自力更生、艰苦奋斗的延安精神"
|
||
},
|
||
"reality_question": "如果你所在的社区/学校面临资源短缺,你能从南泥湾经验中学到什么?你会如何用有限的资源解决一个实际问题?",
|
||
"evaluation_dims": [
|
||
{"dim": "证据使用", "weight": 0.25, "description": "是否充分使用了提供的史料"},
|
||
{"dim": "方案可行性", "weight": 0.25, "description": "方案在历史条件下是否可行"},
|
||
{"dim": "团队协作", "weight": 0.20, "description": "各角色是否充分履职协作"},
|
||
{"dim": "精神理解", "weight": 0.15, "description": "是否理解自力更生的精神内核"},
|
||
{"dim": "现实迁移", "weight": 0.15, "description": "能否将历史经验迁移到现实问题"}
|
||
]
|
||
}
|
||
```
|
||
|
||
**体验流程**:
|
||
|
||
```
|
||
1. INTRO (2分钟): 主屏播放南泥湾历史背景视频
|
||
2. ROLE_ASSIGN (1分钟): 4人分配角色(旅长/生产队长/后勤处长/政治指导员)
|
||
3. EVIDENCE_REVIEW (5分钟):
|
||
- 各角色查看专属证据(分屏显示)
|
||
- 可查看公共证据集(5条史料)
|
||
- VR模式: 在虚拟南泥湾场景中查看3D文物和文献
|
||
4. TEAM_DISCUSSION (5分钟):
|
||
- 团队讨论生产计划
|
||
- 各角色提出资源约束和建议
|
||
- VR模式: 在虚拟窑洞中围坐讨论
|
||
5. DECISION_SUBMIT (2分钟):
|
||
- 旅长综合意见,提交最终方案
|
||
- 方案格式: {作物选择, 劳动力分配, 农具方案, 粮食分配, 动员策略}
|
||
6. HISTORY_REVEAL (2分钟):
|
||
- 主屏揭示历史事实: 三五九旅的真实做法和成果
|
||
- 对比团队方案与历史方案的差异
|
||
7. AI_REVIEW (2分钟):
|
||
- AI学习教练分析:
|
||
「你们的方案优先种植粮食,这和历史上一致。但你们没有考虑自制农具,
|
||
而三五九旅用废铁打造了锄头和犁——这正是「自力更生」的体现。」
|
||
- 追问: 「如果种子不够,你们会怎么办?」
|
||
8. REALITY_LINK (1分钟):
|
||
- 展示现实连接问题
|
||
- 引导思考: 南泥湾经验对今天的启示
|
||
9. REPORT_GENERATE:
|
||
- 生成复盘报告PDF
|
||
- 写入团队所有成员的成长护照
|
||
```
|
||
|
||
### 4.3 F3"一物一世界"革命文物数字生命工程
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ F3 文物数字生命系统 │
|
||
├────────────────┬────────────────┬────────────────────┤
|
||
│ 数字采集管理 │ 五层内容管理 │ 关系星图引擎 │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ 3D扫描: │ 五层结构: │ 可视化: │
|
||
│ - 激光扫描任务 │ L1看见: 图像/3D │ - D3.js力导向图 │
|
||
│ - 摄影测量任务 │ L2知道: 元数据 │ - 交互式星图 │
|
||
│ - 质量检测 │ L3理解: 关联网络│ - 时间轴 │
|
||
│ - 元数据录入 │ L4研究: 档案 │ - 点击节点展开 │
|
||
│ │ L5连接: 课程/任务│ │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ 数字修复工作台 │ 展示终端 │ 组件生成器 │
|
||
│ (Blender插件) │ (扫码→星图) │ (一物一课/短片) │
|
||
└────────────────┴────────────────┴────────────────────┘
|
||
```
|
||
|
||
#### 文物数据模型
|
||
|
||
```sql
|
||
CREATE TABLE artifacts (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
name TEXT NOT NULL,
|
||
era VARCHAR(32),
|
||
level VARCHAR(32), -- 一级/二级/三级
|
||
origin TEXT,
|
||
material TEXT,
|
||
dimensions JSONB, -- 尺寸
|
||
condition TEXT, -- 保存状况
|
||
status VARCHAR(32), -- on_display/in_storage/on_loan/repairing
|
||
-- 数字资产
|
||
model_3d_url TEXT, -- 3D模型MinIO路径
|
||
model_3d_format VARCHAR(32), -- glb/gltf/obj
|
||
images JSONB, -- 高清图片列表
|
||
-- 五层内容
|
||
layer1_see JSONB, -- 看见层内容
|
||
layer2_know JSONB, -- 知道层内容
|
||
layer3_understand JSONB, -- 理解层: 关联人物/事件/地点/文献
|
||
layer4_research JSONB, -- 研究层: 原始档案/专家解读/争议
|
||
layer5_connect JSONB, -- 连接层: 对应课程/任务/创作
|
||
-- 知识图谱关联
|
||
graph_node_id VARCHAR(64), -- Neo4j中的Artifact节点ID
|
||
-- 版本与审核
|
||
review_status VARCHAR(32) DEFAULT 'draft',
|
||
version INT DEFAULT 1,
|
||
created_at TIMESTAMP DEFAULT NOW()
|
||
);
|
||
```
|
||
|
||
#### 关系星图前端实现
|
||
|
||
```javascript
|
||
// 使用D3.js力导向图渲染文物关系网络
|
||
const svg = d3.select("#artifact-starmap");
|
||
const simulation = d3.forceSimulation(nodes)
|
||
.force("link", d3.forceLink(links).id(d => d.id))
|
||
.force("charge", d3.forceManyBody().strength(-300))
|
||
.force("center", d3.forceCenter(width / 2, height / 2));
|
||
|
||
// 节点类型颜色编码
|
||
const colorMap = {
|
||
Event: "#e74c3c", // 红色 - 事件
|
||
Person: "#3498db", // 蓝色 - 人物
|
||
Place: "#2ecc71", // 绿色 - 地点
|
||
Document: "#f39c12", // 橙色 - 文献
|
||
Concept: "#9b59b6", // 紫色 - 概念
|
||
Course: "#1abc9c" // 青色 - 课程
|
||
};
|
||
|
||
// 点击节点展开详情面板
|
||
node.on("click", (event, d) => {
|
||
showDetailPanel(d); // 显示该节点的五层内容
|
||
});
|
||
```
|
||
|
||
#### 3D模型展示
|
||
|
||
- **格式**:glTF 2.0 (.glb),Web标准3D格式,支持Web和原生加载;
|
||
- **Web展示**:Three.js + OrbitControls,支持旋转、缩放、测量;
|
||
- **高精度研究版**:WebGPU渲染,支持法线贴图、PBR材质;
|
||
- **轻量公众版**:减面+压缩纹理,适配移动端;
|
||
- **推测性复原标识**:在UI上用不同颜色边框区分"史实确认"和"推测复原"。
|
||
|
||
#### 具体场景示例:纺车(art_spinning_wheel)五层内容
|
||
|
||
```
|
||
文物基本信息:
|
||
名称: 三五九旅纺车
|
||
年代: 1941-1943
|
||
级别: 一级革命文物
|
||
材质: 木材、铁钉、棉线
|
||
尺寸: 长85cm × 宽40cm × 高70cm
|
||
来源: 南泥湾三五九旅旧址
|
||
现状: 完整,木质有自然老化
|
||
|
||
L1 看见层 (人人可看):
|
||
├── 3D模型: 可360°旋转查看(Three.js渲染)
|
||
├── 高清图片: 6个角度高清照片
|
||
├── 基本信息: 名称/年代/材质/尺寸
|
||
└── 简要说明: 「这是三五九旅战士在南泥湾用废木料自制的纺车」
|
||
|
||
L2 知道层 (元数据):
|
||
├── 使用者: 八路军三五九旅战士
|
||
├── 使用地点: 南泥湾
|
||
├── 使用时间: 1941-1943年
|
||
├── 功能: 纺纱织布,解决穿衣问题
|
||
├── 制作材料: 废木料、废铁钉(就地取材)
|
||
└── 文物级别: 一级
|
||
|
||
L3 理解层 (关联网络 → 星图):
|
||
├── 关联事件: 南泥湾大生产(1941-1943)
|
||
├── 关联人物: 王震(三五九旅旅长)、毛泽东(发起大生产运动)
|
||
├── 关联地点: 南泥湾(延安东南)
|
||
├── 关联文献: 《毛泽东选集》「自己动手,丰衣足食」
|
||
├── 关联概念: 自力更生、艰苦奋斗
|
||
└── 星图可视化: D3.js力导向图,纺车为中心节点
|
||
→ 连接5个事件节点、3个人物节点、2个地点节点、
|
||
4个文献节点、2个概念节点
|
||
|
||
L4 研究层 (深度档案):
|
||
├── 原始档案: 三五九旅生产报告(1943年)摘录
|
||
├── 专家解读: 延安革命纪念馆研究员视频讲解(8分钟)
|
||
├── 历史争议: 纺车设计是否参考了民间传统纺车?
|
||
├── 修复记录: 2015年文物保护修复全过程文档
|
||
├── 同类文物对比: 晋绥边区纺车、太行山区纺车对比表
|
||
└── 口述史: 老战士回忆纺纱经历(录音+文字稿)
|
||
|
||
L5 连接层 (课程与行动):
|
||
├── 对应课程:
|
||
│ ├── 小学: 「南泥湾的故事」(15分钟动画课)
|
||
│ ├── 中学: 「自力更生的力量」(45分钟探究课)
|
||
│ └── 干部: 「从南泥湾看艰苦奋斗精神」(90分钟专题课)
|
||
├── 对应任务: F2南泥湾情境任务(作为可交互证据)
|
||
├── 对应VR: VR南泥湾场景中的可操作文物
|
||
├── 创作素材: 可用于F6青年共创的3D模型和史料
|
||
└── 行动连接: F7「用有限资源解决一个问题」行动模板
|
||
```
|
||
|
||
**扫码体验流程**:
|
||
|
||
```
|
||
观众在展柜前扫描文物二维码
|
||
↓
|
||
手机加载文物星图H5页面
|
||
↓
|
||
默认显示L1看见层: 3D模型 + 基本信息
|
||
↓
|
||
向上滑动 → L2知道层: 元数据卡片
|
||
↓
|
||
点击星图节点 → L3理解层: 关联网络可视化
|
||
↓
|
||
点击「深度研究」→ L4研究层: 档案文献
|
||
↓
|
||
点击「相关课程」→ L5连接层: 课程推荐
|
||
↓
|
||
点击「做一做」→ 跳转到F7行动选择
|
||
```
|
||
|
||
### 4.4 F4"一人一程"成长护照
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ F4 成长护照系统 │
|
||
├────────────────┬────────────────┬────────────────────┤
|
||
│ 参观前导学 │ 参观中记录 │ 离馆后回访 │
|
||
│ (小程序/H5) │ (终端+UWB+RFID)│ (定时推送+反馈) │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ - 人群选择 │ - 文物查看记录 │ - 第7天推送回顾 │
|
||
│ - 问题选择 │ - 任务完成记录 │ - 第30天进展反馈 │
|
||
│ - 团队目标创建 │ - AI问答记录 │ - 第90天成果提交 │
|
||
│ - 参观建议生成 │ - 理解表达记录 │ - 后续课程推荐 │
|
||
│ - 导学材料推送 │ - 行动选择记录 │ - 临展/活动提醒 │
|
||
└────────────────┴────────────────┴────────────────────┘
|
||
```
|
||
|
||
#### 前端技术方案
|
||
|
||
| 场景 | 技术方案 | 理由 |
|
||
|------|---------|------|
|
||
| 参观前导学 | 微信小程序 + H5 | 无需下载,覆盖面广 |
|
||
| 参观中记录 | 小程序 + UWB手环联动 | 自动记录位置,手动记录学习 |
|
||
| 离馆报告 | H5页面 + PDF下载 | 即时生成,可分享 |
|
||
| 离馆后回访 | 微信模板消息 + 小程序 | 触达率高,体验连贯 |
|
||
| 港澳青年 | 独立H5门户(繁体/英文) | 不依赖微信,支持港澳访问 |
|
||
|
||
#### 数据采集边界
|
||
|
||
```python
|
||
# 允许采集的数据
|
||
ALLOWED_DATA = {
|
||
"audience_type": "用户主动选择", # 人群类型
|
||
"learning_question": "用户主动输入", # 学习问题
|
||
"duration_choice": "用户主动选择", # 可用时长
|
||
"language_choice": "用户主动选择", # 语言偏好
|
||
"viewed_artifacts": "UWB/RFID自动记录", # 查看过的文物ID
|
||
"completed_tasks": "系统自动记录", # 完成的任务ID
|
||
"ai_qa_log": "系统自动记录", # AI问答记录(脱敏)
|
||
"understanding_text": "用户主动输入", # 理解表达
|
||
"action_choice": "用户主动选择", # 行动承诺
|
||
"feedback_text": "用户主动提交" # 回访反馈
|
||
}
|
||
|
||
# 禁止采集的数据
|
||
FORBIDDEN_DATA = [
|
||
"人脸特征",
|
||
"情绪识别结果",
|
||
"政治倾向推断",
|
||
"宗教信仰推断",
|
||
"非主动行为的态度标签",
|
||
"未成年人非必要个人信息"
|
||
]
|
||
```
|
||
|
||
#### 具体场景示例:党员干部老张的完整学习旅程
|
||
|
||
```
|
||
参观前 (提前一周):
|
||
├── 老张收到单位通知,扫码进入小程序
|
||
├── 选择人群类型: 「党员干部」
|
||
├── 选择学习问题:
|
||
│ 「延安整风运动对今天党的作风建设有什么启示?」
|
||
├── 选择可用时长: 「半天(3小时)」
|
||
├── 选择语言: 「简体中文」
|
||
├── 系统生成路线: 8个节点(含2个情境任务+1个VR)
|
||
├── 推送导学材料:
|
||
│ ├── 文献: 《改造我们的学习》原文
|
||
│ ├── 视频: 延安整风历史背景(15分钟)
|
||
│ └── 预习问题: 整风运动要解决的核心问题是什么?
|
||
└── 老张完成预习,护照记录「导学完成」
|
||
|
||
参观中 (3小时):
|
||
├── 节点1: 延安十三年全景(15min) → AI深度问答
|
||
├── 节点2: 整风运动文献展区(20min) → 查看22篇原始文献
|
||
├── 节点3: 情境任务「如何开展整风?」(25min)
|
||
│ ├── 角色: 政治指导员
|
||
│ ├── 证据: 整风文献22篇 + 口述史3条
|
||
│ ├── 团队决策: 制定整风实施方案
|
||
│ └── AI复盘: 对比历史整风方案
|
||
├── 节点4: 窑洞生活VR体验(10min)
|
||
├── 节点5: 群众路线展区(20min) → AI问答2次
|
||
├── 节点6: 情境任务「如何处理群众矛盾?」(25min)
|
||
├── 节点7: 廉政教育展区(20min) → 查看案例
|
||
└── 节点8: 行动选择(15min)
|
||
|
||
行动选择:
|
||
├── 老张选择团队行动:
|
||
│ 「在单位组织一次「实事求是」专题学习会」
|
||
├── 行动步骤:
|
||
│ ├── 第1周: 收集单位工作中「不实事求是」的案例
|
||
│ ├── 第2-3周: 组织专题讨论会
|
||
│ └── 第4周: 形成改进方案并提交
|
||
├── 证据要求: 会议记录 + 改进方案文档
|
||
└── 目标: 30天内完成
|
||
|
||
离馆报告 (关键内容):
|
||
├── 学习时长: 3小时12分
|
||
├── 路线完成: 8/8节点
|
||
├── AI问答: 5次(全部有史料引用)
|
||
├── 情境任务: 2次(评价: 良好/优秀)
|
||
├── VR体验: 1次
|
||
├── 查看文物: 23件
|
||
├── 查看文献: 38篇
|
||
├── 理解表达:
|
||
│ 「整风运动的核心是「实事求是」,今天我们工作中
|
||
│ 形式主义的问题,本质上就是脱离了实事求是。
|
||
│ 我要在单位推动解决几个实际问题,而不是开会走过场。」
|
||
└── 行动承诺: 组织「实事求是」专题学习会(30天)
|
||
|
||
离馆后回访:
|
||
├── 第7天: 推送 → 老张反馈「已收集3个形式主义案例」
|
||
├── 第30天: 推送 → 老张提交:
|
||
│ ├── 会议记录(照片+文字)
|
||
│ ├── 改进方案(PDF)
|
||
│ └── 同事反馈(3条)
|
||
├── 系统评估: 行动完成 ✓
|
||
├── 优秀案例 → 纳入S4教研培训案例库
|
||
└── 老张护照记录: 完整闭环 ✓
|
||
```
|
||
|
||
### 4.5 F5"永不闭馆"云上学习共同体
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ F5 云上学习共同体 │
|
||
├────────────────┬────────────────┬────────────────────┤
|
||
│ Web3D云展馆 │ 云端课程平台 │ 协作任务平台 │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ Three.js+WebGPU │ 视频点播/直播 │ WebRTC实时协作 │
|
||
│ 虚拟漫游 │ 课程管理 │ 多人同堂任务 │
|
||
│ AI导览 │ 学时记录 │ 粤港澳三地同步 │
|
||
│ 文物3D展示 │ 证书发放 │ 在线研讨室 │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ 8分钟精华模式 │ 一节课模式 │ 协作任务模式 │
|
||
│ (轻量H5) │ (视频+互动) │ (WebRTC+白板) │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ 深度研究模式 │ 同步在场模式 │
|
||
│ (文献检索+图谱) │ (直播+弹幕+连麦) │
|
||
└────────────────┴────────────────┴────────────────────┘
|
||
```
|
||
|
||
#### Web3D云展馆技术
|
||
|
||
```
|
||
渲染方案:
|
||
高端模式: WebGPU + Three.js (支持PBR、实时光照)
|
||
轻量模式: WebGL 2.0 + 减面模型 + 烘焙光照贴图
|
||
极简模式: 全景图片热点导航 (360° panorama + hotspot)
|
||
|
||
加载优化:
|
||
- 模型LOD: 根据设备性能自动选择精度等级
|
||
- 渐进式加载: 先加载低精度模型,后台替换高精度
|
||
- 资源CDN: 静态资源通过CDN分发,港澳节点加速
|
||
- Service Worker: 缓存已访问区域的3D资源
|
||
|
||
AI导览集成:
|
||
- 虚拟空间中嵌入AI数字人(Three.js + 视频纹理)
|
||
- 或通过语音+文字方式提供导览(不依赖3D数字人)
|
||
- AI导览路线与线下路线共享同一套内容组件
|
||
```
|
||
|
||
#### 粤港澳三地协作技术
|
||
|
||
```
|
||
WebRTC架构:
|
||
信令服务器: Node.js + Socket.IO
|
||
TURN/STUN: 自建TURN服务器(穿透防火墙)
|
||
媒体流: 每个参与者音视频流
|
||
协作白板: Yjs (CRDT协同编辑) + Canvas
|
||
屏幕共享: getDisplayMedia API
|
||
|
||
协作场景:
|
||
- 三地同上一堂课: 教师直播 + 学生实时互动
|
||
- 跨校团队任务: 共享白板 + 语音讨论 + 文件协作
|
||
- 线上研讨室: 多人视频圆桌 + AI记录摘要
|
||
```
|
||
|
||
#### 具体场景示例:澳门中学生小李的线上学习旅程
|
||
|
||
```
|
||
背景: 小李是澳门某中学初三学生,学校未组织线下参观。
|
||
她通过老师推荐访问云上学习共同体。
|
||
|
||
第一次访问 (8分钟精华模式):
|
||
├── 小李通过浏览器访问云展馆H5门户
|
||
├── 选择语言: 「繁体中文」
|
||
├── 选择模式: 「8分钟精华」
|
||
├── 系统加载: 全景图片热点导航模式(极简模式)
|
||
├── 体验流程:
|
||
│ ├── 热点1: 延安十三年全景(2分钟视频)
|
||
│ ├── 热点2: 南泥湾纺车3D展示(可旋转)
|
||
│ ├── 热点3: 东江纵队港九大队故事(2分钟视频)
|
||
│ └── 热点4: AI问答: 「延安精神对澳门青年有什么意义?」
|
||
├── AI回答(繁体中文+史料引用):
|
||
│ 「延安精神的核心是自力更生和艰苦奋斗。
|
||
│ 澳门回归前,澳门同胞也展现了这种精神...」
|
||
└── 小李注册成长护照(线上版)
|
||
|
||
第二次访问 (一节课模式,3天后):
|
||
├── 老师布置课后学习任务
|
||
├── 小李选择课程: 「自力更生的力量」(45分钟)
|
||
├── 课程内容:
|
||
│ ├── 视频1: 南泥湾大生产历史(15分钟)
|
||
│ ├── 互动: 虚拟纺车操作体验(5分钟)
|
||
│ ├── 视频2: 澳门回归建设中的自力更生(10分钟)
|
||
│ ├── 互动: 思考题「你在生活中遇到过需要自力更生的情况吗?」
|
||
│ └── 测验: 5道选择题(全部通过)
|
||
├── 系统记录学时: 45分钟
|
||
└── 护照更新: 课程完成 + 学时记录
|
||
|
||
第三次访问 (协作任务模式,2周后):
|
||
├── 学校组织粤港澳三地跨校协作任务
|
||
├── 任务: 「三地青年共讲一个延安精神故事」
|
||
├── 小李被分入混合小组(广州1人+香港1人+澳门2人)
|
||
├── 协作过程:
|
||
│ ├── WebRTC视频连线: 三地学生面对面讨论
|
||
│ ├── Yjs协同白板: 共同绘制故事大纲
|
||
│ ├── 小李负责: 澳门视角的延安精神理解
|
||
│ ├── 分工制作: 各自录制1分钟视频片段
|
||
│ └── 合成: 使用平台在线编辑器合并
|
||
├── 提交作品: 4分钟短视频「延安精神在湾区」
|
||
├── AI编审助手检查: 史实准确 ✓ 来源完整 ✓
|
||
├── 人工审核通过 → 发布到线上专区
|
||
└── 护照更新: 协作任务完成
|
||
|
||
持续学习:
|
||
├── 系统推荐课程: 「实事求是的思想方法」
|
||
├── 临展提醒: 「湾区青年红色文创展」线上版
|
||
├── 行动选择: 「在学校组织一次延安精神分享会」
|
||
└── 小李的成长护照: 线上学习闭环
|
||
```
|
||
|
||
### 4.6 F6"湾区青年共创计划"
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ F6 湾区青年共创平台 │
|
||
├────────────────┬────────────────┬────────────────────┤
|
||
│ 共创项目管理 │ 创作工具集 │ 审核与展示 │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ - 年度主题发布 │ - AI辅助写作 │ - 三级审核工作流 │
|
||
│ - 混合小组组建 │ - AI辅助绘画 │ - 线上专区展示 │
|
||
│ - 专家工作坊预约 │ - 短视频编辑 │ - 优秀作品入临展 │
|
||
│ - 进度跟踪 │ - 声音档案录制 │ - 青年公开讲述直播 │
|
||
│ - 资源库访问 │ - 互动网页制作 │ │
|
||
└────────────────┴────────────────┴────────────────────┘
|
||
```
|
||
|
||
#### AI辅助创作工具
|
||
|
||
| 工具 | 技术方案 | 安全约束 |
|
||
|------|---------|---------|
|
||
| AI辅助写作 | 大模型生成 + 模板引导 | 强制标注AI辅助,人工审核 |
|
||
| AI辅助绘画 | Stable Diffusion + 红色文化LoRA | 生成内容经编审助手API检查 |
|
||
| 短视频编辑 | FFmpeg + Web编辑器 | 输出经审核后发布 |
|
||
| 声音档案 | Web Audio API + 录音 | 口述史需标注来源 |
|
||
|
||
#### 共创审核流程
|
||
|
||
```
|
||
青年提交作品
|
||
↓
|
||
AI编审助手自动检查:
|
||
- 史实准确性(与知识图谱比对)
|
||
- 来源完整性(是否标注史料来源)
|
||
- 版权合规(是否使用授权素材)
|
||
- 政治合规(规则引擎检查)
|
||
↓
|
||
人工审核(编辑复审)
|
||
↓
|
||
专家终审(必要时的史实终审)
|
||
↓
|
||
发布到线上专区
|
||
↓
|
||
优秀作品 → 线下临展 → 青年公开讲述
|
||
```
|
||
|
||
#### 具体场景示例:2026年秋季共创项目
|
||
|
||
```
|
||
年度主题: 「延安精神 × 湾区故事」
|
||
|
||
项目发布:
|
||
├── 旗舰中心发布年度共创主题
|
||
├── 面向湾区高校征集混合小组(每校2-3人)
|
||
├── 提供创作资源包:
|
||
│ ├── 50件文物3D模型(可商用)
|
||
│ ├── 100条史料文献(已授权)
|
||
│ ├── AI辅助创作工具(写作/绘画/视频)
|
||
│ └── 专家工作坊预约入口
|
||
|
||
混合小组示例:
|
||
├── 组名: 「延安·蛇口·我」
|
||
├── 成员:
|
||
│ ├── 组长: 深圳大学 小王 (策划+文案)
|
||
│ ├── 组员: 香港中文大学 小陈 (视频拍摄)
|
||
│ ├── 组员: 澳门大学 小李 (资料研究)
|
||
│ └── 组员: 中山大学 小刘 (交互设计)
|
||
├── 指导专家: 延安精神研究会研究员(线上指导2次)
|
||
|
||
创作过程 (30天):
|
||
├── 第1周: 选题与资料研究
|
||
│ ├── 小李使用策展助手API检索史料
|
||
│ ├── 确定主题: 「从南泥湾到蛇口——自力更生的两个故事」
|
||
│ └── 提交选题报告 → 专家审核通过
|
||
├── 第2周: 内容创作
|
||
│ ├── 小王使用AI辅助写作工具撰写脚本
|
||
│ │ └── AI生成初稿 → 人工修改 → 标注AI辅助
|
||
│ ├── 小陈在深圳蛇口拍摄实景
|
||
│ └── 小刘设计交互网页原型
|
||
├── 第3周: 整合制作
|
||
│ ├── 小陈使用平台视频编辑器剪辑
|
||
│ ├── 小刘制作交互网页(Three.js展示文物)
|
||
│ └── 小李补充史料注释和来源
|
||
└── 第4周: 审核与提交
|
||
├── AI编审助手检查:
|
||
│ ├── 史实准确性: ✓ (与知识图谱比对通过)
|
||
│ ├── 来源完整性: ✓ (12条史料引用)
|
||
│ ├── 版权合规: ✓ (使用授权素材)
|
||
│ └── 政治合规: ✓
|
||
├── 编辑复审: 通过
|
||
├── 专家终审: 通过
|
||
└── 提交完成
|
||
|
||
成果展示:
|
||
├── 线上专区: 「延安精神×湾区故事」作品页
|
||
├── 作品内容: 5分钟视频 + 交互网页 + 史料注释
|
||
├── 线下临展: 入选「湾区青年红色文创展」
|
||
├── 青年讲述: 小王在临展开幕式做5分钟公开讲述(直播)
|
||
└── 所有成员成长护照记录共创成果
|
||
```
|
||
|
||
### 4.7 F7"把精神带回去"现实行动实验室
|
||
|
||
#### 技术架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ F7 现实行动实验室 │
|
||
├────────────────┬────────────────┬────────────────────┤
|
||
│ 行动选择终端 │ 行动跟踪系统 │ 成果回流系统 │
|
||
├────────────────┼────────────────┼────────────────────┤
|
||
│ - 行动方向展示 │ - 行动卡片生成 │ - 成果提交入口 │
|
||
│ - 行动模板选择 │ - 7/30/90天跟踪 │ - 成果墙展示 │
|
||
│ - 自定义行动 │ - 进展提醒 │ - 课程案例转化 │
|
||
│ - 团队行动创建 │ - 反馈表单 │ - 年度优秀评选 │
|
||
└────────────────┴────────────────┴────────────────────┘
|
||
```
|
||
|
||
#### 行动模板数据模型
|
||
|
||
```sql
|
||
CREATE TABLE action_templates (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
spirit_category VARCHAR(32) NOT NULL, -- seek_truth/serve_people/self_reliance/right_direction
|
||
title TEXT NOT NULL,
|
||
description TEXT NOT NULL,
|
||
target_days INT NOT NULL, -- 7/30/90
|
||
action_type VARCHAR(32) NOT NULL, -- individual/team/bay_area
|
||
audience_tags JSONB,
|
||
steps JSONB NOT NULL, -- 行动步骤列表
|
||
evidence_required JSONB, -- 需要提交的证明材料类型
|
||
review_required BOOLEAN DEFAULT true,
|
||
version INT DEFAULT 1
|
||
);
|
||
```
|
||
|
||
#### 具体场景示例:三类行动方向实例
|
||
|
||
```
|
||
行动方向A: 个人行动 — 「实事求是调查员」
|
||
├── 精神类别: seek_truth (实事求是)
|
||
├── 适用人群: 中学生/大学生/党员干部
|
||
├── 行动内容: 在7天内,找到一个自己学习或工作中
|
||
│ 「不实事求是」的例子,记录下来并提出改进建议
|
||
├── 行动步骤:
|
||
│ ├── Day 1-2: 观察并记录一个「形式主义」或「走过场」的例子
|
||
│ ├── Day 3-5: 分析原因(是制度问题还是态度问题?)
|
||
│ ├── Day 6-7: 写一份200字的改进建议
|
||
│ └── 提交: 文字记录 + 改进建议
|
||
├── 证据要求: 文字描述(可选照片)
|
||
├── 回访节点: 第7天提交成果
|
||
└── 优秀案例 → 转化为S4教研案例
|
||
|
||
行动方向B: 团队行动 — 「南泥湾式创新项目」
|
||
├── 精神类别: self_reliance (自力更生)
|
||
├── 适用人群: 企业团队/机关支部/学生社团
|
||
├── 行动内容: 在30天内,用有限资源解决团队面临的
|
||
│ 一个实际问题(不能增加预算)
|
||
├── 行动步骤:
|
||
│ ├── Week 1: 团队讨论确定要解决的问题
|
||
│ ├── Week 2: 制定「零预算」解决方案
|
||
│ ├── Week 3: 实施方案
|
||
│ └── Week 4: 总结成果并提交
|
||
├── 证据要求: 问题描述 + 方案文档 + 实施记录 + 成果照片
|
||
├── 回访节点: 第7天(进展) + 第30天(成果)
|
||
└── 优秀案例 → 成果墙展示 + 年度评选
|
||
|
||
行动方向C: 湾区行动 — 「红色故事传播者」
|
||
├── 精神类别: serve_people (为人民服务)
|
||
├── 适用人群: 港澳青年/大学生/志愿者
|
||
├── 行动内容: 在90天内,采访3位长辈(家人/邻居/老师),
|
||
│ 记录他们知道的红色故事,制作一个传播作品
|
||
├── 行动步骤:
|
||
│ ├── Month 1: 采访3位长辈,录音/录像记录
|
||
│ ├── Month 2: 整理故事,使用F6平台AI工具辅助创作
|
||
│ │ └── 可选形式: 短视频/播客/图文/交互网页
|
||
│ └── Month 3: 发布作品(社交媒体/学校/社区)
|
||
├── 证据要求: 采访录音 + 创作作品 + 发布截图
|
||
├── 回访节点: 第7天 + 第30天 + 第90天
|
||
└── 优秀作品 → F6青年共创平台 + 线下临展
|
||
|
||
行动选择终端交互流程:
|
||
|
||
┌──────────────────────────────────────┐
|
||
│ 你想把什么精神带回去? │
|
||
├──────────────────────────────────────┤
|
||
│ │
|
||
│ ┌──────────┐ ┌──────────┐ │
|
||
│ │ 实事求是 │ │ 自力更生 │ │
|
||
│ │ 调查员 │ │ 创新项目 │ │
|
||
│ │ (7天) │ │ (30天) │ │
|
||
│ └──────────┘ └──────────┘ │
|
||
│ │
|
||
│ ┌──────────┐ ┌──────────┐ │
|
||
│ │ 为人民 │ │ 自定义 │ │
|
||
│ │ 服务 │ │ 行动 │ │
|
||
│ │ 传播者 │ │ │ │
|
||
│ │ (90天) │ │ │ │
|
||
│ └──────────┘ └──────────┘ │
|
||
│ │
|
||
│ 基于你的参观记录推荐: │
|
||
│ → 你在东江纵队展区停留最久 │
|
||
│ → 推荐: 「红色故事传播者」 │
|
||
└──────────────────────────────────────┘
|
||
```
|
||
|
||
### 4.8 F8"星火节点"全国复制网络
|
||
|
||
#### 节点技术架构
|
||
|
||
```
|
||
L1 微节点技术栈:
|
||
- 一块触屏交互一体机(Android)
|
||
- 离线内容包(课程视频+AI问答轻量版)
|
||
- 定期同步更新(WiFi/4G)
|
||
- 无需本地服务器
|
||
|
||
L2 标准节点技术栈:
|
||
- 标准展陈屏幕 + 互动终端
|
||
- 边缘计算盒子(NVIDIA Jetson)运行AI推理
|
||
- 本地内容缓存 + 云端AI增强
|
||
- 成长护照接入
|
||
- 云端连线能力
|
||
|
||
L3 城市节点技术栈:
|
||
- 完整展陈系统(屏幕+灯光+音频)
|
||
- 本地服务器(2-4台)运行K8s
|
||
- 本地知识图谱子集 + 向量库子集
|
||
- 本地内容审核 + 总馆规则校验
|
||
- 独立运营 + 数据上报
|
||
|
||
L4 旗舰中心技术栈:
|
||
- 完整私有云(20+服务器)
|
||
- GPU推理集群(8×A100)
|
||
- 完整知识图谱 + 向量库 + 内容仓
|
||
- 全国节点调度中心
|
||
- 权威内容生产与发布
|
||
```
|
||
|
||
#### 具体场景示例:L2标准节点部署到某高校
|
||
|
||
```
|
||
节点信息:
|
||
节点名称: 某理工大学「延安精神学习角」
|
||
节点级别: L2标准节点
|
||
部署位置: 图书馆一楼大厅
|
||
空间面积: 30㎡
|
||
日接待量: 约200人
|
||
|
||
部署流程 (7天):
|
||
|
||
Day 1-2: 硬件安装
|
||
├── 触屏一体机×2 (65寸交互屏)
|
||
├── 边缘计算盒子×1 (NVIDIA Jetson AGX Orin)
|
||
├── VR设备: Pico头显×2 + ALVR串流方案
|
||
├── 网络配置: 5G路由 + 校园网对接
|
||
└── 安防: 摄像头×1 + 设备锁
|
||
|
||
Day 3-4: 软件部署
|
||
├── 从S9节点协同系统拉取组件包:
|
||
│ ├── pkg_2026_q3_v1 (标准展览组件包)
|
||
│ │ ├── 知识图谱子集: 延安十三年核心事件
|
||
│ │ ├── 向量库子集: 500条核心史料
|
||
│ │ ├── 课程: 10门(覆盖5个人群)
|
||
│ │ ├── 体验: 2个情境任务 + 1个VR场景
|
||
│ │ └── 运营SOP: 日常操作手册
|
||
│ └── Helm Chart: node-deployment.yaml
|
||
├── K3s轻量集群部署(Jetson上运行)
|
||
├── AI推理: Qwen2.5-7B量化版(本地运行)
|
||
├── 内容缓存: 3D模型+视频本地存储
|
||
└── 云端增强: 复杂问题转发旗舰中心AI
|
||
|
||
Day 5: 系统联调
|
||
├── 触屏终端测试: 课程播放 + AI问答 + 文物浏览
|
||
├── VR串流测试: ALVR连接 + 延迟<40ms
|
||
├── 云端连线测试: 与旗舰中心视频连线正常
|
||
├── 成长护照测试: 扫码登录 + 记录同步
|
||
└── 健康检查: POST /api/s9/node/{node_id}/health → OK
|
||
|
||
Day 6: 内容适配
|
||
├── 接入本校特色:
|
||
│ ├── 学校红色校史片段(提交到旗舰中心审核)
|
||
│ └── 本校师生优秀作品(从F6平台同步)
|
||
├── 设置本校推荐路线:
|
||
│ ├── 大学生路线(30分钟): AI问答+1个任务+VR
|
||
│ └── 教师路线(20分钟): AI问答+课程浏览
|
||
└── 配置运营信息: 开放时间/预约方式/联系人
|
||
|
||
Day 7: 上线运营
|
||
├── 正式开放
|
||
├── 学生刷校园卡进入
|
||
├── 体验数据每日上报旗舰中心
|
||
└── 运营效果纳入S8数据中台对比分析
|
||
|
||
日常运营:
|
||
├── 学生体验流程:
|
||
│ ├── 刷卡 → 选择人群/问题/时长
|
||
│ ├── 触屏浏览课程 + AI问答
|
||
│ ├── VR体验(排队预约)
|
||
│ └── 成长护照同步到个人手机
|
||
├── 内容更新: 每季度从旗舰中心同步新组件包
|
||
├── 本地内容提交: 本校优秀作品 → 旗舰中心审核 → 全国共享
|
||
└── 远程监控: 旗舰中心实时监控设备状态
|
||
```
|
||
|
||
#### 节点部署自动化
|
||
|
||
```yaml
|
||
# Helm Chart: node-deployment.yaml
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: yan-an-node-core
|
||
spec:
|
||
replicas: 1
|
||
template:
|
||
spec:
|
||
containers:
|
||
- name: ai-service
|
||
image: registry.yan-an.example/ai-service:{{.Values.version}}
|
||
resources:
|
||
limits:
|
||
nvidia.com/gpu: {{.Values.gpu_count}}
|
||
- name: content-service
|
||
image: registry.yan-an.example/content-service:{{.Values.version}}
|
||
- name: experience-orchestrator
|
||
image: registry.yan-an.example/orchestrator:{{.Values.version}}
|
||
- name: knowledge-graph
|
||
image: registry.yan-an.example/neo4j-custom:{{.Values.version}}
|
||
```
|
||
|
||
---
|
||
|
||
## 五、VR/XR沉浸体验技术实现
|
||
|
||
### 5.1 VR/XR整体架构
|
||
|
||
VR/XR沉浸体验是线下场馆"不可替代性"的核心组成,不是独立展项,而是嵌入F1自适应叙事空间和F2情境任务剧场的沉浸交互层。
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────┐
|
||
│ VR/XR 沉浸体验系统 │
|
||
├──────────────┬──────────────┬──────────────────────────────┤
|
||
│ 内容生产层 │ 运行时引擎 │ 设备与体感层 │
|
||
├──────────────┼──────────────┼──────────────────────────────┤
|
||
│ Unity场景工程 │ 场景管理器 │ VR头显(Pico 4 Enterprise) │
|
||
│ 3D资产管线 │ 多人同步引擎 │ MR设备(Meta Quest 3) │
|
||
│ 交互逻辑脚本 │ 编排对接层 │ 体感座椅(6DOF动态平台) │
|
||
│ AI NPC驱动 │ 安全监控守护 │ 手部追踪(Leap Motion) │
|
||
│ 场景烘焙渲染 │ 性能监控 │ 触觉反馈手套(bHaptics) │
|
||
│ │ │ 定位基站(Lighthouse) │
|
||
│ │ │ 环绕音响(5.1/7.1) │
|
||
│ │ │ 风效/热效/气味发生器 │
|
||
└──────────────┴──────────────┴──────────────────────────────┘
|
||
```
|
||
|
||
### 5.2 VR场景开发架构
|
||
|
||
#### 5.2.1 Unity项目结构
|
||
|
||
```
|
||
YanAnVR/
|
||
├── Assets/
|
||
│ ├── Scenes/ # 场景文件
|
||
│ │ ├── Nanniwan.unity # 南泥湾大生产
|
||
│ │ ├── EnemyRear.unity # 敌后根据地
|
||
│ │ ├── Yaodong.unity # 延安窑洞生活
|
||
│ │ ├── Dongjiang.unity # 东江纵队游击战场
|
||
│ │ ├── ReformOpening.unity # 改革开放蛇口场景
|
||
│ │ └── Loading.unity # 加载过渡场景
|
||
│ ├── Prefabs/ # 预制体
|
||
│ │ ├── Artifacts/ # 可交互文物预制体
|
||
│ │ ├── Characters/ # NPC角色预制体
|
||
│ │ ├── Environment/ # 环境元素(地形/植被/建筑)
|
||
│ │ └── UI/ # VR空间UI预制体
|
||
│ ├── ScriptableObjects/ # 数据资产
|
||
│ │ ├── TaskDefinitions/ # 任务定义(与F2共享数据格式)
|
||
│ │ ├── NarrativeNodes/ # 叙事节点(与可信叙事引擎共享)
|
||
│ │ └── ArtifactData/ # 文物元数据(与F3共享)
|
||
│ ├── Scripts/ # C#脚本
|
||
│ │ ├── Core/ # 核心框架
|
||
│ │ │ ├── SceneManager.cs # 场景加载与切换
|
||
│ │ │ ├── MultiplayerSync.cs # 多人同步
|
||
│ │ │ ├── OrchestratorClient.cs # 与X1编排引擎通信
|
||
│ │ │ ├── AIBridge.cs # 与AI可信馆员API通信
|
||
│ │ │ └── SafetyGuard.cs # 安全监控守护
|
||
│ │ ├── Interaction/ # 交互逻辑
|
||
│ │ │ ├── GrabInteractable.cs # 抓取交互
|
||
│ │ │ ├── TaskTrigger.cs # 任务触发
|
||
│ │ │ ├── EvidenceInspector.cs # 证据查看
|
||
│ │ │ └── HapticFeedback.cs # 触觉反馈
|
||
│ │ └── NPC/ # AI NPC
|
||
│ │ ├── NPCController.cs # NPC行为控制
|
||
│ │ ├── LipSync.cs # 口型同步
|
||
│ │ └── VoicePlayer.cs # 语音播放
|
||
│ ├── Models/ # 3D模型(FBX/glTF)
|
||
│ ├── Textures/ # 纹理贴图
|
||
│ ├── Audio/ # 音频资源
|
||
│ └── Shaders/ # 自定义着色器
|
||
├── Plugins/
|
||
│ ├── UnityXR/ # XR Interaction Toolkit
|
||
│ ├── PhotonFusion/ # 多人联网
|
||
│ └── WebSocket/ # WebSocket客户端
|
||
└── ProjectSettings/
|
||
```
|
||
|
||
#### 5.2.2 场景管理器
|
||
|
||
```csharp
|
||
/// <summary>
|
||
/// VR场景管理器:负责场景加载、切换和生命周期管理
|
||
/// </summary>
|
||
public class VRSceneManager : MonoBehaviour
|
||
{
|
||
// 场景加载采用Addressables异步加载,避免卡顿
|
||
[SerializeField] private AssetReferenceScene loadingScene;
|
||
|
||
// 当前激活的场景ID(与X1编排引擎同步)
|
||
private string currentSceneId;
|
||
|
||
// 场景元数据(从ScriptableObjects加载)
|
||
private Dictionary<string, SceneMetadata> sceneMetadataMap;
|
||
|
||
/// <summary>
|
||
/// 从X1编排引擎接收场景切换指令
|
||
/// </summary>
|
||
public async void SwitchScene(string sceneId, string audienceType, string language)
|
||
{
|
||
// 1. 淡出当前场景
|
||
await FadeOut(0.5f);
|
||
|
||
// 2. 卸载当前场景
|
||
await SceneManager.UnloadSceneAsync(currentSceneId);
|
||
|
||
// 3. 加载过渡场景
|
||
await loadingScene.LoadSceneAsync(LoadSceneMode.Additive);
|
||
|
||
// 4. 预加载目标场景资源
|
||
var sceneMetadata = sceneMetadataMap[sceneId];
|
||
await PreloadAssets(sceneMetadata.assetRefs);
|
||
|
||
// 5. 加载目标场景
|
||
var loadOp = SceneManager.LoadSceneAsync(sceneId, LoadSceneMode.Additive);
|
||
loadOp.completed += (op) =>
|
||
{
|
||
// 6. 根据人群类型适配内容
|
||
AdaptToAudience(audienceType, language);
|
||
|
||
// 7. 淡入
|
||
FadeIn(0.5f);
|
||
|
||
// 8. 通知编排引擎场景就绪
|
||
OrchestratorClient.NotifySceneReady(sceneId);
|
||
|
||
// 9. 卸载过渡场景
|
||
SceneManager.UnloadSceneAsync("Loading");
|
||
};
|
||
|
||
currentSceneId = sceneId;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据人群类型适配VR场景内容
|
||
/// </summary>
|
||
private void AdaptToAudience(string audienceType, string language)
|
||
{
|
||
// 小学:简化交互、增加引导NPC、缩短任务时长
|
||
// 中学:增加因果推理任务、证据收集环节
|
||
// 干部:增加理论深度、历史决策复盘
|
||
// 港澳:繁体/英文UI、轻量化叙事
|
||
var adapter = GetComponent<AudienceAdapter>();
|
||
adapter.Apply(audienceType, language);
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 5.2.3 五大VR场景定义
|
||
|
||
| 场景 | 历史时期 | 核心体验 | 交互重点 | 对应F2任务 |
|
||
|------|---------|---------|---------|-----------|
|
||
| 南泥湾大生产 | 1941-1943 | 开荒、纺纱、生产竞赛 | 抓取农具、操作纺车、种植作物 | "如何在不饿死一个人的前提下实现自给" |
|
||
| 敌后根据地 | 1938-1945 | 游击战术、群众工作、地雷战 | 地图标注、群众动员、物资调配 | "在敌后如何建立并维持一个根据地" |
|
||
| 延安窑洞生活 | 1938-1947 | 日常起居、整风学习、文艺活动 | 翻阅文献、参与讨论、体验生活条件 | "在极端艰苦中如何保持信念和创造力" |
|
||
| 东江纵队游击战场 | 1943-1945 | 华南抗日、港九大队、营救文化名人 | 穿越封锁线、传递情报、营救行动 | "如何在日占区开展有效抵抗" |
|
||
| 改革开放蛇口 | 1979-1984 | 蛇口工业区、时间就是金钱、敢为人先 | 工程决策、招商引资、制度创新 | "如何在一片荒滩上建起现代工业区" |
|
||
|
||
### 5.3 体感设备集成方案
|
||
|
||
#### 5.3.1 体感设备矩阵
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────┐
|
||
│ VR体验工位 (4座/场景) │
|
||
├──────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
|
||
│ │ 座位1 │ │ 座位2 │ │ 座位3 │ │ 座位4 │ │
|
||
│ │ VR头显 │ │ VR头显 │ │ VR头显 │ │ VR头显 │ │
|
||
│ │ 动态座椅│ │ 动态座椅│ │ 动态座椅│ │ 动态座椅│ │
|
||
│ │ 触觉背心│ │ 触觉背心│ │ 触觉背心│ │ 触觉背心│ │
|
||
│ │ 手柄×2 │ │ 手柄×2 │ │ 手柄×2 │ │ 手柄×2 │ │
|
||
│ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ │
|
||
│ │ │ │ │ │
|
||
│ └───────────┴───────────┴───────────┘ │
|
||
│ │ │
|
||
│ ┌───────┴───────┐ │
|
||
│ │ 边缘计算盒子 │ │
|
||
│ │ (VR渲染主机) │ │
|
||
│ │ NVIDIA RTX │ │
|
||
│ │ 4080/4090 │ │
|
||
│ └───────┬───────┘ │
|
||
│ │ │
|
||
│ ┌───────┴───────┐ │
|
||
│ │ 环绕音响5.1 │ │
|
||
│ │ 风效/热效 │ │
|
||
│ │ 气味发生器 │ │
|
||
│ └───────────────┘ │
|
||
└──────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
#### 5.3.2 体感联动控制
|
||
|
||
```csharp
|
||
/// <summary>
|
||
/// 体感设备联动控制器:根据VR场景事件触发物理体感
|
||
/// </summary>
|
||
public class HapticEnvironmentController : MonoBehaviour
|
||
{
|
||
// 动态座椅控制 (通过串口/USB)
|
||
private DynamicSeatInterface seatController;
|
||
|
||
// 触觉反馈背心 (bHaptics SDK)
|
||
private bHapticsHandler hapticsHandler;
|
||
|
||
// 环境效果控制器 (通过MQTT)
|
||
private MQTTClient envController;
|
||
|
||
// 效果预设库
|
||
private Dictionary<string, EnvironmentEffect> effectPresets;
|
||
|
||
/// <summary>
|
||
/// 场景事件触发体感效果
|
||
/// </summary>
|
||
public void TriggerEffect(string effectId, float intensity = 1.0f)
|
||
{
|
||
var effect = effectPresets[effectId];
|
||
|
||
// 1. 动态座椅运动
|
||
if (effect.seatMotion != null)
|
||
{
|
||
seatController.PlayMotion(effect.seatMotion, intensity);
|
||
}
|
||
|
||
// 2. 触觉背心振动
|
||
if (effect.hapticPattern != null)
|
||
{
|
||
hapticsHandler.PlayPattern(effect.hapticPattern, intensity);
|
||
}
|
||
|
||
// 3. 环境效果(风/热/气味)
|
||
if (effect.environment != null)
|
||
{
|
||
envController.Publish("env/effect", JsonUtility.ToJson(effect.environment));
|
||
}
|
||
}
|
||
}
|
||
|
||
// 效果预设示例
|
||
[CreateAssetMenu(fileName = "EnvEffect", menuName = "VR/EnvironmentEffect")]
|
||
public class EnvironmentEffect : ScriptableObject
|
||
{
|
||
public string effectId;
|
||
public SeatMotion seatMotion; // 座椅运动模式
|
||
public string hapticPattern; // 触觉反馈模式名
|
||
public EnvironmentTrigger environment; // 环境效果
|
||
public float defaultIntensity;
|
||
public float maxIntensity;
|
||
public float duration;
|
||
}
|
||
|
||
// 南泥湾场景体感效果示例
|
||
// "开荒挥锄": 座椅轻微前倾 + 背心肩部振动 + 微风
|
||
// "纺车转动": 座椅轻微振动 + 背心腰部节律振动
|
||
// "大生产竞赛": 座椅加速感 + 背心全身振动 + 强风 + 热感
|
||
// "丰收喜悦": 座椅上升感 + 背心轻柔振动 + 温暖气流
|
||
```
|
||
|
||
#### 5.3.3 体感效果场景映射
|
||
|
||
| VR场景 | 事件 | 座椅动作 | 触觉反馈 | 环境效果 |
|
||
|--------|------|---------|---------|---------|
|
||
| 南泥湾 | 挥锄开荒 | 前倾15° | 肩部+手臂振动 | 微风 |
|
||
| 南泥湾 | 纺车转动 | 轻微节律振动 | 腰部节律振动 | — |
|
||
| 南泥湾 | 丰收奔跑 | 加速后仰 | 全身渐强振动 | 强风+热感 |
|
||
| 敌后根据地 | 爆炸远处 | 瞬间后仰 | 全身冲击振动 | 气浪(风) |
|
||
| 敌后根据地 | 蹲伏隐蔽 | 下降10cm | 背部轻压感 | — |
|
||
| 延安窑洞 | 煤油灯阅读 | 静止 | 手部微振动 | 微热 |
|
||
| 东江纵队 | 穿越封锁线 | 左右摇晃 | 全身紧张振动 | 夜间冷风 |
|
||
| 改革开放 | 工程爆破 | 瞬间震动 | 全身冲击 | 气浪+尘味 |
|
||
|
||
### 5.4 多人协同VR技术
|
||
|
||
#### 5.4.1 架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────┐
|
||
│ 多人协同VR架构 │
|
||
├──────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
|
||
│ │ VR座位1 │ │ VR座位2 │ │ VR座位3 │ │ VR座位4 │ │
|
||
│ │ (队长) │ │ (队员) │ │ (队员) │ │ (队员) │ │
|
||
│ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ │
|
||
│ │ │ │ │ │
|
||
│ └───────────┴───────────┴───────────┘ │
|
||
│ │ │
|
||
│ ┌───────┴───────┐ │
|
||
│ │ Photon Fusion │ │
|
||
│ │ (状态同步服务器)│ │
|
||
│ └───────┬───────┘ │
|
||
│ │ │
|
||
│ ┌───────┴───────┐ │
|
||
│ │ 房间管理服务 │ │
|
||
│ │ (Node.js) │ │
|
||
│ └───────┬───────┘ │
|
||
│ │ │
|
||
│ ┌───────┴───────┐ │
|
||
│ │ X1编排引擎 │ │
|
||
│ │ (任务推送) │ │
|
||
│ └───────────────┘ │
|
||
└──────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
#### 5.4.2 Photon Fusion多人同步
|
||
|
||
```csharp
|
||
/// <summary>
|
||
/// 多人协同VR控制器:基于Photon Fusion实现4人同场景同步
|
||
/// </summary>
|
||
public class MultiplayerVRController : NetworkBehaviour
|
||
{
|
||
// 玩家角色定义(与F2任务角色对应)
|
||
public enum VRRole { Leader, Scout, Logistics, Negotiator }
|
||
|
||
[Networked] public VRRole Role { get; set; }
|
||
[Networked] public string PlayerName { get; set; }
|
||
[Networked] public NetworkBool TaskCompleted { get; set; }
|
||
|
||
// 玩家头像同步(位置+旋转+手部姿态)
|
||
[Networked] public Vector3 HeadPosition { get; set; }
|
||
[Networked] public Quaternion HeadRotation { get; set; }
|
||
[Networked] public Vector3 LeftHandPos { get; set; }
|
||
[Networked] public Vector3 RightHandPos { get; set; }
|
||
|
||
/// <summary>
|
||
/// 玩家进入VR房间
|
||
/// </summary>
|
||
public override void Spawned()
|
||
{
|
||
// 从X1编排引擎获取分配的角色
|
||
Role = OrchestratorClient.GetAssignedRole(Runner.LocalPlayer);
|
||
|
||
// 初始化角色化身
|
||
InitializeAvatar(Role);
|
||
|
||
// 通知房间管理服务
|
||
RoomService.NotifyPlayerReady(Runner.SessionInfo.Name, Runner.LocalPlayer);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 网络同步更新(每帧调用)
|
||
/// </summary>
|
||
public override void FixedUpdateNetwork()
|
||
{
|
||
if (Runner.LocalPlayer == Object.InputAuthority)
|
||
{
|
||
// 本地玩家:采集VR设备数据并上传
|
||
HeadPosition = VRDevice.GetHeadPosition();
|
||
HeadRotation = VRDevice.GetHeadRotation();
|
||
LeftHandPos = VRDevice.GetLeftHandPosition();
|
||
RightHandPos = VRDevice.GetRightHandPosition();
|
||
}
|
||
else
|
||
{
|
||
// 远程玩家:更新远程化身
|
||
UpdateRemoteAvatar(HeadPosition, HeadRotation, LeftHandPos, RightHandPos);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 团队任务完成同步
|
||
/// </summary>
|
||
[Rpc(RpcSources.All, RpcTargets.All)]
|
||
public void RPC_NotifyTaskProgress(string taskId, float progress)
|
||
{
|
||
// 所有客户端同步任务进度
|
||
TaskUIController.UpdateProgress(taskId, progress);
|
||
|
||
// 进度100%时通知X1编排引擎
|
||
if (progress >= 1.0f)
|
||
{
|
||
OrchestratorClient.NotifyTaskCompleted(taskId);
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 5.4.3 房间管理与场次调度
|
||
|
||
```
|
||
场次调度流程:
|
||
|
||
1. 票务系统(S3)分配VR场次 → 通知房间管理服务
|
||
2. 4名用户到达VR工位 → 刷RFID/扫码确认身份
|
||
3. 房间管理服务创建Photon Fusion房间 → 分配角色
|
||
4. X1编排引擎推送对应任务剧本 → VR场景加载
|
||
5. 体验过程实时监控(时长/进度/异常)
|
||
6. 体验结束 → 场景退出 → 学习记录写入F4成长护照
|
||
7. 设备复位 → 等待下一场次
|
||
|
||
场次间隔: 3分钟(设备复位+消毒)
|
||
单场时长: 8-15分钟(按人群和路线适配)
|
||
日接待量: 单场景约120-160人/天(4座×8分钟×4-5场/小时×8小时)
|
||
```
|
||
|
||
**房间管理服务API**:
|
||
|
||
```
|
||
POST /api/vr/room/create 创建VR房间(绑定场次+任务)
|
||
GET /api/vr/room/{room_id} 房间状态
|
||
POST /api/vr/room/{room_id}/join 用户加入房间(绑定角色)
|
||
POST /api/vr/room/{room_id}/start 开始体验
|
||
GET /api/vr/room/{room_id}/status 实时状态(进度/异常)
|
||
POST /api/vr/room/{room_id}/end 结束体验
|
||
POST /api/vr/room/{room_id}/reset 设备复位
|
||
GET /api/vr/schedule/today 当日场次排期
|
||
POST /api/vr/schedule/assign 票务系统分配场次
|
||
```
|
||
|
||
### 5.5 VR与F2情境任务联动
|
||
|
||
VR不是独立体验,而是F2情境任务的沉浸执行层。同一任务剧本在VR和非VR两种模式下运行,VR模式提供更强的沉浸感和空间感知。
|
||
|
||
```
|
||
F2情境任务剧场
|
||
├── 非VR模式: 多屏互动终端 + AI复盘
|
||
└── VR模式: 沉浸场景 + 体感设备 + 多人协同 + AI复盘
|
||
|
||
共享层:
|
||
- 同一任务定义(ScenarioTask数据模型)
|
||
- 同一证据集(从知识图谱检索)
|
||
- 同一历史事实揭示
|
||
- 同一AI学习教练API复盘
|
||
- 同一成长护照记录
|
||
```
|
||
|
||
**联动流程**:
|
||
|
||
```
|
||
1. X1编排引擎根据路线将用户分配到VR模式或非VR模式
|
||
(VR模式: 路线包含VR节点 / 非VR模式: 路线不含VR节点)
|
||
2. VR场景加载时,从任务定义API拉取当前任务剧本
|
||
3. VR场景中嵌入证据查看点(3D文物+文献档案)
|
||
4. 团队在VR中讨论并做出决策(语音通话+手势交互)
|
||
5. 决策提交 → AI学习教练API复盘 → VR场景中展示历史对比
|
||
6. 退出VR → 现实连接问题 → 行动选择
|
||
```
|
||
|
||
### 5.6 AI NPC与数字人集成
|
||
|
||
#### 5.6.1 VR内AI NPC
|
||
|
||
VR场景中的非玩家角色(NPC)由AI可信知识引擎驱动,可以回答用户问题、提供历史背景、引导任务。
|
||
|
||
```csharp
|
||
/// <summary>
|
||
/// VR内AI NPC控制器:与AI可信馆员API集成
|
||
/// </summary>
|
||
public class VRNPCController : MonoBehaviour
|
||
{
|
||
private AIBridge aiBridge; // AI API通信桥
|
||
private LipSync lipSync; // 口型同步
|
||
private VoicePlayer voicePlayer; // 语音播放
|
||
|
||
// NPC身份定义(从知识图谱加载)
|
||
public string npcPersonId; // 对应知识图谱中的Person节点
|
||
public string npcEra; // NPC所处历史时期
|
||
|
||
/// <summary>
|
||
/// 用户向NPC提问(语音输入)
|
||
/// </summary>
|
||
public async void OnUserQuestion(string question)
|
||
{
|
||
// 1. 调用AI可信馆员API
|
||
var response = await aiBridge.AskLibrarian(new AskRequest
|
||
{
|
||
question = question,
|
||
audience = CurrentAudience.Type,
|
||
language = CurrentAudience.Language,
|
||
context = new {
|
||
current_artifact_id = CurrentArtifactId,
|
||
current_zone = CurrentZoneId,
|
||
npc_person_id = npcPersonId
|
||
}
|
||
});
|
||
|
||
// 2. TTS语音合成
|
||
AudioClip audioClip = await TTSService.Synthesize(
|
||
response.answer,
|
||
CurrentAudience.Language
|
||
);
|
||
|
||
// 3. 口型同步播放
|
||
lipSync.PlayWithAudio(audioClip);
|
||
voicePlayer.Play(audioClip);
|
||
|
||
// 4. 显示文字字幕(VR空间UI)
|
||
VRSubtitleUI.Show(response.answer, response.sources);
|
||
|
||
// 5. 显示追问建议
|
||
VRFollowUpUI.Show(response.follow_up_questions);
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 5.6.2 数字人技术方案
|
||
|
||
| 方案 | 技术栈 | 效果 | 适用场景 |
|
||
|------|--------|------|---------|
|
||
| VR内NPC | Unity内置角色 + AI API + TTS | 风格化3D角色,实时口型同步 | VR场景内交互 |
|
||
| 线下数字人导览 | Unreal Engine 5 + MetaHuman | 超写实数字人,大屏展示 | 馆内大屏导览 |
|
||
| 云端数字人 | UE5 Pixel Streaming | 云端渲染,浏览器观看 | F5云展馆 |
|
||
|
||
**TTS语音合成**:
|
||
|
||
- **中文普通话**:CosyVoice / VITS-zh(开源,支持私有化部署)
|
||
- **粤语**:基于VITS微调的粤语模型
|
||
- **英文**:VITS-en / Edge TTS
|
||
- **口型同步**:Oculus LipSync Unity插件(实时音频驱动BlendShape)
|
||
- **安全约束**:NPC禁止模拟革命领袖发表新言论,仅复述已审核史料
|
||
|
||
### 5.7 VR设备远程管理与编排
|
||
|
||
#### 5.7.1 设备管理架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────┐
|
||
│ VR设备运维管理平台 │
|
||
├──────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │ 设备监控面板 │ │ 场次调度面板 │ │ 内容管理面板 │ │
|
||
│ │ (Grafana) │ │ (自研Web) │ │ (自研Web) │ │
|
||
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
|
||
│ │ │ │ │
|
||
│ ┌──────┴────────────────┴────────────────┴──────┐ │
|
||
│ │ 设备管理服务 (Spring Boot) │ │
|
||
│ └──────┬────────────────┬────────────────┬──────┘ │
|
||
│ │ │ │ │
|
||
│ ┌────┴────┐ ┌─────┴────┐ ┌─────┴────┐ │
|
||
│ │VR头显×N │ │体感设备×N│ │渲染主机×N│ │
|
||
│ │(ADB/MDM)│ │(MQTT) │ │(SSH) │ │
|
||
│ └─────────┘ └─────────┘ └─────────┘ │
|
||
└──────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
#### 5.7.2 监控指标
|
||
|
||
| 监控对象 | 指标 | 告警阈值 |
|
||
|---------|------|---------|
|
||
| VR头显 | 电量、温度、帧率 | 温度>65°C / 帧率<72fps |
|
||
| 渲染主机 | GPU利用率、显存、温度 | GPU>95% / 显存>90% / 温度>85°C |
|
||
| 体感座椅 | 连接状态、运动范围校准 | 断连 / 校准偏移>5° |
|
||
| 触觉背心 | 蓝牙连接、电量 | 断连 / 电量<20% |
|
||
| 网络延迟 | Photon Fusion RTT | RTT>50ms |
|
||
| 场次状态 | 当前场次、进度、异常 | 异常停留>30秒 |
|
||
|
||
#### 5.7.3 远程诊断与自动恢复
|
||
|
||
```
|
||
异常检测 → 自动诊断 → 分级处理:
|
||
|
||
Level 1 (轻微): 自动恢复
|
||
- 帧率下降 → 降低渲染质量(LOD切换)
|
||
- 网络抖动 → 增加插值缓冲
|
||
- 蓝牙重连 → 自动重试
|
||
|
||
Level 2 (中度): 远程干预
|
||
- 场景卡死 → 远程重启Unity应用
|
||
- 体感设备异常 → 远程复位指令
|
||
- 头显追踪丢失 → 提示用户重新佩戴
|
||
|
||
Level 3 (严重): 人工介入
|
||
- 硬件故障 → 排队转非VR模式
|
||
- 渲染主机宕机 → 切换备用主机
|
||
- 安全事件 → 紧急停止所有设备
|
||
```
|
||
|
||
### 5.8 云端VR串流方案
|
||
|
||
为降低全国星火节点的硬件门槛,L2/L3节点可采用云端VR串流方案,无需本地高性能渲染主机。
|
||
|
||
#### 5.8.1 串流架构
|
||
|
||
```
|
||
L2/L3节点 (轻量硬件) 旗舰中心/区域云端 (GPU集群)
|
||
┌──────────────────┐ ┌──────────────────────┐
|
||
│ VR头显(Pico/Quest)│ │ 云端渲染服务器 │
|
||
│ ↓ WiFi/5G │ ←── 视频流 ──→ │ (NVIDIA RTX 4090) │
|
||
│ ↓ 解码显示 │ ←── 音频流 ──→ │ Unity应用实例 │
|
||
│ ↓ 手柄/头显数据 │ ── 输入流 ──→ │ CloudXR/ALVR串流 │
|
||
│ │ │ 编码H.265低延迟 │
|
||
└──────────────────┘ └──────────────────────┘
|
||
```
|
||
|
||
#### 5.8.2 串流技术选型
|
||
|
||
| 方案 | 延迟 | 优势 | 劣势 | 适用场景 |
|
||
|------|------|------|------|---------|
|
||
| CloudXR (NVIDIA) | 15-30ms | 官方优化,画质好 | 依赖NVIDIA生态 | L3城市节点 |
|
||
| ALVR (开源) | 20-40ms | 开源免费,跨平台 | 画质略逊 | L2标准节点 |
|
||
| 本地渲染 | <10ms | 无网络延迟 | 需高性能主机 | L4旗舰中心 |
|
||
| WebXR | 30-80ms | 无需安装客户端 | 画质受限 | F5云展馆轻量模式 |
|
||
|
||
#### 5.8.3 节点VR部署方案
|
||
|
||
| 节点级别 | VR方案 | 硬件需求 | 成本估算 |
|
||
|---------|--------|---------|---------|
|
||
| L1微节点 | 不部署VR | — | — |
|
||
| L2标准节点 | ALVR串流 + Pico头显 | Pico头显×2 + 普通PC | 低 |
|
||
| L3城市节点 | CloudXR串流 + Pico/Quest | 头显×4 + 5G路由 | 中 |
|
||
| L4旗舰中心 | 本地渲染 + 完整体感 | RTX 4090主机×4 + 完整体感设备 | 高 |
|
||
|
||
### 5.9 VR内容生产管线
|
||
|
||
#### 5.9.1 3D资产生产流程
|
||
|
||
```
|
||
历史考证与场景设计
|
||
↓ (党史专家+教育研究组审定)
|
||
概念美术设定
|
||
↓
|
||
3D建模 (Blender/Maya)
|
||
├── 地形: World Creator / Gaia (程序化地形)
|
||
├── 建筑: 传统建模 + 历史照片参考
|
||
├── 道具: 精细建模 + PBR材质
|
||
├── 角色: MetaHuman Creator / Character Creator
|
||
└── 植被: SpeedTree (历史植被还原)
|
||
↓
|
||
UV展开与纹理绘制 (Substance Painter)
|
||
↓
|
||
动画与绑定 (Maya/Blender)
|
||
↓
|
||
Unity导入与场景搭建
|
||
↓
|
||
交互逻辑开发 (C#脚本)
|
||
↓
|
||
体感效果配置 (效果预设编辑器)
|
||
↓
|
||
内部测试 (功能+性能+安全)
|
||
↓
|
||
专家审核 (史实准确性+教育效果)
|
||
↓
|
||
发布 (版本化入库)
|
||
```
|
||
|
||
#### 5.9.2 性能优化策略
|
||
|
||
| 优化项 | 目标 | 技术手段 |
|
||
|--------|------|---------|
|
||
| 帧率 | 稳定72fps (VR舒适标准) | LOD分级、视锥剔除、遮挡剔除 |
|
||
| 渲染负载 | GPU利用率<85% | SRP Batcher、GPU Instancing |
|
||
| 加载时间 | 场景切换<3秒 | Addressables异步加载、资源预加载 |
|
||
| 内存 | <12GB (Pico 4限制) | 资源压缩、纹理流式加载 |
|
||
| 包体 | 单场景<2GB | ASTC纹理压缩、音频压缩 |
|
||
| 网络带宽 | 多人同步<5Mbps | 状态压缩、兴趣区域管理(AoI) |
|
||
|
||
#### 5.9.3 VR舒适度与安全
|
||
|
||
| 措施 | 说明 |
|
||
|------|------|
|
||
| 舒适度分级 | 每个VR场景标注舒适度等级(舒适/适中/激烈) |
|
||
| 晕动症缓解 | 瞬移移动(Teleport)为默认,平滑移动可选 |
|
||
| 视觉舒适 | 固定参考帧(鼻部虚拟遮挡)、渐变过渡 |
|
||
| 时长控制 | 单次VR体验不超过15分钟 |
|
||
| 休息间隔 | 两场VR体验之间至少间隔30分钟 |
|
||
| 年龄限制 | 12岁以下不建议使用VR头显 |
|
||
| 安全区域 | Lighthouse定位基站划定安全边界,越界自动暂停 |
|
||
| 紧急停止 | 手柄Home键一键退出,工作人员远程紧急停止 |
|
||
| 卫生消毒 | 一次性面罩+UV消毒柜,场次间隔3分钟消毒 |
|
||
|
||
### 5.10 VR体验排队与场次调度
|
||
|
||
#### 5.10.1 排队调度算法
|
||
|
||
```python
|
||
def schedule_vr_sessions(visitors, capacity=4, duration_min=8, reset_min=3):
|
||
"""
|
||
VR场次调度算法
|
||
|
||
visitors: 当前排队访客列表 [{user_id, audience_type, route_id, arrival_time}]
|
||
capacity: 单场容量(4人)
|
||
duration_min: 单场时长
|
||
reset_min: 设备复位时间
|
||
"""
|
||
cycle_time = duration_min + reset_min # 单场周期11分钟
|
||
|
||
# 1. 按路线分组:相同路线节点的访客优先同场
|
||
groups = group_by_route(visitors)
|
||
|
||
# 2. 按人群类型分组:相同人群类型优先同场(内容适配一致)
|
||
groups = subgroup_by_audience(groups)
|
||
|
||
# 3. 按到达时间排序
|
||
for group in groups:
|
||
group.sort(key=lambda v: v['arrival_time'])
|
||
|
||
# 4. 贪心填充场次
|
||
sessions = []
|
||
for group in groups:
|
||
while group:
|
||
session_visitors = group[:capacity]
|
||
group = group[capacity:]
|
||
|
||
# 计算场次时间
|
||
start_time = calculate_start_time(sessions, cycle_time)
|
||
|
||
sessions.append({
|
||
'visitors': session_visitors,
|
||
'start_time': start_time,
|
||
'end_time': start_time + timedelta(minutes=duration_min),
|
||
'scene_id': get_scene_for_route(session_visitors[0]['route_id']),
|
||
'task_id': get_task_for_route(session_visitors[0]['route_id'])
|
||
})
|
||
|
||
# 5. 客流高峰策略:开启备用VR工位
|
||
if len(sessions) > threshold:
|
||
activate_backup_station()
|
||
|
||
return sessions
|
||
```
|
||
|
||
#### 5.10.2 排队体验设计
|
||
|
||
排队等待期间不浪费用户时间,通过排队区屏幕提供:
|
||
|
||
- **任务预习**:展示即将进入的VR场景历史背景和任务问题
|
||
- **角色介绍**:展示分配到的角色和资源约束
|
||
- **操作教学**:VR手柄操作和交互方式教学视频
|
||
- **安全须知**:VR舒适度等级、注意事项、紧急退出方法
|
||
- **进度显示**:当前排队位置和预计等待时间
|
||
|
||
---
|
||
|
||
## 六、X1/X2/X3公共平台技术实现
|
||
|
||
### 6.1 X1全场景体验编排引擎
|
||
|
||
#### 核心数据流
|
||
|
||
```
|
||
事件源 处理引擎 输出目标
|
||
───────── ───────── ─────────
|
||
UWB位置流(10Hz) ─┐
|
||
客流计数(Kafka) ─┤→ Flink实时计算 → 编排决策 → 设备控制指令
|
||
设备状态(MQTT) ─┤ (CEP复杂事件) (规则+ML) (WebSocket/MQTT)
|
||
用户路线(REST) ─┤
|
||
任务状态(REST) ─┘
|
||
```
|
||
|
||
#### Flink CEP规则示例
|
||
|
||
```java
|
||
// 当用户进入某区域且该区域客流低于阈值时,触发内容联动
|
||
DataStream<PositionEvent> positions = env
|
||
.addSource(new KafkaSource<>("uwb-positions"));
|
||
|
||
Pattern<PositionEvent, ?> pattern = Pattern
|
||
.<PositionEvent>begin("enter_zone")
|
||
.where(evt -> evt.getZoneId().equals("zone_b"))
|
||
.within(Time.seconds(5));
|
||
|
||
CEP.pattern(positions, pattern)
|
||
.select((events) -> {
|
||
PositionEvent evt = events.get("enter_zone");
|
||
int zoneLoad = getZoneLoad(evt.getZoneId());
|
||
if (zoneLoad < THRESHOLD) {
|
||
triggerContentOrchestration(evt.getUserId(), evt.getZoneId());
|
||
}
|
||
});
|
||
```
|
||
|
||
### 6.2 X2成长护照与行动档案
|
||
|
||
#### 跨系统数据同步
|
||
|
||
```
|
||
S3票务系统 ──┐
|
||
S4教研系统 ──┤
|
||
S6港澳专项 ──┤→ X2成长护照API → 统一学习档案
|
||
S8数据中台 ──┤ (GraphQL API) (PostgreSQL)
|
||
线下终端 ──┘
|
||
```
|
||
|
||
**GraphQL API**:
|
||
|
||
```graphql
|
||
type Query {
|
||
passport(userId: ID!): GrowthPassport
|
||
learningRecords(passportId: ID!, type: String): [LearningRecord]
|
||
actionCommitments(passportId: ID!, status: String): [ActionCommitment]
|
||
}
|
||
|
||
type Mutation {
|
||
createPassport(input: CreatePassportInput!): GrowthPassport
|
||
recordLearning(input: RecordLearningInput!): LearningRecord
|
||
chooseAction(input: ChooseActionInput!): ActionCommitment
|
||
submitFeedback(commitmentId: ID!, phase: String!, content: String!): ActionCommitment
|
||
}
|
||
```
|
||
|
||
### 6.3 X3权威内容治理中心
|
||
|
||
#### 内容审核工作流
|
||
|
||
```
|
||
内容创建/修改
|
||
↓
|
||
AI编审助手自动检查 (编审助手API)
|
||
- 事实校验: 与知识图谱交叉验证
|
||
- 来源检查: 是否标注史料来源
|
||
- 合规检查: 政治安全规则引擎
|
||
- 版权检查: 素材授权验证
|
||
↓
|
||
自动检查通过 → 编辑复审 (人工)
|
||
自动检查未通过 → 退回修改
|
||
↓
|
||
编辑复审通过 → 专家终审 (关键内容)
|
||
↓
|
||
专家终审通过 → 版本发布 (带版本号)
|
||
↓
|
||
发布到: 展陈系统 / 云展馆 / 课程平台 / 全国节点
|
||
↓
|
||
使用反馈收集 → 定期巡检 → 需要时触发修订
|
||
```
|
||
|
||
#### 版本管理
|
||
|
||
```sql
|
||
CREATE TABLE content_versions (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
component_id VARCHAR(64) NOT NULL,
|
||
version INT NOT NULL,
|
||
content_snapshot JSONB NOT NULL, -- 完整内容快照
|
||
change_log TEXT,
|
||
review_chain JSONB NOT NULL, -- 审核链路记录
|
||
published_by VARCHAR(64),
|
||
published_at TIMESTAMP,
|
||
is_current BOOLEAN DEFAULT false,
|
||
UNIQUE(component_id, version)
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
## 七、数据架构
|
||
|
||
### 7.1 数据库分工
|
||
|
||
| 数据库 | 用途 | 数据示例 |
|
||
|--------|------|---------|
|
||
| PostgreSQL | 业务OLTP | 用户、票务、课程、任务、护照、行动 |
|
||
| Neo4j | 知识图谱 | 事件、人物、文物、概念及关系 |
|
||
| Milvus | 向量检索 | 史料文档向量、语义搜索 |
|
||
| ClickHouse | 分析OLAP | 客流统计、学习效果、运营报表 |
|
||
| Redis | 缓存 | 会话、热点数据、实时客流计数 |
|
||
| MinIO | 对象存储 | 3D模型、视频、图片、文档 |
|
||
| Kafka | 事件流 | 位置事件、设备状态、客流计数 |
|
||
|
||
### 7.2 数据流总览
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 数据源 │
|
||
│ 票务 │ 客流IoT │ UWB定位 │ AI日志 │ 学习记录 │ 文物 │ 内容 │
|
||
└──────────────────────────┬──────────────────────────────────┘
|
||
│
|
||
Kafka消息总线
|
||
│
|
||
┌───────────────┼───────────────┐
|
||
│ │ │
|
||
┌─────┴─────┐ ┌──────┴──────┐ ┌────┴──────┐
|
||
│ PostgreSQL │ │ ClickHouse │ │ Redis │
|
||
│ (实时业务) │ │ (分析聚合) │ │ (实时缓存) │
|
||
└───────────┘ └─────────────┘ └───────────┘
|
||
│
|
||
Flink ETL
|
||
│
|
||
┌─────────┴─────────┐
|
||
│ │
|
||
┌─────┴─────┐ ┌──────┴──────┐
|
||
│ Superset │ │ 风控引擎 │
|
||
│ (可视化看板)│ │ (Drools规则) │
|
||
└───────────┘ └─────────────┘
|
||
```
|
||
|
||
### 7.3 北极星指标计算
|
||
|
||
```sql
|
||
-- 有效学习与行动转化人次
|
||
SELECT
|
||
COUNT(DISTINCT p.user_id) AS effective_transformation_count
|
||
FROM growth_passports p
|
||
JOIN learning_records lr1 ON p.id = lr1.passport_id
|
||
AND lr1.event_type = 'route_completed' -- 完成核心学习路径
|
||
JOIN learning_records lr2 ON p.id = lr2.passport_id
|
||
AND lr2.event_type IN ('task_completed', 'understanding_expressed') -- 理解验证
|
||
JOIN action_commitments ac ON p.id = ac.passport_id
|
||
AND ac.status IN ('in_progress', 'completed') -- 形成行动
|
||
JOIN learning_records lr3 ON p.id = lr3.passport_id
|
||
AND lr3.event_type = 'feedback_submitted' -- 产生反馈
|
||
WHERE p.created_at >= '2026-01-01';
|
||
```
|
||
|
||
---
|
||
|
||
## 八、安全与合规
|
||
|
||
### 8.1 网络安全架构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ 互联网 │
|
||
│ WAF (Web应用防火墙) │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ DMZ区 │
|
||
│ SLB (负载均衡) + API Gateway │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 应用区 (K8s) │
|
||
│ 微服务集群 (Spring Cloud + 服务网格) │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 数据区 (隔离) │
|
||
│ PostgreSQL │ Neo4j │ Milvus │ MinIO │
|
||
│ GPU推理集群 │
|
||
├──────────────────────────────────────────────────────┤
|
||
│ 设备区 (VLAN隔离) │
|
||
│ IoT/安防/VR/灯光音频 (独立VLAN) │
|
||
└──────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 8.2 AI安全护栏技术实现
|
||
|
||
```python
|
||
class AISafetyGuardrail:
|
||
"""AI安全护栏三层过滤"""
|
||
|
||
def __init__(self):
|
||
self.input_filter = InputFilter() # 输入过滤
|
||
self.fact_checker = FactChecker() # 事实校验
|
||
self.output_filter = OutputFilter() # 输出过滤
|
||
self.audit_logger = AuditLogger() # 审计日志
|
||
|
||
def process(self, user_input, generated_answer, sources):
|
||
# 1. 输入安全检查
|
||
input_result = self.input_filter.check(user_input)
|
||
if not input_result.safe:
|
||
return self.safety_fallback(input_result.reason)
|
||
|
||
# 2. 事实校验: 与知识图谱比对关键事实
|
||
fact_result = self.fact_checker.verify(
|
||
generated_answer, sources, self.knowledge_graph
|
||
)
|
||
if fact_result.has_errors:
|
||
return self.safety_fallback("事实校验未通过")
|
||
|
||
# 3. 输出安全检查
|
||
output_result = self.output_filter.check(generated_answer)
|
||
if not output_result.safe:
|
||
return self.safety_fallback(output_result.reason)
|
||
|
||
# 4. 审计日志
|
||
self.audit_logger.log(
|
||
input=user_input,
|
||
output=generated_answer,
|
||
sources=sources,
|
||
model_version=self.model_version,
|
||
timestamp=datetime.now()
|
||
)
|
||
|
||
return generated_answer
|
||
```
|
||
|
||
### 8.3 数据隐私保护
|
||
|
||
| 数据类型 | 保护措施 |
|
||
|---------|---------|
|
||
| 用户身份信息 | 最小化采集,不采集与学习无关的信息 |
|
||
| 未成年人数据 | 监护人授权 + 最小化采集 + 不公开显示 |
|
||
| 港澳用户数据 | 自愿参与 + 匿名聚合 + 不做个人认同标签 |
|
||
| 人脸/情绪数据 | 不采集、不推断 |
|
||
| AI交互日志 | 脱敏存储 + 仅用于质量优化 + 定期清理 |
|
||
| 位置数据 | 仅用于体验编排,不留存个人轨迹 |
|
||
|
||
---
|
||
|
||
## 九、最小可行原型技术实现
|
||
|
||
### 9.1 原型范围
|
||
|
||
按照创新升级方案第九章建议,首个原型为"从一件文物到一次现实行动"完整体验。
|
||
|
||
### 9.2 原型技术清单
|
||
|
||
```
|
||
最小原型 = 1件文物3D模型 + 1个情境任务 + 1个AI问答入口
|
||
+ 1个成长护照H5 + 1个行动选择页 + 1个30天回访推送
|
||
```
|
||
|
||
| 组件 | 技术方案 | 工程量估算 |
|
||
|------|---------|-----------|
|
||
| 文物3D展示 | Three.js + glTF模型 | 1件文物扫描+建模,2周 |
|
||
| 情境任务 | H5互动页面 + 状态机 | 1个任务剧本+开发,3周 |
|
||
| AI问答 | Qwen2.5-14B + RAG + 安全护栏 | 模型部署+微调+API,4周 |
|
||
| 成长护照 | 微信小程序 + PostgreSQL | 前后端开发,2周 |
|
||
| 行动选择 | 小程序页面 + 数据库 | 1周 |
|
||
| 30天回访 | XXL-Job定时 + 微信模板消息 | 1周 |
|
||
| 体验编排 | 简化版WebSocket + 状态同步 | 2周 |
|
||
|
||
### 9.3 原型部署方案
|
||
|
||
```
|
||
单服务器部署 (原型阶段):
|
||
- 1台 GPU服务器 (2×A100 40G)
|
||
→ Qwen2.5-14B推理 + Milvus向量库
|
||
- 1台 应用服务器 (16核/32G)
|
||
→ PostgreSQL + Redis + Spring Boot + Nginx
|
||
- 1台 前端服务器 (4核/8G)
|
||
→ Three.js静态资源 + 小程序后端
|
||
- 1台 互动终端 (触屏一体机)
|
||
→ 情境任务H5 + AI问答界面
|
||
```
|
||
|
||
### 9.4 原型验证指标
|
||
|
||
| 验证维度 | 指标 | 达标标准 |
|
||
|---------|------|---------|
|
||
| AI可信度 | 回答来源覆盖率 | ≥90% |
|
||
| AI安全 | 不当内容拦截率 | 100% |
|
||
| 任务参与度 | 任务完成率 | ≥70% |
|
||
| 行动转化 | 行动选择率 | ≥50% |
|
||
| 回访参与 | 30天反馈率 | ≥20% |
|
||
| 用户体验 | 理解表达质量(专家评分) | ≥3.5/5 |
|
||
|
||
---
|
||
|
||
## 十、技术风险与应对
|
||
|
||
| 风险 | 影响 | 应对措施 |
|
||
|------|------|---------|
|
||
| 大模型推理延迟过高 | 体验卡顿 | 多级缓存 + 流式输出 + 轻量模型兜底 |
|
||
| 知识图谱构建周期长 | 内容不足影响上线 | 先建核心子图(延安十三年),逐步扩展 |
|
||
| UWB定位精度不达标 | 编排误触发 | 部署密度优化 + 区域判定容错算法 |
|
||
| 港澳跨境网络不稳定 | 云展馆体验差 | 港澳CDN节点 + 轻量WebGL模式 |
|
||
| VR设备故障率高 | 体验中断 | 冗余设备 + 远程诊断 + H5备选方案 |
|
||
| 内容审核瓶颈 | 发布延迟 | AI初审自动化 + 并行审核流程 |
|
||
| 并发峰值过载 | 系统不可用 | K8s弹性扩缩容 + 限流降级 + 离线兜底 |
|
||
| 全国节点运维复杂 | 复制质量参差 | 标准化部署脚本 + 远程监控 + 自动健康检查 |
|
||
|
||
---
|
||
|
||
## 十一、技术团队建议
|
||
|
||
### 11.1 核心团队配置
|
||
|
||
| 角色 | 人数 | 职责 |
|
||
|------|------|------|
|
||
| AI工程师 | 3-4 | 大模型微调、RAG、安全护栏、知识图谱 |
|
||
| 后端工程师 | 4-5 | 微服务、API、数据库、消息队列 |
|
||
| 前端工程师 | 3-4 | Web/小程序/互动终端 |
|
||
| 3D/XR工程师 | 2-3 | Three.js、Unity、3D建模、数字人 |
|
||
| 数据工程师 | 2 | 数据管道、Flink、ClickHouse、指标计算 |
|
||
| DevOps | 2 | K8s、CI/CD、监控、安全 |
|
||
| 内容工程师 | 2 | 内容组件化、审核工作流、版本管理 |
|
||
| UI/UX设计师 | 2 | 交互设计、视觉设计、体验测试 |
|
||
|
||
### 11.2 外部协作
|
||
|
||
| 协作方 | 职责 |
|
||
|--------|------|
|
||
| 党史专家组 | 史料审核、知识图谱校验、任务剧本审定 |
|
||
| 教育研究组 | 课程设计、学习效果评估方法 |
|
||
| 延安精神研究会 | 权威内容授权和编审 |
|
||
| 3D扫描团队 | 文物数字化采集 |
|
||
| 硬件集成商 | VR/灯光/音频/IoT设备安装调试 |
|
||
|
||
---
|
||
|
||
## 十二、总结
|
||
|
||
本技术实现方案将创新升级方案中的"一核、双域、三引擎、四闭环、八旗舰"产品体系,转化为可落地的技术架构:
|
||
|
||
- **AI层**:Qwen2.5私有化部署 + LoRA微调 + RAG三级检索 + 安全护栏,确保可信、可溯源;
|
||
- **数据层**:Neo4j知识图谱 + Milvus向量库 + PostgreSQL业务库 + ClickHouse分析库,支撑全场景数据需求;
|
||
- **平台层**:X1体验编排(Flink CEP) + X2成长护照(GraphQL) + X3内容治理(版本化审核),三大公共平台贯穿所有产品;
|
||
- **沉浸层**:Unity VR/XR + 体感设备联动 + Photon Fusion多人协同 + 云端串流,五大历史场景沉浸体验嵌入F1/F2产品;
|
||
- **应用层**:八个旗舰产品各自独立又共享平台能力,通过API和事件总线松耦合;
|
||
- **基础设施**:K8s容器化 + GPU推理集群 + 5G/IoT设备网络 + CDN全球加速;
|
||
- **安全合规**:三层AI安全护栏 + 数据最小化原则 + 全过程审计追溯。
|
||
|
||
建议从"一件文物到一次现实行动"最小原型开始,用7周时间验证完整链路,再逐步扩展为全量系统。
|