127 KiB
延安精神(大湾区)学习展示中心 — 技术实现方案
本文档将《终极目标导向创新升级方案》中的产品设计和系统架构,转化为可落地的技术架构、技术选型、数据模型和工程实施方案。
编制日期: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 查询接口
// 示例:查询"大生产运动"关联的所有文物、人物和概念
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回答必须包含:
{
"answer": "延安大生产运动始于1939年...",
"sources": [
{
"document": "《延安精神研究》第3卷",
"page": 45,
"excerpt": "1939年2月,毛泽东在延安干部生产动员大会上提出...",
"verified": true
}
],
"confidence": "high",
"uncertainty_note": null
}
当检索结果不足时,返回:
{
"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临场改写历史,而是在已审核内容组件中进行安全编排。
技术架构
┌────────────────────────────────────────────────────┐
│ 可信叙事引擎 │
├────────────────┬────────────────┬──────────────────┤
│ 内容组件仓库 │ 叙事编排引擎 │ 分层表达引擎 │
│ (已审核内容块) │ (路线生成器) │ (分众适配器) │
├────────────────┼────────────────┼──────────────────┤
│ 组件元数据: │ 编排规则: │ 适配规则: │
│ - 史料来源 │ - 人群→组件集 │ - 小学: 简化表述 │
│ - 适用人群 │ - 时长→节点数 │ - 中学: 因果逻辑 │
│ - 时长估算 │ - 客流→备选节点 │ - 干部: 理论深度 │
│ - 空间位置 │ - 教学目标→必选 │ - 港澳: 双语+轻量 │
│ - 版本号 │ 节点 │ │
└────────────────┴────────────────┴──────────────────┘
内容组件数据模型
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()
);
叙事路线生成算法
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成长护照。
数据模型
-- 成长护照主表
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节点 │ ... │
│ 微节点 │ │ 标准节点│ │ 城市节点│ │
└───────┘ └───────┘ └───────┘ │
组件包格式
{
"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追问(史料引用) │
│ - 资源约束 │ - 个人终端: 决策 │ - 证据使用分析 │
│ - 证据集 │ - 团队屏: 方案汇总│ - 现实连接问题 │
│ - 历史事实 │ │ │
│ - 评价维度 │ │ │
└────────────────┴────────────────┴────────────────────┘
任务状态机
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")
]
任务定义数据模型
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报告生成 → 推送到团队终端 → 存入成长护照
具体场景示例:南泥湾大生产任务剧本
{
"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插件) │ (扫码→星图) │ (一物一课/短片) │
└────────────────┴────────────────┴────────────────────┘
文物数据模型
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()
);
关系星图前端实现
// 使用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门户(繁体/英文) | 不依赖微信,支持港澳访问 |
数据采集边界
# 允许采集的数据
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天跟踪 │ - 成果墙展示 │
│ - 自定义行动 │ - 进展提醒 │ - 课程案例转化 │
│ - 团队行动创建 │ - 反馈表单 │ - 年度优秀评选 │
└────────────────┴────────────────┴────────────────────┘
行动模板数据模型
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体验(排队预约)
│ └── 成长护照同步到个人手机
├── 内容更新: 每季度从旗舰中心同步新组件包
├── 本地内容提交: 本校优秀作品 → 旗舰中心审核 → 全国共享
└── 远程监控: 旗舰中心实时监控设备状态
节点部署自动化
# 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 场景管理器
/// <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 体感联动控制
/// <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多人同步
/// <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可信知识引擎驱动,可以回答用户问题、提供历史背景、引导任务。
/// <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 排队调度算法
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规则示例
// 当用户进入某区域且该区域客流低于阈值时,触发内容联动
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:
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)
- 事实校验: 与知识图谱交叉验证
- 来源检查: 是否标注史料来源
- 合规检查: 政治安全规则引擎
- 版权检查: 素材授权验证
↓
自动检查通过 → 编辑复审 (人工)
自动检查未通过 → 退回修改
↓
编辑复审通过 → 专家终审 (关键内容)
↓
专家终审通过 → 版本发布 (带版本号)
↓
发布到: 展陈系统 / 云展馆 / 课程平台 / 全国节点
↓
使用反馈收集 → 定期巡检 → 需要时触发修订
版本管理
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 北极星指标计算
-- 有效学习与行动转化人次
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安全护栏技术实现
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周时间验证完整链路,再逐步扩展为全量系统。