LangChain4j(1):初识LangChain4j

1 什么是LangChain和LangChain4j

LangChain是一个大模型的开发框架,使用LangChain框架,程序员可以更好的利用大模型的能力,大大提高编程效率。如果你是一个lava程序员,那么对LangChain最简单直观的理解就是,LangChain是大模型领域的Spring。LangChain不光提供了一整套快速接入各种开放大模型的工具,更重要的是,他集成了当今程序员使用大模型能力最好的方案。

LangChain是一个基于Python开发的框架,而Langchain4j则是Langchain的]ava版本。将大模型的强大能力和Java编程语言相结合,这就是LangChain4i所做的。实际上,LangChain4i不光包含了LangChain的功能,同时还加入了很多自己的创新。在目前阶段,LangChain4j也是与大模型结合最好最成熟的框架。

要注意的是,大模型本身在快速发展过程中,而如何使用好大模型,这件事,也是在快速发展过程中。学习LangChain4i,不光要学习如何使用框架,更需要从LangChain4i中学习如何使用好各种各样的大模型。

LangChain是最好的框架,但并不是唯一的框架。例如Spring社区也推出了Spring AI框架,也是用来对接大模型的。基于Spring在]ava领域的多年技术积累,Spring AI框架也是非常令人期待的。在LangChain4j之后楼兰也会跟大家详细分享Spring Al框架。

官网地址:LangChain4j | LangChain4j

LangChain4j的目标是简化与 Java 应用程序 集成大模型。

特性:

统- API:LLM提供程序(如 OpenAl 或 阿里百炼)和嵌入(向量)存储(如 redis 或 ES) 使用专有 APl。LangChain4j提供了一个统一的 API,以避免为每个 API 学习和实现特定的 API。要试验不同的LLMs存储或嵌入的存储,您可以在它们之间轻松切换,而无需重新编写代码。LangChain4i日前支持 15+ 热门LLM 和 20+ 嵌入模型。

langchain4jVS springAl

|-------|---------------------|-------------|
| 维度 | Spring Al | LangChain4j |
| 技术栈绑定 | 强依赖 Spring 生态 | 无框架依赖,可独立使用 |
| 适用场景 | SpringBoot应用快速接入单模型 | 多模型(动态模型)平台 |

2 openAI代码实现

引入了langchain4j的核心依赖、langchain4j集成OpenAi各个模型的依赖。

复制代码
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>langChain4Jpro</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <langchin4j.version>1.0.0-beta1</langchin4j.version>
    </properties>

    <dependencies>
        <!--langchain核心-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
            <version>${langchin4j.version}</version>
        </dependency>
        <!--open ai-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
            <version>${langchin4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.11.4</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

代码如下:

复制代码
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.junit.jupiter.api.Test;

public class langchain4jDemoApplicatonTest {
    @Test
    void test01(){
        ChatLanguageModel model = OpenAiChatModel
                .builder()
                .apiKey("demo")
                .modelName("gpt-4o-mini")
                .build();

        String answer = model.chat("你好,你是谁?");
        System.out.println(answer);
    }

}

运行结果如下:

以上代码可以看出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/1"的代理,我们请求代理时,代理会去调用真正的OpenAi接口,只不过代理会将自己的ApiKey传过去,从而拿到结果返回给我们。

所以,真正开发时,需要大家设置自己的apiKey或baseUrl,可以这么设置:

复制代码
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.junit.jupiter.api.Test;

public class langchain4jDemoApplicatonTest {
    @Test
    void test01(){
        ChatLanguageModel model = OpenAiChatModel
                .builder()
                .baseUrl("http://langchain4j.dev/demo/openai/v1")
                .apiKey("demo")
                .modelName("gpt-4o-mini")
                .build();
        String answer = model.chat("你好,你是谁?");
        System.out.println(answer);
    }

}

3 接入deepseek

代码实现如下:

复制代码
    @Test
    void test02(){
        ChatLanguageModel model = OpenAiChatModel
                .builder()
                .baseUrl("https://api.deepseek.com")
                .apiKey("sk-c78ed36820f14c438bb5be30ade5c1be")
                .modelName("deepseek-chat")
                .build();
        String answer = model.chat("你好,你是谁?");
                System.out.println(answer);
    }

结果如下:

4 文生图

5 文生语音

相关推荐
fantasy_arch5 分钟前
SVTAV1热点函数-svt_ext_all_sad_calculation_8x8_16x16_avx2
人工智能·计算机视觉·av1
Best_Me078 分钟前
《PromptAD》实验步骤
人工智能·深度学习·机器学习
剑盾云安全专家14 分钟前
AI助力高效办公:如何利用AI制作PPT提升工作效率
人工智能·科技·aigc·powerpoint·软件
eqwaak044 分钟前
基于大语言模型的智能音乐创作系统——从推荐到生成
人工智能·爬虫·python·语言模型·自然语言处理·自动化
扫地的小何尚1 小时前
NVIDIA cuOpt:GPU加速优化AI微服务详解
人工智能·算法·微服务·ai·架构·gpu
邴越1 小时前
AI大模型、机器学习以及AI Agent开源社区和博客
人工智能·机器学习
超自然祈祷1 小时前
庙算兵棋推演AI开发初探(6-神经网络开发)
人工智能
云空1 小时前
《Keras 3 :AI 使用图神经网络和 LSTM 进行交通流量预测》
人工智能·神经网络·keras
软***c2 小时前
Python CSV 数据分析:问题排查与解决全记录
人工智能·python·数据分析
橙-极纪元2 小时前
Ai工作流工具有那些如Dify、coze扣子等以及他们是否开源
人工智能·开源