使用Spring AI Alibaba集成通义千问开发AI对话应用

使用Spring AI Alibaba集成通义千问开发AI对话应用

前言

没想到只会Java的我,有一天也能开发一个AI应用,怎么说呢?

Spring 官方自从发布了 Spring AI,基于 Spring AI 和通义千问大模型的 Spring AI Alibaba 也跟随其后。Alibaba 的出现也就意味着国内的 Javaer 们也能很轻松的开发AI应用了。那么本文就基于 Spring AI Alibaba 开发一个简单的 AI 对话应用。

效果展示

实现步骤

基于 Spring AI Alibaba 实现这样一个AI对话非常简单,只需要几行代码就可以完成。可以跟着下面的步骤操作:

创建一个 SpringBoot 项目

Spring AI Alibaba 提供了 SpringBoot starter。所以,第一步就是创建一个SpringBoot项目引入依赖以及配置。

pom.xml文件添加spring-ai-alibaba-starter依赖

org.springframework.boot

spring-boot-starter-web

com.alibaba.cloud.ai

spring-ai-alibaba-starter

1.0.0-M3.1

application.yml添加

server:

port: 8080

spring:

application:

name: spring-ai-alibaba-chat

ai:

dashscope:

api-key: xxxx

配置中的api-key是阿里云百炼大模型平台的凭证,AI的实现最终会调用该模型。

api-key 申请

这里有两个事项需要注意:

Spring AI Alibaba 基于 Spring Boot 3.x 开发,所以JDK 版本要求为 17 及以上。

spring-ai 相关依赖包还没有发布到中央仓库,本地 Maven 仓库要添加以下配置。

spring-milestones

Spring Milestones

https://repo.spring.io/milestone

false

编写与大模型交互的 Controller

项目创建成功之后,只需要写一个Controller就可以实现与AI对话,代码如下:

@RestController

@RequestMapping("/ai")

public class AIChatController {

private final ChatClient chatClient;

public AIChatController(ChatClient.Builder builder) {

this.chatClient = builder

.build();

}

@GetMapping("/chat")

public String chat(String message) {

return this.chatClient.prompt()

.user(message)

.call()

.content();

}

}

代码中的ChatClient类似于应用程序开发中的服务层,只不过这里由spring-ai-alibaba-starter自动初始化了实例,可以直接提供 AI 服务,最终会调用百炼大模型。

此时就可以启动应用,通过浏览器访问localhost:8080/ai/chat?message= 进行对话。

编写通过页面进行对话的 html

为了直观的展示效果,简单实现一个前端和接口交互,通过页面进行AI对话。

AI 对话


js 引入的 marked.min.js 可以去GitHub或者联系我获取。

至此,就实现了文中开头的AI对话效果。

需要了解的基本知识

上面的示例其实就是一个SpringBoot项目,对于Javaer肯定不陌生。而对于没有人工智能相关背景的人来说,如果想要基于 Spring AI 开发一个AI应用产品,还是需要了解一些基本概念的。

AI 模型:AI 模型是旨在处理和生成信息的算法,通常模仿人类的认知功能。我们现在基本上听到的大模型都属于生成式AI模型,例如通义千问。

Prompt:提示词作为生成式大模型的输入,可以指导模型生成特定的输出。如果搭建过智能体就会知道,创建一个智能体首先要设置一些提示词。

Token:token作为 AI 模型工作原理的基石,输入时,模型将单词转换为token,输出时,将token转换回单词。在现在的AI模型背景下,token就相当于金钱,一次调用的费用就越高。

模型的认知:一个模型的诞生需要在海量的训练集中进行学习,所以它的认知中没有未来的知识。如果想让模型对现有知识产生认知,有微调、检索增强生成 (RAG)、函数调用这几种方式。

对于本文示例中来说,每一次的对话就是模型的一次token输入和输出。

实现有记忆的对话

如果运行了上面的示例,并且进行了几轮对话,会发现大模型并不会理解上下文,也无法实现连贯的对话。

就如上面所说的“模型的认知”,大模型不会记录对话,所以不会产生上下文关联。例如我接下来的问答中,并没有按照我的提问生成“冒险的”故事,只是“冒险的”进行了说明。

那如何让大模型能够追踪、理解并利用先前对话上下文的能力?

spring-ai 支持基于chat memory的对话记忆。在上面的代码中,只需要在构建chatClient时添加两行代码。

private ChatMemory chatMemory = new InMemoryChatMemory();

public AIChatController(ChatClient.Builder builder) {

this.chatClient = builder

.defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory, UUID.randomUUID().toString(), 10))

.build();

}

UUID 会作为此次对话的唯一标识,ChatMemory会将之前的对话内容记录下来,每次对模型的输入就是历史的对话记录,最终实现对话记忆。

这种做法最终会影响使用大模型的成本,就如上面所说,输入和输出都会影响总token数量,而token就相当于金钱。

最后看一下对话记忆效果

总结

Spring AI解决了AI集成的核心难题:即无缝连接企业数据、API与AI模型,同时也简化了Java 开发人员对AI应用的编程复杂度,还提供检索增强生成 (RAG)、函数调用等关键功能。对于Java 开发人员来讲,通过 Spring AI 可以探索更多的 AI 应用场景。

相关推荐

Remington是什么牌子?
365bet体育投注网站

Remington是什么牌子?

小米关注动态如何关闭?操作指南!
365bet体育投注网站

小米关注动态如何关闭?操作指南!

“任尔东西南北风”的意思及全诗出处和翻译赏析
365bet体育投注网站

“任尔东西南北风”的意思及全诗出处和翻译赏析

2018世界杯小组积分排行榜,2018世界杯小组分组
365dni讲解

2018世界杯小组积分排行榜,2018世界杯小组分组

【自制豆沙馅的做法步骤图,自制豆沙馅怎么做好吃】cherrymaking
365dni讲解

【自制豆沙馅的做法步骤图,自制豆沙馅怎么做好吃】cherrymaking

小米的 Mi Music 应用程序从 Google Play 商店中消失。
365速发国际平台登陆

小米的 Mi Music 应用程序从 Google Play 商店中消失。