跳转到内容

博客

标签「博客」下的 8 篇文章

关于逆向项目的一些想法

继上一次爬虫架构设计的博客记录,回顾写一写当时做逆向项目的一些经历和感受。 肯定没有当时那样的心情了,但还是想把一些想法记录下来,算是对这个项目的一个总结和反思。

最近看到不少分享逆向的文章,感觉挺有意思,也想记录一下自己在做这类项目时的一些想法和体会。 这个项目还是比较典型的逆向项目,涉及到代码分析、参数破解、请求模拟、数据处理等多个环节。 也是AI协助下的一种风口和未来趋势,虽然AI不能完全替代人工判断,但确实能加速很多分析和调试的过程。

某游戏大厂的虚拟物品交易平台。 需要从这个平台上获取一些数据,但官方没有提供公开的API接口。 所以只能通过逆向分析前端代码和网络请求,来找到合适的接口和参数,再模拟请求获取数据。 接口返回的数据分成两部分:一部分是基本的列表数据,另一部分是需要额外请求才能拿到的详细数据。 js的代码是经过混淆的,参数生成也比较复杂,涉及到一些加密和动态生成的逻辑。

标注:这篇博客不粘贴代码,只使用文字的方式来描述分析和思考的过程,避免泄露任何敏感信息(🐶狗头保命)。

使用的浏览器 Network,看 XHR 、 Fetch、resource,进行断点调试,分析。 再分析请求参数、Headers、Cookie、响应结构。尝试请求接口,看看能不能拿到数据。 分析 JavaScript 代码,找到请求相关的函数,看看参数是怎么生成的,是否有加密、混淆、动态生成等。

关键点:

  • 请求的大致流程
  • 解密放在哪个环节
  • 需要哪些参数,参数是怎么生成的,有没有解密方法

可以先对请求附近的函数入手,虽然被加密,整体逻辑还是可以拎得清楚的。 探查逻辑后,对关键函数进行断点。全局搜索可疑函数。最先知道的应该是解密函数, 找到它的调用关系,看看它的输入输出是什么。也可以在请求的过程中,在控制台打印一些参数,调用方法,看看它们的变化。

总计耗时三天,第一天主要是分析请求,参数,熟悉请求流程和代码,第二天主要是分析代码和找到解密方法,第三天主要是把请求流程跑通。

第一天不用急着找解密逻辑,先把请求流程摸清楚,得先了解项目,为什么要加密,加密的目的是什么?

  • 只是为了防止被爬
  • 还是保护数据
  • 还是为了压缩数据大小以方便传输

如果是第三种,只是为了方便传输,那么解密方法可能就是一个简单的压缩算法,或者是一个常见的加密算法,可能在网上就能找到相关的解密方法。 需要注意的就是前后会有一些步骤,是否需要配合渲染流程,进行一些前置处理,或者是后续的处理。

很多时候,逆向项目的第一步确实是抓包。

但这只是开始。

真正麻烦的地方往往在后面:

  • 参数是不是动态生成的
  • Token 是否有时效
  • Cookie 是否会失效
  • 请求频率是否有限制
  • 数据结构是否会变化
  • 失败任务能不能恢复

先跑通一次流程,后续的流程会很快

我觉得逆向项目里最考验人的,不是某一次成功请求。

而是你能不能把它从“脚本”做成一个能运行的系统。

比如:

  • 失败要能重试
  • 账号要能管理
  • Cookie 要能维护
  • 请求要控制频率
  • 数据要能落库
  • 异常要能被发现
  • 任务要能继续跑

这些东西看起来不如破解一个参数酷,但它们才决定项目能不能真正用起来。

现在做这类项目,AI 工具确实能帮很多忙。

它可以帮你分析代码片段,解释混淆逻辑,整理调试思路,甚至帮你把 JavaScript 逻辑改写成 Python。 甚至可以将加密的数据给AI看一下,确定加密的类型,或者帮你分析加密算法的逻辑。

但它也有局限。

它不知道真实请求环境,不知道站点当时的状态,也不知道你的 Cookie、代理、网络和账号到底发生了什么。

所以最后还是要自己判断。

AI 可以加速排查,但不能代替现场判断。同理,AI 也会犯错。

逆向项目很容易让人沉迷在某个技术细节里,非常容易上瘾。

但值得沉淀的,不是某一次参数破解成功,而是过程中形成的分析方法和工程意识。

技术会变,接口会变,规则也会变。

但观察问题、拆解问题、验证问题的能力,会一直留下来。

Vibe Coding 一段时间后,我的一些新感受

Vibe Coding 又用了有一段时间。

