# 延安精神(大湾区)学习展示中心 — 技术实现方案 > 本文档将《终极目标导向创新升级方案》中的产品设计和系统架构,转化为可落地的技术架构、技术选型、数据模型和工程实施方案。 > > 编制日期: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 /// /// VR场景管理器:负责场景加载、切换和生命周期管理 /// public class VRSceneManager : MonoBehaviour { // 场景加载采用Addressables异步加载,避免卡顿 [SerializeField] private AssetReferenceScene loadingScene; // 当前激活的场景ID(与X1编排引擎同步) private string currentSceneId; // 场景元数据(从ScriptableObjects加载) private Dictionary sceneMetadataMap; /// /// 从X1编排引擎接收场景切换指令 /// 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; } /// /// 根据人群类型适配VR场景内容 /// private void AdaptToAudience(string audienceType, string language) { // 小学:简化交互、增加引导NPC、缩短任务时长 // 中学:增加因果推理任务、证据收集环节 // 干部:增加理论深度、历史决策复盘 // 港澳:繁体/英文UI、轻量化叙事 var adapter = GetComponent(); 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 /// /// 体感设备联动控制器:根据VR场景事件触发物理体感 /// public class HapticEnvironmentController : MonoBehaviour { // 动态座椅控制 (通过串口/USB) private DynamicSeatInterface seatController; // 触觉反馈背心 (bHaptics SDK) private bHapticsHandler hapticsHandler; // 环境效果控制器 (通过MQTT) private MQTTClient envController; // 效果预设库 private Dictionary effectPresets; /// /// 场景事件触发体感效果 /// 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 /// /// 多人协同VR控制器:基于Photon Fusion实现4人同场景同步 /// 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; } /// /// 玩家进入VR房间 /// public override void Spawned() { // 从X1编排引擎获取分配的角色 Role = OrchestratorClient.GetAssignedRole(Runner.LocalPlayer); // 初始化角色化身 InitializeAvatar(Role); // 通知房间管理服务 RoomService.NotifyPlayerReady(Runner.SessionInfo.Name, Runner.LocalPlayer); } /// /// 网络同步更新(每帧调用) /// 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); } } /// /// 团队任务完成同步 /// [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 /// /// VR内AI NPC控制器:与AI可信馆员API集成 /// public class VRNPCController : MonoBehaviour { private AIBridge aiBridge; // AI API通信桥 private LipSync lipSync; // 口型同步 private VoicePlayer voicePlayer; // 语音播放 // NPC身份定义(从知识图谱加载) public string npcPersonId; // 对应知识图谱中的Person节点 public string npcEra; // NPC所处历史时期 /// /// 用户向NPC提问(语音输入) /// 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 positions = env .addSource(new KafkaSource<>("uwb-positions")); Pattern pattern = Pattern .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周时间验证完整链路,再逐步扩展为全量系统。