面向 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/)。