一开始接触它的时候,更多是新鲜感。看到 AI 能读项目、改文件、跑命令、修问题,会觉得这东西多少有点离谱。

但用久一点之后,新鲜感会慢慢退下去,剩下的就是一些更真实的体感。

它确实提高了效率。

但它也不是魔法。

以前做一个功能,很多时间会花在重复劳动上。

比如找文件、改样式、补类型、处理小 bug、跑构建、看报错。

这些事情不难,但很碎。

碎事情多了,人就容易烦。

Vibe Coding 最大的变化,是它把这些碎事情接过去了一部分。很多时候,我只需要描述清楚目标,它就可以帮我把第一版做出来。

这带来的不是简单的“少写几行代码”。

而是反馈变快了。

以前一个想法可能要等自己慢慢写完,才能知道效果行不行。现在可以更快看到一个版本,然后再判断它是不是对。

这点很重要。

因为很多想法不是想出来的,是做出来之后才知道哪里不对。

AI 写代码很快。

有时候快得让我有点不放心。

它会非常自信地修改文件,也会非常自然地补一些它认为合理的逻辑。

问题是,它的“合理”不一定等于我的“合适”。

比如一个页面,它可能会加很多解释文案,让功能看起来更完整;但我的博客更适合保持安静、简洁。

比如一个样式,它可能会顺手加背景、卡片、动效;但我可能只需要一个很轻的交互反馈。

所以用 Vibe Coding 越久,我越觉得验收很重要。

不是它写完就结束了。

而是它写完之后,我要重新看一遍:

  • 有没有改过头
  • 有没有偏离原来的设计
  • 有没有引入不必要的复杂度
  • 有没有破坏已有习惯
  • 有没有只是“看起来很努力”

有时候 AI 的代码没错,但气质不对。

这就需要人来判断。

以前我会觉得提示词很重要。

现在我觉得,上下文更重要。

一个项目里已经有自己的结构、命名、样式、内容风格和取舍习惯。如果 AI 不理解这些,它就很容易写出一个“能跑但不像这个项目”的东西。

所以我现在更愿意先让它读代码。

先看现有文件。

先理解已有逻辑。

再让它动手。

这和人接手项目其实是一样的。一个靠谱的人不会上来就重构,他会先看看这个项目原来是怎么长出来的。

AI 也一样。

给它足够的上下文,它会更像协作者。

不给上下文,它就更像一个手很快的陌生人。

Vibe Coding 用得越多,我越不觉得人会变得不重要。

相反,人要负责的东西变得更靠前了。

以前我主要关心“怎么实现”。

现在我更多关心:

  • 要不要做
  • 做到什么程度
  • 放在哪里合适
  • 会不会影响长期维护
  • 这个功能是不是符合产品气质

AI 可以帮我往前推,但方向还是要自己定。

如果方向不清楚,AI 只会更快地把混乱实现出来。

这也是我最近很明显的感受:Vibe Coding 不是让人不用思考,而是把思考的位置往上抬。

以前卡在代码细节里。

现在卡在产品判断里。

听起来好像还是会卡。

但卡得高级一点。

还有一个很现实的问题:AI 参与越多,项目越需要规则。

比如文件怎么命名,文章放哪里,数据抽到哪里,样式怎么复用,哪些信息不能写进仓库。

如果这些规则不清楚,AI 每次都会根据当下情况做一个“看起来可以”的选择。

短期没问题。

长期就会慢慢乱。

所以我最近反而更重视项目规范。

比如博客按年份月份归档,URL 用 slug 固定;友链和技术栈抽到 data;部署信息用 .env;新增文章用脚本生成。

这些事情看起来不酷。

但它们能让 AI 更好地工作,也能让未来的自己少骂几句过去的自己。

现在再看 Vibe Coding,我已经不太把它当成一个炫技词了。

它更像一种新的工作方式。

不是我把所有事情交给 AI。

而是我负责目标、边界、判断和验收,AI 负责承担大量具体执行。

这个分工如果配合得好,效率确实会高很多。

但如果人自己没想清楚,它也会很快把问题放大。

所以我现在对 Vibe Coding 的感受很简单:

它不是让开发变得不用动脑。

它是让开发者必须更清楚地知道,自己到底想要什么。

决策会变得越来越重要。

第一次迁移生产服务器

好消息,服务器迁移完成了。

坏消息,迁移服务器花了近四小时。这要是生产停机迁移,这不事不得凌晨干。

但我没有,这是一次停机的迁移…

这还是我第一次遇到服务商要跑路。有一说一,机器很稳,也会提前30天发公告,如此的一家服务商就这样没了,挺可惜的,我倒是希望你活下去。

以前总觉得服务器迁移这种事离我挺远,直到通知的时候,才发现:哦,倒霉事落到我身上了。

