✅初识LangChain4j

LangChain

LangChain是一个强大的开源框架,专门用于开发基于大语言模型(LLMs)的应用程序。它的主要目标是简化LLM应用程序的开发流程,提供了一套完整的工具和组件,使开发者能够更容易地构建复杂的AI应用。



LangChain 类似于数据库领域的 JDBC,通过统一接口连接不同 LLM(如 GPT-4、ChatGLM)与外部工具(数据库、API),实现“模型-数据-业务”的解耦。









我们在使用LLM的时候,需要用到很多技术配合,比如提示词、记忆、外部存储(如RAG)等等,并且我们还会做一些链式调用、Agent开发等等, 这些都可以借助LangChain框架实现。



LangChain官方推出了Python版和JS版本的,在Python中使用起来非常方便,但是Java开发者使用并不是很方便,而LangChain4j就是一个Java版的LangChain框架。



LangChain4J



之前我们介绍过Spring AI,其实LangChain4J的作用和Spring AI差不多,就是让我们在Java代码中可以更方便的做大模型应用开发,更好的用上我们之前讲过的提示词工程、提示词模板、对话记忆、结构化输出,以及实现RAG、Agent、MCP等功能的。所以Spring AI中有的东西,LangChain4J也几乎都有的。



LangChain4j整体为开发者提供了两种层次的抽象接口:



1.低层次:提供了如下Basics(大模型、提示词模版、模型记忆等)和RAG(向量模型、向量数据库、文本载入分割工具)两类低层次接口,开发者从而能够灵活的实现这些接口并根据自己的需求进行组合,定制化自己的大模型应用。



2.高层次:为了让Java开发者可以更加关注业务逻辑而不是这些底层实现,LangChain4J提供了两个高层次的API:

  • Chains:包括Chains和AI Services两种类别,Chains源于Langchain,相当于将低层次模块组合起来,形成一些固定的处理流程,并协调它们之间的交互。

  • AI Service:AI Services是LangChain4J为 Java 量身定制的解决方案,和Spring Data JPA类似,只需要显示的定义接口,并且可以自定义的加入Memory、Tools或者RAG,具体调用逻辑实现由LangChain4j代理完成。







接入LangChain4J

首先我们需要引入langchain4j的依赖,主要包括两个,一个是langchain4j的核心包依赖,还有一个是langchain4j-open-ai-spring-boot-starter,这是一个langchain4j的starter,这里面初始化了一些bean的定义。

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.8.0</version>
</dependency>

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.8.0-beta15</version>
</dependency>

接着,增加一些变量的配置,在applicaiton.properties文件中:

1
2
3
4
5
langchain4j.open-ai.chat-model.api-key={YOUR_KEY}
langchain4j.open-ai.chat-model.model-name=qwen-max-latest
langchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
langchain4j.open-ai.chat-model.log-requests=true
langchain4j.open-ai.chat-model.log-responses=true

log-requests=true和log-responses=true,是用于日志打印的,开启他,方便查看和模型交互的提示词和响应。



接着,就可以在代码中使用langchain做AI的调用了,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController

@RequestMapping("/langchain")
public class LangChainController {


@Autowired
OpenAiChatModel chatModel;


@RequestMapping("/hello")
public String hello() {
return chatModel.chat("你好,你是谁?");
}
}

这里我们注入一个OpenAiChatModel,然后直接调用他的chat方法,传入用户提示词即可对话。大模型的回复如下:





这个OpenAiChatModel就是在langchain4j-open-ai-spring-boot-starter中定义的,会自动读取langchain4j.open-ai 的相关配置。