尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
用Rust实现麻将AI推理:candle神经网络与嵌入式权重实战解析
用Rust实现麻将AI推理candle神经网络与嵌入式权重实战解析【免费下载链接】Akagi支持雀魂、天鳳、麻雀一番街、天月麻將能夠使用自定義的AI模型實時分析對局並給出建議內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, with the ability to use custom AI models to analyze games in real time and provide suggestions. Comes with Mortal AI as a built-in example.项目地址: https://gitcode.com/gh_mirrors/ak/Akagi麻将AI推理听起来很神秘但如果用对了工具整个实现可以变得异常简洁。Akagi 这个开源项目用纯Rust语言借助candle神经网络框架实现了一个完整的麻将AI从牌局特征编码、CNN 前向推理到把safetensors 权重直接嵌入二进制文件全程不依赖 Python 运行时。本文将以 Akagi 内置的native_bot为例一步步拆解这套麻将AI推理系统的设计与实战细节帮你理解如何用 Rust 写出高性能、零依赖的麻将AI。为什么用 Rust candle 做麻将AI推理大多数机器学习项目都依赖 Python PyTorch 进行推理但 Akagi 选择了另一条路完全用 Rust 实现推理。原因很实际零运行时依赖用户安装后无需再装 Python、CUDA 库开箱即用性能出色Rust 编译为原生代码CPU 推理毫秒级完成嵌入式友好通过include_bytes!可以把模型权重直接编进可执行文件单文件分发。而candle正是 Hugging Face 推出的 Rust 原生深度学习框架它提供了张量运算、卷积层Conv1d、全连接层Linear等全套组件。在 Akagi 的 Cargo.toml 中推理路径只依赖三个关键 cratecandle-core、candle-nn和safetensors加起来轻量且干净。麻将AI推理的整体架构一条从牌局到动作的流水线在动手写代码之前先理解整体流程。Akagi 的麻将AI推理可以概括为四个环节特征编码把牌桌上的所有信息手牌、副露、弃牌、宝牌、点数等编码成神经网络的输入张量前向推理把特征张量送入 candle 搭建的 CNN得到每个动作的 logits 分数合法动作掩码结合规则引擎枚举出当前所有合法动作动作选择在合法动作上做 softmax选出最优出牌或操作。这四步在native_bot中被拆成了清晰独立的模块官方文档 native_bot/README.md 画出了完整的调用链mjai 事件 → Engine::feed → 状态维护 → 特征编码 → candle 模型 → 合法动作。特征编码和动作编解码在训练与推理之间完全共享同一套 Rust 代码从构造上保证了模型看到的输入和训练时完全一致这是本项目最巧妙的设计。特征编码实战把牌局变成神经网络能读的平面图麻将牌桌信息丰富但神经网络只认数字。Akagi 自己实现了一套自研的观测特征编码器位于 obs.rs输出一个通道主序channel-major的浮点张量形状为[C, T]4人对局C 39个通道 ×T 34种牌34 张牌型3人对局C 37个通道 ×T 27种牌去掉 2m–8m每个通道是一个牌型维度的平面编码一类信息。例如通道组含义手牌阈值 4 层手牌中 ≥1/≥2/≥3/≥4 张的牌型赤宝牌手中赤五的存在情况自摸牌当前摸到哪张牌one-hot听牌信息听牌集合、是否听牌宝牌指示牌宝牌与里宝牌计数各家舍牌每位玩家的弃牌分布各家副露副露牌、立直状态、分数值得注意的设计是完全以自家为基准的相对座位顺序索引 0 永远是决策者自己然后依次是下家、对家、上家。这让同一个模型无论坐在哪个位置都能正常工作。神经网络结构解析一维 ResNet 卷积网络特征编码完成后接下来是推理核心——模型结构定义在 model.rs是一个一维 ResNet 卷积网络// 超参数必须与训练脚本 train.py 保持一致 pub const CONV: usize 64; // 卷积宽度 pub const BLOCKS: usize 3; // 3 个残差块 pub const FC: usize 256; // 全连接层宽度模型结构非常简单清晰输入卷积层conv_in把 39/37 个特征通道映射为 64 通道3 个残差块res.0 ~ res.2每个块由两层 Conv1d ReLU 跳跃连接组成展平后接全连接层fc256 维输出层head映射到动作空间4人对局 82 个动作3人对局 60 个。前向推理用 candle 的TensorAPI 实现见forward_logits把扁平化的[C*T]观测值 reshape 成(1, C, T)依次过卷积、ReLU、残差块、全连接最终输出一个长度为动作空间大小的 logits 向量。整段推理代码不到 20 行这就是 candle 的威力——Rust 里写神经网络和 PyTorch 一样顺手。嵌入式权重实战include_bytes! 把模型装进可执行文件这是整个设计中最有实战感的部分。训练好的模型权重以.safetensors格式存放在 weights/ 目录下Akagi 用 Rust 的include_bytes!宏在编译期直接把权重字节嵌入二进制/// 4 人对局权重从 Tenhou 牌谱行为克隆训练而来 pub const WEIGHTS_4P: [u8] include_bytes!(../weights/akagi4p.safetensors); /// 3 人对局三麻权重 pub const WEIGHTS_3P: [u8] include_bytes!(../weights/akagi3p.safetensors);这段代码位于 defaults.rs。效果是运行时零外部文件用户拿到的就是一个可执行文件不需要额外下载模型版本天然绑定权重随二进制一起发布不会出现代码新、模型旧的错配加载极简Engine::new只需把字节传给Model::from_safetensorscandle 的VarBuilder会按 key 名自动加载每一层的权重。权重体积也很友好4人对局模型约 2.6 MB、参数 66 万3人对局约 2.2 MB、参数 54 万嵌入二进制后完全无感。推理引擎实战从观测量到合法动作的完整决策有了模型和权重最后一步是把它们组装成能实时决策的引擎实现在 engine.rs。核心是Engine结构体它同时维护牌局状态基于riichienv-core纯 Rust 规则引擎通过feed逐条消费 mjai 事件神经网络模型已加载权重的 candle CNN。当轮到自己决策时decide()方法执行以下逻辑从牌局状态提取观测特征和合法动作集合若合法动作只有一个直接返回强制动作无需推理节省计算否则调用model.forward_logits得到各动作分数按分数排序并 softmax 出概率返回 Top-3 候选供界面展示推荐若最优动作是立直还会再跑一次模型预测立直时的舍牌。引擎还贴心处理了红五特例打出一张赤五会白白损失宝牌所以当普通五万和赤五万同时合法时动作编解码层 action_codec.rs 会优先选择普通五万避免模型把宝贵的赤宝牌打出去。这些细节都体现了生产级麻将AI的严谨。从训练到部署行为克隆与权重导出的完整闭环推理侧很轻巧但权重从哪来答案是行为克隆Behavior Cloning即监督学习人类玩家的出牌。完整流程记录在 train/README.mdRust 提取数据extract二进制把天凤牌谱逐局回放抽取数百万条(观测, 动作, 掩码)样本Python 训练用 PyTorch 在 GPU 上训练约 5 分钟得到验证集 Top-1 准确率约 76%4人/ 78%3人BatchNorm 折叠导出把训练时的 BatchNorm 层折叠进前面的卷积层导出的 safetensors 权重不含 BatchNorm 算子Rust 侧推理无需实现该操作奇偶校验用 parity_check.py 导出参考 logits再用 Rust 侧cargo test --test parity对比要求最大误差 2e-3确保 candle 推理与 PyTorch 数值一致。这条流水线中 Python 只出现在离线训练阶段运行时完全是 Rust这正是实战级工程取舍的典范。3人对局与4人对局的差异处理支持三麻sanma是这套系统的特色。三麻与四麻在推理上有三处关键差异全部通过Geometry结构统一管理维度4人对局3人对局牌型轴 T3427移除 2m–8m特征通道 C3937增加每家拔北计数动作空间 A8260另外三麻没有吃Chi且拔北Kita是独立动作。天凤的三麻牌谱用 4 座数组存储mjai_compat.rs 会在事件进入引擎前做兼容修正包括把nukidora重命名为kita避免事件被 serde 丢弃。两套权重分别训练、分别嵌入用户切换模式时零成本。总结Rust 麻将AI推理的工程启示回顾整个实现Akagi 的native_bot给我们展示了几个可复用的实战要点推理框架选型candle 让 Rust 原生神经网络推理变得可行代码量与 PyTorch 相当特征与动作编解码共享训练与推理共用一套 Rust 编码器从根上杜绝特征漂移权重内嵌分发include_bytes! safetensors 实现单文件部署体验极佳强制动作短路合法动作唯一时直接返回避免无谓推理数值奇偶校验跨语言PyTorch ↔ candle必须做数值比对防患于未然。如果你也想在 Rust 项目里做 AI 推理不妨克隆这个项目研究一番git clone https://gitcode.com/gh_mirrors/ak/Akagi。从 model.rs 的 20 行前向代码开始读起你会惊讶地发现——用 Rust 实现麻将AI推理其实比想象中简单得多。【免费下载链接】Akagi支持雀魂、天鳳、麻雀一番街、天月麻將能夠使用自定義的AI模型實時分析對局並給出建議內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, with the ability to use custom AI models to analyze games in real time and provide suggestions. Comes with Mortal AI as a built-in example.项目地址: https://gitcode.com/gh_mirrors/ak/Akagi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

MySQL视图创建与管理:三种方法详解与实战避坑指南

MySQL视图创建与管理:三种方法详解与实战避坑指南

1. 视图是什么,以及为什么你需要它如果你经常和数据库打交道,尤其是处理一些需要反复查询、但查询逻辑又比较固定的报表或数据组合时,你可能会发现自己在重复编写一些冗长且复杂的SQL语句。每次都要写一遍,不仅效率低下&#xff0…

📅 2026/10/5 4:41:28
Tmax-9B-MLX-6bit思维链模式解密:<think>标签背后隐藏的推理能力如何开启

Tmax-9B-MLX-6bit思维链模式解密:<think>标签背后隐藏的推理能力如何开启

Tmax-9B-MLX-6bit思维链模式解密:标签背后隐藏的推理能力如何开启【免费下载链接】Tmax-9B-MLX-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Tmax-9B-MLX-6bit Tmax-9B-MLX-6bit 是 Allen AI 的 Tmax-9B 模型专为 Apple Silicon 打造的…

📅 2026/9/10 6:03:10
如何快速上手LFM2.5-1.2B-Thinking-bf16:3步在Mac上跑通本地大模型

如何快速上手LFM2.5-1.2B-Thinking-bf16:3步在Mac上跑通本地大模型

如何快速上手LFM2.5-1.2B-Thinking-bf16:3步在Mac上跑通本地大模型 【免费下载链接】LFM2.5-1.2B-Thinking-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/LFM2.5-1.2B-Thinking-bf16 想在自己的 Mac 上运行本地大模型?LFM2.…

