面向 AI 编程
Intelligence Oriented Programming,“面向 AI 编程”有两层内涵,一层关乎对象,一层关乎目标。
第一层:从面向机器到面向 AI
我提出的 AI 本体论(AI Ontology):
AI = Model + Agent + Harness
程序员要把编程的对象从机器转移到 AI——将 AI 视为一个完整的行为主体,而非可拆卸的内部组件。编程的核心工作不再是编写死逻辑,而是创建、配置和编排一个或多个 AI 智能体,让它们协作完成复杂任务。你不再告诉计算机”每一步怎么做”,而是定义智能体的角色、能力和协作规则,让它们自己决定如何执行。
第二层:以”智能”为编程目标
编程的出发点和衡量标准,不再是”功能是否实现”,而是”系统是否表现出智能行为”——自适应、自学习、主动预测。
这与面向对象编程的发展路径如出一辙。当年我们发明面向对象,就是为了让程序员不必纠缠于内存管理、指针引用等底层细节,而是以构造合理的”对象”模型为任务目标。为了实现这个高阶目标,我们发明了高级编程语言。在 AI 编程时代,同样的演进正在发生:我们正在发明新的工具和范式,让程序员能以”智能行为”为直接目标来构建系统。
AI 时代的编程新范式
AI 对编程活动的冲击是显而易见的,但它并非凭空降临——每一次技术迭代,都伴随着工程范式的一次跃迁。
计算机刚出现时,我们直接写机器语言操控硬件;后来有了汇编,再后来有了 C、Java、Python 这样的高级语言。在高级语言时代,我们讲设计模式,讲面向对象,讲领域驱动设计;工程管理上,我们有测试驱动开发,有敏捷过程,有瀑布模型。每一次抽象层级的提升,都重新定义了”什么是编程”。
那么 AI 时代呢?我们已经摸索出了 Coding Agent、Harness 等工具,但它们还远远不够——我们还远不能像信任编译器那样,让 AI 稳定地生成产品级代码。这些探索,我统称为编程范式的新研究。
在这一轮范式迭代中,软件工程和计算机科学并没有被淘汰,反而更加重要。工程师的工作得到了升维——AI 让我们有能力处理更高维度的问题:方法论、元定义、更哲学也更本质的任务。而这些高阶使命,只会让基础知识变得更为关键,而非被替代。
若用一个核心命题来概括:
编程的终极产物不再是代码,而是能够自主做出合理决策的「智能体」;程序员的工作从「实现逻辑」转变为「定义智能的边界与进化规则」。
这意味着两件事:其一,代码降格为手段——智能体的行为才是最终交付物;其二,程序员不再为每一个分支、每一条路径编码,而是通过设定约束、目标和反馈机制,让智能体在规则边界内自行寻找最优解。
nd 源码文件
如果 IOP 范式下的”源码”不再是代码,那它是什么?
就像传统编程中有 .c、.java、.js 作为源码文件,IOP 也有自己的源码格式——自然语言定义文件(Natural Defines),后缀 .nd。
一个 .nd 文件不包含算法实现,不描述控制流,不操作内存。它所承载的,是程序员用自然语言写下的三类核心定义:
- 目标:智能体需要达成的最终状态。
- 约束:智能体不可逾越的边界。
- 进化规则:智能体如何从反馈中自我修正。
如果说传统源码是对机器的精确指令集,那么 .nd 文件就是对智能体的”宪法”——它不规定每一步怎么做,但规定了什么可以做、什么不能做、以及做到什么程度才算好。
一个 nd 文件长什么样
以厨房机器人煎太阳蛋为例,对应的 .nd 源码文件如下:
---
agent: kitchen-chef
version: 1
evolve: true
constraints:
- max_time_seconds: 300
- cookware_temp_celsius: < 280
- egg_must_stay_on_cookware: true
---
# 任务:煎太阳蛋
## 目标
煎出一颗外焦里嫩的太阳蛋。蛋白完全凝固、边缘微焦金黄,蛋黄保持流动状态。
## 成功标准
- 蛋白无透明残留
- 蛋黄戳破后呈流动液态
- 整体形态完整,无破损
## 约束
1. 锅体温度不得超过 280°C,否则触发紧急降温
2. 鸡蛋不得脱离锅具接触面
3. 从开火到装盘总时长不超过 5 分钟
## 进化规则
- 若成品蛋黄凝固(过熟),自动降低下一轮目标温度 5°C
- 若成品蛋白有透明残留(不熟),自动延长下一轮加热时间 10 秒
- 连续三次成功,锁定当前参数为默认值
这就是一个完整的 nd 文件——你不需要写一行代码。AI 智能体会读取这个文件,理解目标、边界和进化逻辑,然后自行生成底层的温控代码、翻面时序和火候调节算法。
本质上,.nd 文件就是一个 Markdown 文件——只是后缀不同。你完全可以在 VS Code 中将 .nd 后缀关联到 Markdown 解析器,获得语法高亮和预览支持:
// .vscode/settings.json
{
"files.associations": {
"*.nd": "markdown"
}
}
没有新的工具链,没有新的学习成本——用你最熟悉的纯文本,写最重要的规则。
实施指南
一个 IOP 项目的目录结构遵循清晰的职责分离:
project/
├── .agents/src/ ← 你写的 nd 源码文件(自然语言定义)
├── sln/ ← AI 生成的代码文件(传统源码)
└── notes/ ← 日志、会话记录、进化反馈
**.agents/src/**:存放.nd文件,即程序员手写的自然语言定义。这是你唯一需要直接编写的部分——目标、约束、进化规则都在这里。**sln/**:存放 AI 根据.nd文件自动生成的传统代码。你不需要手动编辑它,它由智能体维护。**notes/**:存放运行日志、会话记录和进化反馈数据。它是智能体”记忆”和”学习”的载体。
三个目录对应 IOP 的三个角色:人定义规则(.agents/src/)、AI 生成实现(sln/)、系统积累经验(notes/)。