【AI技术_工具_资讯】用 Python 构建一个真正的 AI 编程助手 CLI 工具

📅 2026/7/11 1:53:52
【AI技术_工具_资讯】用 Python 构建一个真正的 AI 编程助手 CLI 工具
前言你有没有过这样的体验写一个小的脚本、批量处理文件夹、快速查看日志——每次都要打开编辑器、新建文件、敲一堆样板代码其实这些重复性工作完全可以用一个自己的 CLI 工具来解决。但网上大多数教程都在教你input()print()写出来的东西像玩具。今天我们来写一个真正能落地使用的 Python CLI 工具一个智能代码模板生成器输入关键词自动输出可直接运行的代码骨架。整个过程会用到argparse、rich终端美化、Jinja2 模板以及一个简单的本地知识库——做完它你就能举一反三搭建自己的 AI 辅助开发小工具。主题介绍我们的目标是构建一个名为codegen-cli的命令行工具。它能完成这些事通过关键词如fastapi、flask、telegram-bot生成对应项目的代码骨架支持--output指定输出目录--dry-run预览代码而不写入带颜色终端输出错误提示清晰友好内建一个小型模板知识库可被 AI 扩展为什么是 CLI 而不是 GUI因为程序员的日常就在终端里。一个 50 行命令能搞定的事点开 IDE 还要加载 10 秒这不划算。而且 CLI 工具天然适合被 AI 工具链Cursor、Claude Code调用形成AI 推荐 工具落地的闭环。环境准备你需要 Python 3.9 和以下三个库pipinstallrich jinja2 pydantic库作用为什么用它rich终端颜色、表格、进度条比print好看 100 倍AI 工具也能解析jinja2模板渲染用变量替换代码中的占位符比字符串拼接安全得多pydantic配置校验输入参数自动校验错就报不用自己写一堆 if创建项目目录结构mkdir-pcodegen-cli/templatescdcodegen-clitouchmain.py templates/__init__.py实操步骤步骤 1定义模板数据知识库核心我们不依赖外部 API而是用一个本地 JSON 存模板元数据。这是整个工具的大脑# templates/registry.pyTEMPLATES{fastapi:{description:FastAPI 项目骨架含路由 模型 启动命令,files:{main.py:from fastapi import FastAPI app FastAPI(title{{project_name}}) app.get(/) def root(): return {message: Hello from {{project_name}}} app.get(/items/{{item_id}}) def get_item(item_id: int): return {item_id: item_id} ,requirements.txt:fastapi\\nuvicorn[standard],},entry:uvicorn main:app --reload},telegram-bot:{description:Telegram 机器人骨架基于 python-telegram-bot,files:{bot.py:from telegram import Update from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): await update.message.reply_text(Bot {{project_name}} 已启动!) def main(): app ApplicationBuilder().token({{token}}).build() app.add_handler(CommandHandler(start, start)) app.run_polling() if __name__ __main__: main() ,requirements.txt:python-telegram-bot20.0,},entry:python bot.py},log-analyzer:{description:日志分析脚本读取 .log 并统计 ERROR 频率,files:{analyzer.py:import re from collections import Counter def analyze_log(path: str): levels Counter() with open(path) as f: for line in f: m re.search(r\\b(INFO|ERROR|WARN|DEBUG)\\b, line) if m: levels[m.group(1)] 1 for level, count in levels.most_common(): print(f{level}: {count}) if __name__ __main__: import sys analyze_log(sys.argv[1]) },entry:python analyzer.py app.log}}步骤 2构建渲染引擎用 Jinja2 渲染模板--dry-run模式只打印不写文件# engine.pyfromjinja2importTemplatefromrich.consoleimportConsolefromrich.panelimportPanelfrompathlibimportPath consoleConsole()defrender_template(template_str:str,variables:dict)-str:returnTemplate(template_str).render(**variables)defgenerate_project(name:str,template_key:str,output_dir:Path,dry_run:boolFalse):fromtemplates.registryimportTEMPLATES tplTEMPLATES.get(template_key)ifnottpl:console.print(f[red]错误未找到模板 {template_key}[/red])returnvariables{project_name:name}console.print(Panel(f[bold green]正在生成项目[/bold green]{name}\nf模板{tpl[description]},titlecode-generator))forfilename,contentintpl[files].items():renderedrender_template(content,variables)targetoutput_dir/filenameifdry_run:console.print(f\n[blue]──{filename}──[/blue]\n{rendered})else:target.parent.mkdir(parentsTrue,exist_okTrue)target.write_text(rendered)console.print(f [green]✓[/green]{target})console.print(f\n[green]完成[/green] 运行命令[bold]{tpl[entry]}[/bold])步骤 3用 argparse 构建 CLI 入口# main.pyimportargparsefrompathlibimportPathfromengineimportgenerate_projectfromtemplates.registryimportTEMPLATESfromrich.consoleimportConsolefromrich.tableimportTable consoleConsole()deflist_templates():tableTable(title可用模板列表)table.add_column(模板名称,stylecyan)table.add_column(说明,stylegreen)forkey,valinTEMPLATES.items():table.add_row(key,val[description])console.print(table)defmain():parserargparse.ArgumentParser(descriptioncode-generator CLI - 快速生成代码骨架)parser.add_argument(template,nargs?,help模板名称)parser.add_argument(-o,--output,default.,help输出目录)parser.add_argument(-n,--name,defaultmy-project,help项目名称)parser.add_argument(--dry-run,actionstore_true,help仅预览不写入文件)parser.add_argument(--list,actionstore_true,help列出所有可用模板)argsparser.parse_args()ifargs.list:list_templates()returnifnotargs.template:parser.print_help()returngenerate_project(nameargs.name,template_keyargs.template,output_dirPath(args.output),dry_runargs.dry_run)if__name____main__:main()步骤 4测试运行# 查看所有模板python main.py--list# 预览生成代码不写文件python main.py fastapi--namemy-api --dry-run# 实际生成项目到指定目录python main.py telegram-bot--namemybot-o~/projects/mybot执行后你会在终端看到带颜色的输出╭─ code-generator ─╮ │ 正在生成项目my-api │ │ 模板FastAPI 项目骨架 │ ╰──────────────────╯ ✓ ./my-api/main.py ✓ ./my-api/requirements.txt 完成运行命令uvicorn main:app --reload总结这篇教程带你完整走了一遍从零构建实用 CLI 工具的路径核心收获有三点模板 渲染引擎 可扩展的知识库。把代码模板抽离成 JSON后续加新模板只需改数据不用动引擎代码。这也是 RAG 思想的缩影——把知识模板和推理引擎渲染器解耦。argparse rich 让工具像工具。参数校验、帮助文档、彩色输出这些细节决定了别人愿不愿意用你写的东西。CLI 是 AI 工作流的最佳载体。你可以把code-generator集成到 Cursor 的.cursorrules、或者写成 Cursor Custom Command实现对话生成 → 一键落地的闭环。下一步你可以尝试接入 OpenAI/Claude API让模板描述变为自然语言输入——“帮我生成一个能抓取新闻的爬虫项目”AI 自动选模板 生成代码。那就是真正的 AI CLI 工具了。