📅 2026/10/7 12:19:45
MORE NEWS

更多资讯

📰

ASP.NET MVC工作流源码深度解析与生产避坑指南

简介:这是一套基于ASP.NET MVC5开发的完整工作流管理系统源码,面向OA办公系统、CRM客户关系管理及HR人事管理等企业级应用开发者,尤其适合希望深入理解流程引擎设计与MVC架构实践的中高级.NET学习者。资源包含可视化流程设计器与表单设计器两…

📰

从95%到8%:国产AI芯片如何翻越CUDA生态大山

1. 从95%到8%:一个数字背后的产业变局95%到8%,这两个数字放在一起,任何一个在AI硬件领域摸爬滚打过的人都会心头一紧。前者是某国际GPU巨头在特定高端加速卡市场的长期占有率,后者是国产AI芯片在同一个统计口径下被反复引用的份额…

📰

分布式存储系统设计:一致性哈希、副本放置与Raft实践

1. 需求与架构设计:先搞清楚要解决的到底是谁的问题做存储系统的人常被问一个外行问题:“分布式存储就是多台机器一起存东西,对吧?”对,但也不全对。它真正的难点不在于“多台机器一起存”,而在于“多台机器…

📰

STM32驱动BH1750光照传感器实战:I²C寄存器配置与读数为0的六大根源

简介:本资源是一套面向STM32嵌入式开发者的BH1750光照强度传感器驱动库,适用于初学者入门实践与项目快速集成。资源聚焦环境光检测场景,解决STM32与GY-30模块(含BH1750芯片)的IC通信、模式配置、Lux值读取及错误处理等…

📰

【C++】 priority_queue知识点总结

一、基础概念priority_queue 叫优先队列,底层不是队列,是堆(大顶堆 / 小顶堆),属于容器适配器。适配器:不自己实现底层存储,复用别的容器(vector/deque)做底层&#xff0…

📰

Intel HD630非DCH驱动26.20.100.6573稳定适配指南

简介:本资源为Intel HD Graphics 530(HD630)集成显卡专用的非DCH架构驱动程序,版本号26.20.100.6573,专为Windows 10 64位系统优化,适用于搭载第六代Skylake处理器的台式机与笔记本用户,解决传统…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