深度解析Akagi:基于Rust与Tauri的实时日本麻将AI助手技术架构设计
深度解析Akagi基于Rust与Tauri的实时日本麻将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/AkagiAkagi是一个开源的实时日本麻将AI助手专为雀魂、天鳳、麻雀一番街和天月麻將等主流平台设计。该项目采用Rust后端与Tauri前端框架构建通过本地代理或内置浏览器捕获游戏状态提供实时向听数、听牌类型、和牌率、听牌率、对手放铳风险等多维度分析功能。本文将从技术架构、应用场景、性能优化等方面深入探讨Akagi的实现原理与工程实践。技术架构解析Akagi采用模块化的单体架构设计核心组件通过事件总线解耦确保各子系统独立运行且易于扩展。系统整体架构遵循捕获-解析-分析-展示的数据流模型实现了从原始网络数据到可视化建议的完整处理链条。核心事件总线系统项目的通信枢纽位于src/event_bus.rs定义了系统内部的所有通道类型。事件总线采用发布-订阅模式各子系统仅持有总线句柄避免直接依赖关系。主要通道包括MjaiBus原始游戏事件流从平台桥接器流向游戏状态跟踪器和AI管理器AnalysisBus分析结果广播通道连接分析引擎与IPC转发器BotResponseBusAI决策响应通道将决策结果传递至前端界面NotifyBus系统通知通道用于错误处理与用户反馈这种设计使得系统组件可以独立开发、测试和维护同时保持高效的内部通信。事件总线的实现基于Tokio的广播通道支持多消费者模式确保分析、AI和界面组件能够并行处理相同的事件流。麻将分析引擎实现麻将分析引擎位于src/analysis/目录是基于EndlessCheng/mahjong-helper项目的Rust移植版本。该引擎实现了完整的麻将数学分析功能// 手牌分析核心接口示例 pub struct AnalysisResult { pub shanten: i8, // 向听数 pub waits: VecString, // 听牌类型 pub agari_rate: f32, // 和牌率 pub tenpai_rate: f32, // 听牌率 pub risk: [f32; 4], // 对手放铳风险 pub best_discard: OptionString, // 推荐舍牌 pub candidates: VecCandidate, // 候选动作分析 } impl AnalysisResult { pub fn analyze_14(self, hand: [Tile34], drawn: Tile34) - Self { // 14张牌分析逻辑 // 包含向听计算、牌效评估、风险评估等 } }分析引擎的数学基础包括向听数计算基于riichienv-core库的牌理算法和牌率评估使用统计模型预测特定巡目的和牌概率风险评估模型基于NC现物、OC安牌和DNC壁牌理论牌效搜索通过剪枝算法寻找最优舍牌策略游戏状态跟踪器src/game_state/模块负责维护权威的游戏状态镜像将mjai协议事件转换为可查询的内部表示。该模块封装了riichienv-core的底层API提供更符合UI需求的接口pub struct GameStateSnapshot { pub players: VecPlayerSnapshot, pub dora_markers: VecString, pub oya: usize, pub honba: u32, pub kyotaku: u32, pub round: u32, pub extra: HashMapString, Value, } impl GameTracker { pub fn snapshot(self) - OptionGameStateSnapshot { // 生成当前游戏状态的快照 // 用于前端显示和AI决策 } }状态跟踪器支持四人麻将和三人麻将sanma两种模式通过TrackedGame枚举进行分派。这种设计确保了代码复用同时保持模式特异性。AI代理管理架构AI系统采用分层设计支持多种运行模式AI决策流程从事件捕获到动作执行的完整处理链内置神经网络模型基于Candle框架的纯Rust实现权重文件嵌入二进制云端推理接口通过HTTP API调用远程高性能模型本地模型作为降级备选外部mjai代理通过标准JSONL协议集成第三方AI引擎AI管理器根据游戏模式4p/3p自动选择对应的激活代理支持运行时切换而无需重启游戏。云端推理采用断路器模式在网络故障时自动降级到本地模型确保游戏不中断。应用场景矩阵Akagi适用于多种麻将学习与分析场景不同配置组合可满足从初学者到高级玩家的需求使用场景推荐配置技术特性适用人群实时决策辅助MITM代理模式 内置AI低延迟分析、实时HUD显示中级玩家离线学习分析游戏录像导入 深度分析历史回放、统计分析所有水平AI行为研究外部mjai代理 详细日志协议级事件记录、AI决策追踪开发者/研究者多平台兼容Chromium模式 自动适配跨平台支持、零证书配置跨平台用户性能调优自定义分析深度 缓存优化可调节计算复杂度高级用户代理捕获技术对比Akagi提供两种游戏数据捕获技术各有适用场景MITM代理模式系统级代理支持所有游戏客户端需要安装自签名CA证书提供完整的网络流量拦截支持自动游戏功能Chromium模式通过Chrome DevTools协议拦截无需证书配置零设置启动仅限网页版游戏平台独立浏览器配置文件技术选择建议对于需要自动游戏功能的用户推荐MITM模式对于追求简单部署的用户Chromium模式是更佳选择。性能优化指南分析引擎性能调优麻将分析涉及大量计算Akagi通过多级优化确保实时性预计算表缓存常用计算结果如和牌率、听牌率预计算并缓存增量分析仅当手牌状态变化时重新计算并行处理利用Rust的异步特性并行处理多个玩家的风险分析内存优化使用紧凑数据结构减少内存占用// 性能关键路径优化示例 pub fn analyze_hand_fast(hand: Hand34) - AnalysisResult { // 使用预计算表加速常见牌型 if let Some(cached) CACHE.get(hand.fingerprint()) { return cached.clone(); } // 并行计算多个分析维度 let (shanten, waits) rayon::join( || calculate_shanten(hand), || enumerate_waits(hand) ); // 流水线处理后续计算 AnalysisResult::from_parts(shanten, waits, /* ... */) }内存管理策略Akagi采用分层内存管理策略热数据当前游戏状态和分析结果常驻内存温数据历史游戏记录按需加载冷数据旧日志和备份存储在磁盘内存使用可通过配置文件调整[performance] max_cache_size 512MB # 分析缓存上限 history_buffer 100 # 历史记录缓存数量 log_retention_days 7 # 日志保留天数网络通信优化对于云端推理模式网络延迟是关键瓶颈。Akagi实施以下优化请求批处理将多个分析请求合并发送连接复用保持HTTP连接池减少握手开销超时策略分层超时设置连接/读取/总超时重试机制指数退避重试失败请求集成生态外部AI代理集成Akagi通过标准mjai协议支持第三方AI代理集成。代理需实现简单的JSONL接口# 示例mjai代理接口 import sys import json def main(): player_id int(sys.argv[1]) if len(sys.argv) 1 else 0 while True: line sys.stdin.readline() if not line: break events json.loads(line) # 处理事件并生成响应 response process_events(events, player_id) print(json.dumps(response), flushTrue) if __name__ __main__: main()代理集成支持功能环境隔离每个代理在独立Python虚拟环境中运行配置管理通过manifest.toml定义可配置参数依赖管理使用uv进行依赖解析和安装热重载配置变更无需重启主程序数据分析工具链数据分析流程从原始事件到可视化统计的完整处理链Akagi提供完整的数据分析工具链原始数据捕获WebSocket帧级日志记录事件解析mjai协议事件流提取统计聚合胜率、放铳率、立直率等指标计算可视化展示图表和表格形式呈现历史数据存储采用分层结构config_root/history/ ├── index.jsonl # 游戏记录索引 └── games/ └── ulid.mjai.jsonl # 完整事件流开发工具集成开发者可通过以下工具扩展Akagi功能协议分析器内置Inspector视图显示原始协议数据性能分析器集成tracing框架进行性能分析测试框架完整的集成测试套件构建系统跨平台构建脚本支持进阶配置高级分析参数调优用户可通过配置文件精细控制分析行为[analysis] depth 3 # 分析深度1-5深度越高越精确但越慢 risk_tolerance 0.5 # 风险容忍度0.0-1.0 enable_suji true # 筋牌分析 enable_kabe true # 壁牌分析 enable_ura true # 里筋分析 cache_size 1000 # 分析缓存条目数 [bot.advanced] confidence_threshold 0.7 # AI置信度阈值 timeout_ms 5000 # AI响应超时 fallback_enabled true # 启用降级策略自定义UI主题前端支持深度主题定制可通过CSS变量调整界面样式/* 自定义主题示例 */ :root { --akagi-primary: #dc2626; --akagi-secondary: #3b82f6; --akagi-background: #0f172a; --akagi-surface: #1e293b; --akagi-text: #f8fafc; } /* 牌面渲染定制 */ .mahjong-tile { --tile-scale: 1.2; --tile-border-radius: 4px; --tile-shadow: 0 2px 8px rgba(0,0,0,0.3); }性能监控配置内置性能监控系统可通过配置启用[monitoring] enable_perf_logs true sampling_interval 1000 # 采样间隔(ms) metrics_retention 24 # 指标保留小时数 [monitoring.thresholds] analysis_latency 50 # 分析延迟阈值(ms) memory_usage 512MB # 内存使用阈值 cpu_usage 80 # CPU使用率阈值(%)社区贡献开发环境搭建Akagi采用现代化的开发工具链确保一致的开发体验# 克隆项目 git clone https://gitcode.com/gh_mirrors/ak/Akagi cd Akagi # 安装Rust工具链 rustup install stable rustup target add wasm32-unknown-unknown # 安装前端依赖 cd frontend npm install # 运行开发服务器 cargo run代码贡献指南项目遵循结构化贡献流程问题报告在GitHub Issues创建详细的问题描述功能提案通过GitHub Discussions讨论新功能代码提交遵循Conventional Commits规范测试要求新功能需包含单元测试和集成测试文档更新相关文档需同步更新核心模块开发主要开发领域包括麻将分析算法(src/analysis/)实现新的风险评估模型优化现有算法性能添加新的分析指标平台桥接器(src/bridge/)支持新的麻将平台改进现有协议解析添加自动游戏功能前端组件(frontend/src/)开发新的界面组件改进用户体验添加可视化图表测试与质量保证项目维护完整的测试套件# 运行所有测试 cargo test --all-features # 运行集成测试 cargo test --test integration # 运行性能基准测试 cargo bench # 前端测试 cd frontend npm test测试覆盖包括单元测试核心算法和数据结构集成测试跨模块功能测试端到端测试完整用户流程验证性能测试关键路径性能基准文档贡献文档采用分层结构架构文档系统设计和技术决策API文档公共接口和协议规范用户指南安装和使用说明开发者指南贡献和扩展指南文档使用Markdown格式遵循项目约定的结构和样式。技术实现细节异步架构设计Akagi基于Tokio异步运行时构建充分利用Rust的零成本抽象特性// 异步事件处理示例 pub async fn run_event_loop(mut bus: EventBus) - Result() { let mut mjai_rx bus.mjai.subscribe(); let mut analysis_tx bus.analysis.clone(); while let Some(event) mjai_rx.recv().await { // 并行处理事件 tokio::spawn(process_event(event, analysis_tx.clone())); } Ok(()) }内存安全保证Rust的所有权系统确保内存安全零成本抽象高级API不产生运行时开销无畏并发编译时检查数据竞争资源管理RAII模式自动释放资源跨平台兼容性通过Tauri框架实现真正的跨平台Windows使用WebView2运行时macOS原生WebKit集成LinuxWebKitGTK后端支持性能基准在标准硬件配置下Intel i7-12700K32GB RAM分析延迟 10ms深度3分析内存占用 200MB典型使用启动时间 2秒冷启动事件吞吐 1000事件/秒总结Akagi代表了现代麻将AI助手的技术前沿通过Rust的性能优势与Tauri的跨平台能力实现了高性能、高可靠性的实时分析系统。其模块化架构、标准协议支持和丰富的扩展接口为麻将爱好者、开发者和研究者提供了强大的工具平台。项目的技术选型体现了工程实践的成熟思考Rust确保了核心算法的性能与安全Tauri提供了现代化的用户界面而标准化的mjai协议则建立了开放的AI生态系统。这种组合使得Akagi不仅是一个实用的游戏辅助工具更是一个值得研究的软件工程案例。随着麻将AI技术的不断发展Akagi的架构设计为其未来的功能扩展奠定了坚实基础。无论是添加新的分析算法、支持更多游戏平台还是集成更先进的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),仅供参考

