# afsim-web **Repository Path**: longkyo/afsim-web ## Basic Information - **Project Name**: afsim-web - **Description**: 基于 AI 的 AFSIM (Advanced Framework for Simulation, Integration and Modeling) 想定脚本自动生成、执行与分析平台。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-16 - **Last Updated**: 2026-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AFSIM 想定智能生成系统 基于 AI 的 AFSIM (Advanced Framework for Simulation, Integration and Modeling) 想定脚本自动生成、执行与分析平台。 ## 功能特性 - **自然语言生成想定** — 输入"蓝方2架红方2架30000英尺空战10分钟"即可生成可运行的 AFSIM 脚本 - **独立场景文件夹** — 每个想定生成独立文件夹,包含脚本及所有模型依赖,可脱离项目独立运行 - **自动执行与修复** — 自动调用 mission.exe 执行仿真,失败时 AI 自动修复脚本,循环重试 - **仿真结果分析** — 自动解析 LOG/EVT/AER 输出文件,生成 JSON/HTML 格式的分析报告 - **多 AI 后端支持** — 支持 OpenAI、Ollama、自定义 API 等多种 AI 后端 - **Web 管理界面** — React 前端,提供想定生成、执行监控、结果分析、模型浏览等功能 - **自学习系统** — 教程知识注入、模型热加载、RAG 示例检索、生成反馈学习 ## 自学习能力 系统内置知识驱动的自学习机制,随使用持续提升生成准确率: | 能力 | 说明 | |------|------| | **教程知识注入** | 9 个 AFSIM 教程文件自动解析为知识片段,注入 LLM 系统提示,减少语法错误 | | **模型热加载** | 新增模型文件到 `models/` 后自动检测,无需重启服务,自动提取武器/传感器/运动器元数据 | | **自动别名生成** | 从模型文件名和类型名推断中英文别名(如 "蓝方先进战斗机" → `blue_adv_fighter_1`) | | **RAG 示例检索** | 激活 `example_retriever`,从 demos/ 和历史成功脚本中检索相关示例辅助生成 | | **幻觉类型学习** | 对比 LLM 原始输出和修正后脚本,自动学习新的类型名幻觉模式 | | **生成反馈闭环** | 每次生成结果存入 SQLite,成功脚本回流到 RAG 库,形成持续改进循环 | ## 系统架构 ``` wsf_ai_generate/ ├── backend/ # FastAPI 后端 │ ├── main.py # 应用入口(启动时初始化 DB、教程提取、模型监控) │ ├── config.py # 配置管理 │ ├── api/scenarios.py # REST API 接口(含知识库端点) │ ├── tutorials/ # AFSIM 教程知识库(9 个 markdown 文件) │ └── services/ # 核心业务逻辑 │ ├── ai_service.py # AI 生成、后处理、教程知识注入、幻觉学习 │ ├── script_builder.py # 模板引擎(降级方案) │ ├── model_index.py # 模型索引、热加载、元数据提取、自动别名 │ ├── model_watcher.py # 模型文件变更监控(30秒轮询) │ ├── database.py # SQLite 持久化层(6 张表) │ ├── tutorial_extractor.py # 教程知识提取器 │ ├── example_retriever.py # RAG 示例检索(demos + 成功脚本) │ ├── scenario_packager.py # 场景打包器 │ ├── executor.py # mission.exe 执行器 │ ├── analyzer.py # 结果分析器 │ └── workflow.py # 自动化工作流(含反馈采集) ├── frontend/ # React + Vite 前端 │ └── src/pages/ │ ├── Home.jsx # 仪表盘(含知识统计) │ ├── Generator.jsx # 想定生成器 │ ├── Analysis.jsx # 结果分析 │ ├── Models.jsx # 模型浏览(含热加载按钮) │ ├── Knowledge.jsx # 知识库管理(教程/映射/历史) │ ├── Monitor.jsx # 执行监控 │ └── Settings.jsx # 系统设置 ├── models/ # AFSIM 模型库 │ ├── platforms/ # 平台定义 (战斗机、预警机等) │ ├── weapons/ # 武器定义 (空空导弹、防空导弹等) │ ├── sensors/ # 传感器定义 (雷达、ESM等) │ ├── rules/ # Brawler 行为规则 │ ├── processors/ # 处理器脚本 │ └── six_dof_types/ # 六自由度模型 └── output/ # 生成的想定(运行时创建) ``` ## 快速开始 ### 环境要求 - Python 3.8+ - AFSIM 2.9.0 (含 mission.exe) - Node.js 16+ (仅前端开发需要) ### 安装 ```bash # 克隆项目 git clone cd wsf_ai_generate # 安装 Python 依赖 pip install -r requirements.txt ``` ### 配置 编辑 `backend/config.py` 中的关键配置: ```python # AFSIM 路径 afsim.root_path = "d:\\project\\afsim-2.9.0-win64" afsim.mission_exe = "d:\\project\\afsim-2.9.0-win64\\Release\\mission.exe" # AI 后端 ai.provider = "custom" # openai / ollama / custom ai.api_key = "your-api-key" ai.base_url = "https://your-api-endpoint" ai.model = "model-name" ``` 或通过 `.env` 文件配置(参考 `pydantic-settings` 文档)。 ### 启动 **方式一:一键启动** ```bash start.bat ``` **方式二:手动启动** ```bash # 启动后端 python -m backend.main # 前端开发(可选) cd frontend npm install npm run dev ``` 访问 http://localhost:8000 打开 Web 界面。 ## 核心工作流 ``` 用户输入需求 → [RAG检索相关示例] → AI/模板生成脚本 → [注入教程知识到提示词] ↓ 后处理修正 (使用学习到的类型修正) ↓ 打包独立场景文件夹 ↓ 复制 models 依赖 ↓ 执行 mission.exe ↓ 成功 ←→ 失败 → AI 修复(注入错误知识) ↓ 解析 LOG/EVT/AER ↓ 生成 JSON/HTML 分析报告 ↓ ┌──────────────────────────────────────┐ │ 保存生成历史到 SQLite │ │ 成功脚本 → RAG 库(反馈闭环) │ │ 新幻觉类型 → learned_corrections │ └──────────────────────────────────────┘ ``` ### 场景文件夹结构 每个生成的想定是一个独立文件夹: ``` output/air_2v2_fighter_04171200_abc1/ ├── scenario.txt # 主想定脚本 ├── platforms/ # 平台定义文件 (从 models/ 复制) ├── weapons/ # 武器定义文件 ├── sensors/ # 传感器定义文件 ├── rules/ # 行为规则文件 ├── processors/ # 处理器脚本 ├── six_dof_types/ # 六自由度模型 ├── prdata/ # 编程数据 ├── output/ # 运行输出 │ ├── scenario.log # 场景日志 │ ├── LOG.1 # Brawler 详细日志 │ ├── scenario.aer # 航迹数据 │ └── scenario.evt # 事件数据 └── report/ # 分析报告 ├── report.json └── report.html ``` ## 自学习数据库 系统使用 SQLite(`wsf_ai_generate.db`)存储学习数据,包含 6 张表: | 表名 | 用途 | |------|------| | `generation_history` | 每次生成的完整记录(需求、脚本、执行结果、分析得分) | | `learned_aliases` | 学习到的别名映射(用户输入 → 平台文件) | | `learned_corrections` | LLM 幻觉类型修正(编造名 → 正确名) | | `model_metadata` | 模型文件元数据缓存(武器、传感器、运动器) | | `tutorial_knowledge` | 教程知识片段(58 条,按优先级注入提示) | | `successful_scripts` | 成功脚本库(RAG 检索素材) | ## API 接口 ### 想定管理 | 接口 | 方法 | 说明 | |------|------|------| | `/api/health` | GET | 健康检查 | | `/api/scenarios/generate` | POST | AI 生成想定脚本 | | `/api/scenarios/execute` | POST | 执行指定想定 | | `/api/scenarios/analyze` | POST | 分析执行结果 | | `/api/scenarios/auto-generate` | POST | 一键自动生成+执行+分析 | | `/api/scenarios/list` | GET | 列出所有想定 | ### 模型管理 | 接口 | 方法 | 说明 | |------|------|------| | `/api/models/list` | GET | 列出可用模型 | | `/api/models/refresh` | POST | 手动触发模型热加载 | | `/api/models/platforms/meta` | GET | 获取平台元数据(武器/传感器/运动器) | ### 知识库 | 接口 | 方法 | 说明 | |------|------|------| | `/api/knowledge/stats` | GET | 知识库统计 | | `/api/knowledge/tutorials` | GET | 查看教程知识片段 | | `/api/knowledge/aliases` | GET | 查看别名映射(硬编码+学习到的) | | `/api/knowledge/aliases` | POST | 手动添加别名映射 | | `/api/knowledge/corrections` | GET | 查看 LLM 幻觉类型修正 | | `/api/knowledge/history` | GET | 查询生成历史 | 完整 API 文档:http://localhost:8000/docs ## 使用示例 **生成 2v2 空战想定:** ```python import httpx response = httpx.post("http://localhost:8000/api/scenarios/auto-generate", json={ "requirements": "蓝方2架,红方2架,30000英尺空战10分钟", "scenario_type": "air_combat" }) result = response.json() print(f"场景: {result['scenario_name']}") print(f"成功: {result['success']}") ``` **生成 2v16 大规模空战:** ```python response = httpx.post("http://localhost:8000/api/scenarios/auto-generate", json={ "requirements": "2v16大规模空战,蓝方2架先进战斗机对抗红方16架", "scenario_type": "air_combat" }) ``` **查看知识库统计:** ```python response = httpx.get("http://localhost:8000/api/knowledge/stats") print(response.json()) # {"knowledge": {"tutorial_entries": 58, "learned_aliases": 0, ...}, "generation": {...}} ``` **手动触发模型热加载:** ```python response = httpx.post("http://localhost:8000/api/models/refresh") print(response.json()) # {"added": 2, "removed": 0, "total": 370} ``` ## 支持的场景类型 - `air_combat` — 空战 (默认) - `iads` — 防空系统 - `strike` — 打击 - `escort` — 护航 - `patrol` — 巡逻 ## 技术栈 | 组件 | 技术 | |------|------| | 后端 | Python, FastAPI, Pydantic, SQLite | | 前端 | React 18, Vite, Ant Design, Recharts | | AI | OpenAI API 兼容接口 | | 仿真 | AFSIM 2.9.0 (mission.exe) | | 自学习 | SQLite, RAG, 教程知识注入, 幻觉模式学习 | ## License Internal use only.