共计 2108 个字符,预计需要花费 6 分钟才能阅读完成。
传统开发流程的痛点
每次调试代码时,我们都会遇到这样的场景:在 IDE 里写着写着突然需要查文档,于是切到浏览器打开 Stack Overflow;过会儿又遇到 API 用法不确定,再切到 ChatGPT 网页提问 … 这种频繁的上下文切换不仅浪费时间,更重要的是打断了编程的心流状态。据统计,开发者平均每天要执行超过 50 次这样的切换操作。

技术选型对比
方案对比
- 官方 ChatGPT 插件
- 优点:开箱即用,支持对话历史
-
缺点:无法自定义提示词,企业环境存在数据出境风险
-
自定义 API 集成
- 优点:可控制请求内容,支持私有化部署
- 缺点:需要自行处理 Token 管理等基础设施
Token 安全方案
- 环境变量存储(推荐)
- IDEA 的 Password Manager
- 自建代理网关(企业级方案)
核心实现步骤
1. 创建 ToolWindow
class ChatGPTToolWindow : ToolWindowFactory {override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {val panel = JPanel(BorderLayout())
// 添加输入框和显示区域
toolWindow.component.add(panel)
}
}
2. API 调用封装
suspend fun callChatGPT(
prompt: String,
retryCount: Int = 3
): String {
var lastError: Exception? = null
repeat(retryCount) { attempt ->
try {
val response = client.post<ChatCompletion> {// 请求体配置}
return response.choices.first().message.content} catch (e: Exception) {
lastError = e
delay((attempt + 1) * 1000L) // 指数退避
}
}
throw lastError ?: RuntimeException("Max retries exceeded")
}
3. AST 集成补全
通过 PSI(Program Structure Interface)解析当前代码上下文:
fun getCurrentCodeContext(editor: Editor): String {val psiFile = PsiDocumentManager.getInstance(project)
.getPsiFile(editor.document)
return psiFile?.text ?: ""
}
完整 Gradle 配置
plugins {
id "java"
id "org.jetbrains.intellij" version "1.13.3"
}
// 关键依赖
dependencies {
implementation "com.squareup.okhttp3:okhttp:4.10.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"
// 用于 JSON 解析
implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.14.2"
}
intellij {version.set("2022.3.3")
plugins.set(["java", "Kotlin"])
}
生产环境优化
网络容错方案
- 本地缓存最近 5 次对话
- 当检测到连续超时时切换备用 API 端点
- 重要操作添加离线提醒标记
安全防护
#!/bin/sh
# pre-commit hook 示例
git diff --cached | \
grep -E "(api_key|password|token)" && \
echo "检测到敏感信息!" && exit 1
常见问题解决
- 版本兼容性
- 2022.1+ 版本需注意 ToolWindow API 变更
-
旧版 Kotlin 插件可能缺少协程支持
-
响应延迟优化
- 设置 max_tokens 限制
- 使用 stream 模式逐步显示结果
- 对长响应启用后台加载
进阶玩法尝试
Spring 项目生成
结合 /v1/chat/completions 接口:
{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "生成 Spring Boot 3.x 项目,包含: 1.JPA 2.Security 3.Webflux"
}
]
}
Prompt 模板优化
fun createCodeReviewPrompt(code: String): String {
return """
请以资深 Java 工程师身份评审以下代码:${code}
要求:1. 指出潜在的性能问题
2. 检查是否符合 SOLID 原则
3. 给出重构建议
""".trimIndent()}
结语体验
实际使用两周后,最明显的感受是:当 AI 助手被深度集成到开发环境中,它不再是一个独立的工具,而变成了像代码补全一样的自然存在。特别是通过 AST 获取上下文后,提问的精准度大幅提升。建议先从简单的代码解释功能开始尝试,逐步扩展到自动生成测试用例等复杂场景。
正文完
发表至: 软件开发
近一天内
