ABAP-AI-completion

ABAP AI Completion - Eclipse 插件

🌐 语言 / Language: English 中文

配置AI 按CTRL+ALT+.代码补全对比

中文

一个为SAP ABAP开发者打造的Eclipse AI代码补全插件。基于大语言模型(LLM),追求极致隐私与数据安全,可使用本地LLM,用于企业内部使用,防止企业代码上传到互联网,以保证代码的保密安全,在编写ABAP代码时提供智能的代码建议和自动补全功能。

代码补全TOKEN说明

功能特性


安装说明(普通用户)

系统要求

安装方法

有三种安装方式,推荐使用方法1(Eclipse Marketplace)安装:

方法1:使用 Eclipse Marketplace 安装(推荐)

  1. 在 Eclipse 菜单栏中打开 HelpEclipse Marketplace...

  2. 在搜索框中输入 ABAP AI,找到 ABAP AI Completion

  3. 点击 Install,并按照提示完成安装(同意许可协议、信任证书)

  4. 安装完成后点击 Restart Now (Restart Eclipse) 重启 Eclipse,插件即被加载

方法2:使用 Install New Software 安装

  1. 在 Eclipse 菜单栏中选择 HelpInstall New Software...(部分版本为 HelpInstall Software...

  2. Available Software 对话框中点击 Add... 按钮,添加以下更新站点地址:

    Name: ABAP AI Completion
    Location: https://yan252.github.io/ABAP-AI-completion/update-site
    

    💡 也可点击 Archive... 选择 ABAP-AI-Completion-UpdateSite-1.0.5.zip 进行离线安装。

  3. 勾选 ABAP AI Completion Feature,点击 NextNext → 同意许可协议 → Finish

  4. 安装完成后点击 Restart Now (Restart Eclipse) 重启 Eclipse,插件即被加载

方法3:使用 dropins 方式(调试/开发场景)

dist/com.sap.abap.ai.completion_1.0.5.jar 复制到 Eclipse 的 <安装路径>/dropins/ 目录(如不存在此目录请先创建),然后重启 Eclipse 即可。


使用说明

手动触发代码补全

  1. 打开任意ABAP源代码文件(.abap.prog等)

  2. 将光标放在需要补全的位置

  3. 按快捷键 Ctrl + Shift + . 调用AI补全

  4. AI建议将以浮动覆盖层形式显示

  5. Tab 键接受建议,按其他键取消

自动补全模式

在配置中启用 “Auto-complete while typing” 后,停止输入一段时间(默认2000ms)会自动触发AI建议。

修改快捷键

如需修改快捷键:

  1. 菜单栏:WindowPreferences

  2. 导航到:GeneralKeys

  3. 搜索:ABAP AI completion

  4. 点击 Binding 字段,按下新的快捷键组合

  5. 点击 OK 保存


配置说明

打开配置页面

  1. 菜单栏:WindowPreferences

  2. 在左侧导航栏中找到 ABAP AI Completion

  3. 配置页面如下图所示:

配置页面

配置项详解

AI连接设置 (AI Connection Settings)

配置项 说明 示例
API Base URL AI服务端点地址 https://api.openai.com/v1
Model Name 使用的AI模型名称 gpt-4, deepseek-v4-flash
API Key API认证密钥 (将以星号显示)
Max Tokens 最大生成Token数 240640
Temperature 创造性温度 (0.0-2.0) 0.3(较低值表示更确定性的输出)

💡 提示 : 点击 Test Connection 按钮测试API连接是否正常。

功能设置 (Feature Settings)

配置项 说明
Enable ABAP AI Completion plugin 启用/禁用整个插件
Auto-complete while typing 启用后停止输入自动触发AI建议

自动补全设置 (Auto-Completion Settings)

配置项 说明
Delay after typing (ms) 停止输入后多少毫秒触发自动补全

💡 建议 : 推荐值为 1500-3000 ms。较低的值会增加API请求频率。

技能目录 (Skill Directory)

.abap.txt.skill 文件放置在技能目录中,AI会参考这些文件中的代码模式进行补全。这对于特定项目的代码规范和命名约定非常有用。

自定义系统提示 (Custom System Prompt)

可以自定义发送给AI的系统提示,用于引导AI遵循特定的代码风格和规范。

覆盖层样式 (Overlay Style)

自定义AI补全代码在编辑器中的显示颜色。


开发者指南(二次开发)

环境要求

导入项目

  1. 克隆仓库到本地:
git clone https://github.com/yan252/ABAP-AI-completion.git
  1. 在Eclipse中导入项目:

    • FileImportExisting Projects into Workspace

    • 选择克隆的项目目录

    • 勾选项目并点击 Finish

项目结构

com.sap.abap.ai.completion/
├── META-INF/
│ └── MANIFEST.MF # OSGi bundle清单
├── src/
│ └── com/sap/abap/ai/completion/
│ ├── client/ # AI API客户端
│ │ ├── AIClient.java
│ │ ├── AIClientException.java
│ │ └── PromptCacheManager.java # Prompt压缩与多节点缓存管理
│ ├── editor/ # 编辑器集成
│ │ ├── AICompletionHandler.java
│ │ ├── AICompletionListener.java
│ │ ├── AICompletionOverlay.java
│ │ ├── AICompletionProposalPopup.java
│ │ ├── AICompletionService.java
│ │ └── AIOverlayManager.java
│ ├── logging/ # 日志输出
│ │ └── AILogger.java
│ ├── parser/ # ABAP解析器
│ │ ├── AbapCodeTruncator.java
│ │ ├── AbapIncludeResolver.java
│ │ ├── AbapLanguageDetector.java
│ │ ├── ParentProgramContext.java
│ │ ├── ParentProgramResolver.java
│ │ └── WorkspaceCodeCollector.java
│ ├── preferences/ # 配置管理
│ │ ├── AICompletionPreferencePage.java
│ │ ├── AIConfiguration.java
│ │ ├── PreferenceConstants.java
│ │ └── PreferenceInitializer.java
│ ├── ui/ # 状态栏等UI集成
│ │ └── AbapAIStatusLineContribution.java
│ └── Activator.java # Bundle激活器
├── icons/
│ └── SAPLogo.ico # 插件图标
├── dist/ # 发布的JAR
│ └── com.sap.abap.ai.completion_1.0.1.jar
├── update-site/ # 更新站点
│ ├── features/
│ ├── plugins/
│ ├── artifacts.jar / artifacts.xml
│ ├── content.jar / content.xml
│ └── site.xml
├── tools/
│ └── CacheVerifyTool.java # 缓存校验工具
├── plugin.xml # 插件扩展点声明
├── build.properties # 构建属性
├── build.ps1 # Windows构建脚本
├── build_plugin.xml # 构建脚本(ANT)
├── generate-update-site.ps1 # 生成更新站点脚本
└── rebuild.ps1 # 重建脚本

关键扩展点

本插件通过以下Eclipse扩展点集成:

扩展点 用途
org.eclipse.ui.startup 插件自动启动
org.eclipse.ui.preferencePages 配置页面注册
org.eclipse.core.runtime.preferences 偏好设置初始化
org.eclipse.ui.commands 补全命令定义
org.eclipse.ui.bindings 快捷键绑定

核心架构

  1. AIClient : 纯Java实现的HTTP客户端,调用AI Chat Completions API,无需外部JSON库

  2. AICompletionService : 异步补全服务,处理超时、取消和错误

  3. AbapIncludeResolver : 解析ABAP INCLUDE程序,为AI提供完整的上下文

  4. AIOverlayManager : 管理浮动覆盖层的显示和交互

  5. AIConfiguration : 统一的配置管理,支持偏好存储

发送给AI的MESSAGE节点说明

手动触发补全(Ctrl+Shift+.)时,插件会构造 1个 system 节点 + 5个 user 节点 的消息列表发送给 AI(对应 AICompletionService.java 中的 buildUserMessages 方法)。各节点含义如下:

节点 角色 内容说明
System system 系统提示词。定义AI的角色(SAP ABAP资深开发专家)、补全规则与输出约束。可使用 自定义系统提示 (Custom System Prompt) 覆盖默认值
节点1/5 user SKILL 文件内容:技能目录中加载的 .abap/.txt/.skill 文件,作为代码风格与最佳实践参考。无SKILL时标明“使用系统默认ABAP编码规范”
节点2/5 user 父程序调用上下文:当当前文件是 INCLUDE 时,深度搜索到的调用它的父级程序代码(按配置的搜索深度递归查找)。该节点内容经 PromptCacheManager.compressContent 压缩
节点3/5 user 工作区打开的程序:当前 Eclipse 工作区中已打开的其它 ABAP 文件,作为风格参考与补充上下文(由 WorkspaceCodeCollector 收集,同样会压缩)
节点4/5 user 程序元数据:文件名、代码类型、INCLUDE 数量、父级程序/工作区/SKILL 加载情况的汇总说明,帮助AI综合理解整体上下文
节点5/5 user 当前光标程序(含光标位置):由原“完整代码”节点与“光标上下文”节点合并而来。展示当前光标所在程序的完整代码(已通过 AbapIncludeResolver 展开所有 INCLUDE),并在光标位置用 [[[CURSOR_HERE]]] 标记插入位置,这是AI真正生成补全内容的位置

说明:节点2、3在发送前会通过 PromptCacheManager.compressContent 统一压缩(压缩上限沿用工作区代码字符数配置 Max Workspace Code Chars),避免上下文窗口溢出;节点1(SKILL)全量直接发送,其余节点按各自规则发送。若某节点无对应内容,仍会发送一条占位说明消息(标明该节点当前状态),保证AI始终收到完整的 1+5 节点结构。

对比:自动补全(requestQuickCompletion)不加载SKILL与上述上下文,使用的是简化后的独立 prompt,仅发送 1个 system 节点 + 1个 user 节点(当前行上下文)。

构建插件

使用Eclipse导出

  1. 右键点击项目 → Export

  2. 选择 Deployable plug-ins and fragments

  3. 选择输出目录为 dist/

  4. 点击 Finish

使用ANT脚本

# Windows PowerShell
.\build.ps1

或使用提供的 build_plugin.xml

ant -f build_plugin.xml

调试插件

在Eclipse中启动一个新的Eclipse实例进行调试:

  1. RunRun Configurations

  2. 新建 Eclipse Application 配置

  3. Plug-ins 选项卡中,确保 com.sap.abap.ai.completion 已包含

  4. 点击 Run 启动


常见问题 (FAQ)

Q: 插件安装后没有出现配置选项?

A: 请确认:

  1. JAR文件已正确放入 dropins 目录

  2. 已重启Eclipse

  3. 使用的Eclipse版本符合要求(4.7+)

  4. Java版本为17或更高

Q: 代码补全请求超时怎么办?

A:

Q: 支持哪些AI服务?

A: 支持任何兼容OpenAI Chat Completions API的服务,包括但不限于:

Q: 能否在离线环境使用?

A: 不能。本插件需要网络连接来调用AI API服务。但技能目录中的参考文件可以帮助AI生成更符合项目规范的代码。

Q: API Key安全吗?

A: API Key存储在Eclipse的偏好设置中,以星号显示。但请注意:


技术栈


许可证

本项目仅供学习和个人使用。请遵守所使用AI服务的相关服务条款和许可证要求。


致谢

本插件灵感来源于VS Code Copilot等AI辅助编程工具,旨在为SAP ABAP开发者提供更好的编码体验。