Java 整合大模型之LangChain4j
LangChain是⼀个⼤模型的开发框架,使⽤ LangChain 框架,程序员可以更好的利⽤⼤模型的能⼒,⼤⼤提⾼编程效率。如果你是⼀个 Java 程序员,那么对 LangChain 最简单直观的理解就是, LangChain 是⼤模型领域的Spring。LangChain 不光提供了⼀整套快速接⼊各种开放⼤模型的⼯具,更重要的是,他集成了当今程序员使⽤⼤模型能⼒最好的⽅案。
Java 整合大模型之LangChain4j
LangChain是⼀个⼤模型的开发框架,使⽤ LangChain 框架,程序员可以更好的利⽤⼤模型的能⼒,⼤⼤提⾼编程效率。如果你是⼀个 Java 程序员,那么对 LangChain 最简单直观的理解就是, LangChain 是⼤模型领域的Spring 。 LangChain 不光提供了⼀整套快速接⼊各种开放⼤模型的⼯具,更重要的是,他集成了当今程序员使⽤⼤模型能⼒最好的⽅案。
LangChain是⼀个基于 Python 开发的框架,⽽ LangChain4j 则是 LangChain 的 Java 版本。将⼤模型的强⼤能⼒和Java 编程语⾔相结合,这就是 LangChain4j 所做的。实际上, LangChain4j 不光包含了 LangChain 的功能,同时还加⼊了很多⾃⼰的创新。在⽬前阶段, LangChain4j 也是与⼤模型结合最好最成熟的框架。
LangChain4j 的目标是简化与 Java 应用程序 集成大模型。
在课程开始之前,由于LangChain4j是采用JDK17写的,所以大家需要将JDK安装成17版本的。
官网:https://docs.langchain4j.dev/get-started

特性
-
统一API:LLM( Large Language Model(大语言模型))提供程序(如 OpenAI 或 阿里百炼)和嵌入(向量)存储(如 redis 或 ES) 使用专有 API。LangChain4j 提供了一个统一的 API,以避免为每个 API 学习和实现特定的 API。 要试验不同的LLMs存储或嵌入的存储,您可以在它们之间轻松切换,而无需重新编写代码。 LangChain4j 目前支持 15+ 热门LLM和20+ 嵌入模型
-
LangChain4j对比SpringAI
纬度 SpringAI LangChain4j 技术绑定 强度依赖Spring生态 无框架依赖,可独立使用 适用场景 SpringBoot应用快速接入模型 多模型(动态模型)平台 Demo入门案例,Java整合LangChain4j(存Java)
接下来,让我们与LangChain4j初识一下,新建一个SpringBoot工程,然后添加以下依赖:
添加依赖
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j</artifactId> <version>${langchain4j.verion}</version> </dependency> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-open-ai</artifactId> <version>${langchain4j.verion}</version>
设置版本:
<langchain4j.verion>1.0.0-beta1</langchain4j.verion>
最终效果:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gec</groupId>
<artifactId>LangChain4</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>LangChain4</name>
<description>LangChain4</description>
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.6</spring-boot.version>
<langchain4j.verion>1.0.0-beta1</langchain4j.verion>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>${langchain4j.verion}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>${langchain4j.verion}</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.gec.langchain4.LangChain4Application</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
引入了langchain4j的核心依赖、langchain4j集成OpenAi各个模型的依赖。
和OpenAI的第一次对话:
这里由于考虑大家不一定所有人都有OpenAI的密钥采用LangChain4j提供的通用接口来实现:
package com.gec.langchain4;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class LangChain4ApplicationTests {
@Test
void contextLoads() {
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.apiKey("demo")
.modelName("gpt-4o-mini")
.build();
String chat = model.chat("你好,你是谁?");
System.out.println(chat);
}
}
这段代码中需要指定两个参数, apikey 和 modelName 。这两个是什么呢?
⾸先,ModelName 是 OpenAI 提供的⼤模型的名字。这与你在⽹⻚上使⽤ ChatGPT 看到的模型名是⼀致的。
不同 的模型有不同的效率(相应速度和对话成熟度 ) 。当然,也有不同的费率。其中这个 gpt-4o-mini 是 OpenAI 提供的⼀ 个可以进⾏免费调试的⼤模型。
然后,apikey 是访问⼤模型需要的身份凭证。正常情况下,调⽤ OpenAI 的这些 API 接⼝,都需要先去 OpenAI 官 ⽹申请⼀个apikey ,之后每次调⽤, OpenAI 会根据这个 apikey 收费。
这⾥给的这个“demo" 的 apikey ,实际上是 langchain4j 框架提供的⼀个测试 key 。 langchain4j 在构建 OpenAiChatModel时,会判断传⼊的 ApiKey 是不是 “demo” 。如果是,就将 OpenAi 的原始 API 地址 " https://api.openai.com/v1 " 改为 " http://langchain4j.dev/demo/openai/v1 " 。这个地址是 langchain4j 专⻔为我们准备的⼀个体 验地址。langchian4j 后端接受到请求后,会将真实请求转发给 openAI ,同时注⼊他们⾃⼰的真实的 apikey 。具体 代码就在OpenAiChatModel 类的构造⽅法当中。
运行结果:

我们会发现, LangChain4j 对于初次接入大模型的开发者十分友好,不需要指定模型,不需要指定apikey, 即可对接大模型进行对话,这是怎么做到的呢?
其实我们对ApiKey为"demo" , 底层会做这些事情:

在底层在构造OpenAiChatModel时,会判断传入的ApiKey是否等于"demo",如果等于会将OpenAi的原始API地址"https://api.openai.com/v1"改为http://langchain4j.dev/demo/openai/v1",这个地址langchain4j专门为我们准备的一个体验地址,实际上这个地址相当于是"https://api.openai.com/v1"的代理,我们请求代理时,代理会去调用真正的OpenAi接口,只不过代理会将自己的ApiKey传过去,从而拿到结果返回给我们。
所以,真正开发时,需要大家设置自己的apiKey或baseUrl,可以这么设置:
OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.apiKey("demo")
更多推荐
所有评论(0)