从小白到创造者:我的 AI 命令行工具诞生记
作者:weiwei2012holy
项目地址:AI-Bash
发布日期:2024-04-09
开端:命令行菜鸟的“救命”灵感
作为一个刚摸到编程门槛的菜鸟,我对命令行简直有种天然恐惧。记得有一次,我想找电脑里占用空间最大的文件,结果在网上翻了半小时教程,才拼凑出 dir /b /s /o-s(Windows)这么个命令。查个进程、杀个程序,甚至只是列个目录,我都得像侦探一样到处搜语法。更别提在 Linux 上折腾,动不动就被 man 手册的英文淹没。这种低效让我抓狂,也点燃了一个大胆的想法:能不能有个工具,让我用“人话”告诉它需求,比如“找大文件”“杀掉吃内存的进程”,它就直接给我命令?带着这个念头,我的 AI 编程冒险正式启程。
AI Cursor:从工具到“编程师父”
机缘巧合下,朋友推荐了 AI Cursor。我本来以为它只是个花哨的代码编辑器,结果发现它更像个全能的编程导师。我试着跟它“聊天”:“我想做一个工具,用自然语言描述需求,比如‘找大文件’,它就自动生成命令。” AI Cursor 不仅秒懂,还给我画了张蓝图:
- Python 做主力:简单易学,适合我这种新手。
- Click 搭界面:专门为命令行工具设计,轻量又强大。
- OpenAI API 加持:用大模型翻译“人话”成命令。
- 跨平台兼容:Windows 和 Linux 都能跑,不留死角。
更让我惊喜的是,它还会根据我的水平调整建议,完全不像网上那些高深莫测的教程。我瞬间觉得:这不就是我梦寐以求的“编程师父”吗?
实战:AI 带我从零写代码
第一步:从“空文件夹”到“跑起来”
我连怎么起头都一头雾水,AI Cursor 直接甩给我一串命令:
mkdir cmd_ai && cd cmd_ai
python -m venv venv
source venv/bin/activate # Windows 用 venv\Scripts\activate
pip install click openai python-dotenv
几分钟后,项目环境就搭好了。它还顺便教我用 .env 文件存 API Key,避免硬编码的安全隐患。我敲下 pip list,看到一堆包整整齐齐列出来,心里那个成就感简直爆棚——从“懵”到“哇”,就这么简单。
第二步:Hello, World 的“开门红”
AI Cursor 建议我先写个简单框架热热手:
import click
@click.command()
def cli():
"""AI-Bash: 把人话变成命令的魔法工具"""
click.echo("Hello, World!")
if __name__ == "__main__":
cli()
敲完 python main.py,屏幕上跳出 “Hello, World!”,我乐得像个刚学会说话的孩子。AI 还逐行拆解:@click.command() 是命令的“开关”,click.echo() 是比 print() 更优雅的输出。我问:“为啥不用 print()?” 它答:“click.echo() 能处理编码问题,跨平台更稳。” 这波细节,直接让我对编程多了几分敬畏。
第三步:核心魔法——AI 生成命令
到了重头戏:怎么让 AI 理解我的需求并吐出命令?AI Cursor 给我设计了个 LLMClient 类:
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
class LLMClient:
def __init__(self):
self.client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def generate_command(self, query: str, platform: str = "auto") -> str:
system_prompt = f"你是命令行大师,根据用户需求生成 {platform} 系统下的命令。"
response = self.client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": query}
]
)
return response.choices[0].message.content.strip()
我输入“找最近修改的文件”,它返回 dir /o-d /t:c(Windows)或 ls -lt(Linux),完美!AI 还解释:system_prompt 是给模型定调,platform 参数能让我指定操作系统,避免命令跑偏。我忍不住多试了几次:“杀掉 Chrome”“列出所有 txt 文件”,结果都准得让我怀疑自己是不是在做梦。
第四步:加点“人性化”调料
光有功能还不够,AI Cursor 提议加点用户体验的“调料”。比如一个加载动画,让等待不那么枯燥:
import threading
import sys
import time
class Spinner:
def __init__(self, message="加载中"):
self.spinner_chars = "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏"
self.message = message
self.running = False
def _spin(self):
while self.running:
for char in self.spinner_chars:
sys.stdout.write(f"\r{self.message} {char}")
sys.stdout.flush()
time.sleep(0.1)
sys.stdout.write("\r")
sys.stdout.flush()
def start(self):
self.running = True
threading.Thread(target=self._spin).start()
def stop(self):
self.running = False
敲代码时,我差点忘了关线程导致程序卡死,AI Cursor 立刻提醒:“用 stop() 清理,别让动画抢主线程的风头。” 加上彩色输出(借助 click.style),界面一下从黑白默片变成了彩色大片。
第五步:细节打磨——配置文件和错误处理
AI 还建议我加个配置文件,让用户自定义 API Key 和偏好:
import json
def load_config(config_file="config.json"):
try:
with open(config_file, "r") as f:
return json.load(f)
except FileNotFoundError:
return {"api_key": "", "platform": "auto"}
它还帮我加了错误处理,比如 API 超时或输入乱七八糟时,友好提示而不是直接崩掉。这些小细节让我意识到:好工具不只看功能,还得“体贴”。
项目“闪光点”:AI 赋予的超能力
- 聪明到爆:AI 能从“找大文件”生成
find . -size +100M,意图理解精准得像读心术。 - 跨平台无忧:Windows 的
dir和 Linux 的ls,AI 自动适配,我都不用操心。 - 赏心悦目:旋转动画、彩色提示,小心思拉满用户好感。
- 随心所欲:配置文件简单易改,API Key 一填就用,灵活性满分。
成长日记:从“慌”到“行”
- 学到了啥:类怎么写、线程怎么开、API 怎么调,AI 边教边练,我从零基础到能看懂代码逻辑。
- 摔过的坑:Linux 命令在 Windows 上跑崩、API 偶尔“脑抽”生成奇怪结果、动画线程忘了关。
- AI 的救场:它不仅指出问题(“你忘了判断平台”),还给优化方案(“加个缓存试试”),甚至教我写测试用例验证效果。
我还记得第一次调试时,程序死循环,屏幕全是乱码。AI Cursor 让我加日志看变量,才发现是 API 返回空值。从那以后,我学会了“凡事留个后门查问题”。
下一步:和 AI 一起飞得更高
- 新玩法:加命令历史(别让我重复输入)、自定义模板(比如“备份文件”直接套模板)、支持更多命令类型(网络、权限管理等)。
- 跑得更快:缓存常用命令、优化 API 调用频率,争取秒级响应。
- 玩出圈:写份详细文档、加一堆测试用例,建个 GitHub Issue 收集反馈,搞不好还能拉几个贡献者。
我还想加个“学习模式”,让工具把生成的命令拆解解释,帮新手边用边学。AI 听完直夸:“这想法有潜力!”
尾声:AI 编程,未来已来
从一个被命令行虐到怀疑人生的菜鸟,到用 AI Cursor 打造出自己的工具,这一路我不仅学会了编程,还摸到了 AI 的“魔法边界”。它让我意识到:编程不是高不可攀的山,而是可以和 AI 一起翻越的坡。
如果你也厌倦了翻教程的日子,或者好奇 AI 怎么把创意变成现实,欢迎来 GitHub 仓库 围观我的“处女作”。有问题?提 kwest!有想法?来 PR!让我们一起,在 AI 的加持下,探索编程的新疆界!