战场指挥官 · 技术白皮书 v0.2

本文是 战场指挥官 的技术验证稿,聚焦《全战三国》语音指挥 Mod 的第一版实现。

最初技术启发

本文是 军令如山白皮书 的最初技术启发,保留 STT、LLM 指令解析和执行层的早期线索。当前产品不再以《全战三国》Mod 为唯一落点,而是收束为“自然语言实时指挥版 TABS”。


一、技术验证目标

做一个运行在《全战三国》之上的语音指挥 Mod。

玩家不再使用键鼠精确操作,而是用语音下令,由 AI 理解指令并在游戏中执行。

第一版验证的不是完整守城战,也不是完整部将 AI,而是最小链路:

玩家语音 → 本地语音识别 → LLM 指令解析 → 游戏内单位执行。

验收标准:

能对着麦克风说一句“把预备队调去北门”,游戏里对应单位完成移动。


二、与概念母稿的边界

战场指挥官 讨论的是完整游戏体验:守城战、多线压力、传令兵延迟、部将性格和信息不对称。

本文只讨论《全战三国》Mod 的技术切片:

  • 使用现成游戏战场,避免从零开发战斗系统。
  • 第一版先不做传令兵延迟动画。
  • 第一版先不做部将 AI 回推。
  • 第一版先不做完整战役流程。
  • 第一版可以是纯后台工具,不需要自定义 UI。

这个切片的价值是尽快验证“语音指令能否替代一部分键鼠操作,并带来指挥官临场感”。


三、系统架构

[玩家语音]

[STT:SenseVoice-small 本地]   ← 0.4s 级别,完全离线
    ↓ 文字
[LLM:指令解析]                ← 理解意图,输出结构化指令
    ↓ JSON
[指令执行层:全战三国 Mod]      ← 模拟键鼠操作 / 脚本接口

[游戏响应]

STT 层

  • 工具:本地 SenseVoice-small(FunASR)。
  • 输入:麦克风实时音频。
  • 输出:中文文字。
  • 延迟目标:< 0.5s。
  • 已知状态:本地测试约 0.376s,准确率可接受。

LLM 解析层

输入示例:

把预备队调去北门,弓箭手全部撤回东城楼

输出示例:

[
  { "unit": "预备队", "target": "北门", "action": "增援" },
  { "unit": "弓箭手", "target": "东城楼", "action": "撤退" }
]

候选方案:

  • 本地 Ollama:优先做,验证离线和低成本路径。
  • 云端模型:后续对比解析效果与延迟。

延迟目标:< 0.5s。

指令执行层

  • 接收结构化 JSON,翻译成游戏内操作。
  • 候选方式:模拟键鼠(pyautogui)或游戏脚本接口。
  • 参考:zhanlong 项目

四、Demo 范围

目标场景

《全战三国》野战。玩家作为主将,通过语音调配各部兵力,与敌军正面交战。

包含

  • 麦克风实时录音,采用 Push-to-Talk:按住说话,松开识别。
  • SenseVoice-small 本地识别。
  • LLM 解析出结构化指令。
  • 至少支持 3 类基础指令:增援、撤退、集合。
  • 指令通过模拟输入或脚本接口在游戏中执行。

不包含

  • 传令兵延迟动画。
  • 部将 AI 回推。
  • 完整战役流程。
  • 自定义战场 UI。
  • 多人联机。
  • 除中文以外的语言。

五、技术选型确认

组件选型状态
STT本地 SenseVoice-small已测试
LLM 解析本地 Ollama 优先,后续对比云端待实现
游戏接口全战三国 Mod 脚本 / pyautogui待调研
触发方式Push-to-Talk待实现
运行平台Windows,Python 3.13,.venv已建立

六、指令词表 v0.1

单位类型

含义
预备队后备兵力
弓箭手 / 弓兵远程单位
骑兵骑马单位
步兵 / 盾兵近战步兵
投石车 / 攻城器械远程攻城

位置类型

含义
左翼战线左侧
右翼战线右侧
中路战线中央
前线最前方交战位置
后方后排支援位置
中军 / 本阵主将所在核心阵地

动作类型

含义
增援 / 支援 / 调去 / 派去移动到目标地点
撤退 / 撤回 / 后撤从当前位置撤离
防守 / 守住 / 坚守原地防御
进攻 / 出击 / 冲上去主动进攻
集合 / 集结聚集到某点
停下 / 原地待命暂停行动

七、待验证问题

  • LLM 解析:本地 Ollama 是否足够稳定,是否需要云端模型兜底。
  • 全战三国 Mod 接口:脚本接口和模拟键鼠哪条路径更稳。
  • Push-to-Talk:按住说话、松开识别的操作节奏是否自然。
  • 指令词表:需要提前定义强词表,还是允许开放式理解。
  • 空间锚点:野战中的“左翼 / 右翼 / 中路”是否足够稳定,还是应优先选择守城战的“北门 / 东城楼 / 瓮城”。