从零手写Mini‑Cursor,解密AI自主写代码原理
文章目录
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01
前言
平时用Cursor敲代码的朋友应该都有同感,这玩意儿简直像身边蹲了个随叫随到的实习程序员。
我当初刚上手的时候,一度以为AI真的能直接操控我电脑硬盘,想读就读想写就写,后背直冒冷汗。后来扒开底层逻辑一看,好家伙,大模型本身手无缚鸡之力,啥文件都碰不着,全靠一套工具体系当手脚。
今天咱们不搞复杂封装,纯原生搭一个最小版Cursor,AI能读文件、写代码、看目录、跑终端命令,独立完成一整个React TodoList项目。全程口语化拆解,干货和乐子对半分。
一、先聊底层:AI为啥不能直接操作电脑?
很多人有个误区,觉得大模型无所不能,想删文件删文件,想装依赖装依赖。
说句扎心的,LLM本质就是个只会输出文字的聊天机器,它连本地文件夹在哪都感知不到,更别说执行pnpm、读写tsx文件。
💡小贴士
举个生活化例子:你让外卖小哥帮你修家电,小哥只会说修理步骤,但没有螺丝刀、扳手,啥也干不了。工具就是给AI准备的全套工具。
之前做过一个简易天气查询Agent,那套ReAct循环逻辑完全通用,只不过当时只有一个查天气函数,局限性拉满。现在我们给AI配齐文件、终端全套工具,直接变身编程助手。
本次最终任务目标
给AI一句指令,全程自动完成:
- 生成Vite+TS+React项目
- 实现Todo新增、删除、完成切换、多条件筛选
- 本地存储持久化、任务数量统计
- 渐变背景、卡片圆角、交互动画
- 自动安装依赖、启动开发服务
重点来了:所有步骤不用我们手动敲命令、新建文件,AI自己判断什么时候该干什么,完全自主决策。
二、Mini Cursor四层核心架构,看懂等于吃透Cursor原理
整个体系分层特别清晰,不存在固定执行顺序,AI会根据实时结果调整下一步操作,灵活度直接拉满。
1. LLM大脑层
负责读任务、分析现状、判断接下来调用哪个工具,输出标准化工具调用指令。
它只负责思考,绝不碰本地任何资源。
2. Runtime调度层
相当于中间管家,接收模型的工具调用请求,匹配对应函数执行,全程保存对话记录,把工具运行结果塞回消息列表给模型参考。
很多人踩坑就在这,以为模型能直接跑代码,实际所有危险操作全由Runtime管控,相当于给AI装了一层防火墙。
3. 四大工具层(AI的手脚)
这是本次开发的核心,四个工具互相独立,各司其职,下面单独拆开细说。
4. 本地工作区
真实硬盘目录,所有代码、项目文件、命令执行日志都存在这里,工具通过Node原生模块完成交互。
说个搞笑的点:AI根本看不到完整电脑磁盘,只能通过工具返回的目录字符串,脑补项目结构,跟盲人摸象一模一样。
三、四大核心工具拆解,每一个都是刚需
工具统一用LangChain的tool方法封装,每一套工具包含两块:执行逻辑函数、给模型看的描述与参数约束(zod校验)。
1. read_file 读取文件工具
底层调用fs.readFile读取文本内容,执行完成后把文件字节数和完整内容返回,存入消息记录。
什么时候用?AI需要查看现有代码、分析配置文件、确认原有逻辑时自动调用。
我测试的时候发现一个好玩的场景:AI改代码前一定会先读一遍原文件,生怕写重写漏,比很多新手程序员严谨多了。
2. write_file 写入文件工具
这个工具自带自动创建多级目录的能力,核心代码是fs.mkdir开启recursive递归创建。
哪怕路径是src/components/todo这种多层不存在文件夹,工具会一次性全部生成,再写入代码内容。
踩坑段子:最开始没加递归创建目录,AI疯狂报路径不存在,反复调用十几次工具都失败,相当于程序员新建文件夹忘建父目录,原地卡半小时。
写入成功/失败都会返回文本提示,模型根据返回结果判断是否重新写入。
3. list_directory 目录查看工具
调用fs.readdir列出指定路径下全部文件、文件夹,返回一行一个的文本列表。
作用就是防止AI迷路,创建完项目后先调用这个工具确认package.json、src文件夹是否生成成功。
类比一下:你进陌生项目第一件事ls看目录,AI干的事和你完全一致。
4. execute_command 终端命令执行工具
基于node子进程spawn实现,支持自定义工作目录,stdio继承终端输出,安装依赖、启动服务日志能实时打印。
这里有一条硬性规则,也是最容易出错的点:
使用workingDirectory指定文件夹后,命令里绝对不能写cd切换目录。
💡踩坑提醒
错误示范:工作目录填react-todo-app,命令写cd react-todo-app && pnpm install,会直接报路径不存在,等于你站在文件夹里还要再进同名文件夹,套娃失败。
正确示范:工作目录react-todo-app,命令直接pnpm install,调度层会自动切换目录执行。
命令执行依靠退出码判断成败,code=0代表顺利,非0则带回错误信息,AI会根据报错调整命令。
唯一小瑕疵:dev开发服务是常驻进程,子进程不会主动关闭,工具会一直等待,这个属于后续生产优化点。
四、工具绑定+ReAct循环,整套AI运行逻辑
1. 工具注册绑定
把四个工具放入数组,调用model.bindTools完成绑定,会自动把工具名称、功能描述、参数格式转换成模型能识别的规范结构。
绑定只是告知模型有哪些技能,不会自动执行,工具调用全靠循环手动处理。
2. ReAct循环核心流程(四步无限循环)
- 模型读取全部历史消息,思考下一步操作,输出tool_calls工具调用指令
- 程序解析调用指令,匹配对应工具函数
- 执行工具,拿到读写文件/命令运行结果
- 将结果封装为ToolMessage追加进消息列表,进入下一轮思考
循环上限设置30次,防止AI无限死循环反复调用工具,做边界限制。
什么时候停止循环?当模型不再输出tool_calls,代表任务全部完成,直接输出最终总结文本。
测试时特别有意思:AI会交替调用创建项目、查看目录、写入App.tsx、安装依赖,步骤完全自主规划,不需要我们人为拆分指令。
五、实际运行效果,AI完整产出TodoList项目
整套流程跑完后,根目录自动生成react-todo-app完整项目文件夹,包含vite配置、样式文件、业务tsx代码。
App.tsx内部完整实现需求:
- 新增、删除、勾选完成任务
- 全部/进行中/已完成三种筛选切换
- 任务数量、完成率统计展示
- localStorage持久化,刷新页面数据不丢失
- 蓝紫渐变背景、卡片圆角阴影、添加删除过渡动画
不是简单输出一段代码文本,而是真实写入本地文件,打开就能直接运行,和手动开发产物没有区别。
吐槽一句:现在网上很多AI编程教程只教输出代码块,不会对接本地文件,相当于纸上谈兵,咱们这个Mini Cursor直接落地实操。
六、当前Demo短板,距离生产级Cursor还差这些
这个迷你版本跑通了核心闭环,但离商用编程Agent还有不少工程能力缺失,挨个说清楚:
1. 缺少工作区权限隔离
工具没有路径白名单限制,理论上AI可以读取电脑任意目录文件,存在隐私风险,正式产品必须限定项目根目录访问范围。
2. 高风险命令无确认机制
rm删除文件、git强制推送、上传文件这类高危命令,现在会直接执行,成熟工具会弹窗等待用户确认。
3. 全量覆盖文件,不支持局部修改
当前write_file是直接覆盖整个文件,原有代码容易丢失,正规工具会用patch片段修改,只改动需要调整的代码片段。
4. 缺少自动校验流程
文件写入成功不代表代码能编译运行,没有自动build、单元测试校验,AI写出报错代码也无法自动修正。
5. 常驻进程管理缺失
启动dev服务后无法查看端口、关闭进程,只能手动新开终端,缺少进程监控能力。
七、收尾总结:看懂这套逻辑,彻底吃透所有AI编程工具
不管是Cursor、Claude Code还是各类代码助手,底层逻辑全是同一套公式:
LLM推理大脑 + ReAct循环机制 + 文件/终端工具集 = 可落地编程Agent
核心关键点再重申一遍:大模型本身没有操作本地环境的权限,所有读写、执行操作全部由受控工具代理完成,模型只负责规划步骤。
我们这次搭建的Mini Cursor,只是把之前简单的天气查询工具,替换成开发场景专用工具,底层循环框架完全没变,可拓展性极强。
后续想拓展功能,只需要新增工具函数,比如git操作、接口请求、图片处理,绑定到模型就能直接使用。
自己动手写完这套demo再打开Cursor,瞬间就能明白它每一步后台在干什么,不再是黑盒工具,底层原理一目了然。
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01
更多推荐


所有评论(0)