Jiwon Min Developer

JetBrains AI Assistant 实战深度剖析:从代码生成到重构

除了编写代码,开发者还承担着大量的认知劳动:分析遗留代码、思考并重构更优的结构、撰写清晰说明变更的提交信息等。如果说 GitHub Copilot 开启了代码自动补全的时代,那么如今的 AI 工具正在更深层次地融入整个开发工作流。

JetBrains AI Assistant 是一款直接集成到我们日常使用的 IntelliJ、PyCharm、WebStorm 等 IDE 中的 AI 工具。它的目标不止于生成简单的代码片段,而是利用 IDE 丰富的代码索引信息,提供更加贴合上下文的建议。

本文将从一名资深开发者的视角,坦诚地探讨 JetBrains AI Assistant 的基本设置、实用的核心功能,以及我亲身经历过的失败案例和技术权衡。

JetBrains AI Assistant 实战深度剖析:从代码生成到重构

© AI 生成图像


JetBrains AI Assistant 上手指南:设置与模型

JetBrains AI Assistant 已内置于最新版的 JetBrains IDE 中,无需单独安装插件。不过,要使用它,还需要进行一些设置。

初始设置与许可证

激活 AI Assistant 后,系统会提示您登录 JetBrains 帐户。该工具是一项基于订阅的付费服务。您可以单独购买 AI Assistant Pro 订阅,或者通过包含该服务的 All Products Pack 等高级套餐来使用。服务初期提供试用期(Trial),建议在付款前充分体验其功能。

它与其他服务的不同之处在于,许可证是绑定在 JetBrains 帐户上的,而不是通过直接输入 API 密钥的方式。

工作原理:云端 LLM 与上下文

AI Assistant 本质上是通过 JetBrains 托管的服务器访问 OpenAI、Anthropic 等多家合作伙伴的 LLM。当用户请求代码时,IDE 会收集当前文件的代码、项目结构信息、语言设置等必要的上下文,并将其发送到 JetBrains 服务器。

重点是,您的代码会被发送到外部服务器。 JetBrains 在其数据安全和隐私政策中明确指出,传输的代码不会用于模型训练。但是,对于内部安全规定非常严格的公司,在使用前必须仔细审查相关政策。

理解代码库的 AI:核心功能分析

当 AI Assistant 与 IDE 的特定功能相结合时,它的真正价值才得以体现,这远不止于简单的提示输入和结果查看。

1. 上下文感知代码生成(Alt + \

只需编写注释或函数签名,然后按下快捷键 Alt + \(macOS: ⌥ + \),AI 就会建议完整的函数实现。这与 GitHub Copilot 类似,但它似乎能更好地识别当前打开文件之外、已被 IDE 索引的项目中其他类和函数的存在。

# 一个从 users 表中查找指定 ID 用户
# 并返回 User 对象的函数。
# 如果用户不存在,应返回 None。
def find_user_by_id(user_id: int) -> User | None:
    # 在此处按下 Alt + \ 即可生成以下代码
    db = get_database_connection()
    cursor = db.cursor()
    cursor.execute("SELECT id, name, email FROM users WHERE id = %s", (user_id,))
    user_data = cursor.fetchone()
    if user_data:
        return User(id=user_data[0], name=user_data[1], email=user_data[2])
    return None

在上面的例子中,它能够从项目中的其他文件里识别出 User 对象和 get_database_connection 函数的结构,并据此生成代码,这一点令人印象深刻。

2. 智能重构建议

选中现有代码,在右键菜单中选择“AI Actions > Suggest Refactoring”,它就会提出代码改进方案。这与简单地重写代码不同,它更侧重于结构性改进,例如将一个长函数拆分成多个小函数,或者将嵌套的 if-else 语句转换为更易读的形式。

在维护遗留代码或初次分析同事的复杂代码时,这个功能尤其有用。

3. AI 生成提交信息

这是最实用的功能之一。在 IDE 的“Commit”面板中,点击“Generate Commit Message with AI Assistant”按钮,它会分析变更的代码(diff),并自动生成提交信息的草稿。

它生成的不是像“Update file.py”这样简单的消息,而是一个包含了变更目的和主要内容的标题和正文。你只需根据团队的提交规范稍作修改即可,这大大减少了编写文档的时间。

实战中的陷阱(失败案例与权衡)

和所有 AI 工具一样,JetBrains AI Assistant 也并非万能。如果盲目信任和使用,反而可能引发问题。

“幻觉”现象与错误建议

这是最常见的问题。它有时会调用不存在的库函数,或者提出存在细微逻辑错误的建议。在处理复杂的业务逻辑或特定领域的代码时,这类错误尤其频繁。

AI 建议的代码只是草稿,最终责任在开发者。 养成逐行阅读建议代码并验证其是否按预期工作的习惯至关重要。

上下文范围的局限性

AI Assistant 无法一次性读取项目中的所有文件。它主要围绕当前打开的文件和与之密切相关的部分文件来构建上下文。

因此,在修改涉及跨多个模块的复杂依赖项的功能时,它可能会给出风马牛不相及的建议。例如,它可能完全无法理解 A 模块的接口变更对 C 模块实现的影响。在这种情况下,开发者需要亲自理解整体架构并修改代码,而不是依赖 AI。

结论:对谁来说是最有用的工具?

JetBrains AI Assistant 不仅仅是一个代码补全工具,更像一个深度集成到开发工作流中的“助手”。它对以下几类开发者尤其有帮助:

  1. 已熟悉 JetBrains IDE 生态系统的开发者: 无需额外学习,它能自然融入现有的快捷键和 UI,立即提升生产力。
  2. 负责维护遗留代码的开发者: 代码解释、重构建议等功能是快速理解复杂代码库的有力武器。
  3. 注重文档和代码质量的开发者: 自动生成提交信息、建议命名等功能,可以减少为保持代码质量一致性所花费的时间。

当然,基于云的模型的局限性和成本是明显的缺点。但如果能充分理解并善加利用,它无疑是一个强大的工具,能够将编码中的繁琐部分自动化,帮助开发者专注于更具创造性和更重要的问题。最关键的是,要始终牢记:开发者自身才是批判性地采纳 AI 建议并做出最终决策的主体。

参考资料