编辑此页面

Dev Assistant

总体概述

Quarkus Dev Assistant 是直接内置于 Quarkus Dev Mode 的 AI 驱动助手。它的目标是通过帮助您解决问题和协助开发任务来提高您的工作效率。

该助手在开发模式下运行,且绝不会影响您的生产应用程序。


它能做什么?

Dev Assistant 可以帮助您

  • 排查异常和堆栈跟踪

  • 生成示例客户端代码(例如,REST 端点的 javascript 客户端)

  • 为您的代码生成 javadoc

  • 为您的应用程序生成测试代码

  • 为您的应用程序生成测试数据

  • 解释您应用程序中的现有代码

  • 完成代码中的 //TODO 部分

  • …​ 还有更多功能即将推出!

如何添加 Dev Assistant

要在您的 Quarkus 项目中启用 Dev Assistant,请添加 quarkus-chappie 扩展。

<dependency>
    <groupId>io.quarkiverse.chappie</groupId>
    <artifactId>quarkus-chappie</artifactId>
    <version>${chappie-extension-version}</version> (1)
</dependency>
1 ${chappie-extension-version} 替换为最新可用版本。您可以在 search.maven.org 上找到最新版本。

添加后,打开 Dev UI 即可开始使用该助手。

助手接口定义在 Quarkus "core" 中,但其实现在 Quarkiverse (Chappie) 中。如果需要,您可以提供助手的替代实现。

配置和提供程序

默认情况下,助手在配置之前是禁用的。您可以从支持的 AI 提供程序中进行选择

  • OpenAI(例如,ChatGPT、Openshift AI、Podman AI Lab 等)

  • Ollama(本地模型,如 llama3

可以通过助手设置窗格直接在 Dev UI 中进行配置。您将需要

  • API 密钥(适用于 OpenAI)

  • 本地运行的模型(适用于 Ollama 或 Podman AI)

设置将按浏览器存储在本地存储中。

Dev Assistant Configuration

用法

Dev Assistant 无缝集成到 Dev UI 的各个部分。在有助手功能可用的地方,它们会以独特的粉色主题突出显示,便于识别 AI 驱动的交互。

目前,助手功能在以下位置可用:

  • 工作区视图

  • 支持 AI 驱动帮助的扩展页面

寻找粉色高亮显示的按钮或徽章 - 这些表示由 Dev Assistant 驱动的操作。

Dev Assistant pink link

异常帮助

当发生错误或异常时,错误页面会包含一个 获取此问题的帮助 按钮。

点击它将直接带您到 Dev UI 的助手面板,并预先填充相关的错误上下文。这使得助手可以帮助您

  • 理解异常的含义

  • 提出可能的原因

  • 建议如何解决问题

这提供了一种快速集中的故障排除工作流程,无需手动复制和粘贴日志。

Dev Assistant Error page

助手日志

您可以在 Dev UI 页脚中访问助手的日志。

Dev Assistant Log

扩展开发人员指南

Quarkus 扩展可以通过为 Dev Assistant 做出贡献来增强开发人员体验。本节将介绍如何将您的扩展与 Dev Assistant 集成,包括

  • 基于工作区的助手操作

  • 助手专用页面

  • 通过 JSON-RPC 进行后端集成

  • 助手感知组件的 UI 功能

扩展可以定义助手功能,而无需直接依赖 Chappie。接口和相关结构位于 assistant 扩展中。

工作区参与

您可以使用与常规 工作区操作相同的方法将助手函数添加到工作区项,但有一个关键区别:您使用 .assistantFunction(…​) 而不是 .function(…​)

    Action.actionBuilder()
        .label("Joke AI")
        .assistantFunction((a, p) -> { (1)
            Assistant assistant = (Assistant) a;
            Map params = (Map) p;

            return assistant.assistBuilder()
                    .systemMessage(JOKE_SYSTEM_MESSAGE) (2)
                    .userMessage(JOKE_USER_MESSAGE) (3)
                    .variables(params)
                    .assist();

        })
        .display(Display.split)
        .displayType(DisplayType.markdown)
        .filter(Patterns.JAVA_SRC));
1 使用 assistantFunction 来接收 Assistant 实例和 输入 参数。
2 提供可选的系统消息来指导助手的行为。
3 提供用户消息作为主要提示。

助手页面

要将独立的助手驱动页面添加到 Dev UI,请使用 CardPageBuildItemPage.assistantPageBuilder()

cardPageBuildItem.addPage(Page.assistantPageBuilder() (1)
                .title("AI Joke")
                .componentLink("qwc-jokes-ai.js"));
1 使用助手页面构建器。

与后端通信

您可以使用标准的 Dev UI JSON-RPC 模式从后端代码调用助手,既可以针对运行时类路径,也可以针对部署类路径。

针对运行时类路径的 JsonRPC

要在运行时类路径上的 JsonRpcService 中使用助手,请像这样注入 Assistant

public class JokesJsonRPCService {

    @Inject
    Optional<Assistant> assistant; (1)
1 将助手注入为可选的,只有当提供了提供程序并进行了配置时,它才会存在。

现在您可以在任何 JsonRPC 方法中使用此助手,例如:

    public CompletionStage<Map<String, String>> getAiJoke() {
        if (assistant.isPresent()) {
            return assistant.get().assistBuilder()
                    .userMessage("Tell me a funny joke")
                    .assist();
        }
        return CompletableFuture.failedStage(new RuntimeException("Assistant is not available"));
    }

针对部署类路径的 JsonRPC

部署时代码中,使用 BuildTimeActionBuildItem 并通过 .addAssistantAction(…​) 注册助手操作。

    BuildTimeActionBuildItem bta = new BuildTimeActionBuildItem();

        bta.addAssistantAction("getAIJokeInDeployment", (a, p) -> { (1)
            Assistant assistant = (Assistant) a;

            return assistant.assistBuilder()
                    .userMessage(USER_MESSAGE)
                    .variables(p)
                    .assist();
        });
        buildTimeActionProducer.produce(bta);
1 使用 addAssistantAction 而不是 addAction 来访问助手上下文。

UI 中的助手状态

要在您的 Web Component 中有条件地渲染助手 UI,您可以使用助手状态来检查助手状态。状态可以是:

  • notAvailable:没有助手实现(如 Chappie)。

  • available:助手可用但尚未配置。

  • ready:助手已配置并准备使用。

要在您的页面中使用此状态:

import { observeState } from 'lit-element-state'; (1)
import { assistantState } from 'assistant-state'; (2)

export class QwcExtentionPage extends observeState(LitElement) {  (3)
1 从 LitState 库导入 observeState。
2 导入您感兴趣的状态,这里是助手状态。
3 将 LitElement 包装在 observerState 中。

现在您可以在页面的任何位置访问助手状态,并且当状态更改时,它将与本地状态完全相同 - 重新渲染页面的相关部分。

render() {
    if(assistantState.current.isConfigured){
        return html`<div class="assistantfeature">
                        <span> Magic happends here</span>
                    </div>`;
    }
}

助手主题和 UI 组件

为保持与其他 Dev Assistant 功能的视觉一致性,请使用以下组件和样式:

  • <qui-assistant-button>:一个预先风格化的粉色按钮,带有机器人图标。

  • <qui-assistant-warning>:一个标准警告消息,文本为:"Quarkus 助手可能会出错。请检查响应。"

您也可以在任何您想应用助手主题颜色的地方使用 CSS 变量 --quarkus-assistant

反馈

Dev Assistant 正在不断发展!如果它给出了错误的答案或遗漏了显而易见的内容,请在以下地址报告:

相关内容