打造专属研发外脑:用大模型写一个命令行的 Java 代码审查助手

0 阅读3分钟

日常写业务代码时找人做 Code Review(代码审查)非常奢侈,很多时候写了 Bug 只能靠测试测出来跌入甩锅旋涡。

而在 AI 时代,大模型天然具备百万级开源代码库的抽象理解能力,只要用法对,它就是最好的高级程序员助手。在我们的 code_assistant.py 示例中,展示了如何轻松在命令行和 AI 形成交互。

核心实现思路

用脚本做一个 AI 代码审查助手,核心只有两步:读取代码文本、精心构造审查 Prompt。

1. The Prompt (提示词设计)

我们不能简单让 AI “看看这段代码”。真正有用的代码审查需要结构化的视角。我们可以通过 System Prompt 给 AI 下达这样的规章制度:

"请对以下 Java 代码进行审查。 要求分为以下几个模块输出结果:

  1. 【高危 Bug】:找出逻辑漏洞或空指针异常。
  2. 【性能优化】:提出关于内存、数据库 N+1、耗时循环的改进建议。
  3. 【代码规范】:命名规范、重复代码等重构意见。 如果代码没问题,大胆告诉我完美。"

2. 本地交互循环

通过读取本地 Java 文件,并将上面的结构化 Prompt 注入,发送给 DeepSeek 或智谱 AI 后,你会得到一份格式整洁、针砭时弊的 Code Review 报告。

并且我们可以写一个简单的 while(True) 循环留在终端,拿到报告后继续用命令行追问:“那如果我要按你的建议使用 Stream API,请你给我完整的重构代码。”

扩展应用

随着工程的演进,你甚至可以把这个脚本集成到 Git Hooks 里。只要你本地执行 git commit,脚本自动拦截代码并由大模型进行静默扫描。有 Bug?强制打回重写!无聊的代码重复?通过!——一个强大的工程基建就这样诞生了。


"""
代码助手 - 你的AI编程伙伴
"""

import sys
sys.path.append('..')

from ai_client import AIClient


class CodeAssistant:
    def __init__(self):
        self.client = AIClient()

    def explain(self, code: str):
        """解释代码"""
        print("=" * 60)
        print("📖 代码解释")
        print("=" * 60)
        result = self.client.explain_code(code)
        print(result)

    def review(self, code: str):
        """审查代码"""
        print("=" * 60)
        print("🔍 代码审查")
        print("=" * 60)
        result = self.client.code_review(code)
        print(result)

    def optimize(self, code: str):
        """优化代码"""
        print("=" * 60)
        print("⚡ 代码优化")
        print("=" * 60)
        system = """你是Java性能优化专家。请:
1. 分析性能瓶颈
2. 给出优化后的代码
3. 解释优化原理"""
        result = self.client.chat(f"请优化以下代码:\n\n```java\n{code}\n```",
                                 system=system)
        print(result)

    def generate(self, requirement: str):
        """生成代码"""
        print("=" * 60)
        print("✨ 代码生成")
        print("=" * 60)
        result = self.client.generate_code(requirement)
        print(result)


def interactive_mode():
    """交互模式"""
    assistant = CodeAssistant()

    print("""
    🤖 Java代码助手
    命令:
      1 [代码] - 解释代码
      2 [代码] - 审查代码
      3 [代码] - 优化代码
      4 [需求] - 生成代码
      q - 退出
    """)

    while True:
        cmd = input("\n请输入命令: ").strip()

        if cmd == 'q':
            break
        elif cmd.startswith('1 '):
            assistant.explain(cmd[2:])
        elif cmd.startswith('2 '):
            assistant.review(cmd[2:])
        elif cmd.startswith('3 '):
            assistant.optimize(cmd[2:])
        elif cmd.startswith('4 '):
            assistant.generate(cmd[2:])
        else:
            print("未知命令")


if __name__ == "__main__":
    # 演示模式
    assistant = CodeAssistant()

    # 示例代码
    sample_code = """
    public List<User> getUsers() {
        List<User> users = new ArrayList<>();
        for(Long id : idList) {
            users.add(userDao.findById(id));
        }
        return users;
    }
    """

    assistant.explain(sample_code)
    print("\n")
    assistant.review(sample_code)

本文是个人学习大模型方向时的实战小记,希望对准备入门 AI 开发的大家有所启发。

感谢关注,我会持续更新,欢迎查看相关源码实现与学习记录:
github.com/start007-sm…