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 文生语音

相关推荐
G皮T3 小时前
【人工智能】ChatGPT、DeepSeek-R1、DeepSeek-V3 辨析
人工智能·chatgpt·llm·大语言模型·deepseek·deepseek-v3·deepseek-r1
九年义务漏网鲨鱼3 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
元宇宙时间3 小时前
Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
人工智能·去中心化·区块链
开发者工具分享3 小时前
文本音频违规识别工具排行榜(12选)
人工智能·音视频
产品经理独孤虾3 小时前
人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像
人工智能·机器学习·ai·大模型·产品经理·商品画像·商品工业属性
老任与码4 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
蹦蹦跳跳真可爱5894 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
雷羿 LexChien4 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
两棵雪松5 小时前
如何通过向量化技术比较两段文本是否相似?
人工智能
heart000_15 小时前
128K 长文本处理实战:腾讯混元 + 云函数 SCF 构建 PDF 摘要生成器
人工智能·自然语言处理·pdf