
Picos项目让LLM在仅32条CPU指令的裸机环境中从零构建程序
来源标题:What can an LLM build with only 32 CPU instructions?
Picos项目推出一个实验平台,让大语言模型在仅有32条CPU指令的自定义smol32芯片上从机器指令开始构建程序。该环境没有操作系统、文件系统、shell、内存分配器和编程语言,模型必须自行解决代码、数据、栈和图形在固定内存中的布局问题。用户可通过CLI或网页界面限制模型轮次、CPU时钟、RAM和磁盘容量。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
给 LLM 一台小计算机,看它如何从汇编开始构建。
Picos 的起点是一颗定制的 32 位 CPU(smol32)、固定大小的 RAM、裸存储,以及一块 256 × 192 像素的显示屏。没有 guest OS、没有文件系统、没有 shell、没有分配器、没有编程语言、也没有窗口系统。一切都必须从机器指令开始搭建。
这个项目的目标是观察不同模型在严格约束下会做出什么。通过 CLI 或 Web UI,你可以限制轮次数量、隐藏或显示剩余轮次预算,并限制 CPU 时钟、RAM、磁盘和总周期额度。只有裸机器指令和固定容量,模型必须自己想出办法,把代码、数据、栈和图形塞进内存。
Architecture Overview
Hardware & smol32 ISA
Agent Tool Bridge (MCP)
Quick Start
CLI Reference
Experiment Modes & Turn Controls
Live Browser & Mobile Observer
Project Layout
Development & Testing
Documentation
Architecture Overview
┌───────────────────────────────────────────────┐
│ Agent / LLM Provider │
│ (Direct ChatGPT Auth or Codex CLI) │
└───────────────────────┬───────────────────────┘
│ JSON-RPC / MCP
┌───────────────────────▼───────────────────────┐
│ Picos Harness & MCP Bridge │
│ [src/strict.rs] / [src/mcp.rs] │
└───────────────────────┬───────────────────────┘
│ Machine Tools
┌───────────────────────▼───────────────────────┐
│ Virtual Machine │
│ [src/vm.rs] │
│ • smol32 CPU (r0–r15, PC, comparison state) │
│ • Flat mutable RAM (code, data, stack, VRAM) │
│ • Display (256×192 RGB332 @ VIDEO_BASE) │
│ • Raw Disk Storage │
│ • I/O Ports: Serial, Keyboard, Disk, Cycles │
└───────────────┬───────────────────────┬───────┘
│ │
┌───────────────────▼──┐ ┌──────────▼─────────────────┐
│ Assembler / Disasm │ │ HTTP Server & Web Observer │
│ [src/assembler.rs] │ │ [src/server.rs] │
│ [src/disassembler.rs]│ │ [public/index.html] │
└──────────────────────┘ └────────────────────────────┘
严格执行边界(--strict):运行一个纯 Rust 的 agent 循环,使用直接的 ChatGPT 订阅 OAuth(picos login --direct)。它只暴露 9 个虚拟机工具,不提供宿主 shell、文件系统、Python 或 Node.js。
Legacy Codex Runner:把编排工作委托给 Codex CLI(picos login),运行在只读沙箱中,且仅限同样这 9 个 MCP 机器工具。
Hardware & smol32 ISA
Component
Specification
CPU
定制的 32 位无符号 ISA(smol32),16 个寄存器(r0–r15),按字节寻址的 PC,比较标志
Instruction Encoding
固定 8 字节指令(opcode、目标寄存器、操作数类型、保留零字节、32 位立即数/寄存器)
Stack
r15 用作向下增长的栈指针,复位时初始化为 VIDEO_BASE
RAM
单一平坦字节数组,由代码、数据、栈和帧缓冲共享(自修改代码原生可用)
Display
256 × 192 RGB332 像素(49,152 字节,映射在 VIDEO_BASE = RAM_BYTES - 49152)
Disk
固定大小的裸字节数组,通过 I/O 端口逐字节访问;可在机器重启后保留
Virtual Clock
以 MHz 配置(1 MHz = 1,000,000 周期/秒);每条指令的周期开销是确定的
Minimal Instruction Set
整个 CPU 只支持 32 条指令(0x00–0x1f)。没有浮点运算、没有 SIMD 指令、没有硬件中断、没有内存保护环、也没有图形系统调用。设计理念是让原语尽可能小、尽可能透明,然后看 agent 能在其上构建出多少复杂度——从在 VIDEO_BASE 中逐像素绘制位图字体,到在平坦 RAM 中构建 shell、文件结构或自托管编译器。
汇编器伪指令同样极简:.equ、.byte、.word、.ascii、.asciz 和 .space,以及内置常量(RAM_BYTES、DISK_BYTES、VIDEO_BASE、VIDEO_WIDTH、VIDEO_HEIGHT)。精确的二进制编码和每条指令的周期开销见 docs/ISA.md。
Port
in rD, port(读)
out rV, port(写)
0
返回 0
把 rV 的低字节追加到串行输出(保留最近 16,384 字节)
1
从 UTF-8 键盘字节队列中取出下一个字节(为空则返回 0xFFFFFFFF)
CPU 故障
2
读取当前磁盘字节游标
设置磁盘字节游标(0..=DISK_BYTES)
3
读取游标处的磁盘字节并推进游标
把 rV 的低字节写入游标处的磁盘并推进游标
4
读取生命周期周期计数器的低 32 位
CPU 故障
Agent Tool Bridge (MCP)
agent 只能通过 src/mcp.rs 中定义的 9 个窄工具与机器交互:
- Install and Authenticate
cargo install --path . --bin picos
Authenticate for strict mode (direct ChatGPT OAuth)
picos login --direct
picos login --direct status
picos models
(或者,运行 picos login 或 picos login --device-code 以使用 Codex 后端 runner)。
picos new terminal --strict --cpu 300 --ram 24 --storage 200 \
--model gpt-6-luna --prompt "build a terminal"
也支持关键字语法:
picos new terminal strict cpu 300 ram 24 storage 200 \
model gpt-6-luna prompt "build a terminal"
picos 会留在前台,启动本地 observer 服务器,打开浏览器,并开始第一轮 agent 交互。随时按 Ctrl+C 可保存机器状态并干净地停止 agent。
List saved experiments under ~/.picos/experiments
picos list
Open the saved machine in the observer without starting inference
picos resume terminal
Resume and start a new agent turn with an updated prompt
picos resume terminal --prompt "Continue building the terminal and test it."
CLI Reference
picos new [NAME] 的选项
Flag
Description
Default
--cpu <MHz>
虚拟时钟频率,整数 MHz
300
--ram <MB>
guest RAM,十进制 MB(1 MB = 1,000,000 字节)
8
--storage <MB>
guest 裸磁盘,十进制 MB(1 MB = 1,000,000 字节)
32
--model <SLUG>
精确的模型 slug(在 --strict 模式下必填)
服务商默认值
--strict
使用纯 Rust、仅虚拟机、直接 OAuth 的 harness
关闭
--prompt <TEXT>
给 agent 的任务指令
必填
--cycles <N>
实验的总生命周期周期预算
60 虚拟秒(clockHz × 60)
--turns <1..24>
初始轮次额度(standard / maximize 模式)
6
--mode <MODE>
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。