相关新闻

叠衣服和短裤

叠衣服和短裤

人机协作,仅供参考大模型:GPT Image 2制作方法:人工拍折叠图片,让大模型生成漫画版的折叠图,需要写明折叠方法以及显示折叠图示

2026/10/3 16:38:55 阅读更多 →
Vibe Coding 开发流程:一套可照着执行的 AI 项目开发使用说明书

Vibe Coding 开发流程:一套可照着执行的 AI 项目开发使用说明书

Vibe Coding 标准开发流程:一套可照着执行的 AI 项目开发 SOP 适用场景:Claude Code Superpowers Skills、Codex CLI、Cursor、Gemini CLI,以及其他 AI 编程工具。 核心目标:让 AI 项目开发从“想到哪写到哪”,变成“…

2026/10/12 21:15:37 阅读更多 →
Containerum API网关深入解析:路由配置与API管理最佳实践

Containerum API网关深入解析:路由配置与API管理最佳实践

Containerum API网关深入解析:路由配置与API管理最佳实践 【免费下载链接】containerum Web UI for Kubernetes with teamwork and CI/CD support 项目地址: https://gitcode.com/gh_mirrors/co/containerum Containerum API网关是Containerum Kubernetes管理…

2026/10/9 15:40:29 阅读更多 →