这次主要迁移的是一些 Web 服务、数据卷。

大部分都跑在 Docker 里,包括:

  • cpa
  • new-api
  • 博客
  • PostgreSQL
  • Redis
  • Nginx
  • SSL 证书

需要备份data volume,重新部署 Docker Compose,重新配置 Nginx,重新申请 SSL 证书。

每一层看起来都不复杂,但它们连在一起,就开始有点会折磨人了。

这次耗时比较长,主要还是因为没什么服务器迁移经验。

平时部署一个服务还好,看文档,用docker-compose。

但迁移不一样。

迁移是你要先把旧环境拆开,再在新环境里重新拼起来。

比如 Docker volume 看起来恢复了,但数据库不一定真的恢复对了。

Nginx 配置看起来写了,但请求不一定真的进了你想要的 server block。

SSL 证书看起来签了,但域名不一定都覆盖到了。

这几个“不一定”,加起来就是一个下午。

整个过程中最让我头大的还是 Nginx。

主域名访问时,一直出现 nginx welcome page。

二级域名访问却没问题。

这个页面真的很神奇。

就是这个熟悉的家伙:

/etc/nginx/sites-enabled/default

删掉默认站点,再 reload Nginx,主域名才终于正常。

这件事给我的感觉就是:有时候不是你没配置,而是有默认配置。

这次迁移过程中,我也一直在让 GPT 帮我看问题。

它确实很有用。

尤其是排查方向、解释报错、整理命令的时候,可以节省不少时间。

但它也会帮倒忙。

比如有些时候,它会默认你的服务器结构是标准的。

但实际情况是:你的服务器可能有 conf.d,也可能有 sites-enabled,还可能有 certbot 自动生成的配置。

它说得很有道理。

但是服务器情况不一定是gpt说的那样。

所以最后还是要自己去看:

Terminal window
nginx -T

真实配置永远比想象中的配置重要。

折腾了几个小时后,服务终于都恢复了。

博客可以访问,new-api 正常,cpa的数据没丢,统计服务也能起来,主域名和二级域名都能用,SSL 证书也处理好了。

那一刻没有什么特别激动的感觉。

更多是松了一口气。

这次最大的感受是:

时间的流逝,非常快。折腾一会,几个小时没了。

需要树立工程意识,迁移服务的环节流程需要熟悉,才能避免踩坑。要有自己的判断,不能轻易全部的交给 GPT。

服务器迁移不是单纯的搬数据,更是一个重新搭建环境的过程。 每个单独的docker容器挂在的数据卷。 在备份项目和数据卷的时候注意有没有嵌套的卷。 运维也不容易…

六一这天,云服务商给我开了个玩笑

六一这天,云服务商给我开了个天大的玩笑。

AI爆发,硬件暴涨,云服务商的成本也在暴涨,撑不住的已经倒下。这股风也吹到了我这里。

怎么说呢。

儿童节,成年人收到的是服务器搬家通知。

服务商还是比较良心,提前30天发布了公告。

接下来这段时间,我会把博客迁移到新的服务器上。

迁移后域名仍然保持不变:

blog.veyliss.top

所以已经添加友链的伙伴,不需要修改链接。

如果中途出现短暂无法访问、解析异常、证书刷新、服务重启之类的问题,也不要惊慌。

不是我跑路了。

是我的服务器先跑路了。

这次也算给我提了个醒:个人博客看起来只是一个小站,但只要还在持续更新,它就不是随手放在那里的页面。

域名、服务器、证书、备份,这些平时不太显眼的东西,也在支撑它继续跑下去。

总之,友链伙伴如果发现本站偶尔打不开,不用紧张。

我还在。

只是服务器在搬家。

大规模无状态爬虫系统设计

这篇文章记录的是一套大规模无状态爬虫系统的设计。

先说明一下参与边界:这套系统不是我一个人独立设计完成的。我主要负责爬虫端的核心设计和实现,另一位同事是项目主要负责人,他有十余年的架构设计经验,整体系统设计、调度中心以及很多关键取舍都由他主导。我在这个系统里更多是站在爬虫端视角,参与了一套大规模无状态爬虫体系的落地。

也正因为那时自己还是初入职场,所以这套设计对我的意义不只是“写了一个爬虫”,而是第一次比较完整地看到:爬虫在工程系统里不应该只是脚本,它可以是一个被调度、被扩容、被监控、可替换的采集节点。

本文只讨论在授权和合规范围内的数据采集系统设计,不涉及绕过站点安全机制或采集敏感数据。

在做这个项目之前,Scrapy 是很自然会被想到的方案。

