点击下方“JavaEdge”,选择“设为星标”

第一时间关注技术干货!

免责声明~ 任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」; 别急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。 怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」

0 前言

LangChain4j 提供了用于以下功能的 Spring Boot 启动器:

  • 常用集成

  • 声明式 AI 服务

1 常用集成的 Spring Boot starters

Spring Boot 启动器帮助通过属性创建和配置 语言模型、嵌入模型、嵌入存储 和其他核心 LangChain4j 组件。

要使用 Spring Boot 启动器,请导入相应依赖包。

Spring Boot 启动器依赖包的命名规范:langchain4j-{integration-name}-spring-boot-starter

如对于 OpenAI(langchain4j-open-ai),依赖包名称为langchain4j-open-ai-spring-boot-starter

dev.langchain4j
langchain4j-open-ai-spring-boot-starter
0.34.0

然后,可在application.properties文件中配置模型参数:

langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o
langchain4j.open-ai.chat-model.log-requests=true
langchain4j.open-ai.chat-model.log-responses=true
...

此时,将自动创建一个OpenAiChatModel实例(ChatLanguageModel的实现)

打开网易新闻 查看精彩图片

并且可通过自动注入在需要的地方使用它:

@RestController
public class ChatController {

ChatLanguageModel chatLanguageModel;

public ChatController(ChatLanguageModel chatLanguageModel) {
this.chatLanguageModel = chatLanguageModel;
}

@GetMapping("/chat")
public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {
return chatLanguageModel.generate(message);
}
}

如需一个StreamingChatLanguageModel实例,使用streaming-chat-model代替chat-model属性:

langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
...
2 声明式 AI 服务的 Spring Boot starter

LangChain4j 提供一个 Spring Boot starter,用于自动配置 AI 服务、RAG、工具 等功能。

假设已导入某已集成的starters(见上文),然后导入langchain4j-spring-boot-starter

dev.langchain4j
langchain4j-spring-boot-starter
0.34.0

定义 AI 服务接口,并用@AiService

@AiService
interface Assistant {

@SystemMessage("You are a polite assistant")
String chat(String userMessage);
}

可把它看作标准 Spring Boot的@Service,但带有 AI 功能。

当应用程序启动时,LangChain4j 启动器将扫描类路径并找到所有带有@AiService注解的接口。对于每个找到的 AI 服务,它将使用应用程序上下文中的所有 LangChain4j 组件创建此接口的实现,并将其注册为一个 bean,因此您可以在需要的地方进行自动注入:

@RestController
class AssistantController {

@Autowired
Assistant assistant;

@GetMapping("/chat")
public String chat(String message) {
return assistant.chat(message);
}
}

更多细节请见 这里。

3 支持的版本

LangChain4j 的 Spring Boot 集成需要 Java 17 和 Spring Boot 3.2。

4 示例

  • 低级 Spring Boot 示例 使用 ChatLanguageModel API

  • 高级 Spring Boot 示例 使用 AI 服务

4.1 使用 Spring Boot 的客户支持代理示例

从官网拉下代码后,直接修改配置文件中的 api-key 如下(仅做本地演示用):

打开网易新闻 查看精彩图片

启动CustomerSupportAgentApplication应用后,直接在控制台交互:

我开始提问:How can I cancel my booking?

打开网易新闻 查看精彩图片

为啥 AI 会要求提供信息呢?因为注册了一个工具:

@Component
public class BookingTools {

@Autowired
private BookingService bookingService;

@Tool
public void cancelBooking(String bookingNumber, String customerName, String customerSurname) {
System.out.printf("[Tool]: Cancelling booking %s for %s %s...%n", bookingNumber, customerName, customerSurname);
bookingService.cancelBooking(bookingNumber, customerName, customerSurname);
}
}

那我就按他的要求提供信息:

打开网易新闻 查看精彩图片

AI 还是会问我要名字。那我就随便回答,然后就报错了:

打开网易新闻 查看精彩图片

注意这是个后端自定义的业务异常,即没有找到对应名字的预订。但请注意最后 AI 还是会提醒你输入正确信息:

打开网易新闻 查看精彩图片

那就放过他吧,我输入后端存储的真实信息:

4.2 HelloWorld
打开网易新闻 查看精彩图片
4.2 HelloWorld
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;

import static dev.langchain4j.model.openai.OpenAiChatModelName.GPT_4_O_MINI;

public class _00_HelloWorld {

public static void main(String[] args) {

ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(ApiKeys.OPENAI_API_KEY)
.modelName(GPT_4_O_MINI)
.build();

String answer = model.generate("Say Hello World");

System.out.println(answer);
}
}

响应:

Hello, World!

关注我,紧跟本系列专栏文章,咱们下篇再续!

★ 作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。 各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。 负责: 中央/分销预订系统性能优化 活动&券等营销中台建设 交易平台及数据中台等架构和开发设计 车联网核心平台-物联网连接平台、大数据平台架构设计及优化 LLM Agent应用开发 区块链应用开发 大数据开发挖掘经验 推荐系统项目 目前主攻市级软件项目设计、构建服务全社会的应用系统。 ”

参考:

  • 编程严选网

编程严选网:http://www.javaedge.cn/ 专注分享软件开发全生态相关技术文章、视频教程资源、热点资讯等,全站资源免费学习,快来看看吧~ 【编程严选】星球

欢迎长按图片加好友,我会第一时间和你分享软件行业趋势面试资源学习方法等等。

公众号后台私信:

  • 更多教程资源应有尽有

想先人一步获取以上所有资源?加入《编程严选》星球一键获取!