从 Loop 到 Graph:Agent 开始学习如何协作
Graph Engineering 不是又一个框架名,而是一种组织复杂 Agent 任务的方式:把任务拆成节点,用边决定顺序和分支,用状态保存进度、产物和失败位置。

笔记、随笔和技术写作。
Graph Engineering 不是又一个框架名,而是一种组织复杂 Agent 任务的方式:把任务拆成节点,用边决定顺序和分支,用状态保存进度、产物和失败位置。

这次重做个人站,我没有追求最多的功能,而是围绕写作、作品展示和 VPS 运维重新确定了一套足够简单、可以长期维护的技术栈。

圈内 2026 年在聊一批 AI-native GUI 工具,常常混着说。这篇不转述,记我实机用过 Zed、Cursor、ZCode 之后,对'编辑器加 AI'和'agent 为中心'这条分野的真实体感,以及它怎么治了我'一条线升级'的误区。

圈内 2026 年 6 月在聊 Loop Engineering——'别再亲自 prompt agent,去设计替你 prompt 的 loop'。这篇不转述概念,记我用 /goal + Stop hook 真跑了一遍 39 篇博客改造之后,对'写 loop'这件事形成的判断。

写这篇时首页翻页时钟显示已在线 241 天。从去年十月开博到现在三十九篇,是一条完整的成长线。趁这个节点回头看看——变的是技术栈,不变的是什么。

这里不是一份静态简历,而是我把正在学习、使用和判断的东西整理成可访问记录的地方。

公开一个链接后,别人看到的不只是页面。域名、历史 DNS、源站端口、前端代码和管理入口会连成一条暴露链,发布前应逐层检查。

Cloudflare Tunnel 把内网服务接到公网,但它不负责识别访问者。公开主页、管理后台、OAuth 回调和部署接口需要按路径建立不同边界。

有网、受限网和完全离线环境需要的不是同一条命令。把镜像获取当成交付链路,才能在代理缓存、私有仓库和 save/load 之间选对方案。

VLESS + REALITY 不绑定 443 端口。真正需要弄清的是端口可达性、监听冲突、反代复用和 Cloudflare 代理边界,而不是把 443 当成协议要求。

VMess、VLESS、Trojan、TLS、REALITY、XTLS 和 Xray 经常被放在一张对比表里,但它们不在同一层。先把实现、协议、传输和握手拆开,选型才不会混乱。

每加一个新服务该想什么?我把部署拆成八个独立的面——可达、守护、防护、可观测、配置密钥、变更、数据、运维入口。这篇解释框架怎么来、每面问什么,以及为什么分面比抄清单更贴自己的规模。

2026 年 4 月 Karpathy 发了个叫 llm-wiki 的 gist,圈里开始聊'RAG 要被取代了吗'。这篇不转述它,记我读到其中等规模的示例后,回头量了自己的知识库,发现自己之前把 RAG 当默认答案是过度工程,以及最后形成的判断。

这大半年身边一直有个 AI 搭子。它帮我省了很多时间,也差点让我变懒。这篇不讲'怎么用 AI',讲我把什么交给了它、边界划在哪、两次栽跟头之后我形成的规则。

单机能服务几百人,YouTube 服务几十亿。拿它当教材可以,只学概念就变成纯资料。这篇把它当镜子——照出我这套小站每一层差距在哪、哪些该补、哪些这规模根本不该碰。

学过的技术像拼图。这篇把它们串成一张图:一个请求从浏览器到数据库再回来,经过的每一层都是亲手搭过的。串起来之后,对「系统」的理解变了什么,出了问题又该从哪层查起。

大半年学了一堆东西,回头看真正记住的都不是抄过的,而是讲出来过的。这篇不讲方法论,讲我怎么从'狗熊掰玉米'改过来的,以及为什么慢反而是另一种快。

把域名接进 Cloudflare、用 Tunnel 做零端口发布。重点不是怎么配,而是我当初怎么理解可达、后来哪里想偏了,以及「主动出站」之后我对整套工作流怎么重新分了面。

每次改完代码手动 SSH 拉代码、重启服务,改一行文案也得走一遍流程。这篇不讲 Actions 大全,讲我为什么判定手动迟早翻车、第一次 pipeline 红了怎么查,以及密钥纪律。

有了域名和反代,最后一步是 HTTPS。这篇不讲 certbot 大全,讲 90 天有效期逼我接受的心智,以及为什么续期必须先 dry-run 演练。

服务跑在 8000、8080,直接暴露既难看又难管。这篇不讲配置大全,讲浏览器不该直连后端、proxy_pass 末尾斜杠那个绊脚点,以及「先验后发」的 reload 纪律。