它有成熟的爬虫生命周期、调度器、下载器、中间件、管道、去重、状态管理等能力。对于中小规模、结构清晰、业务变化不频繁的采集任务来说,Scrapy 确实是一套完整方案。

但这套系统面对的问题不太一样。

我们更关注的是大规模任务下的采集吞吐、任务调度、账号分配、异常处理和快速扩容。Scrapy 自带的体系虽然完整,但学习成本较高,入手较慢,架构也相对复杂。尤其当系统需要把任务状态、账号状态、异常流转、代理分配、补偿处理这些能力统一放到一个调度中心管理时,爬虫本身再保留太多状态,反而会让边界变得不清楚。

所以最后的方向是:不沿用 Scrapy 的架构模式,而是结合现有高并发框架,设计一套更轻、更快、更容易水平扩展的无状态爬虫系统。

爬虫核心只负责一件事:拿到任务后尽快完成数据抓取,包括必要的增量更新,然后把结果交给后续链路。

按当时的架构草图抽象后,整体链路大概是这样:

大规模无状态爬虫系统架构图
任务、账号、代理由调度中心统一下发;爬虫节点保持无状态,采集结果进入 Kafka、Flink、ES 数据链路。

在这个体系里,Java 服务承担调度中心的角色。它负责任务协调、账号分配、账号状态管理、异常状态流转、代理下发等能力。

爬虫端则被刻意设计得很薄。

爬虫启动后向调度中心领取任务。调度中心在下发任务时,会同时给出这次采集所需的账号和代理。爬虫拿到这些一次性上下文后开始采集,采集完成后把数据写入 Kafka,并向调度中心汇报任务结果和心跳状态。

这里的“一次性”不是指账号用一次就丢弃,而是指一次采集任务内绑定一次任务、账号和代理。任务结束后,账号会根据结果重新回到有效账号池,或者进入异常账号池,等待专门的登录模块重新处理。

我觉得这套系统里最关键的设计,就是把爬虫做成无状态。

传统爬虫经常会在自己内部维护很多信息:当前任务跑到哪一步、账号是否可用、代理是否失效、失败后要不要重试、异常应该怎么处理、下次从哪里继续等。

这些能力当然有价值,但如果所有爬虫节点都各自维护状态,系统规模一大,就会出现几个问题:

  • 单个爬虫节点变重,扩容和迁移成本变高。
  • 账号、代理、任务状态分散在各处,难以统一判断。
  • 某个节点异常退出后,恢复逻辑复杂。
  • 错误处理混在采集逻辑里,爬虫代码越来越难维护。

无状态的思路是反过来的:爬虫只负责执行当前任务,不负责长期持有状态。

它不决定一个账号后续应该怎么处理,也不决定一个异常任务最终怎么补偿。它只把采集过程中的结果、错误和心跳上报给调度中心,由调度中心再调度给对应的处理模块。

这样做以后,爬虫端会变得非常轻。

如果某个爬虫节点挂了,系统只需要感知它心跳消失,再把未完成任务重新调度出去。爬虫本身不需要承担复杂恢复逻辑。对于我当时负责的爬虫端来说,这个设计最大的好处就是:代码目标非常明确,采集就是采集,错误就是上报。

这套系统里,爬虫单次采集任务大约 15 秒左右就可以完成。

它能快起来,原因不只是“并发写得高”,更重要的是系统边界清楚。

调度中心已经提前准备好了任务、账号和代理,爬虫不需要在执行过程中再做大量决策。拿到任务后,爬虫可以直接进入采集流程。它只处理当前任务所需的请求、解析、增量判断和结果投递。

采集结果进入 Kafka 后,后面的清洗、聚合、存储交给 Flink 和 ES 链路。爬虫不在本地做过多处理,也不会把数据链路和采集链路耦合在一起。

从工程上看,这其实是在减少爬虫节点的职责。

节点职责越少,单次任务越短,失败成本也越低。即使某个任务失败,也可以快速上报并进入调度中心的异常处理流程,而不是让爬虫自己在本地反复纠缠。

爬虫选择 Docker 部署,是因为这个系统天然需要横向扩容。

如果爬虫直接跑在固定机器上,扩容会比较麻烦。新机器环境要配置,依赖要安装,版本要对齐,启动方式也容易不一致。Docker 把运行环境打包后,爬虫就可以在任意一台机器上快速启动。

这带来了两个非常直接的好处。

第一,可以一键扩容。

当采集任务变多,或者需要在短时间内提高吞吐时,只需要增加爬虫容器数量。因为爬虫是无状态的,新启动的容器不需要同步复杂上下文,只要能连上调度中心,就可以开始领取任务。