最新新闻

精仿百度搜索源码搜猫V9.0部署实战:从环境配置到搜索调优

精仿百度搜索源码搜猫V9.0部署实战:从环境配置到搜索调优

简介:精仿百度搜索引擎的搜猫V9.0正式版商业版整站源码,面向网站开发者、PHP学习者以及需要快速搭建搜索类站点的用户,解决从零开发搜索系统成本高、周期长的问题。交付形式为zip压缩包,大小约15.97MB,包内包含完整的站…

2026/10/13 16:55:44 阅读更多 →
用AI端到端交付内部工具:实操复盘与避坑指南

用AI端到端交付内部工具:实操复盘与避坑指南

先说结论:这个项目确实交付了——我用 AI 端到端交付了整个内部工具,全程没写几行代码,上线后在内网跑了两个多月,用户没有骂娘。仓库里我亲手敲的部分,数下来大约一百行出头,剩下的全是一条条 AI 生成、我…

2026/10/13 16:55:44 阅读更多 →
四机两区系统MATLAB建模与风电调频控制实现全流程

四机两区系统MATLAB建模与风电调频控制实现全流程

风电并网研究绕不开一个老家伙——四机两区系统。我第一次在MATLAB里搭这个模型的时候,心里其实有点犯嘀咕:都什么年代了,怎么还在用几十年前的标准测试拓扑?结果真正做完一次频率跌落仿真、把风电调频控制算法加进去之后&#xf…

