AI 聊天

Jmix 3.1+

AI Chat 扩展组件提供了 Flow UI 组件,支持在 Jmix 应用程序中构建 AI 聊天界面:一个完整的聊天或者其中的一些聊天组件,以及一个可以在对话内部或外部渲染源代码的代码块。

该扩展组件仅提供用户界面,而非模型。聊天的答案由应用程序实现的 LLMProvider 生成,因此这些组件可与任何后端配合使用,例如 Spring AI、供应商的 SDK 或自己实现的服务。

应用程序中的聊天

主要功能:

  • 开箱即用的聊天: aiChat 组合了 aiMessageList 和 aiMessageInput,以及一个空状态。仅使用一个 UI 元素和一个对话流的 provider 就可以搭建完整的聊天。

  • 流式回答: token 在收到时即时呈现,并带有思考指示器,以及助手正在执行操作的实时动态(可选)。

  • Markdown 格式的消息: 助手消息渲染为 Markdown,包括围栏代码块,这些代码块是 aiCodeBlock 组件。

  • 附件: 文件可通过拖放或文件选择器添加,存储在 Jmix 文件存储中,并支持从对话历史中下载。

  • 数据绑定和持久化: 聊天可以与自定义消息实体的集合容器绑定并持久化。

  • 消息操作: 按消息角色使用通用的 Jmix 操作,并内置复制和重新生成操作。

  • 独立组件: 消息列表、消息输入框和代码块可在聊天之外单独使用。

  • 自定义的聊天界面: 组件可以端到端地驱动消息列表,追加消息、将答案流式写入,并报告进度和错误。如果开箱即用的聊天不满足要求,可以用这些组件自己组装一个聊天界面。

该扩展组件是实验性的。其 API 可能会在未来版本中发生变化,Studio 和 IntelliJ IDEA 会对其类调用标记 experimental API 警告。该警告在正确代码上也可能会出现。

与 AI 工具扩展组件的关系

AI 工具 扩展组件解决的是另一个问题。它提供一个成品助手:带对话历史的聊天 UI、助手可调用的工具注册表,以及用于检查和查询应用程序数据的预定义工具。安装并配置模型即可使用。

而本扩展组件提供的是构建块。没有助手,没有注册的工具,也没有持久化。消息是什么、存储在哪里、由什么生成答案,都需要你决定。

当想要一个基于应用程序数据的助手时,选择 AI Tools。当对话是自定义领域的一部分,或者需要一个即用的聊天无法提供的聊天界面时,选择 AI Chat。

安装

此扩展组件需要企业版 订阅。 如果没有订阅,可以按照 企业版试用 介绍的方法试用。

请按照 扩展组件 章节的介绍通过 Jmix 市场自动安装。

手动安装步骤:

  1. 配置 premium 仓库的访问

    • 在 build.gradle 添加 premium 仓库:

      repositories {
          // ...
          maven {
              url = 'https://global.repo.jmix.io/repository/premium'
              credentials {
                  username = rootProject['premiumRepoUser']
                  password = rootProject['premiumRepoPass']
              }
          }
      }
    • 将 premium 仓库的凭证记录在 ~/.gradle/gradle.properties 文件中:

      premiumRepoUser=123456123456
      premiumRepoPass=abcdefabcdef

      仓库的凭证可以通过许可秘钥获取:秘钥中短横前的部分为用户名,短横后的部分为密码。例如,如果你的秘钥是 123456123456-abcdefabcdef,则用户名是:123456123456,密码是 abcdefabcdef。

  2. 在 build.gradle 中添加依赖:

    implementation 'io.jmix.aichat:jmix-aichat-flowui-starter'

组件依赖服务端推送连接对回答进行流式处理,因此,应用程序必须启用推送。在应用程序主类添加 @Push:

@Push
@SpringBootApplication
public class AiChatEx1Application implements AppShellConfigurator {