news 2026/9/29 10:07:04

DeepSeek-Agent-Harness-2026终极指南-第2章第7节-认知升级-LLM是内核Harness是操作系统:Karpathy类比详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek-Agent-Harness-2026终极指南-第2章第7节-认知升级-LLM是内核Harness是操作系统:Karpathy类比详解

LLM 是内核,Harness 是操作系统:Karpathy 类比详解

你天天在用操作系统,却没意识到 Agent 就是一台微缩的电脑。把"进程调度、内存管理、系统调用、访问控制"这八个字翻译成 Agent 的语言,你会发现复杂的东西突然全通了。

本文导航

  • 为什么是操作系统
  • 四个核心映射:一次看个透
  • 映射一:工具系统 = 系统调用
  • 映射二:权限模型 = 访问控制
  • 映射三:上下文管理 = 内存管理
  • 映射四:多 Agent 编排 = 进程调度
  • 用一张表收尾
  • 从类比到工程:你接下来要造什么
  • 小结
  • 下节预告

上一节我们把 LLM 的四块短板摆上了解剖台:没手、没眼、没记忆、没缰绳。这一节换个更爽的视角——用你每天都在用的操作系统来重新认识 Agent。

Karpathy 有个特别出名的说法:大模型 Agent 就像一台微缩的电脑。我当时第一反应是"夸张了吧",但等我真把两个系统逐项对照之后,我信了。因为这套类比不是比喻着玩玩,它精确到能指导工程——你按操作系统的思路去设计 Agent,设计出来就是对的。

不瞒你说,我早期做 Agent 时架构一团糟,就是因为我没意识到:我其实是在"写操作系统",却用"写普通应用"的思路在写。意识错位,代码全是歪的。

为什么是操作系统

先想清楚一件事:操作系统到底解决了什么问题?

答案是四个字——管理资源。把 CPU、内存、磁盘、外设这些有限的硬件资源,安全、高效、公平地分给一个个进程用,同时不让进程互相踩踏、不让进程越权。

Agent 的问题一模一样。它也有"资源":模型调用额度(=CPU/算力)、上下文窗口(=内存)、文件系统和外部 API(=外设)、以及一个个工具调用(=进程)。你怎么把这些资源管起来,不让工具调用互相越权、不让上下文撑爆窗口、不让调用额度烧光——这就是操作系统的活。

所以 Karpathy 类比不是玄学,它把 Agent 的本质问题——资源编排——翻译成了你早就烂熟于心的领域。

Agent = 微缩操作系统

传统操作系统

翻译

翻译

翻译

翻译

系统调用

访问控制子程序

内存管理

进程/线程调度

工具调用

权限校验器

上下文窗口

Agent Loop 编排

四个核心映射:一次看个透

下面这四组映射是整套类比的骨架,我画成一张总表:

操作系统概念Agent 对应物解决的问题课程章节
系统调用(syscall)工具系统进程怎么安全地碰外设第9章 工具集
访问控制/权限权限模型谁被允许动什么第10章 安全权限
内存管理上下文引擎有限的窗口怎么装得下无限历史第11章 上下文工程
进程调度多 Agent 编排多个子任务怎么协同不打架第12章 子 Agent

一个个拆开讲。

映射一:工具系统 = 系统调用

操作系统里,用户进程不能直接碰硬件。你想读磁盘,得通过系统调用(read、write、open)向内核申请,内核检查完再去碰硬件,再把结果返回给你。为什么这么设计?因为直接碰硬件,进程 A 可能把进程 B 的数据搞坏,系统就乱了。

Agent 里也一样。模型这个"进程"不能直接碰你的文件系统、终端、网络(这就是上一节的"没手")。它要读文件、跑命令,必须通过 Harness 提供的"系统调用"——也就是工具。

# 操作系统:进程 -> syscall(read) -> 内核 -> 磁盘# Agent :模型 -> tool(read_file) -> Harness -> 文件系统# 注册工具 = 暴露"系统调用"给模型tools=[{"type":"function","function":{"name":"read_file","description":"读取指定路径的文件内容(等同于 read 系统调用)","parameters":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"],},}}]