第二,可以按数据采集情况动态调整数量。

任务高峰期增加爬虫节点,任务低谷期减少节点。爬虫节点本身不保存长期状态,所以扩容和缩容都比较自然。

这也是无状态设计和容器化部署非常契合的地方:一个节点随时可以来,也随时可以走,系统的长期状态不依赖它。

从图上看,可能会有一个疑问:代理池去哪了?

实际设计里,代理也由调度中心负责。

爬虫在领取任务时,调度中心会把任务、账号、代理一起下发。对于爬虫来说,它不需要自己去代理池里挑选代理,也不需要判断某个代理是否还应该继续使用。它只需要使用调度中心给出的代理完成当前任务,并把结果反馈回去。

这样设计的好处是统一。

任务、账号、代理在一次采集里是绑定关系。如果采集失败,调度中心可以结合错误类型判断问题出在哪里:可能是任务本身异常,可能是账号失效,也可能是代理不可用。爬虫端只提供事实,不做最终裁判。

这让异常处理有了更清晰的入口。

账号管理是这个系统里非常重要的一部分。

有效账号池保存当前可用账号。调度中心给爬虫下发任务时,会从有效账号池里分配账号。任务完成后,如果账号表现正常,就重新回到有效账号池,等待后续继续使用。

如果采集过程中发现账号异常,爬虫不会自己尝试修复账号,而是把异常上报给调度中心。调度中心再把账号放入异常账号池,由账号登录模块或专门处理模块去恢复。

恢复成功后,账号重新进入有效账号池;恢复失败,则继续留在异常状态,等待后续处理或下线。

这套流转看起来绕了一步,但它让职责非常清楚:

  • 爬虫负责发现和上报异常。
  • 调度中心负责状态流转和资源分配。
  • 账号登录模块负责账号恢复。
  • 有效账号池只保留可用于任务分配的账号。

当系统规模变大时,这种职责拆分会比“爬虫自己判断一切”更稳。

爬虫采集到的数据不会直接写入最终存储,而是先进入 Kafka。

Kafka 在这里承担缓冲和解耦作用。爬虫只需要稳定地把采集结果投递出去,不需要关心后续清洗、转换和索引写入的具体细节。

Flink 负责消费 Kafka 中的数据,做实时清洗、转换、去重或补充处理。处理后的数据再写入 ES,供后续检索和查询使用。

这条链路的好处是采集和处理分离。

爬虫节点只追求采集效率,数据处理链路则可以按自己的节奏扩展。如果后续清洗逻辑变复杂,也不会直接拖慢爬虫侧的执行。

这套设计对我最大的影响,是让我第一次真正理解“少做一点”有时候是更好的工程设计。

刚开始做爬虫时,很容易觉得爬虫应该什么都管:任务、状态、账号、代理、重试、异常、存储,最好都封装在一个完整框架里。但在大规模系统里,爬虫越重,越容易变成难以扩展的节点。

这套系统反而让我看到另一种思路:

爬虫不需要成为系统中心。它可以只是一个高性能、可替换、可扩容的执行单元。真正的状态和调度逻辑,应该放到更适合统一管理的位置。

对当时初入职场的我来说,这个认知很重要。

我开始意识到,架构设计不是把所有能力都堆进一个模块里,而是决定每个模块应该知道什么、不应该知道什么。一个模块越清楚自己不负责什么,边界往往越稳定。

回头看,这套无状态爬虫体系最让我印象深刻的地方,就是它把复杂性从爬虫端拿走了。

爬虫只领取任务、执行采集、上报结果;调度中心统一管理任务、账号、代理和异常;数据进入 Kafka、Flink、ES 组成的后续链路。每一层都有自己的职责,每一层也都可以独立扩展。

这比单纯写一个“能跑的爬虫”要更接近真正的工程系统。

接触 Vibe Coding 八个多月后的感受

接触 Vibe Coding 已经八个多月了。

回头看,这段时间给我带来的变化非常大。它不只是让我多认识了一些 AI 工具,也不只是让我写代码的速度变快了。更重要的是,它改变了我看待开发这件事的方式。

以前我更关注技术本身。

我会想这个功能应该怎么实现,代码怎么写,框架怎么选,接口怎么设计,数据库结构怎么拆。很多时候,注意力会自然落在“如何把代码写出来”这件事上。

而现在,我越来越多地开始关注产品本身。

这个功能为什么要做?用户会怎么使用?流程是不是顺?页面是不是清楚?这个需求背后真正要解决的业务问题是什么?这些问题慢慢变得比“代码怎么写”更靠前。

这就是 Vibe Coding 对我最大的影响。

在更早的时候,我使用 AI 的方式其实很简单。

去年的上半年,AI 对我来说更多还是一个开发辅助工具。它主要停留在 Web 式的 Chat 形态里,我会问它一些问题,让它帮我解释概念、检索资料、分析报错、生成一些代码片段。

那个阶段的 AI 很像一个随时在线的助手。

它能帮我查东西,也能帮我补充思路,但大多数时候,真正的开发过程还是由我自己主导。我要自己拆任务、自己打开项目、自己修改文件、自己调试和验证。

AI 参与了过程,但没有真正进入开发工作流的中心。

那时候我对它的理解也很朴素:它可以提高效率,可以减少搜索成本,可以帮我更快理解一些不熟悉的知识。

但我还没有意识到,它会在后面改变整个开发方式。

后来,Agent 的概念越来越火。

我开始看到各种 CLI 工具出现,也开始频繁听到 token、上下文、模型网关、提示词、工具调用、代码代理这些词。AI 不再只是一个聊天窗口,它开始进入终端、进入编辑器、进入项目目录,甚至可以直接阅读代码、修改文件、运行命令、检查结果。

这和以前完全不一样。

以前是我把问题复制给 AI,然后把答案再搬回项目里。现在则更像是 AI 直接坐进了项目现场,和我一起看代码、改代码、验证代码。

这时我也开始加入 Vibe Coding 的行列。

刚开始的时候,我其实并不知道这些工具应该怎么用。面对各种模型、API、CLI、代理配置,我会有点茫然。它们看起来都很强,但真正落到自己的项目里,还是需要一段适应过程。

我需要理解它们的边界。

哪些事情可以交给它?哪些事情必须自己判断?什么时候应该让它改代码?什么时候只是让它分析?上下文应该怎么给?任务应该怎么拆?

这些并不是看一篇教程就能立刻掌握的。

后来我逐渐知道了 New API 这类整合型网关,也开始理解它们在 AI 工作流中的意义。

模型越来越多,不同模型有不同能力、价格和使用限制。如果每一个工具都单独配置,就会很分散。整合型网关的意义在于,它能把不同模型入口统一起来,让工具调用变得更稳定,也更容易管理。

再后来,我接触到了 Claude Code 这类工具。

它让我真正感受到“AI 参与编码”这件事和普通问答的区别。

普通问答更像是你问一句,它答一句。CLI 编码工具则更像是你把它放进项目里,它可以沿着任务往前走:阅读文件、理解结构、修改代码、运行检查、再根据结果继续调整。

这时候,AI 就不只是回答问题,而是在参与完成工作。

当然,这并不意味着我可以完全放手。

相反,我越来越感觉到,使用这类工具时,人要承担更高层次的判断。你要知道目标是什么,知道验收标准是什么,知道哪里不能乱动,知道生成的代码是否符合项目长期维护的方向。

AI 可以很快,但方向仍然要由人来定。

过去我做一个东西,第一反应常常是技术问题。

页面怎么写?接口怎么接?状态怎么管理?样式怎么调?

现在我会先想产品问题。

这个页面存在的目的是什么?用户第一眼应该看到什么?如果他想继续阅读,路径是不是顺?如果他在移动端打开,会不会困惑?如果内容越来越多,列表是否还能承载?如果未来要部署、维护、持续写文章,流程是不是足够轻?

这种变化很明显。

因为当 AI 可以承担大量具体编码工作后,我的注意力就被释放出来了。我不再需要把所有精力都压在每一行代码上,而是可以站得稍微高一点,看整个产品的结构和体验。

这并不是说技术不重要。

技术仍然重要,而且越到后面越重要。只是技术不再是唯一中心。它更像是实现产品目标的手段,而不是最终目的。

以前我可能会因为某个技术点很有意思就想做点东西。现在我会先问:这个东西解决了什么问题?它对用户、对内容、对长期维护有什么价值?

Vibe Coding 也让我更关注业务流程。

一个功能不是孤立存在的。它前面有入口,后面有结果,中间有状态变化和用户决策。只把某个页面写出来,并不代表功能真的完成。

比如一个博客站,不只是能展示文章就够了。

还要考虑:

  • 新文章怎么创建。
  • 分类和标签怎么维护。
  • 首页如何呈现内容价值。
  • 列表页如何让读者快速判断是否要点进去。
  • 文章页如何让阅读体验稳定。
  • 部署后如何只专注维护内容。

这些都不是单纯的代码问题,而是产品流程问题。

当 AI 能帮我更快完成具体实现后,我反而会花更多时间思考这些流程是否合理。

我会更在意一个功能放在系统里是不是自然,一个页面是不是为后续内容增长留好了空间,一个交互是不是符合读者直觉。