2026/10/13 16:55:44 阅读更多 →
28335自带SPI驱动AD2S1210:旋变解码通信全流程解析

28335自带SPI驱动AD2S1210:旋变解码通信全流程解析

简介:面向使用28335自带SPI驱动AD2S1210的嵌入式开发者,这份资源提供基于SPI模块的通信参考实现,解决旋变数字转换器配置与数据读取的落地问题,适合电机控制、伺服驱动等场景的入门与移植参考。压缩包共2个文件,包含1个…

2026/10/13 16:55:44 阅读更多 →
GOCI2波段手册全解读:从波段表到月球辐射定标与在轨监测

GOCI2波段手册全解读:从波段表到月球辐射定标与在轨监测

简介:GOCI2说明手册聚焦第二代静止轨道海洋水色成像仪波段设计,面向海洋遥感科研人员、卫星数据处理工程师及相关专业学生。系统梳理了传感器波段设置、辐射性能指标与硬件组成,助读者理解各通道中心波长、带宽、标称辐射亮度、最大海洋辐射亮…

2026/10/13 16:55:44 阅读更多 →
虚拟机+Linux入门:从安装配置到快照恢复的完整指南

虚拟机+Linux入门:从安装配置到快照恢复的完整指南

直接学Linux的人,十有八九第一堂课都是在装虚拟机。我自己当年学Linux,一开始直接拿一台老笔记本去装系统,结果分区的时候手一抖,把资料盘给格了,那种酸爽至今记忆犹新。后来老老实实按部就班用虚拟机,才发…

2026/10/13 16:54:42 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →