96SEO 2026-04-26 03:29 3
每一个极客心中dou有一个黑底白字的梦。你是否曾羡慕过那些电影里的黑客,手指在键盘上飞舞,一行行代码在终端里滚动,就Neng解决所有问题?其实这离我们并不遥远。特别是现在当AI大模型的风潮席卷全球,Ru果Neng把自己的人工智Neng助手“塞”进命令行里那种感觉简直不要太爽。

今天咱们不谈虚的,直接来点硬核的。不管你是刚入门的小白,还是有一定经验的开发者,这篇教程dou要带你手搓一个属于自己的AI命令行工具。没错,就是那种Neng直接在终端里跟AI对话、让它帮你写代码、查日志的神器。别担心,我们会用Zui通俗的语言,把整个过程拆解得明明白白。哪怕你之前没写过Node.js工具,跟着走,半小时内,你也Neng拥有一个属于自己的“AI瑞士军刀”。
为什么我们需要一个AI CLI工具?在开始动手之前,咱们得先明白“为什么”。现在的IDE功Neng越来越强大,图形界面也越来越花哨,但为什么hen多老手还是对命令行情有独钟?
简单来说就是快,而且自由。
想象一下当你正在远程连接着一台只有黑屏终端的Linux服务器,没有鼠标,没有图形界面这时候你想查一段复杂的日志,或者想写一个Python脚本来处理数据。Ru果你还得切回本地电脑用浏览器去问ChatGPT,然后再复制粘贴过去,那效率简直低到令人发指。这时候,Ru果Neng在终端里直接输入一行命令,比如 ai-cli ask "怎么用awk提取日志中的错误信息",答案立马浮现,是不是感觉世界dou清净了?
不仅如此,CLI工具在自动化脚本、DevOps流程中geng是不可或缺的一环。你Ke以把它嵌入到你的部署脚本里让AI帮你检查配置文件;或者用它来快速生成代码片段,就像拥有了一个随叫随到的编程助手。而且,自己动手丰衣足食,这种掌控感是使用现成软件无法比拟的。
准备工作:磨刀不误砍柴工既然要动手,环境得先搭好。我们的技术栈选型非常经典且稳健:Node.js + TypeScript。为什么选它们?因为生态丰富,写起来顺手,而且跨平台兼容性好。
第一步:检查你的“武器库”打开你的终端,输入以下命令:
node -v
npm -v
Ru果屏幕上乖乖地弹出了版本号,恭喜你,你Ke以直接跳过这一步。Ru果终端无情地报错了或者提示“command not found”,那也别慌。去 nodejs.org 下载一个LTS版本的安装包,一路“下一步”安装即可。这就像给电脑装上了心脏,是后续一切操作的基础。
环境OK了咱们来初始化项目。找个你喜欢的目录,新建一个文件夹,比如叫 my-ai-cli。然后进去,执行:
mkdir my-ai-cli
cd my-ai-cli
npm init -y
这时候,你的文件夹里多了一个 package.json 文件,它是项目的身份证。接下来我们要安装一些必不可少的“帮手”库。别被这些名字吓到,它们dou是各司其职的好伙伴:
npm install typescript @types/node ts-node --save-dev
npm install commander chalk ora openai dotenv
这里简单介绍一下这几位“战友”:
commander它是处理命令行参数的大师,比如解析 --help 或者 -v 这种选项,全靠它。
chalk负责给终端上色。毕竟黑底白字kan久了会眼花,加点颜色心情好。
ora专门用来画那个转圈的加载动画,让等待过程不那么枯燥。
openai这是调用AI接口的SDK。虽然我们可Neng用硅基流动的API,但它们是兼容OpenAI格式的,所以用这个库Zui方便。
dotenv用来管理环境变量,特别是那个不Neng见人的API Key。
第三步:TypeScript配置为了让我们Neng写出类型安全、优雅的代码,我们需要配置一下TypeScript。在项目根目录创建一个 tsconfig.json 文件,把下面这些配置贴进去:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ,
"exclude":
}
这个配置告诉TypeScript:把源码放在 src 目录里编译后的结果扔到 dist 目录,并且要严格检查类型。
好了地基打好了现在开始盖楼。我们要写的核心代码dou在 src/index.ts 里。先创建文件:
mkdir src
cd src
touch index.ts
打开 src/index.ts,准备好,我们要开始注入灵魂了。这段代码虽然有点长,但逻辑非常清晰。我会把它拆解开来解释。
引入所有需要的库,并初始化一些基础设置:
#!/usr/bin/env node
import { Command } from 'commander';
import chalk from 'chalk';
import ora from 'ora';
import OpenAI from 'openai';
import dotenv from 'dotenv';
import { readFileSync } from 'fs';
import { join } from 'path';
// 加载 .env 文件,把API Key藏起来
dotenv.config;
// 初始化 OpenAI 客户端
// 这里我们使用硅基流动的API地址,它兼容OpenAI的格式
const openai = new OpenAI({
baseURL: 'https://api.siliconflow.cn/v1',
apiKey: process.env.SILICONFLOW_API_KEY || '',
});
const program = new Command;
接下来我们要定义这个工具的基本信息,比如名字、版本和描述:
program
.name
.description
.version;
然后是重头戏——子命令的设计。为了让工具好用,我们设计三个功Neng:askcode和 chat。
这个功NengZui简单,你问一个问题,它回一个答案。适合用来查资料、解释概念。
program
.command
.description
.option
.action => {
// 启动加载动画,让用户知道程序在跑
const spinner = ora).start;
try {
const completion = await openai.chat.completions.create({
model: options.model,
messages: ,
temperature: 0.7,
});
// 停止动画
spinner.stop;
const answer = completion.choices?.message?.content || '抱歉,AI好像走神了没回复。';
console.log);
console.log;
} catch {
spinner.stop;
console.error, error.message);
}
});
功Neng二:code - 代码生成器
这个功Neng是给程序员用的。我们通过System Prompt强制AI只输出代码,不要废话。这对于想快速抄一段代码片段来说简直太有用了。
program
.command
.description
.option
.action => {
// 设定系统角色:你是个只写代码不说话的极客
const systemPrompt = `你是一个专业的程序员。请只输出代码,不要Zuo任何解释。代码语言:${options.lang}。`;
const spinner = ora).start;
try {
const completion = await openai.chat.completions.create({
model: 'Qwen/Qwen2.5-7B-Instruct',
messages: ,
temperature: 0.2, // 温度低一点,代码geng严谨
});
spinner.stop;
const code = completion.choices?.message?.content || '// 生成失败,请重试';
console.log);
console.log;
} catch {
spinner.stop;
console.error, error.message);
}
});
功Neng三:chat - 交互式对话
这是Zui酷的功Neng。你Ke以像在微信聊天一样,跟AI一来一回地对话。这里用到了Node.js的 readline 模块来处理输入流。
program
.command
.description
.option
.option
.action => {
const readline = require;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
console.log);
// 存储上下文,让AI记得之前说了啥
const messages = ;
const askQuestion = => {
rl.question, async => {
if === 'exit') {
console.log);
rl.close;
return;
}
// 把用户的话塞进历史记录
messages.push;
const spinner = ora.start;
try {
const completion = await openai.chat.completions.create({
model: options.model,
messages: messages,
temperature: 0.7,
});
const reply = completion.choices?.message?.content || '无回复';
spinner.stop;
console.log);
// 把AI的回复也塞进历史记录
messages.push;
askQuestion; // 递归调用,实现循环
} catch {
spinner.stop;
console.error, error.message);
askQuestion;
}
});
};
askQuestion; // 开始第一轮提问
});
// Zui后解析命令行参数
program.parse;
配置与安全:别把钥匙丢在大街上
代码写好了但还缺一样Zui重要的东西——API Key。为了安全起见,绝对不Neng把Key直接写在代码里提交到GitHub,那样你的额度会被刷爆的。
在项目根目录下创建一个 .env 文件:
SILICONFLOW_API_KEY=你的硅基流动API密钥
Ru果你还没有Key,去 siliconflow.cn 注册一个账号。新用户通常dou有免费额度,够你玩hen久了。记得把 .env 加到 .gitignore 文件里防止它被误传。
激动人心的时刻到了。我们先不用编译,直接用 ts-node 跑起来kankan效果。
测试一下 ask 命令:
npx ts-node src/index.ts ask "什么是闭包?"
Ru果一切顺利,你应该Nengkan到一个绿色的加载动画,然后AI给出了关于闭包的解释。
再试试代码生成:
npx ts-node src/index.ts code "快速排序" --lang javascript
是不是直接吐出了JS代码?爽不爽?
Zui后试试交互模式:
npx ts-node src/index.ts chat
这时候你就Ke以跟它聊起来了输入 exit 退出。
现在它还只Neng在项目目录里跑,怎么才Neng像 git 或 npm 那样在全局任何地方douNeng用呢?我们需要把它打包并链接到全局。
修改 package.json,添加 bin 字段和构建脚本:
{
"name": "ai-cli",
"version": "1.0.0",
"description": "我的AI命令行助手",
"main": "dist/index.js",
"bin": {
"ai-cli": "./dist/index.js"
},
"scripts": {
"build": "tsc",
"start": "node dist/index.js",
"dev": "ts-node src/index.ts"
},
// ... 其他配置保持不变
}
注意 bin 字段,它告诉npm:当用户安装这个包时把 dist/index.js 注册为 ai-cli 命令。
然后执行编译:
npm run build
这时候,dist 目录下就生成了JS文件。Zui后执行链接命令:
npm link
这就大功告成了!现在关掉终端,再开一个新的,在任何目录下输入:
ai-cli ask "今天天气怎么样?"
ai-cli code "用Python写一个贪吃蛇"
是不是感觉整个世界dou在你的指尖下?Ru果你觉得这东西太好用了想分享给朋友,还Ke以把它发布到npm上。不过记得先去 package.json 里改个独一无二的名字,比如 my-super-ai-cli,不然肯定跟别人重名了。
咱们来捋一捋整个流程,其实就像搭积木一样简单:
用户输入: ai-cli ask "你好" --model Qwen/Qwen2.5-7B-Instruct
↓
program.parse 解析 process.argv
↓
找到子命令 "ask"
↓
提取位置参数 question = "你好"
↓
提取选项 options = { model: "Qwen/Qwen2.5-7B-Instruct" }
↓
调用 action
↓
执行你写的业务逻辑
↓
输出结果到终端
通过这个项目,你不仅学会了怎么写CLI工具,还掌握了如何调用大模型API,如何处理异步IO,甚至如何发布npm包。这可是实打实的全栈技Neng点。
当然现在的版本还比较简陋。你Ke以继续给它加Buff,比如:
增加多模态支持让它Neng识别图片,生成图片。
增加本地知识库结合RAG技术,让它Neng读你的本地文档。
增加AgentNeng力让它不仅Neng说话,还Neng自动帮你操作文件、跑脚本。
技术的大门Yi经为你打开了剩下的就是发挥你的想象力。掌握工具的人,才Neng掌握未来。别犹豫了赶紧去改造你的专属AI CLI吧,说不定下一个爆款工具就出自你手!
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback