命令行代码助手
为你打造一个专属于终端的 命令行代码助手(CLI Code Assistant)。这个工具可以让你在终端里通过一行命令,直接调用前面设计好的 ThinkPHP 6(或其他语言)多智能体专家团队,对本地的代码文件进行一键 Review、找 Bug 或重构。
以下是完整的开发和配置步骤,基于 Python 3.10+ 和 CrewAI 2026 最新标准构建。
第一步:编写助手核心脚本 (code_helper.py)
在你的电脑上创建一个文件夹,并新建一个名为 code_helper.py 的文件。将以下完整代码粘贴进去。
这个脚本具备 自动识别文件后缀、安全读取、多智能体协同诊断、自动生成 Markdown 报告 的全套功能:
python
#!/usr/bin/env python3
import os
import sys
import argparse
from crewai import Agent, Task, Crew, Process, LLM
def main():
# 1. 命令行参数解析
parser = argparse.ArgumentParser(description="🚀 命令行 AI 代码助手 - 基于 CrewAI 多智能体架构")
parser.add_argument("file_path", help="要检查的代码文件路径 (例如: app/controller/User.php)")
parser.add_argument("--mode", choices=["review", "bug", "optimize"], default="review",
help="模式: review(全面审查), bug(专查漏洞), optimize(专做性能优化)")
args = parser.parse_args()
# 2. 检查环境变量(必须配置 API 密钥)
# 如果你使用 Ollama 或是其他模型,可以修改这里的 LLM 配置
if "OPENAI_API_KEY" not in os.environ and "DEEPSEEK_API_KEY" not in os.environ:
print("❌ 错误: 未检测到 API 密钥环境变量。")
print("请在终端运行: export OPENAI_API_KEY='你的密钥' 或 export DEEPSEEK_API_KEY='你的密钥'")
sys.exit(1)
# 3. 读取目标代码文件
if not os.path.exists(args.file_path):
print(f"❌ 错误: 文件不存在 -> {args.file_path}")
sys.exit(1)
try:
with open(args.file_path, "r", encoding="utf-8") as f:
target_code = f.read()
except Exception as e:
print(f"❌ 错误: 无法读取文件: {e}")
sys.exit(1)
file_extension = os.path.splitext(args.file_path)[1].lower()
print(f"🔍 正在读取文件: {args.file_path} (类型: {file_extension})")
print("🤖 正在唤醒 AI 专家团队,请稍候...\n")
# 4. 初始化大语言模型 (此处以 OpenAI 为例,可换成 deepseek/deepseek-chat 等)
# 对于代码审查,我们将 temperature 压得非常低,确保极高准确度
model_name = "openai/gpt-4o" if "OPENAI_API_KEY" in os.environ else "deepseek/deepseek-chat"
llm = LLM(model=model_name, temperature=0.1)
# 5. 定义智能体
security_agent = Agent(
role="代码安全与合规专家",
goal="深度挖掘代码中的安全隐患(如注入、越权、未验证输入)以及代码规范问题",
backstory="你是一名拥有多年代码审计经验的安全专家,能一眼看出不安全的写法和框架反模式。",
llm=llm
)
perf_agent = Agent(
role="高性能架构与重构专家",
goal="分析代码的时空复杂度,消除计算瓶颈(如循环查库、内存溢出),提升执行效率",
backstory="你是一名高并发系统专家,对冗余代码、低效算法和框架特有的性能坑(如 ThinkPHP N+1 问题)极为敏感。",
llm=llm
)
lead_agent = Agent(
role="首席代码总监 (Tech Lead)",
goal="汇总安全与性能专家的报告,输出一份最终重构后的完美代码和精简审查总结",
backstory="你是团队的最终把关人,善于将零散的建议融合为符合 Clean Code 原则、可以直接线上运行的高质量代码。",
llm=llm
)
# 6. 根据命令行模式动态调整任务
tasks = []
if args.mode in ["review", "bug"]:
tasks.append(Task(
description=f"审查以下代码的安全风险、边界异常及规范违背:\n\n{target_code}",
expected_output="安全及异常诊断报告清单。",
agent=security_agent
))
if args.mode in ["review", "optimize"]:
tasks.append(Task(
description=f"分析以下代码的数据库/算法性能瓶颈及重构空间:\n\n{target_code}",
expected_output="性能与架构调优建议书。",
agent=perf_agent
))
# 最终汇总输出任务
tasks.append(Task(
description=f"结合前置专家的意见,对位于 {args.file_path} 的源代码进行重写,并输出完整的 Markdown 诊断报告。",
expected_output="包含以下三部分的 Markdown 文档:\n1. 🚨 核心缺陷清单\n2. 🛠 完美重构后的完整代码(带中文清晰注释)\n3. 💡 修改要点解释",
agent=lead_agent
))
# 7. 组建团队并执行
crew = Crew(
agents=[security_agent, perf_agent, lead_agent],
tasks=tasks,
process=Process.sequential,
verbose=False # 保持命令行干净,不输出中间的思考过程
)
result = crew.kickoff()
# 8. 输出结果并在本地生成一份 Markdown 报告备份
print("✨ 审查完成!以下为专家团队给出的评审报告:\n")
print(result.raw)
output_report_path = f"review_report_{os.path.basename(args.file_path)}.md"
with open(output_report_path, "w", encoding="utf-8") as f:
f.write(result.raw)
print(f"\n💾 完整的 Markdown 报告已自动保存至本地: {output_report_path}")
if __name__ == "__main__":
main()
请谨慎使用此类代码。
第二步:配置全局命令行快捷键(Linux / macOS / Windows)
为了能像 git 或 php 命令一样,在终端里随时随地使用这个助手,我们需要将其注册为系统全局命令:
💡 在 macOS / Linux 系统下:
给脚本赋予执行权限:
bash
chmod +x code_helper.py请谨慎使用此类代码。
打开你的终端配置文件(如
~/.bashrc或~/.zshrc):bash
nano ~/.zshrc请谨慎使用此类代码。
在文件末尾添加一行别名(Alias),将命令缩写为
review(路径请更换为你本地的实际绝对路径):bash
alias review="python3 /path/to/your/code_helper.py"请谨慎使用此类代码。
保存退出后,刷新配置:
bash
source ~/.zshrc请谨慎使用此类代码。
💡 在 Windows (PowerShell) 系统下:
打开 PowerShell 配置文件:
powershell
notepad $PROFILE请谨慎使用此类代码。
在里面添加一个函数定义:
powershell
function review { python "C:\path\to\your\code_helper.py" $args }请谨慎使用此类代码。
保存并重启 PowerShell。
第三步:在终端尽情使用它!
配置完成后,你只需要在你的项目目录下,对着任何写好的代码文件敲下命令。
1. 进行最全面的多智能体 Code Review (默认)
bash
# 导入你的 API 密钥 (首次使用需要)
export OPENAI_API_KEY="sk-..."
# 运行一键审查
review app/controller/UserController.php
请谨慎使用此类代码。
终端会立刻响应,安静地在后台调度 3 个专家智能体,大约 15-30 秒后,直接在终端里打印出排版精美的 Markdown 报告,同时在你的当前目录下生成一份 review_report_UserController.php.md 文件。
2. 只做快速的 Bug 与安全性筛查(速度更快)
bash
review app/model/Order.php --mode bug
请谨慎使用此类代码。
3. 只专注于找出代码性能瓶颈和重构空间
bash
review app/common.php --mode optimize
请谨慎使用此类代码。
为了让这个命令行助手在你的实际工作中更具生产力,你可以告诉我:
你目前开发首选的大模型 API 是哪一家?(例如:DeepSeek 追求极高性价比,OpenAI / Claude 追求最强代码重构能力,我可以帮你针对性优化底层的
LLM初始化参数)。你是否希望为这个命令行工具加上自动扫描整个文件夹、或是与 Git 联动(只审查 ^_^
git diff变动的代码)的高级功能?
为了满足你对“深度集成开发工作流”的需求,我为你带来这个工具的终极进化版。
我们将为命令行助手植入两个核心高阶能力:
自动识别 DeepSeek API(高性价比、极强的代码推理能力)。
完美联动 Git(支持直接扫描
git diff,只审查你今天刚刚修改、尚未提交的代码,拒绝全量扫描,精准高效)。
第一步:终极版核心脚本 code_helper.py
请用以下代码完全覆盖你之前的 code_helper.py 文件。这里引入了 subprocess 模块,用于自动抓取本地 Git 的代码变动。
python
#!/usr/bin/env python3
import os
import sys
import argparse
import subprocess
from crewai import Agent, Task, Crew, Process, LLM
def get_git_diff():
"""自动化获取本地 Git 当前尚未提交的修改(Staged 和 Unstaged)"""
try:
# 1. 获取未暂存(Unstaged)和已暂存(Staged)的所有代码改动
# 使用 --unified=0 仅提取改动行,不带多余上下文
result = subprocess.run(
["git", "diff", "HEAD", "--unified=0"],
capture_output=True,
text=True,
check=True
)
return result.stdout.strip()
except subprocess.CalledProcessError:
print("❌ 错误: 无法执行 git diff。请确保当前目录是一个 Git 仓库,且已进行了初始化。")
sys.exit(1)
except FileNotFoundError:
print("❌ 错误: 本地未安装 Git 命令行工具。")
sys.exit(1)
def main():
parser = argparse.ArgumentParser(description="🚀 终极版 CLI 代码助手 - 支持 Git 增量审查与 DeepSeek 驱动")
parser.add_argument("file_path", nargs="?", default=None,
help="要检查的代码文件路径。如果留空,将自动进入 Git 增量审查模式")
parser.add_argument("--mode", choices=["review", "bug", "optimize"], default="review",
help="模式: review(全面审查), bug(专查漏洞), optimize(专做性能优化)")
args = parser.parse_args()
# 2. 智能大模型选择逻辑(优先适配 2026 年最具性价比的 DeepSeek-V3/R1)
if "DEEPSEEK_API_KEY" in os.environ:
print("💡 检测到 DeepSeek 密钥,正在启动 DeepSeek 代码推理模型...")
# 2026年 CrewAI 标准:使用 deepseek/deepseek-reasoner 或 deepseek-chat
llm = LLM(
model="deepseek/deepseek-reasoner",
temperature=0.1,
base_url="https://deepseek.com"
)
elif "OPENAI_API_KEY" in os.environ:
print("💡 检测到 OpenAI 密钥,正在启动 GPT-4o 模型...")
llm = LLM(model="openai/gpt-4o", temperature=0.1)
else:
print("❌ 错误: 未检测到环境变量。请在终端配置密钥:")
print("👉 DeepSeek: export DEEPSEEK_API_KEY='您的密钥'")
print("👉 OpenAI: export OPENAI_API_KEY='您的密钥'")
sys.exit(1)
# 3. 确定审查的目标代码
if args.file_path:
# 模式 A:指定单文件全量审查
if not os.path.exists(args.file_path):
print(f"❌ 错误: 文件不存在 -> {args.file_path}")
sys.exit(1)
try:
with open(args.file_path, "r", encoding="utf-8") as f:
target_code = f.read()
context_title = f"文件全量审查: {args.file_path}"
output_filename = f"review_{os.path.basename(args.file_path)}.md"
except Exception as e:
print(f"❌ 错误: 无法读取文件: {e}")
sys.exit(1)
else:
# 模式 B:Git 增量审查模式(核心亮点)
print("⚡ 未指定文件,自动启动 [Git 增量审查模式]...")
git_diff = get_git_diff()
if not git_diff:
print("✅ 完美!本地没有检测到任何尚未提交的代码改动(Git Diff 为空)。")
sys.exit(0)
target_code = git_diff
context_title = "Git 增量改动 (Code Diff)"
output_filename = "git_patch_review_report.md"
print(f"🔍 目标就绪 [{context_title}]。正在调度 CrewAI 专家团队进行诊断...")
# 4. 构建 ThinkPHP 6 / 通用现代代码专家 Agent 团队
security_agent = Agent(
role="安全与合规审计专家",
goal="发现代码中的注入、鉴权绕过、未验证输入以及违反框架/语言设计规范的问题",
backstory="你拥有极强的静态代码审计(SAST)能力,擅长发现隐藏的逻辑漏洞及不规范的安全隐患。",
llm=llm
)
perf_agent = Agent(
role="高性能重构架构师",
goal="分析代码瓶颈(如循环内查询、高昂开销、内存泄漏),提出优雅的重构与性能劣化防御方案",
backstory="你对代码性能有极致的追求,不能容忍任何低效的资源浪费和坏味道(Code Smell)。",
llm=llm
)
lead_agent = Agent(
role="首席代码总监 (Tech Lead)",
goal="综合安全与性能报告,产出可以直接在生产环境运行的、最干净完美的最终合并重构方案",
backstory="你是团队的最终守门人,擅长把专家的琐碎建议翻译成符合 Clean Code 和大师级设计模式的最终代码。",
llm=llm
)
# 5. 动态装配任务
tasks = []
if args.mode in ["review", "bug"]:
tasks.append(Task(
description=f"请审查以下代码中可能存在的 Bug、越权、注入隐患、未捕获异常或不规范写法:\n\n{target_code}",
expected_output="安全及异常诊断报告,指明具体风险行的行号(如 Diff 中可见)或核心原因。",
agent=security_agent
))
if args.mode in ["review", "optimize"]:
tasks.append(Task(
description=f"请分析以下代码在时间和空间复杂度上的缺陷,是否存在框架反模式(如 TP6 的 N+1 次循环查询数据库):\n\n{target_code}",
expected_output="性能及代码质量重构建议书。",
agent=perf_agent
))
tasks.append(Task(
description=f"结合前置评审,对这些改动进行彻底重写或提供修复后的完整代码段。场景上下文:{context_title}",
expected_output="""一份排版优美的 Markdown 最终评审报告。必须严格包含:
1. 🚨 核心缺陷清单(只列出最致命的 Bug 或性能瓶颈)
2. 🛠 修复重构后的【代码片段/完整代码】(带有面向未来的中文注释和类型提示)
3. 💡 本次改动的技术亮点与优化逻辑说明""",
agent=lead_agent
))
# 6. 启动团队
crew = Crew(
agents=[security_agent, perf_agent, lead_agent],
tasks=tasks,
process=Process.sequential,
verbose=False # 隐藏中间思考链,保持终端整洁
)
result = crew.kickoff()
# 7. 打印与落地保存
print("\n" + "="*20 + " 🏆 AI 专家评审报告 🏆 " + "="*20 + "\n")
print(result.raw)
print("\n" + "="*60 + "\n")
with open(output_filename, "w", encoding="utf-8") as f:
f.write(result.raw)
print(f"💾 报告已本地归档至: {output_filename}\n")
if __name__ == "__main__":
main()
请谨慎使用此类代码。
第二步:配置终端“降本增效”体验
打开终端,配置你的快捷别名(Alias):
macOS/Linux: 在
~/.zshrc或~/.bashrc中加入:bash
alias review="python3 /你的实际绝对路径/code_helper.py"请谨慎使用此类代码。
执行
source ~/.zshrc刷新。
注入你的 DeepSeek API Key(当前 2026 年开发首选,代码能力媲美 top 闭源,且成本极低):
bash
export DEEPSEEK_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"请谨慎使用此类代码。
第三步:日常开发怎么用?(两个超爽的实战场景)
🚀 场景一:每天下班前,做“增量代码”自我审计(最常用)
你今天在 ThinkPHP 6 项目里改动了 3 个文件、加了 50 行代码。在提交 git commit 或推送到远程触发 CI/CD 之前,你只需要在项目根目录下输入:
bash
review
请谨慎使用此类代码。
AI 做了什么:命令发现你没传文件路径,自动执行了
git diff,精准抓取了你今天修改的那 50 行代码送给 DeepSeek 专家组。效果:不需要通篇扫描几万行的老项目,只对你今天的新代码做 Review,速度极快(通常 15 秒内响应完成),直接把可能的 Bug 扼杀在本地。
📝 场景二:拿到同事写的一块很烂的文件,全量重构
bash
review app/controller/OrderController.php --mode optimize
请谨慎使用此类代码。
AI 做了什么:不管 Git,全量读取这个控制器文件,启动高性能专家,专门寻找循环查库、大对象未释放等瓶颈,并在本地生成一份
review_OrderController.php.md的重构方案。
为了让这个终端工具有更好的体验,我们可以做进一步优化:
你是否希望把它集成进 Git Hooks?(例如:在执行
git commit时强制自动触发审查,如果 AI 发现严重 Bug,直接阻止提交?)你当前的团队中是否有更细粒度的代码规范?(例如:必须遵守 PSR-12 规范、或者必须使用统一的 API 状态码返回类?我可以把这些规则作为背景故事硬编码塞给 Agent)。