鲁克盯着屏幕上密密麻麻的OpenCV代码,指尖悬在键盘上,半天没落下。这已经是他和Gemini拉锯的第三十七天,目标很简单——开发一个能通过摄像头识别围棋棋谱的程序,自动记录落子、生成复盘报告。可现实却屡屡碰壁:要么是棋盘边缘检测不准,要么是黑白棋子混淆,更让人崩溃的是,每次修改代码后,他都得手动复制Gemini给出的命令,在Ubuntu 22.04的终端里执行,再把报错信息粘贴回去,等着AI给出新的修正方案。
“又错了。”鲁克揉了揉发涩的眼睛,终端里“未定义引用‘boardDetect’”的红色报错像一根刺,扎得他心烦。这三十多天里,他大部分时间都在做这种机械重复的工作:复制命令、执行、反馈错误、再复制新命令。Gemini的思路很清晰,可落地的每一步都要靠他这个“中间人”搭桥,效率低得惊人。更要命的是,他选的开发路径本身就有问题——一开始执着于用传统图像处理算法,忽略了深度学习模型的适配,等发现时,前期的代码已经堆了几百行,推倒重来又舍不得。
“与其我来当这个‘传声筒’,不如让AI自己动手。”一个念头突然在鲁克脑海里冒出来。他想起自己之前设想的Shell Agent,那个能自主掌控系统、执行命令的“小管家”。如果能训练出这样一个Agent,让它来替代自己执行命令、反馈结果,再搭配一个擅长编程的大模型,不就能形成一个自主开发的闭环吗?
这个念头一旦生根,就像野草般疯长。鲁克猛地关掉代码编辑器,深吸一口气:“不干了,换个玩法。”他决定,先从训练那个“小管家”开始,彻底解放自己。
鲁克给这个即将诞生的Shell Agent起了个名字:“管家”。他的目标很明确:让“管家”彻底摸清Ubuntu 22.04系统的底细,成为一个靠谱的系统管理员,既能执行命令,又能守住安全底线。
第一步是给“管家”植入初始能力。鲁克写了一段极简的启动脚本,核心只有两个命令:which *和man。“管家”的第一个任务,就是用which *遍历系统里所有可执行程序,把它们一一记录在本地的文本文件里,形成一份“命令清单”。接着,它要逐个调用man 命令或命令 --help,把每个命令的用法、参数、返回值都扒下来,整理成结构化的笔记。
“记住,安全第一。”鲁克在启动脚本里加了一道“防火墙”——明确禁止“管家”执行任何可能修改系统核心配置的命令,比如rm -rf /、chmod 777 /,凡是涉及系统文件写入、权限变更的操作,必须先标记为“高危”,等待后续授权。
“管家”的训练过程像一个勤奋的学徒。它用了整整24小时,把系统里上千个命令都过了一遍。遇到ls这样简单的命令,它会记录下-l显示详细信息、-a显示隐藏文件;遇到apt这样的包管理命令,它会把安装、卸载、更新的参数都梳理清楚;甚至连lshw这种查看硬件信息的命令,它都能耐心地把CPU、内存、硬盘、摄像头的参数一一存档。
鲁克偶尔会查看“管家”的记忆库,里面密密麻麻记满了命令笔记,还有一份详细的系统资源清单:Ubuntu 22.04 LTS系统,8核CPU,16G内存,500G硬盘,外接了一个未启用的USB摄像头,已安装Python 3.8、gcc 9.4.0,缺少OpenCV库和围棋规则相关的C++库……
“不错,比我还清楚系统状况。”鲁克满意地点点头。训练到第三天,“管家”已经能自主判断命令的安全性,遇到可疑操作会自动拦截,还能根据记忆库快速回答“系统里有哪些编译工具”“如何安装Python库”这类问题。一个靠谱的“全职管家”,终于成型了。
接下来,鲁克要为“管家”找一个搭档——负责编程的“开发者”。他选择了之前合作过的Gemini,不过这一次,Gemini不再需要和他打交道,而是直接与“管家”对话。
鲁克手动下载并安装了Gemini的本地版本,然后给“管家”加了一个新功能:文本交互接口。这个接口很简单,就是让“管家”能把鲁克的任务原封不动地传递给Gemini,再把Gemini的回复接收过来,执行其中的命令,最后把结果反馈回去。
“现在,我们来启动第一个任务。”鲁克对着“管家”下达指令,“请让‘开发者’开发一个带摄像头识别功能的围棋棋谱程序,要求能自动检测棋盘、识别落子,生成复盘报告。”
“收到,正在向‘开发者’传递任务。”“管家”的回复很快出现在屏幕上。几秒钟后,Gemini的回复来了:“为完成围棋棋谱识别程序开发,需先明确以下信息:1. 系统是否已安装OpenCV库、g++编译器、围棋规则C++库?2. 是否具备摄像头权限?3. 请提供开发进度的拷问模板,以便定期汇报。”
“管家”立刻对照自己的记忆库进行回复:“1. 未安装OpenCV库、围棋规则C++库,已安装g++ 9.4.0;2. 系统接入USB摄像头,但未启用权限;3. 拷问模板将采用4W1H原则,包含进度查询、问题反馈等内容。”
紧接着,“管家”按照鲁克预设的模板,向Gemini发起了第一次拷问:“请提交详细的开发路线图、资源需求清单,以及预计的Deadline。”
Gemini很快给出了回应:“开发路线图分四阶段:1. 安装依赖库(1天);2. 开发棋盘检测模块(3天);3. 开发棋子识别与落子记录模块(4天);4. 开发复盘报告生成模块(2天);总工期10天。资源需求:安装libopencv-dev、go-rules-cpp库,启用摄像头权限。”
“管家”评估了这些需求的安全性,确认无误后,向鲁克发送了一份摘要报告:“‘开发者’已提交开发规划,需安装两个库并启用摄像头权限,是否批准执行?”
鲁克点击“批准”。他知道,一场由AI自主完成的开发,正式拉开了序幕。
“管家”收到鲁克的批准后,立刻执行了Gemini给出的安装命令:sudo apt install libopencv-dev go-rules-cpp。终端里滚动着安装日志,“管家”实时把进度反馈给Gemini:“正在安装OpenCV库,进度30%……安装完成;正在安装围棋规则库,进度70%……安装完成。”
接下来是启用摄像头权限。“管家”执行了sudo chmod 666 /dev/video0,然后用ls /dev/video0验证,确认摄像头已正常启用,随即把结果告知Gemini:“摄像头权限已启用,可开始开发。”
Gemini的回复很快:“请创建项目目录go-chess,我将生成棋盘检测模块的核心代码。”
“管家”执行mkdir go-chess,然后等待Gemini的代码。几分钟后,一段C++代码出现在交互窗口里,“管家”自动把代码保存为board_detect.cpp,接着执行编译命令:g++ board_detect.cpp -o board_detect pkg-config --cflags --libs opencv4``。
“编译报错:未定义引用‘cv::VideoCapture::VideoCapture(int)’。”“管家”把终端里的报错信息原封不动地反馈给Gemini。
“是OpenCV版本适配问题,将代码中的opencv4改为opencv即可。”Gemini很快给出了修正方案。
“管家”按照指示修改代码,重新编译。这一次,终端显示“编译成功”。它运行程序,调用摄像头,屏幕上出现了棋盘的实时画面,边缘检测的线条清晰可见。“棋盘检测模块测试通过,可进入下一阶段开发。”“管家”向Gemini汇报。
接下来的几天里,这样的循环不断重复:Gemini生成代码,“管家”执行编译、测试,反馈结果,Gemini修正优化。鲁克成了真正的“甩手掌柜”,每天只需要查看“管家”发来的进度摘要:“已完成棋子识别模块开发,正在调试落子记录功能”“落子记录存在延迟问题,正在优化算法”“复盘报告生成模块已完成,可进行整体测试”。
期间也遇到过麻烦。Gemini需要调用一个第三方的围棋评分接口,却发现系统没有网络访问权限。“管家”把问题反馈给鲁克,鲁克简单配置了网络权限后,开发又顺利推进。还有一次,Gemini提出要安装一个未经过安全验证的库,“管家”直接拦截,并提示Gemini:“该库存在安全风险,请更换替代方案。”最终,Gemini选择了另一个安全的替代库,问题迎刃而解。
鲁克看着屏幕上不断更新的代码和测试结果,突然觉得,这才是AI开发该有的样子——“管家”像一双勤劳的手,执行所有机械操作;Gemini像一个聪明的大脑,专注于解决复杂问题,而他自己,终于可以从重复劳动中解脱出来。
第十天,“管家”发来的进度摘要显示:“开发已完成,可进行整体测试。”
鲁克打开测试界面,“管家”正在执行Gemini生成的测试脚本。摄像头对准棋盘,黑白棋子落下,屏幕上实时显示着落子坐标、步数,每局结束后,自动生成一份包含胜率分析、关键落子点评的复盘报告。
“测试通过,所有功能正常。”“管家”的反馈出现在屏幕上,紧接着,它向鲁克发送了最终报告:“围棋棋谱识别程序开发完成,总工期10天,未出现重大问题。程序已保存至go-chess目录,可直接运行。”
鲁克点开程序,亲自测试了一局。摄像头精准地捕捉到棋盘画面,落子记录没有丝毫误差,复盘报告的分析也十分专业。他想起三十多天前自己卡壳的窘境,再看看眼前这个由AI自主开发完成的程序,不禁感慨万千。
“管家”似乎看穿了他的心思,主动发起询问:“是否需要将程序打包备份?是否启动新的开发任务?”
鲁克笑着回复:“先备份吧。接下来,我们可以试试让它支持多语言复盘报告。”
屏幕上,“管家”立刻把新任务传递给Gemini,新一轮的开发循环,又将开始。而鲁克知道,他创造的不仅仅是一个能识别围棋棋谱的程序,更是一种全新的AI协作模式——当“管家”的勤恳遇上“开发者”的智慧,智能终将真正落地为生产力,而人类,只需要做那个掌控方向的“领航员”。
需要我对这个故事的细节进行调整吗?比如增加鲁克在开发过程中的心理活动,或者补充“管家”与“开发者”交互的具体对话片段。