这其实是更接近产品视角的思考。

这八个多月里,我最大的感受是:AI 把很多“执行层面的阻力”变小了。

以前想到一个功能,可能要先考虑技术栈、查文档、写样板代码、调样式、修报错。很多时候,还没真正验证想法,就已经被实现细节消耗掉了。

现在不同了。

我可以更快把想法变成可运行的东西,再通过实际效果判断它是否值得继续优化。

这会让开发节奏发生变化。

以前更像是先想很久,再动手实现。现在更像是先做出一个版本,然后不断观察、调整、迭代。

AI 给我的不是简单的偷懒,而是更短的反馈周期。

当反馈周期变短,人就更容易围绕结果做判断,而不是长时间停留在假设里。

使用 Vibe Coding 越久,我越觉得人并没有变得不重要。

相反,人变得更重要。

因为 AI 可以生成代码,但它不一定知道什么是适合你的。它可以给出方案,但它不知道你真正想要的产品气质。它可以完成任务,但它不会天然理解你的长期规划。

所以,人需要做这些事情:

  • 定义目标。
  • 拆解任务。
  • 判断取舍。
  • 控制范围。
  • 验收结果。
  • 维护产品方向。

如果没有这些判断,AI 很容易把事情做得很快,但不一定做得正确。

这也是我慢慢学到的一点:Vibe Coding 不是随便让 AI 写代码,而是学会用清晰的目标和上下文引导它,把人的判断和 AI 的执行力结合起来。

这段经历让我发生了几个明显变化。

第一,我更愿意从产品角度看问题。

我不再只问“这个功能怎么写”,而是会先问“这个功能为什么存在”。

第二,我更重视流程。

页面、内容、工具、部署、维护,它们应该连成一条顺畅的链路,而不是一个个孤立的点。

第三,我对学习 AI 相关知识更有动力。

从模型到上下文,从 CLI 工具到网关,从提示词到任务拆解,这些内容不再只是概念,而是会真实影响我每天的开发方式。

第四,我开始更相信个人项目的可能性。

以前一个人做完整产品会觉得很重。现在虽然仍然不轻松,但至少很多原本消耗人的细节可以被 AI 分担。一个人的上限,正在被工具重新拉高。

接触 Vibe Coding 的这八个多月,对我来说像是一次开发方式的迁移。

我从把 AI 当作问答工具,慢慢转向把它当作开发协作者。也从更关注技术实现,逐渐转向关注产品本身、业务流程和最终结果。

这种变化不是一夜之间发生的。

它是在一次次尝试工具、配置模型、修改项目、验证结果的过程中慢慢形成的。

现在的我依然还在学习 AI,也还在摸索更适合自己的工作流。但有一点已经很明确:未来的开发不会再回到过去那种完全依赖手工推进的状态。

AI 会继续进入开发流程,而我需要做的,是学会站在更高的位置使用它。

把注意力从代码细节里适当抽出来,更多地放到产品、体验、流程和价值上。

这可能就是 Vibe Coding 最吸引我的地方。

它不是让我不再关心技术,而是让我终于有更多精力去关心技术背后真正要完成的事情。

梦开始的地方

这是我创建项目的第一篇博客文章。

在这个博客里,我将分享我的技术学习历程、项目经验以及一些随笔思考。希望通过这个平台,能够记录下我的成长轨迹,也能与志同道合的朋友们交流和分享。

我的名字叫做 veyliss,这是我“梦开始的地方”。我希望在这里能够记录下我的梦想和努力的过程,也希望能够激励自己不断前行。无论是技术上的突破,还是生活中的点滴,我都希望能够在这里留下足迹。

在许多年前我就曾想着自己搭建真正属于自己的博客网站,记录自己的学习和成长。如今这个想法终于实现了,我感到非常兴奋和满足。这个博客不仅是一个记录工具,更是一个激励自己不断前进的动力源泉。

我相信,通过这个博客,我能够更好地总结和反思自己的学习过程,也能够与更多的人分享我的经验和见解。无论是技术上的问题,还是生活中的思考,我都希望能够在这里找到共鸣和支持。

最后,感谢每一个来到这个博客的朋友们,希望你们能够在这里找到有价值的内容,也希望我们能够在这里一起成长和进步。让我们一起在这个梦开始的地方,书写属于我们的故事吧!

回顾 2025

回望 2025 年,时间像被按下了快进键。

这一年走得很快,也走得并不轻松。很多事情在开始时都带着热情,真正走到最后却发现,能完整收尾的并不算多。想做的项目、想沉淀的知识、想持续推进的计划,有些还停留在半成品阶段,有些甚至只是短暂地闪过念头。

这并不是一个让人完全满意的年份。