关键洞察:工具就是"受控的副作用入口"。模型没有权限直接做任何事,它只能"点菜"(发 tool_call),Harness 这个"内核"负责实际执行。这跟系统调用的设计哲学一模一样:权力上收,能力下放。这也是为什么第 21 节工具系统的设计,内核就是"注册表 + 执行器"两层——跟内核的系统调用表如出一辙。

映射二:权限模型 = 访问控制

光有系统调用还不够。内核里还有一个东西叫访问控制:不同进程有不同的权限。普通进程删不了系统文件,root 才能改/etc。这是安全的第一道闸。

Agent 里呢?如果模型能调用所有工具、访问所有路径,那它跟"拿到了 root 权限的恶意进程"没区别——太危险了。所以 Harness 必须有一套权限模型:

PERMISSIONS={"read_file":{"paths":["/workspace/project"],"mode":"read"},"write_file":{"paths":["/workspace/project"],"mode":"write"},"run_command":{"allow":["python","pytest"],"deny":["rm -rf","sudo"]},# 没列进来的工具,模型根本调不到 → 相当于没授权}defcheck_permission(tool_name,args):iftool_name=="run_command":cmd=args["command"]ifany(badincmdforbadinPERMISSIONS["run_command"]["deny"]):raisePermissionError(f"命令{cmd}被权限模型拒绝")returnTrue# 通过授权才放行

看到没有——默认拒绝,显式放行。这跟操作系统的权限检查一模一样:不在白名单里的,一律拒绝。模型再"聪明",也翻不了你给它划的墙。这正好呼应上一节的"安全哲学":模型不可信但可约束,约束就靠这套权限模型。

映射三:上下文管理 = 内存管理

内存管理是操作系统最核心的活之一:内存是有限的,进程想要的内存往往比物理内存大。怎么办?虚拟内存、页交换、LRU 淘汰——把有限的物理内存,尽量高效地分给多个进程。

Agent 的上下文窗口(比如 DeepSeek 的 1M token)就是"物理内存"。模型需要的"历史信息"往往远超窗口。怎么办?Harness 的上下文引擎对应操作系统三大内存技术:

内存管理技术Agent 对应物作用
虚拟内存把"完整任务状态"映射到窗口内让模型感觉记忆是连续的
页交换滑动窗口:旧的滚出,新的进来保住当前焦点,忘掉久远细节
LRU 淘汰/压缩摘要压缩 / RAG 检索窗口不够时,浓缩旧内容
# 内存不够 -> 页交换/压缩;上下文不够 -> 摘要/检索defmanage_memory(messages,window=10):iflen(messages)<=window:returnmessages# 内存够,直接用old,recent=messages[:-window],messages[-window:]summary=LLM.summarize(old)# 压缩久远页 -> 摘要return[{"role":"system","content":f"[历史]:{summary}"}]+recent

核心思想:状态永远在 Harness 侧(=内存管理方),模型只看到"被调度进窗口的那一页"。谁管内存,谁就拥有"记忆"——这句话我在上一节说过,到这里你该有更深体会了。

映射四:多 Agent 编排 = 进程调度

现代操作系统是多进程并发的:CPU 把时间片分给多个进程,让它们看起来在同时跑,还要处理进程间通信(IPC)、避免死锁。

Agent 到复杂阶段也一样。一个任务会长出多个"子 Agent"(对应多个进程):一个负责写代码,一个负责跑测试,一个负责找资料。谁先跑、谁后跑、结果怎么拼、互相怎么通信——这就是进程调度。

IPC: 把代码交给

IPC: 测试结果反馈

IPC: 资料汇总

访问控制

共享内存

主 Agent/调度器

子Agent A
写代码

子Agent B
跑测试

子Agent C
查文档

统一权限模型

上下文引擎

多 Agent 有三件事必须处理,件件都对应操作系统进程管理的经典问题:

  1. 优先级/调度顺序:主 Agent 决定哪个子任务先执行(=CPU 调度)
  2. 进程间通信:子 Agent 之间的结果传递要结构化(=IPC)
  3. 死锁与超时:某个子 Agent 卡住了要有熔断机制(=死锁检测)

第 12 章我会带你手写一个带优先级和超时的子 Agent 调度器,那会儿你回头看这里的类比,会觉得当初自己怎么没早点想到。

用一张表收尾

把整个操作系统类比浓缩成一张"翻译对照表",以后你设计 Agent 卡壳了,就回头查:

操作系统问题Agent 问题标准解法
进程怎么碰外设?模型怎么做事?系统调用 = 工具注册表
谁有权动什么?模型能碰哪些资源?访问控制 = 权限白名单
内存不够怎么办?上下文超窗口怎么办?虚拟内存 = 摘要/检索
多进程怎么协同?多子任务怎么编排?调度 + IPC = 编排器
死锁/失控怎么办?子 Agent 卡住怎么办?超时/熔断 = max_iters

从类比到工程:你接下来要造什么

前六篇其实都在搭认知,从这一节起,你要开始"造操作系统"了。用 Karpathy 类比的眼光看,你的 DeepPilot 从骨架到血肉,就是一台完整的微缩操作系统:

  • 第 3 章"API 协议"= 理解 CPU 指令集(模型怎么说话)
  • 第 9 章"工具集" = 实现系统调用层
  • 第 11 章"上下文工程" = 实现内存管理器
  • 第 10 章"安全权限" = 实现访问控制
  • 第 12 章"子 Agent" = 实现进程调度器

你不再是"调 API 的",你是"造系统的"。这句话就是第 2 章章节名的含义,也是你身份升级的起点。

小结

  1. Agent = 微缩操作系统,它和操作系统解决的是同一个问题:有限资源的编排。
  2. 工具系统 = 系统调用:权力上收、能力下放,模型只能"点菜",Harness 负责执行。
  3. 权限模型 = 访问控制:默认拒绝、显式放行,模型再强也翻不了你划的墙。
  4. 上下文管理 = 内存管理:滑动窗口/摘要/检索,对应页交换/LRU/压缩。
  5. 多 Agent 编排 = 进程调度:优先级、IPC、超时熔断,一应俱全。

下节预告

认知搭建完毕,下一节我直接把"这台操作系统"的完整剖面图摊开给你看——六层架构解剖图:模型接入、工具系统、上下文引擎、安全权限、编排、可观测性,一个生产级 Agent 到底由哪六层组成,每一层对应课程的哪几章,一次讲透。这张图,就是整个课程的总纲。


如果觉得本文对你有帮助,欢迎点赞、收藏、关注三连!
本系列持续更新中,80篇硬核实战,关注不迷路~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 10:06:42

存储过程实战全解:MySQL、Oracle、openGauss差异与SQLSugar调用

存储过程这个老面孔&#xff0c;在数据库考试的程序填空题里是常驻选手&#xff0c;在实际业务里也是处理复杂逻辑的一把好手。很多同学在填空题里能写对CREATE PROCEDURE的拼写&#xff0c;但一碰到DELIMITER、游标、异常处理就露怯&#xff1b;很多开发同学说会用&#xff0c…

作者头像 李华
网站建设 2026/9/29 10:05:18

C语言操作符详解:从算术到位运算,一篇吃透所有运算符

C语言学习记录 日期&#xff1a; 9.18~9.20 &#x1f4d6;今日知识点 ——算术操作符 -*/ %&#x1f4bb;练习代码 &#x1f4d6;今日知识点 ——移位操作符 <<左移操作符&#xff0c;>>右移操作符 &#x1f4bb;练习代码 //移位操作符 //左移操作符&#xff1a;左…

作者头像 李华
网站建设 2026/9/29 9:59:28

嵌入式驱动开发培训机构避坑指南:识别伪驱动课程

做过十多年嵌入式开发&#xff0c;也带过不少新人&#xff0c;这几年收到私信里出现频率最高的问题&#xff0c;就是“怎么选嵌入式驱动开发培训机构”。打开招聘软件看一眼&#xff0c;嵌入式Linux驱动工程师的薪资在硬件岗里确实很能打&#xff0c;于是大量应用开发、纯单片机…

作者头像 李华
网站建设 2026/9/29 9:57:22

读Open Terminal源码:FastAPI+PTY如何把一台电脑变成REST API

读Open Terminal源码:FastAPIPTY如何把一台电脑变成REST API 【免费下载链接】open-terminal A computer you can curl ⚡ 项目地址: https://gitcode.com/gh_mirrors/ope/open-terminal Open Terminal 是一个轻量级的自托管终端 API&#xff1a;它用 FastAPI 做 HTTP 服…

作者头像 李华