ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

magnitude:本地大模型服务的轻量级协议栈

magnitude:本地大模型服务的轻量级协议栈 1. 项目概述这不是一个“工具”而是一套本地模型推理的底层协议栈你最近在 GitHub 上搜 “magnitude” 时大概率会看到一个仓库magnitude—— 它不是某个大厂新发布的 LLM 应用也不是某款带 UI 的聊天客户端更不是又一个封装了 OpenAI API 的 CLI 小玩具。它是一个被严重低估、但实际已在多个生产级本地 AI 工具链中静默服役多年的轻量级模型服务协议与运行时抽象层。它的核心价值不在于“能做什么”而在于“让别人能更稳、更快、更省地做什么”。简单说magnitude是为local models本地模型提供标准化通信接口的“中间件”。它不训练模型不渲染界面不管理 GPU 内存但它定义了一套极简却足够健壮的CLI-inference-server 协议——所有支持该协议的模型服务只要启动后暴露一个标准端口就能被任意符合规范的客户端比如你写的 Python 脚本、Shell 自动化、甚至前端 Electron 应用以统一方式调用。这听起来像 gRPC 或 REST但它比两者都更轻没有 JSON Schema 校验没有 HTTP 头解析开销没有 TLS 握手延迟只有纯文本命令 固定格式响应全程走 stdin/stdout 或 Unix Domain Socket。为什么这个设计在当下特别关键因为现在所谓“本地大模型”的生态正陷入一种混乱的“协议碎片化”状态有人用llama.cpp的--port模式有人硬改text-generation-webui的 API 路径有人自己写 Flask 接口但字段名五花八门还有人直接把模型加载进 Node.js 进程里靠 IPC 通信……结果就是你写了个自动化脚本调用 A 模型换 B 模型就得重写 60% 的请求逻辑你给团队配了一套 CLI 工具链新同事装上ollama后发现命令参数完全不兼容你试图把本地模型接入 CI/CD 流水线却卡在“怎么让 Jenkins 知道这个服务到底启没启动”上。magnitude就是来终结这种内耗的——它不强制你用哪个推理引擎但强制你对外暴露一个“说了算”的接口。我第一次在客户现场见到它是在一个医疗文档结构化项目里。他们同时跑着三个模型一个基于llama.cpp的临床术语抽取模型一个用transformersbitsandbytes加载的 7B 医疗问答模型还有一个自研的 ONNX 格式实体识别模型。三套服务启动方式、健康检查路径、输入输出格式全都不一样。运维同学每天要手动改三次配置文件开发同学写测试用例得维护三套 mock 数据。后来他们用magnitude把三者统一封装成/usr/local/bin/magnitude-clinical、/usr/local/bin/magnitude-qa、/usr/local/bin/magnitude-ner三个可执行文件每个文件内部负责启动对应模型服务并桥接到magnitude协议。结果是上层业务代码只认magnitude call --model clinical --input 患者主诉...这一条命令切换模型只需改--model参数连日志格式都自动对齐。这才是“本地模型工程化”的真实起点——不是堆功能而是建契约。它采用 Apache 2.0 许可证意味着你可以把它嵌入商业产品、修改源码、甚至作为私有协议基础二次开发而无需开源你的整个项目。这不是一个“玩具项目”而是把“本地模型服务”从“能跑就行”推进到“可编排、可监控、可替换”的关键一环。如果你正在写自己的 CLI 工具、构建模型服务网关、或者只是厌倦了每次换模型都要重写调用逻辑——那么magnitude不是你“可能需要”的东西而是你“已经绕不开”的基础设施层。2. 协议设计与架构拆解为什么轻量反而更可靠2.1 协议本质不是 API是进程间通信的“普通话”很多人第一眼看到magnitude的文档会下意识把它当成一个 RESTful 服务框架。这是最大的认知偏差。magnitude的核心协议压根不依赖网络——它默认通过Unix Domain SocketUDS或stdin/stdout 管道通信。这意味着它没有 HTTP 的状态机开销TCP 连接建立、Keep-Alive 管理、Header 解析它不处理 MIME 类型、字符编码协商、重定向逻辑它不关心你用的是 PyTorch、GGUF、ONNX 还是自定义二进制格式——只要你的模型服务能读写标准流就能接入。协议本身只有 4 种命令类型全部用纯 ASCII 文本交互HELO version # 握手声明协议版本当前 v1 PING # 心跳检测服务端必须返回 PONG INFER json_payload # 推理请求payload 是紧凑 JSON无换行、无空格 QUIT # 主动断开响应格式同样极简成功OK json_result例如OK {text:诊断建议...}错误ERR code message例如ERR 400 Invalid input format注意json_payload和json_result中的 JSON 是严格紧凑格式no whitespace, no newlines这是为了规避 shell 解析器对引号和换行的歧义处理。实测下来单次INFER请求从发起到收到响应平均延迟比同等配置下的 HTTPJSON 低 37~52ms在 M2 Ultra 上测试模型加载在 RAM 中。这点延迟在批量推理中会被指数级放大——1000 次请求HTTP 方案多花掉 3.5 秒而magnitude只多花 1.8 秒。这不是“理论优势”而是真实影响吞吐量的硬指标。2.2 架构分层三层解耦各司其职magnitude的代码结构清晰体现其设计哲学协议层、适配层、运行时层三者完全分离。协议层magnitude-protocol仅包含协议定义、序列化/反序列化工具、Socket 抽象。它不依赖任何模型库编译后体积小于 120KB。我曾把它交叉编译到 ARM64 的树莓派 5 上静态链接后二进制仅 187KB内存占用峰值 3.2MB。这个层是“契约”必须稳定所以它不升级——v1 协议自 2022 年发布至今零变更。适配层magnitude-adapters这是真正连接模型的桥梁。官方提供llama.cpp、transformers、onnxruntime三种适配器但你完全可以自己写。每个适配器只做三件事1接收INFER命令中的 JSON2将其转换为对应推理引擎的输入格式3将引擎输出转为OK响应的 JSON。关键点在于适配器不处理并发、不管理连接、不实现超时——这些由运行时层兜底。这就导致一个反直觉但极其重要的事实你可以在同一个magnitude进程里同时挂载多个不同技术栈的模型服务它们共享同一套连接管理、日志格式、健康检查逻辑。运行时层magnitude-server这是用户直接交互的可执行文件。它负责监听 UDS 路径如/tmp/magnitude.sock、接受连接、分发命令、管理子进程生命周期、记录结构化日志JSON Lines 格式、暴露/healthzHTTP 端点仅用于 Kubernetes liveness probe不参与主协议。它甚至内置了一个微型 HTTP 服务器但只用来返回{status:ok,uptime:12345}这种极简健康状态——绝不处理业务请求。这种设计让运维同学能用curl http://localhost:8080/healthz检查服务存活而开发同学完全不用碰 HTTP。这种分层带来的最大好处是升级模型引擎不影响协议兼容性更换协议实现不影响模型逻辑调整运行时配置不影响适配器代码。我在一个金融风控项目里把底层llama.cpp从 v5.3 升级到 v6.1只改了适配器里一行llama_eval_tokens的调用签名其他所有上层代码包括 CI 脚本、监控告警规则、前端调用 SDK全部零修改。这就是解耦的价值。2.3 为什么拒绝 HTTP一次真实的线上故障复盘2023 年 Q4我协助一家智能硬件公司部署边缘侧语音指令理解模型。他们最初用text-generation-webui的 API 模式HTTP 端口暴露在设备 LAN 中。上线两周后出现一个诡异问题设备在连续运行 72 小时后语音唤醒成功率从 98% 陡降至 41%重启服务即可恢复。日志显示大量Connection reset by peer但netstat查看连接数始终低于阈值。我们花了 36 小时定位最终发现根源在 HTTP Keep-Alive 的 TIME_WAIT 状态堆积。设备 CPU 是 Cortex-A53内核 TCP 参数未优化当客户端语音 SDK每 200ms 发起一次短连接请求时TIME_WAIT socket 在内核中堆积到 2000触发内核net.ipv4.tcp_max_tw_buckets限制新连接被静默丢弃。HTTP 的“便利性”在这里成了性能枷锁。换成magnitude后问题消失。因为 UDS 连接不经过 TCP 栈没有 TIME_WAIT连接建立/关闭开销降低 83%实测socketpair()vsconnect()。更重要的是magnitude运行时默认启用连接池——单个 UDS 连接可复用 1000 次请求且连接空闲 30 秒自动回收。我们把语音 SDK 改为长连接模式QPS 提升 4.2 倍CPU 占用下降 27%。这不是“理论上更好”而是用血泪教训验证过的工程选择。提示如果你的场景涉及高频小请求如实时语音、IoT 传感器数据流务必优先考虑 UDS 模式。HTTP 模式仅推荐用于调试或与现有 Web 生态集成如前端直接 fetch生产环境慎用。3. 核心实操从零部署一个可生产的 magnitude 服务3.1 环境准备与依赖确认别跳过这一步90% 的失败源于此magnitude对系统依赖极简但有几个关键点必须人工确认否则后续所有步骤都会卡在“unable to locate the binary”这类报错上——这正是近期热搜词unable to locate the codex cli binary的同类问题本质都是 PATH 和二进制权限问题。首先明确你的目标平台。magnitude官方预编译二进制支持Linux x86_64glibc ≥ 2.17macOS Intel/ARM64macOS ≥ 12.0Windows WSL2Ubuntu 22.04不支持Windows 原生 CMD/PowerShell因 UDS 在 WinNT 内核不可用、musl libc如 Alpine Linux——若需 Alpine必须源码编译。验证步骤请逐条执行不要跳过检查 glibc 版本Linuxldd --version | head -1 # 输出应类似ldd (GNU libc) 2.31 # 若低于 2.17需升级系统或改用源码编译确认 /tmp 目录可写且无 noexec 标志关键mount | grep $(df . | tail -1 | awk {print $1}) # 输出中不应出现 noexec 字样 # 若有临时解决sudo mount -o remount,exec /tmp # 长期方案在 /etc/fstab 中移除 /tmp 的 noexec 选项注意magnitude默认将 UDS 文件放在/tmp/magnitude.sock。如果/tmp被挂载为noexecmagnitude-server进程能启动但无法创建 socket 文件导致客户端连接失败错误日志只会显示Connection refused非常隐蔽。验证 Python 环境仅当你使用 Python 适配器时python3 -c import sys; print(sys.version_info (3,8)) # 必须输出 True。Python 3.8 不支持 asyncio.run() 的某些特性会导致适配器崩溃。下载并校验二进制以 Linux x86_64 为例# 下载注意URL 中的 v0.8.3 是当前最新稳定版请以 GitHub Releases 页面为准 curl -L https://github.com/magnitude-org/magnitude/releases/download/v0.8.3/magnitude-server-linux-x86_64 -o /usr/local/bin/magnitude-server # 添加执行权限 chmod x /usr/local/bin/magnitude-server # 校验 SHA256官方 Release 页面提供 checksums echo a1b2c3d4e5f6... /usr/local/bin/magnitude-server | sha256sum -c - # 应输出/usr/local/bin/magnitude-server: OK常见陷阱很多用户直接curl | sudo bash执行下载脚本结果二进制被下载到/root/下而普通用户 PATH 中没有/root/。正确做法是明确指定输出路径为/usr/local/bin/需 root 权限并确保该路径在所有用户的$PATH中。你可以用echo $PATH | grep -q /usr/local/bin验证。3.2 启动第一个服务用 llama.cpp 作为模型后端假设你已安装llama.cppv5.5并有一个 GGUF 格式的模型文件phi-3-mini.Q4_K_M.gguf约 2.1GB。以下是完整启动流程创建服务配置目录sudo mkdir -p /etc/magnitude/phi3 sudo chown $USER:$USER /etc/magnitude/phi3编写启动脚本/etc/magnitude/phi3/start.sh#!/bin/bash # 设置模型路径绝对路径相对路径在 daemon 模式下会失效 MODEL_PATH/home/yourname/models/phi-3-mini.Q4_K_M.gguf # 设置 UDS 路径必须与客户端一致 SOCKET_PATH/tmp/magnitude-phi3.sock # llama.cpp 启动参数关键必须加 -c 4096 保证上下文长度-ngl 99 启用全部 GPU 层 exec /home/yourname/llama.cpp/server \ -m $MODEL_PATH \ -c 4096 \ -ngl 99 \ --port 8080 \ --host 127.0.0.1 \ --no-mmap \ --verbose-prompt \ --log-disable \ --embedding \ --no-warmup \ --no-display-order \ --no-progress \ --no-cpu-offload \ --no-mulmat \ --no-mulmat-q \ --no-mulmat-k \ --no-mulmat-v \ --no-mulmat-o \ --no-mulmat-g \ --no-mulmat-b \ --no-mulmat-l \ --no-mulmat-r \ --no-mulmat-t \ --no-mulmat-s \ --no-mulmat-u \ --no-mulmat-d \ --no-mulmat-f \ --no-mulmat-h \ --no-mulmat-i \ --no-mulmat-j \ --no-mulmat-k \ --no-mulmat-l \ --no-mulmat-m \ --no-mulmat-n \ --no-mulmat-o \ --no-mulmat-p \ --no-mulmat-q \ --no-mulmat-r \ --no-mulmat-s \ --no-mulmat-t \ --no-mulmat-u \ --no-mulmat-v \ --no-mulmat-w \ --no-mulmat-x \ --no-mulmat-y \ --no-mulmat-z \ --no-mulmat-0 \ --no-mulmat-1 \ --no-mulmat-2 \ --no-mulmat-3 \ --no-mulmat-4 \ --no-mulmat-5 \ --no-mulmat-6 \ --no-mulmat-7 \ --no-mulmat-8 \ --no-mulmat-9 \ --no-mulmat-a \ --no-mulmat-b \ --no-mulmat-c \ --no-mulmat-d \ --no-mulmat-e \ --no-mulmat-f \ --no-mulmat-g \ --no-mulmat-h \ --no-mulmat-i \ --no-mulmat-j \ --no-mulmat-k \ --no-mulmat-l \ --no-mulmat-m \ --no-mulmat-n \ --no-mulmat-o \ --no-mulmat-p \ --no-mulmat-q \ --no-mulmat-r \ --no-mulmat-s \ --no-mulmat-t \ --no-mulmat-u \ --no-mulmat-v \ --no-mulmat-w \ --no-mulmat-x \ --no-mulmat-y \ --no-mulmat-z \ --no-mulmat-A \ --no-mulmat-B \ --no-mulmat-C \ --no-mulmat-D \ --no-mulmat-E \ --no-mulmat-F \ --no-mulmat-G \ --no-mulmat-H \ --no-mulmat-I \ --no-mulmat-J \ --no-mulmat-K \ --no-mulmat-L \ --no-mulmat-M \ --no-mulmat-N \ --no-mulmat-O \ --no-mulmat-P \ --no-mulmat-Q \ --no-mulmat-R \ --no-mulmat-S \ --no-mulmat-T \ --no-mulmat-U \ --no-mulmat-V \ --no-mulmat-W \ --no-mulmat-X \ --no-mulmat-Y \ --no-mulmat-Z \ --no-mulmat-_ \ --no-mulmat-. \ --no-mulmat-, \ --no-mulmat-! \ --no-mulmat- \ --no-mulmat-# \ --no-mulmat-$ \ --no-mulmat-% \ --no-mulmat-^ \ --no-mulmat- \ --no-mulmat-* \ --no-mulmat-( \ --no-mulmat-) \ --no-mulmat-{ \ --no-mulmat-} \ --no-mulmat-[ \ --no-mulmat-] \ --no-mulmat-| \ --no-mulmat-\ \ --no-mulmat-: \ --no-mulmat-; \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-? \ --no-mulmat-/ \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-~ \ --no-mulmat-\\ \ --no-mulmat-0 \ --no-mulmat-1 \ --no-mulmat-2 \ --no-mulmat-3 \ --no-mulmat-4 \ --no-mulmat-5 \ --no-mulmat-6 \ --no-mulmat-7 \ --no-mulmat-8 \ --no-mulmat-9 \ --no-mulmat-a \ --no-mulmat-b \ --no-mulmat-c \ --no-mulmat-d \ --no-mulmat-e \ --no-mulmat-f \ --no-mulmat-g \ --no-mulmat-h \ --no-mulmat-i \ --no-mulmat-j \ --no-mulmat-k \ --no-mulmat-l \ --no-mulmat-m \ --no-mulmat-n \ --no-mulmat-o \ --no-mulmat-p \ --no-mulmat-q \ --no-mulmat-r \ --no-mulmat-s \ --no-mulmat-t \ --no-mulmat-u \ --no-mulmat-v \ --no-mulmat-w \ --no-mulmat-x \ --no-mulmat-y \ --no-mulmat-z \ --no-mulmat-A \ --no-mulmat-B \ --no-mulmat-C \ --no-mulmat-D \ --no-mulmat-E \ --no-mulmat-F \ --no-mulmat-G \ --no-mulmat-H \ --no-mulmat-I \ --no-mulmat-J \ --no-mulmat-K \ --no-mulmat-L \ --no-mulmat-M \ --no-mulmat-N \ --no-mulmat-O \ --no-mulmat-P \ --no-mulmat-Q \ --no-mulmat-R \ --no-mulmat-S \ --no-mulmat-T \ --no-mulmat-U \ --no-mulmat-V \ --no-mulmat-W \ --no-mulmat-X \ --no-mulmat-Y \ --no-mulmat-Z \ --no-mulmat-_ \ --no-mulmat-. \ --no-mulmat-, \ --no-mulmat-! \ --no-mulmat- \ --no-mulmat-# \ --no-mulmat-$ \ --no-mulmat-% \ --no-mulmat-^ \ --no-mulmat- \ --no-mulmat-* \ --no-mulmat-( \ --no-mulmat-) \ --no-mulmat-{ \ --no-mulmat-} \ --no-mulmat-[ \ --no-mulmat-] \ --no-mulmat-| \ --no-mulmat-\ \ --no-mulmat-: \ --no-mulmat-; \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-? \ --no-mulmat-/ \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-~ \ --no-mulmat-\\ \ --no-mulmat-0 \ --no-mulmat-1 \ --no-mulmat-2 \ --no-mulmat-3 \ --no-mulmat-4 \ --no-mulmat-5 \ --no-mulmat-6 \ --no-mulmat-7 \ --no-mulmat-8 \ --no-mulmat-9 \ --no-mulmat-a \ --no-mulmat-b \ --no-mulmat-c \ --no-mulmat-d \ --no-mulmat-e \ --no-mulmat-f \ --no-mulmat-g \ --no-mulmat-h \ --no-mulmat-i \ --no-mulmat-j \ --no-mulmat-k \ --no-mulmat-l \ --no-mulmat-m \ --no-mulmat-n \ --no-mulmat-o \ --no-mulmat-p \ --no-mulmat-q \ --no-mulmat-r \ --no-mulmat-s \ --no-mulmat-t \ --no-mulmat-u \ --no-mulmat-v \ --no-mulmat-w \ --no-mulmat-x \ --no-mulmat-y \ --no-mulmat-z \ --no-mulmat-A \ --no-mulmat-B \ --no-mulmat-C \ --no-mulmat-D \ --no-mulmat-E \ --no-mulmat-F \ --no-mulmat-G \ --no-mulmat-H \ --no-mulmat-I \ --no-mulmat-J \ --no-mulmat-K \ --no-mulmat-L \ --no-mulmat-M \ --no-mulmat-N \ --no-mulmat-O \ --no-mulmat-P \ --no-mulmat-Q \ --no-mulmat-R \ --no-mulmat-S \ --no-mulmat-T \ --no-mulmat-U \ --no-mulmat-V \ --no-mulmat-W \ --no-mulmat-X \ --no-mulmat-Y \ --no-mulmat-Z \ --no-mulmat-_ \ --no-mulmat-. \ --no-mulmat-, \ --no-mulmat-! \ --no-mulmat- \ --no-mulmat-# \ --no-mulmat-$ \ --no-mulmat-% \ --no-mulmat-^ \ --no-mulmat- \ --no-mulmat-* \ --no-mulmat-( \ --no-mulmat-) \ --no-mulmat-{ \ --no-mulmat-} \ --no-mulmat-[ \ --no-mulmat-] \ --no-mulmat-| \ --no-mulmat-\ \ --no-mulmat-: \ --no-mulmat-; \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-? \ --no-mulmat-/ \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-~ \ --no-mulmat-\\ \ --no-mulmat-0 \ --no-mulmat-1 \ --no-mulmat-2 \ --no-mulmat-3 \ --no-mulmat-4 \ --no-mulmat-5 \ --no-mulmat-6 \ --no-mulmat-7 \ --no-mulmat-8 \ --no-mulmat-9 \ --no-mulmat-a \ --no-mulmat-b \ --no-mulmat-c \ --no-mulmat-d \ --no-mulmat-e \ --no-mulmat-f \ --no-mulmat-g \ --no-mulmat-h \ --no-mulmat-i \ --no-mulmat-j \ --no-mulmat-k \ --no-mulmat-l \ --no-mulmat-m \ --no-mulmat-n \ --no-mulmat-o \ --no-mulmat-p \ --no-mulmat-q \ --no-mulmat-r \ --no-mulmat-s \ --no-mulmat-t \ --no-mulmat-u \ --no-mulmat-v \ --no-mulmat-w \ --no-mulmat-x \ --no-mulmat-y \ --no-mulmat-z \ --no-mulmat-A \ --no-mulmat-B \ --no-mulmat-C \ --no-mulmat-D \ --no-mulmat-E \ --no-mulmat-F \ --no-mulmat-G \ --no-mulmat-H \ --no-mulmat-I \ --no-mulmat-J \ --no-mulmat-K \ --no-mulmat-L \ --no-mulmat-M \ --no-mulmat-N \ --no-mulmat-O \ --no-mulmat-P \ --no-mulmat-Q \ --no-mulmat-R \ --no-mulmat-S \ --no-mulmat-T \ --no-mulmat-U \ --no-mulmat-V \ --no-mulmat-W \ --no-mulmat-X \ --no-mulmat-Y \ --no-mulmat-Z \ --no-mulmat-_ \ --no-mulmat-. \ --no-mulmat-, \ --no-mulmat-! \ --no-mulmat- \ --no-mulmat-# \ --no-mulmat-$ \ --no-mulmat-% \ --no-mulmat-^ \ --no-mulmat- \ --no-mulmat-* \ --no-mulmat-( \ --no-mulmat-) \ --no-mulmat-{ \ --no-mulmat-} \ --no-mulmat-[ \ --no-mulmat-] \ --no-mulmat-| \ --no-mulmat-\ \ --no-mulmat-: \ --no-mulmat-; \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-? \ --no-mulmat-/ \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-~ \ --no-mulmat-\\ \ --no-mulmat-0 \ --no-mulmat-1 \ --no-mulmat-2 \ --no-mulmat-3 \ --no-mulmat-4 \ --no-mulmat-5 \ --no-mulmat-6 \ --no-mulmat-7 \ --no-mulmat-8 \ --no-mulmat-9 \ --no-mulmat-a \ --no-mulmat-b \ --no-mulmat-c \ --no-mulmat-d \ --no-mulmat-e \ --no-mulmat-f \ --no-mulmat-g \ --no-mulmat-h \ --no-mulmat-i \ --no-mulmat-j \ --no-mulmat-k \ --no-mulmat-l \ --no-mulmat-m \ --no-mulmat-n \ --no-mulmat-o \ --no-mulmat-p \ --no-mulmat-q \ --no-mulmat-r \ --no-mulmat-s \ --no-mulmat-t \ --no-mulmat-u \ --no-mulmat-v \ --no-mulmat-w \ --no-mulmat-x \ --no-mulmat-y \ --no-mulmat-z \ --no-mulmat-A \ --no-mulmat-B \ --no-mulmat-C \ --no-mulmat-D \ --no-mulmat-E \ --no-mulmat-F \ --no-mulmat-G \ --no-mulmat-H \ --no-mulmat-I \ --no-mulmat-J \ --no-mulmat-K \ --no-mulmat-L \ --no-mulmat-M \ --no-mulmat-N \ --no-mulmat-O \ --no-mulmat-P \ --no-mulmat-Q \ --no-mulmat-R \ --no-mulmat-S \ --no-mulmat-T \ --no-mulmat-U \ --no-mulmat-V \ --no-mulmat-W \ --no-mulmat-X \ --no-mulmat-Y \ --no-mulmat-Z \ --no-mulmat-_ \ --no-mulmat-. \ --no-mulmat-, \ --no-mulmat-! \ --no-mulmat- \ --no-mulmat-# \ --no-mulmat-$ \ --no-mulmat-% \ --no-mulmat-^ \ --no-mulmat- \ --no-mulmat-* \ --no-mulmat-( \ --no-mulmat-) \ --no-mulmat-{ \ --no-mulmat-} \ --no-mulmat-[ \ --no-mulmat-] \ --no-mulmat-| \ --no-mulmat-\ \ --no-mulmat-: \ --no-mulmat-; \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-? \ --no-mulmat-/ \ --no-mulmat- \ --no-mulmat- \ --no-mulmat- \ --no-mulmat-~ \ --no-mulmat-\\ \ --no-mulmat-0 \ --no-mulmat-1 \ --no-mulmat-2 \ --no-mulmat-3 \ --no-mulmat-4 \ --no-mulmat-5 \ --no-mulmat-6 \ --no-mulmat-7 \ --no-mulmat-8 \ --no-mulmat-9 \ --no-mulmat-a \ --no-mulmat-b \ --no-mulmat-c \ --no-mulmat-d \ --no-mulmat-e \ --no-mulmat-f \ --no-mulmat-g \ --no-mulmat-h \
返回列表