但它也不是毫无意义的一年。

这一年里,有一段连续而紧张的工作经历。

那几个月很充实,也很消耗人。每天都在处理新的任务,面对新的问题,试着把一些看起来并不容易的事情往前推进。工作中,我尽力认真对待每一项安排,也不断尝试挑战自己原本觉得困难的部分。

这段经历让我收获了不少东西。

我积累了更真实的工作经验,也接触到了很多优秀的同事和前辈。从他们身上,我看到了更成熟的处理方式、更稳定的职业节奏,以及面对复杂问题时更清晰的判断。

这些东西不是单靠看教程、写练习就能得到的。它们来自具体的工作现场,来自一次次沟通、交付、修改和复盘。

不过遗憾也很明显。

个人能力确实在提升,但还没有达到自己期待中的飞跃。和行业里真正优秀的人相比,差距依然存在,而且并不小。意识到这一点的时候,会有一点失落,但也会更清楚自己接下来应该往哪里用力。

下班后的疲惫,是这一年很真实的一部分。

这种疲惫不只是身体上的,更是精神上的。忙碌一天之后,大脑长时间处在紧绷状态。回到住处,整个人像被抽空了能量,明明知道还有很多东西值得学习,却很难再把自己重新拉回专注状态。

我曾经计划利用业余时间继续学习新知识,补足能力短板,也想持续推进一些个人项目。可是很多时候,打开资料、看到待办列表,就会先感到一阵无力。

于是一些计划被推迟,一些想法被搁置,一些原本应该继续打磨的东西,也慢慢停在了半路。

这并不值得美化。

它只是提醒我:人的精力是有限的,自我提升也不能只靠一时热情。真正能走得远的,应该是更稳定、更可持续的节奏。

这一年,我也多次想过要构建自己的知识体系。

我越来越能感受到,零散学习带来的问题很明显。今天看一点后端,明天补一点前端,后天又去了解新的工具和概念,短期内似乎学了很多,但如果没有整理和连接,这些知识很容易散落在各处。

我希望能把这些零散的知识点串联起来。

不是为了把自己包装得很厉害,而是希望在未来遇到问题时,能更快找到方向,知道某个知识点在整个技术体系里处于什么位置,也能把过去踩过的坑、做过的项目、解决过的问题留下来。

这也是我后来越来越想认真维护博客和知识库的原因。

文字不是为了证明什么,而是为了给自己留下路径。现在的记录,也许会成为未来某个阶段重新出发时的坐标。

2025 年,我结识了很多圈内朋友。

他们来自不同领域,有交易所、Web3、外卖行业、传统行业、SaaS 领域,也有来自大厂的朋友。还有一些自由职业者,他们的工作方式和生活状态让我产生过很多羡慕与向往。

和这些人交流,会明显感觉到世界比自己日常接触到的范围更大。

不同的人在不同赛道里寻找机会,也在用各自的方式处理工作、生活和成长之间的关系。有的人很专注,有的人很灵活,有的人已经找到了相对自由的节奏,也有人还在变化里持续摸索。

这些交流让我意识到,职业发展不是只有一条路。

稳定工作是一种选择,持续深耕是一种选择,做项目、做产品、做自由职业,也都是不同的选择。重要的是,自己要逐渐知道想过怎样的生活,并为之积累足够的能力。

2025 年也是 AI 快速爆发的一年。

越来越多行业开始投入 AI 相关研发,尝试用 AI 提升效率、优化流程、创造新的业务价值。无论是技术研发、内容生产,还是产品设计、数据分析,AI 都在逐渐进入日常工作。

这不是一个遥远的趋势,而是正在发生的变化。

我能明显感觉到,未来互联网生态会和 AI 更紧密地连接在一起。很多岗位的工作方式会被改变,很多工具会被重做,很多原本依赖人工经验的流程,也会被新的方式重新组织。

这对个人来说既是压力,也是机会。

压力在于,原本掌握的技能可能很快变得不够用。机会在于,如果能更早理解这些变化,并把 AI 当成能力放大器,就有可能在新的阶段找到更好的位置。

2025 年并不是一个完成度很高的年份。

它有遗憾,有拖延,有没有收尾的项目,也有很多没有真正落实的计划。但它同样留下了工作经验、人际连接、行业观察和对自我节奏的重新认识。

我不想把这一年写得过于漂亮。

因为真实的成长并不总是热血的。很多时候,它只是一次次发现自己的不足,然后在疲惫里慢慢调整方向。

如果要给 2025 年一个总结,我想它更像是一个提醒:

不要只依赖热情,也不要害怕缓慢。

真正重要的,是在每一次停顿之后,还能重新开始。