资讯动态

面向AI计算层的新型编程语言构想:从张量到Agent的原语化设计

发布时间:2026/10/15 9:12:28 来源:尧图企业网站定制
这两年我做AI基础设施的时间越长心里越有一种别扭。Python写研究原型是真的方便可一旦要把模型推理、数据预处理、Agent决策循环这些“计算层”的东西做成稳定服务代码总量会一下子膨胀而且大部分时间不是在解决模型问题而是在处理张量搬运、格式转换、设备同步和跨进程通信。于是我在业余时间开始琢磨一门面向人工智能计算层的新型编程语言暂时命名为AI语言。它不是一门“AI生成代码的语言”也不是一个深度学习框架而是一种把张量、模型、推理管线、工具调用和Agent控制流做成语言原语的编程语言。如果你也在做AI工程化、Agent基建或边缘推理或者单纯对“让语言更懂AI”这件事感兴趣这篇构想笔记应该能给你一些可讨论的素材。1. 为什么我们需要一门“AI语言”1.1 现在写AI代码痛点到底在哪想象一个最简单的部署任务用Python读取用户上传的图片预处理之后喂给目标检测模型再把结果结构化返回。用PyTorch写出来你至少要经历一次model.eval()、一次with torch.no_grad()、一次np.asarray(..., dtype...)还要手动把torch.Tensor从显存拷回内存。这些代码本身不难难的是当模型数量从1个变成10个、当输入从一张图变成多模态流、当部署环境从一台带GPU的服务器变成CPU边缘盒子时这些“胶水代码”会成为维护黑洞。我做过的几个项目里最典型的情况是训练和推理用PyTorch数据处理用NumPy/Pillow/ffmpegAPI服务用FastAPI异步任务用Celery模型版本管理用另一个内部工具。整条链路里只有20%的代码真正和模型数学相关剩余80%都在做类型转换、生命周期管理、异常兜底和参数透传。通用语言给了我们无限自由度却没有给AI开发提供结构性约束这是我认为最大的痛点。简单列一下这套传统技术栈给计算层带来的压力其实很集中痛点场景Python常见做法AI语言期望做到张量搬运手动to(device)、cpu()、numpy()编译器根据变量标注自动插入传输形状错误运行时才暴露shape mismatch编译期检查张量形状是否对齐设备资源torch.cuda.empty_cache()碰运气运行前预计算显存占用静态预分配Agent状态用字典/JSON保存上下文和工具结果用语言级状态机描述循环与分支算子集成在C/CUDA和Python之间写胶水层语言直接导出C ABI桥接成本降低这里面每一行都对应我看到过的生产事故。拿形状错误来说在Python里经常是模型上线后跑前几条数据才发现维度不对运气不好就要凌晨爬起来看Kibana日志。如果一门语言能在编译期就告知“resize(640, 640)之后的张量和你模型输入的[1, 3, 640, 640]对不上”这些事故完全可以前置到代码保存时。1.2 从训练脚本到AI Agent边界已经变了过去我们说人工智能编程语言默认就是PythonTensorFlow/PyTorch现在再看这个领域AI应用的重心已经从“训练好一个模型”转向“把多个模型、多个工具串成一个能自主决策的Agent”。这意味着语言要承载的不只是张量算子还包括大模型上下文管理、工具注册与调用、记忆检索、条件分支和循环回退。最新热词里“基于rust语言ai agent”能成为话题说明大家已经意识到用Python写Agent原型很快但一旦要压并发、控延迟、做类型安全Rust这类拥有严格类型和所有权系统的语言更适合当底座。与此同时国内工程界也在讨论像仓颉这样的通用语言。这类新语言的出现说明一个趋势语言设计正在从“什么都能干”走向“每个领域都值得有一门表达力更贴合的语言”。AI语言正是这个趋势在人工智能计算层的投射。可它和仓颉不是竞争关系——仓颉更像系统语言AI语言更像一种专门服务AI工作负载的“业务语言”未来完全可以互相调用一个管系统一个管智能逻辑。从学习路径来看过去提到“深度学习所需要的编程语言”答案无外乎Python和C现在我会再加上Rust、Mojo、仓颉这类新选手。Mojo想用Python超集的方式加速AI计算仓颉想成为通用系统语言而“AI语言”想走一条不同的路直接定义一套带有张量和模型语义的语言不兼容Python语法但能简单翻译成Python能调用的产物。三者并不冲突反而能互相验证“给AI做专用语言”这件事是可行的。2. AI语言的核心设计思路2.1 目标不是替代Python而是接管计算层在我的构想里AI语言有四个核心目标。第一让张量、模型、Pipeline和Agent成为语言内建概念而不是靠框架类库模拟。第二通过静态类型系统和编译期推导提前检查shape是否对齐、设备是否匹配、内存生命周期是否安全。第三代码同时支持“脚本模式”和“编译执行模式”脚本模式方便研究者做探索编译执行模式适合工程师做生产部署。第四和现有Python生态无缝互操作不能把用户锁在一个封闭岛上。这四个目标决定了语言整体是“分层”的。最底层是一套张量和算子抽象类似PyTorch的Tensor但更强调形状和设备信息中间层是模型与Pipeline抽象负责把多个算子、多个子模型组合成一个可执行的计算图最上层是Agent抽象负责描述上下文、工具、循环和策略。这三层之间用明确定义的接口衔接每层都可以单独替换实现。为什么不做成Python库而是新语言因为库只能在Python的语法边界内做事改变不了if分支、for循环和平常用的dict/list本身不具备张量语义这个事实。新语言可以从语法层面规定“每个变量都带一个可推导的数据布局”编译器拿到完整程序后再做全局分析和优化。这个差异化是我觉得新语言成立的关键。2.2 语法设计让AI逻辑“按直觉写”我试着设计过一段AI语言草图目标是让读代码的人一眼看出“这是个模型推理管线”。下面这段代码定义了一个文件预处理节点和一个目标检测模型节点再把它们串起来input load.image(file://upload/{user_id}.jpg) box preprocess.to_float32(input) .resize(640, 640) .normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) det Model(yolov8s.onnx) .inputs(box) .device(gpu:0) .fp16(true) results det.outputs.map(parse_detections)这段代码看起来和Python很像但注意两点第一preprocess.to_float32返回的是一个“数据处理节点”而不是立刻执行第二Model(...).inputs(...)会把前面的数据节点注册为输入依赖编译期就能推导出box的shape是不是符合模型输入要求。如果不符合编译器直接报错而不是等到运行时才炸。同样的逻辑用PyTorch写会变成一堆函数调用和上下文管理用AI语言写更像是描述一张数据流图。尤其det.outputs.map(parse_detections)会把模型输出映射成一个后处理节点整个过程没有出现一次显式的dict传递。我认为好的领域语言就应该让业务语义跃然纸上类型系统在背后默默兜底。在实际落地时语法设计一定要克制。我已经砍掉过好几版“语法糖”比如自动把string格式化成Prompt、自动给HTTP请求加重试等。原因很简单语言特性越多编译器优化的确定性就越差。用户期望AI语言描述计算流而不是描述整个世界。正因为如此我给每一层都定了一个“特性预算”——张量层只有五种运算符重载Pipeline层只有四种组合关键字Agent层只有两种控制流结构多一个都不加。2.3 计算图与自动微分不是新故事但要服务新场景计算图和自动微分是老生常谈AI语言不打算在这两条路上另起炉灶而是要把它们改造成更适合AI Agent的形态。传统训练场景里计算图是静态的、形状确定的编译期可以做非常激进的前置优化。但Agent场景完全不同模型调用会根据上下文动态变化工具选择是运行期分支循环次数也不固定。如果只支持静态图Agent会非常难写如果只支持动态图又丢掉编译优化能力。我的倾向是“两级图”一层是静态数据流图用来描述模型推理和前处理/后处理链路这些链路结构在运行前基本确定另一层是动态控制流图专门描述Agent的循环、条件、回溯和工具分支。静态图编译到后端算子动态图编译成状态机。这样既能拿到静态图的高性能又不会限制Agent的灵活性。在自动微分方面AI语言会把梯度函数作为一等公民但不强制每个算子都可微。比如一个协作工具调用节点它可能只是在HTTP层面拿数据不需要梯度语言允许用户标记no_grad并把这类节点放进独立子图避免反向传播污染Agent的逻辑判断。这个设计让“训练”和“推理”在语言层就没有硬边界同一个Pipeline既能跑前向推理也能用在微调阶段只是编译器会根据是否启用反向模式来决定要不要给每个节点保留中间变量。3. 关键实现环节与工具链3.1 选Rust做编译器内核不止是性能关于实现语言我在“用C写编译器核心”和“用Rust写编译器核心”之间反复横跳过最后倾向Rust。理由不只是性能——C也不差而是Rust的所有权模型对编译器这类大量操作中间表示的程序非常友好。编译器的IR中间表示构建、图优化、内存生命周期分析本质上是不断把一个节点集合变换到另一个节点集合Rust的所有权系统能在编译期挡住很多悬垂引用和并发修改问题。更重要的是当前AI基建的底层正在出现一批Rust成果Rust绑定的推理引擎、基于Rust的Agent运行时、以及像LLVM/MLIR这样的工具链接口都提供了相对清晰的C ABI边界。用Rust写AI语言的前端和后端等于踩在一条已经被验证过的路上。我们在做原型时前端可以用chumsky做词法/语法分析图优化层直接用petgraph管理节点依赖后端先把IR lower到MLIR再由MLIR分发到LLVM或者不同AI加速器。这条路线最核心的收益是项目早期就能拿到一个“能跑通但很简陋”的完整编译器而不必等到把所有优化算法写完才有成果。不过要提醒一句选择Rust不等于放弃和C生态互操作。AI语言需要一个稳固的FFI层我比较推荐用#[no_mangle]导出C ABI函数再用一个薄薄的glue crate包住PyTorch LibTorch、ONNX Runtime这些引擎。踩坑时要注意C ABI一旦发布就很难改所以接口里尽量不要出现Rust特有的切片、引用和智能指针宁可多拷贝一次数据也要保证ABI稳定。3.2 运行时与资源调度CPU/GPU/NPU的抽象语言是壳运行时才是真正让AI计算流转起来的心脏。AI语言运行时的核心抽象是一个“计算设备”它不直接暴露cudaSetDevice这类API而是提供Device类型和Placement语义。用户只要写device(gpu:0)或device(npu:1)编译器把设备信息写入IR运行时负责真正的内存分配、内核启动和传输。异构调度是最容易翻车的部分。我的做法是分成三块内存池、任务队列、传输引擎。内存池需要按设备维护独立的分配器GPU侧用缓存池复用显存CPU/内存侧用对齐分配器任务队列记录每个ComputeOp与设备的依赖关系支持在逻辑上串行、物理上并行的算子启动传输引擎专门处理Host与Device之间的拷贝优先使用异步DMA并尽量把多次小拷贝合并成一次大拷贝。这三块各自独立再用一张全局ResourceTable做统一登记。有一个很容易被忽略的细节设备与设备之间的数据传输并不对称。比如GPU到GPU如果是同一台机器、走NVLink就很快如果跨节点走RDMA和走普通TCP语义差别很大。AI语言需要在类型系统里区分LocalDevice和RemoteDevice否则运行时根本不知道能不能安全地做零拷贝。这个区分在实际调度中很关键我见过好几次因为“误以为所有GPU都在同一台机器”而把张量直接当指针传递最后崩得莫名其妙。能力CPU设备GPU设备NPU设备跨节点设备零拷贝传输不支持支持同机PCIe/NVLink看厂商驱动依赖RDMA线程亲和性强中弱弱动态shape很好一般较差一般适合算子数据预处理、小模型大矩阵、Transformer定点量化、视频编解码分布式并行运行时实现阶段我建议从小处着手先支持单机CPUGPU把内存池和任务队列跑稳再扩展NPU和RDMA。千万不要一开始就追求所有设备全支持因为每种设备的错误语义差异很大——GPU常见的“非法内存访问”和NPU常见的“句柄过期”完全是两类问题需要不同的重试策略。3.3 与现有生态的互操作设计新语言最大的敌人是生态。AI语言设计之初就定了“不拒绝Python”语言里提供一个python关键字可以直接嵌入Python表达式或者调用Python模块。看下面这个例子import python.requests task def fetch_context(url: str) - str: # 这段代码交给Python执行返回值通过序列化桥接回AI语言 resp python.requests.get(url, timeout5) return resp.text反过来也不需要用户改用AI语言重训PyTorch模型。AI语言原生支持加载PyTorch导出的torchscript、ONNX、TensorRT engine以及HuggingFace的AutoModel格式。同时AI语言编译器会把生成代码编译成一个Python可调用的扩展库传统FastAPI服务可以import ailang_compiled as det然后像调用Python函数一样调用AI语言写出的推理Pipeline。互操作的桥接层我建议用“数据标准格式”来做而不是用语言绑定。所有跨语言边界的张量和中间结果都统一序列化成内存描述符(device, data_ptr, shape, dtype, strides)。这样AI语言和Python之间交换的只是一组指针和元数据不产生拷贝只有在真正需要“让Python持有张量”的时候才转为torch.Tensor。这套设计实测下来能省掉约80%的跨语言开销但代价是调试时看不了“偏口的Python对象”需要提供专门的内存转储工具。实际操作里我给互操作层定了一条纪律所有python块里抛出的异常进入AI语言之后必须重新包装成带错误码的AIError绝不允许直接透传Python traceback。宁可信息丢一点也不能让编译器后端在处理异常时被Python解释器状态卡住。4. 落地场景与生态展望4.1 大模型推理与Agent编排场景最先受益的场景一定是大模型推理服务。AI语言把模型节点、上下文窗口、KV Cache和采样参数都变成类型系统的一部分编译器可以在编译期算出最大显存占用提前执行显存预分配和KV Cache调度而不是在运行时靠torch.cuda.empty_cache()碰运气。Agent编排场景更明显。比如要设计一个“用户提问 - 检索知识库 - 调用工具 - 生成答复”的Agent传统Python写法要维护一堆变量保存历史消息还要反复判断工具调用返回后的状态。AI语言把Agent循环做成了一个语法结构可以这样描述agent ChatAgent: llm Model(qwen-local) tools [search_api, weather_api, calculator] loop: state llm.generate(input_history, toolstools) if state.tool_call: result state.tool_call.execute() input_history.append(result) elif state.final_answer: return state.final_answer这段代码底层会被编译成一个状态机每个状态包含可序列化的上下文、工具调用记录和超时策略。比Python手写字典循环要健壮得多而且类型系统能确保input_history里的每一条消息都符合Chat协议。用“基于rust语言ai agent”的思路来看AI语言相当于是把Rust的严谨性提升到了语言层面而Agent开发者不再需要自己管理底层线程和所有权。对“人工智能正从尝鲜工具变日常帮手”这句话我特别有感触。当AI从演示变成日常服务稳定性就不再是可有可无的要求。AI语言必须让“工具调用超时怎么办”“Agent陷入死循环怎么办”“上下文超过窗口怎么办”这些问题在语言层面就有默认答案而不是每家公司都自己造一套prompt工程重试机制。这也是我为什么坚持在Agent语法里内置timeout、max_retry和max_loop这些参数。4.2 端侧AI与低延迟场景第二个落地场景是端侧AI。现在边缘设备上跑模型要么用TensorFlow Lite要么用ONNX Runtime Mobile再配一堆手写预处理代码换个NPU又要重写算子。AI语言因为把设备和算子抽象做成语言原语可以针对不同后端生成不同实现——同一段模型描述编译成x86 CPU版本时用AVX2优化编译成ARM版本时用NEON指令编译成NPU版本时直接生成厂商SDK调用。我对低延迟场景的建议是把AI语言里的推理节点标记为realtime编译器会为这类节点生成无分配路径、固定优先级线程池和提前锁内存的代码。这个特性对自动驾驶、无人机避障这类每帧几毫秒预算的系统非常关键。虽然这些场景现在主要还在C手里但AI语言如果能提供直接到机器码的表达力完全有资格挤进去。从生态角度讲端侧AI是很有意思的突破口它不像大模型训练那样被Python生态牢牢锁死反而更需要可预测的性能和低功耗调度。如果AI语言能把“同一段模型描述无缝编译到CPU/GPU/NPU”这件事做到足够简单它就有机会成为边缘推理领域的“可移植层”。这个定位比在大模型训练上和PyTorch硬碰硬要聪明得多。4.3 挑战与我的做法当然这个构想离真正可用还有很长的路。首先语言设计最容易犯的错误是贪多嚼不烂。AI语言如果试图同时做好通用语言、深度学习框架和Agent编排平台注定哪个都做不精。我的做法是严格守住“计算层”这个边界凡是涉及UI、网络协议、文件系统等通用能力直接交还给宿主语言。其次和Python生态的竞争不是靠“更好”就能赢。开发者的习惯、库的丰富度、社区积累都是时间壁垒。哪怕去翻编程语言排行榜Python现在依然是AI领域的绝对王者。我的策略是先做“编译器Rust运行时”的最小闭环只支持两三个模型格式和一套Pipeline语法先在一个内部项目里跑通再逐步开放。很多新语言死在一开始想支持所有算子其实完全没必要。最后一点我会刻意保留“escape hatch”。不管领域语言设计得多好总有人会遇到类型系统表达不了的场景。AI语言必须允许用户在任意节点上插入自定义C/C/Rust函数也允许python块绕过类型检查。这不是打自己脸而是承认现实——领域语言的价值是提高大多数场景的表达效率而不是取代程序员的所有判断。说到底AI语言不是要发明一套“更高级的Python”而是想为人工智能计算层提供一个足够清晰、足够安全的工程表达方式。我在实际做原型的过程中最深的体会是语言设计最难的不是语法不是编译器而是“边界感”——每一行新语法都要问自己它到底是在帮助用户表达AI逻辑还是仅仅在炫技。如果你也在琢磨类似的方向欢迎从最小的编译链路开始试起哪怕只是把一个ONNX模型包成一条语言里可调用的Pipeline也会对这个领域有完全不一样的理解。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