资讯动态

DBeaver 如何通过扩展点注册新的 AI 引擎与助手

发布时间:2026/9/10 7:35:14 来源:尧图企业网站定制
DBeaver 如何通过扩展点注册新的 AI 引擎与助手【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaverDBeaver 的 AI 能力补全、SQL 生成、助手问答并不写死在核心代码里而是通过 OSGi 扩展点对外暴露。插件org.jkiss.dbeaver.model.ai在自己的 plugin.xml 中声明了 5 个扩展点其中两个正是本文的目标com.dbeaver.ai.engineAI integrations注册 AI 引擎对应模式文件 com.dbeaver.ai.engine.exsdcom.dbeaver.ai.assistantAI assistants注册 AI 助手对应模式文件 com.dbeaver.ai.assistant.exsd。同一 plugin.xml 中还声明了com.dbeaver.ai.prompt提示词生成器、com.dbeaver.ai.functionAI 函数和com.dbeaver.ai.credentialsProvider授权三个扩展点本文只覆盖引擎与助手两条注册路径。前提条件你能访问 DBeaver 源码并准备一个可以贡献扩展的插件自己的产品插件或 fork。新插件必须依赖org.jkiss.dbeaver.model.ai因为AIEngine、AIEngineProperties、AIAssistant等契约类都在这个插件的包org.jkiss.dbeaver.model.ai.engine/org.jkiss.dbeaver.model.ai中。注意 AI 功能的开关策略plugin.xml 中org.jkiss.dbeaver.sqlCommand的 AI 命令由org.jkiss.dbeaver.core.ai.completion.enabled.by.policy控制当工作区偏好设置了ai.disabled、环境变量设置了DBEAVER_AI_DISABLED或org.jkiss.dbeaver.app.config中idai的功能特性未启用时AI 命令不生效。你的引擎注册本身不受此影响但验证功能时要先确认这些开关。注册 AI 引擎声明 completionEngine 扩展参照org.jkiss.dbeaver.model.ai自身声明的两个引擎plugin.xml中的写法是extension pointcom.dbeaver.ai.engine completionEngine idopenai labelOpenAI iconicons/engine_openai.svg classorg.jkiss.dbeaver.model.ai.engine.openai.OpenAIEngine propertiesorg.jkiss.dbeaver.model.ai.engine.openai.OpenAIProperties promotedtrue defaulttrue supportsFunctionstrue fallbacksopenai-pro/ completionEngine idcopilot labelGithub Copilot iconicons/engine_copilot.svg classorg.jkiss.dbeaver.model.ai.engine.copilot.CopilotCompletionEngine propertiesorg.jkiss.dbeaver.model.ai.engine.copilot.CopilotProperties promotedtrue supportsFunctionsfalse fallbackscopilot-pro/ /extension各属性在现有声明中的用途属性用途id引擎唯一标识default、fallbacks都引用它label在引擎选择控件中显示的名称icon图标资源相对插件目录的路径class引擎实现类必须实现AIEngine接口properties引擎属性类必须实现AIEngineProperties接口promoted为true时引擎在引擎选择控件中排到普通引擎前面见 com.dbeaver.ai.engine.exsd 中对promoted的文档说明default标记为默认引擎supportsFunctions引擎是否支持函数调用fallbacks降级到其他引擎的id列表注册你的引擎时把id、label、class、properties换成自己的值promoted、default、supportsFunctions、fallbacks按实际能力取舍不需要照抄示例。实现引擎类与属性类引擎实现类需要满足 AIEngine.java 定义的接口public interface AIEnginePROPS extends AIEngineProperties extends AutoCloseable { NotNull ListAIModel getModels(NotNull DBRProgressMonitor monitor) throws DBException; NotNull AIEngineResponse requestCompletion( NotNull DBRProgressMonitor monitor, NotNull AIEngineRequest request ) throws DBException; void requestCompletionStream( NotNull DBRProgressMonitor monitor, NotNull AIEngineRequest request, NotNull AIEngineResponseConsumer listener ) throws DBException; NotNull PROPS getProperties(); int getContextWindowSize(NotNull DBRProgressMonitor monitor) throws DBException; Override void close() throws DBException; }要点requestCompletion与requestCompletionStream流式都要实现请求限流时按接口约定抛出TooManyRequestsException表示请求可重试。包内提供了可继承的抽象基类 BaseCompletionEngine.java以及 HTTP 客户端基类 AbstractHttpAIClient.javaOpenAI 引擎OpenAIEngine就是在这套基类上实现的可以复用其骨架。属性类需要实现 AIEngineProperties.javapublic interface AIEngineProperties { int DEFAULT_TIMEOUT 30; String getModel(); Integer getContextWindowSize(); double getTemperature(); boolean isValidConfiguration(); boolean isLoggingEnabled(); void setLoggingEnabled(boolean loggingEnabled); int getTimeout(); void setTimeout(int timeout); void resolveSecrets(NotNull AIConfigurationProfile profile) throws DBException; void saveSecrets(NotNull AIConfigurationProfile profile) throws DBException; void deleteSecrets(NotNull AIConfigurationProfile profile) throws DBException; }isValidConfiguration()用于校验必填项是否齐全resolveSecrets/saveSecrets/deleteSecrets负责把密钥在配置配置档AIConfigurationProfile中解析、保存与删除。已有属性类 BaseAIEngineProperties.java 可作为参考实现例如 OpenAI 的属性类 OpenAIProperties.java。注册 AI 助手声明 assistant 扩展助手扩展的声明见 plugin.xmlextension pointcom.dbeaver.ai.assistant assistant idce-assistant priority1 classorg.jkiss.dbeaver.model.ai.impl.AIAssistantImpl sqlFormatterorg.jkiss.dbeaver.model.ai.impl.SimpleSqlFormatterImpl/ /extensionclass助手实现类必须实现AIAssistant接口AIAssistant.java且提供以DBPWorkspace为参数的构造器——实例化时由描述符按此签名创建。sqlFormatter助手配套的 SQL 格式化类实现AISqlFormatter接口。priority多个助手扩展共存时AIAssistantRegistry 只保留priority最大的那一个作为全局助手不写priority时按CommonUtils.toInt解析为 0。助手的解析逻辑在 AIAssistantDescriptor.java它读取class创建助手、sqlFormatter创建格式化器、priority三个属性。验证注册结果注册是否生效按代码中的解析路径核对扩展被扫描到AIAssistantRegistry构造时遍历Platform.getExtensionRegistry()中com.dbeaver.ai.assistant下所有assistant元素如果启动后getDescriptor()返回null说明扩展没被解析检查pointid 拼写和元素名是否为assistant。助手可创建createAssistant通过描述符按AIAssistant.classDBPWorkspace参数实例化。若创建抛DBException会记录Error creating AI assistant错误日志并回退到内置的AIAssistantImpl——看到这条日志就说明你的class没写对或实现不满足接口。引擎出现在选择控件中引擎描述器同样由扩展注册表实例化class指向的AIEngine实现promotedtrue的引擎会排在选择控件前列。如果你的引擎没有出现在 AI 引擎列表中先确认class实现类可被平台加载再确认 AI 功能开关ai.disabled偏好、DBEAVER_AI_DISABLED环境变量、idai功能特性没有把 AI 命令禁用。限制助手扩展只有一份全局生效priority最高者胜出同一工作区不会并行加载多个助手。引擎与助手的契约类AIEngine、AIEngineProperties、AIAssistant、AISqlFormatter位于org.jkiss.dbeaver.model.ai插件升级 DBeaver 时接口可能变化TooManyRequestsException、AIEngineRequest/Response等类型都在同一包内应随源码一起核对。exsd模式文件中目前只文档化了class与promoted两个属性引擎和class助手其余属性label、icon、properties、default、supportsFunctions、fallbacks、priority、sqlFormatter以现有声明为参考PDE 提示校验以模式为准属性值按描述符代码的实际读取逻辑解析。【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价