学了 Java、Docker、Nginx,这篇把它们串成一条部署链。不讲部署清单,讲多阶段构建那次我借的、后来还的债,以及端口只绑回环这个防护判断。

SSH 加固之后,网络层是最后一块。这篇不讲怎么配大全,讲我为什么用两层、它们各挡什么,以及「启用前先放行 SSH」的活路纪律。

一开始我用 nohup 裸跑程序,关掉终端还能跑,但进程崩了不会自己起来。这篇不讲 unit 大全,讲我为什么判定「裸跑不算上线」,以及守护这一面站的位置。

Linux 命令成千上万,日常管服务器真正高频的就那么几组。这篇不堆大全,只记我每天真的会敲的,以及为什么是这几组——对应「喘不喘、谁占了、日志说什么」三件事。

VPS 一接公网,几分钟内就有人来试密码。这篇不讲 SSH 大全,讲我为什么选 ed25519、为什么改端口值得,以及「改配置别关当前会话」的退路纪律。

代码写了几个月一直跑在本机。这篇不讲 VPS 怎么买,讲我作为练手机在挑什么、为什么不上高配,以及到手那三件事的顺序我为什么这么排。

真实项目很少只有一个容器。这篇不讲 Compose 语法大全,讲我用手敲 docker run 翻过什么车、为什么把整套服务写进一个 yml,以及那条差点把数据删没了的教训。

装服务装到后面,系统里 Python、Java 各种库混在一起,依赖打架。这篇不讲 Docker 命令大全,讲它到底在解决什么——以及为什么我说它是 venv 那条线的延续。

两篇关于 debug 玄学的合成一篇。它们的底子是同一个偏差:跳过最直接的线索,去查更'高级'的可能。这篇记我浪费的那两个半小时、真正让我冷静的那两分钟,以及后来我刻进直觉的排查优先级。

接口能返回数据只是第一步。这篇做两件让接口专业起来的事:统一返回结构、集中处理异常。不讲模板,讲我为什么把它当成给前端的契约,以及「给用户看友好、给自己看堆栈」这条判断。

接口有了,让数据落库。这篇用 Spring Data JPA 接 MySQL。不讲怎么配,讲「继承个接口就白送 CRUD」的爽和险——爽在省事,险在我可能根本不懂它在生成什么 SQL。

一篇没有代码的年终碎念。回看这一年,我学东西像狗熊掰玉米——学一个丢一个。这篇记我怎么意识到这件事,以及开博两个月这件事怎么治它。

还记得 Python 那边的 FastAPI 接口吗?这篇写一个 Java 版对照。不讲注解清单,讲两种风格差在哪,以及学第二门后端框架最大的收获——开始看见框架之上不变的那些东西。

第一次打开 Spring Boot 项目,文件夹一堆不知道从哪看起。这篇不讲 Maven 大全,讲我怎么从被结构吓到,到抓住 pom.xml 和标准目录,以及「约定优于配置」到底在替我省什么。

决定啃 Java。从 Python 转过来第一周是真的别扭。这篇不讲语法清单,讲别扭底下是什么——不是语法要重学,是从「怎么快点写出来」转到「怎么让结构更清晰、更不容易错」。

Python 阶段收尾写个小爬虫。这篇不讲 requests 和 BeautifulSoup 怎么用,讲我对「爬虫的水平不体现在抓得多猛,而在多有分寸」的判断——能抓不代表该抓。

装饰器和 with 一开始很像黑魔法。这篇不讲语法细节,讲我怎么从「看不懂这层包装」到想清楚:它们就是把横切的重复逻辑从主流程里剥离。

光返回死数据不算后端。这篇给接口接上 SQLite。不讲 CRUD 怎么写,讲我为什么选 SQLite 练手、Pydantic 模型替我管了什么,以及「占位符不是图省事」从第一天就该刻进去。

Web 框架一搜一大把。Flask 我写过小工具,Django 用 DRF 做过完整 REST API,这次却选了 FastAPI。这篇不讲怎么用,讲我为什么在这个节点选它、它和 Flask 的取舍差在哪。

学 Python 第一件该养成的习惯不是写代码,是管环境。这篇不讲 venv 语法,讲我往全局装包装出事之后,为什么把「每项目一个 venv」当成新建项目的第一条命令。

开始写代码最先撞上的不是语法报错,是改了半天发现思路不对想回滚、文件已经覆盖了。这篇不讲命令大全,讲我什么时候开始养成提交习惯、哪次没提交翻的车,以及分支这块我到现在还偏保守。

你好,我是 s1oopX。这是这个博客的第一篇。开博理由很简单:我折腾的东西越来越多,脑子越来越不够用——写下来,是为了下次不用从零开始。
