最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot整合LangChain4j 全流程

 更新時(shí)間:2026年05月06日 09:10:03   作者:Try, Again  
LangChain4j是一個(gè)專為Java生態(tài)打造的大語(yǔ)言模型應(yīng)用開發(fā)框架,支持多種模型提供商,具備豐富的功能模塊,如對(duì)話記憶、RAG管道支持、結(jié)構(gòu)化輸出等,這篇文章給大家介紹Springboot整合LangChain4j的全流程,感興趣的朋友跟隨小編一起看看吧

一 LangChain4j簡(jiǎn)介

    LangChain4j(LangChain for Java)是一個(gè)專為 Java 生態(tài)打造的大語(yǔ)言模型(LLM)應(yīng)用開發(fā)框架。
Python 領(lǐng)域大語(yǔ)言模型(LLM)應(yīng)用開發(fā)框架是LangChain,LangChain4j 可以理解為它的 “Java 版兄弟”。但它并非簡(jiǎn)單的 API 翻譯,而是充分結(jié)合了 Java 語(yǔ)言特性(強(qiáng)類型、注解驅(qū)動(dòng)、Spring 生態(tài)集成等)進(jìn)行了重新設(shè)計(jì)。

    LangChain4j 提供了豐富的功能模塊,覆蓋 LLM 應(yīng)用開發(fā)的各個(gè)環(huán)節(jié):

核心能力說明
統(tǒng)一模型 API一套接口適配 OpenAI、通義千問、Ollama、Azure OpenAI、Anthropic 等 15+ 模型提供商
AI Service 抽象通過 Java 接口 + 注解定義 AI 服務(wù),像寫 MyBatis Mapper 一樣簡(jiǎn)單
對(duì)話記憶(Memory)內(nèi)置多輪對(duì)話記憶管理,支持內(nèi)存、持久化等多種策略
RAG(檢索增強(qiáng)生成)完整的 RAG Pipeline 支持:文檔加載 → 分割 → 向量化 → 檢索 → 生成
function Calling一套接口適配 OpenAI、通義千問、Ollama、Azure OpenAI、Anthropic 等 15+ 模型提供商
結(jié)構(gòu)化輸出將 LLM 的自然語(yǔ)言輸出自動(dòng)解析為 Java 對(duì)象(POJO)
流式響應(yīng)(Streaming)支持 SSE 流式輸出,提升用戶交互體驗(yàn)
Embedding & 向量存儲(chǔ)集成 Pinecone、Milvus、Redis、PGVector 等主流向量數(shù)據(jù)庫(kù)

二 項(xiàng)目示例

1 開發(fā)環(huán)境

  • IntelliJ IDEA
  • JDK 21
  • DeepSeek API,這里需要提前注冊(cè)申請(qǐng)。在DeepSeek開放平臺(tái)創(chuàng)建API keys:DeepSeek開發(fā)平臺(tái)
  • Langchain4j 1.0.1

2 代碼集成

2.1 添加版本依賴

    創(chuàng)建父模塊,添加Spring Ai相關(guān)依賴:

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--         springcloud alibaba 版本-->
            <dependency>
                <groupId>com.alibaba.cloud.ai</groupId>
                <artifactId>spring-ai-alibaba-starter</artifactId>
                <version>${spring-ai-alibaba.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.24</version>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-bom</artifactId>
                <version>${langchain4j.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
<!--            引入阿里云百煉平臺(tái)依賴-->
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-community-bom</artifactId>
                <version>${langchain4j-community.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

    創(chuàng)建子模塊,添加相關(guān)依賴:

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
        </dependency>
    </dependencies>

2.2 配置環(huán)境變量

    將大模型API Key 配置到環(huán)境變量。

2.3 配置多模型

@Configuration
public class LLMConfig {
    @Bean(name = "qwen")
    public ChatModel chatModelQwen(){
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("aliQwen-api"))
                .modelName("qwen-plus")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .logRequests(true)// 日志設(shè)置
                .logResponses(true)
                .maxRetries(2)// 重試次數(shù)
                .timeout(Duration.ofSeconds(5))//請(qǐng)求超時(shí)
                .build();
    }
    @Bean(name = "deepseek")
    public ChatModel chatModelDeepSeek(){
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("deepseek-api"))
                .modelName("deepseek-chat")
                .baseUrl("https://api.deepseek.com/v1")
                .build();
    }
}

2.3 基礎(chǔ)API調(diào)用

    在Controller層,注入模型Bean對(duì)象,調(diào)用接口?;A(chǔ)API可以獲得消耗token等數(shù)量。

    @Resource(name = "qwen")
    private ChatModel chatModel;
    @Resource(name = "deepseek")
    private ChatModel chatModelDeepseek;
    @GetMapping("/langchain4j/qwen/hello")
    public String hello(@RequestParam(value = "msg",defaultValue = "你是誰") String msg){
        String result = chatModel.chat(msg);
        System.out.println("調(diào)用大模型回復(fù):"+result);
        return result;
    }
    @GetMapping("/langchain4j/dp/hello")
    public String dpHello(@RequestParam(value = "msg",defaultValue = "你是誰") String msg){
        ChatResponse result = chatModelDeepseek.chat(UserMessage.from(msg));
        System.out.println("調(diào)用大模型回復(fù):"+result.aiMessage().text());
        TokenUsage tokenUsage = result.tokenUsage();
        System.out.println("消耗的token數(shù)量:"+tokenUsage.toString());
        return result.aiMessage().text();
    }

接口調(diào)用響應(yīng)如下:

2.4 高級(jí)API調(diào)用

    定義一個(gè)chat接口,并在LLMConfig 類配置對(duì)應(yīng)Bean對(duì)象。

public interface ChatAssitant {
    String chat(String prompt);
}
@Configuration
public class LLMConfig {
    @Bean(name = "qwen")
    public ChatModel chatModelQwen(){
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("aliQwen-api"))
                .modelName("qwen-plus")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .logRequests(true)// 開發(fā)時(shí),可打印請(qǐng)求request
                .logResponses(true)
                .maxRetries(2)// 重試次數(shù)
                .build();
    }
    @Bean(name = "deepseek")
    public ChatModel chatModelDeepSeek(){
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("deepseek-api"))
                .modelName("deepseek-chat")
                .baseUrl("https://api.deepseek.com/v1")
                .build();
    }
   @Bean
    public ChatAssitant chatAssitant(@Qualifier("qwen") ChatModel chatModelQwen){
        return AiServices.create(ChatAssitant.class,chatModelQwen);
    }
}

    在Controller層,使用高級(jí)API調(diào)用接口。

   @GetMapping("/highApi/hello")
    public String highApi(@RequestParam(value = "msg",defaultValue = "你是誰") String msg){
       return chatAssitant.chat(msg);
    }

接口調(diào)用響應(yīng)如下:

2.5 流式輸出對(duì)話

    在子模塊,添加相關(guān)依賴:

  <dependencies>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-reactor</artifactId>
        </dependency>
  </dependencies>

    配置對(duì)應(yīng)StreamingChatModel :

@Configuration
public class LLMConfig {
 @Bean(name = "qwen-plus")
    public StreamingChatModel streamingChatModelQwen(){
        return OpenAiStreamingChatModel.builder()
                .apiKey(System.getenv("aliQwen-api"))
                .modelName("qwen-plus")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
    }
  //流式輸出
    @Bean("chat2")
    public ChatAssitant2 chatAssitant2(StreamingChatModel streamingChatModel){
        return AiServices.create(ChatAssitant2.class,streamingChatModel);
    }
}

    定義一個(gè)chat接口,并在LLMConfig 類配置對(duì)應(yīng)Bean對(duì)象。

public interface ChatAssitant2 {
    String chat(String prompt);
    Flux<String> chatFlux(String prompt);
}

    在Controller層,調(diào)用API接口。

    @Autowired
    private StreamingChatModel streamingChatModel;
    @Autowired
    private ChatAssitant2 chatAssitant;
    @GetMapping(value = "/chatstream")
    public Flux<String> chat(@RequestParam(value = "prompt",defaultValue = "你是誰") String prompt){
       return Flux.create(emitter->{
            streamingChatModel.chat(prompt, new StreamingChatResponseHandler() {
                @Override
                public void onPartialResponse(String s) {
                    emitter.next(s);
                }
                @Override
                public void onCompleteResponse(ChatResponse chatResponse) {
                     emitter.complete();
                    // 可以獲取花費(fèi)的token
                }
                @Override
                public void onError(Throwable throwable) {
                    emitter.error(throwable);
                }
            });
        });
    }
		//高級(jí)API調(diào)用方式
    @GetMapping(value = "/chatstream2")
    public Flux<String> chat2(@RequestParam(value = "prompt",defaultValue = "南京有什么好吃的") String prompt){
        return chatAssitant.chatFlux(prompt);
    }

接口調(diào)用響應(yīng)如下:

2.5 集成Springboot

    創(chuàng)建子模塊,添加相關(guān)依賴:

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
        </dependency>
<!--        高級(jí)API-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

    配置文件中配置模型參數(shù)

server.port=9003
spring.application.name=langchain4j-springboot
langchain4j.open-ai.chat-model.api-key=${aliQwen-api}
langchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
langchain4j.open-ai.chat-model.model-name=qwen-plus

    定義一個(gè)chat接口,加上@AiService注解。

@AiService
public interface ChatAssitant {
    //定義系統(tǒng)提示詞
    @SystemMessage("你是一個(gè)友好的AI助手,名叫小智。你的回答簡(jiǎn)潔、專業(yè)、有條理。請(qǐng)使用中文回答。")
     String chat( String prompt);
}

    在Controller層,調(diào)用chat接口。

@RestController
public class AiServiceController {
   @Resource
    private ChatAssitant chatAssitantQwen;
    @GetMapping(value = "/boot/chat")
    public String chat(@RequestParam(value = "msg",defaultValue = "你是誰") String prompt){
        return chatAssitantQwen.chat(prompt);
    }
}

三 總結(jié)

    本文詳述了Spring,Springboot與LangChain4j集成構(gòu)建智能對(duì)話系統(tǒng)的全流程。了解了 LangChain4j 的定位、核心能力與發(fā)展趨勢(shì),了解了 Deepseek / 通義千問 模型的接入方式,掌握了LangChain4j API 基礎(chǔ)用法和高級(jí)用法。

到此這篇關(guān)于Springboot整合LangChain4j 全流程的文章就介紹到這了,更多相關(guān)Springboot整合LangChain4j內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

潼关县| 博爱县| 桃江县| 土默特右旗| 门头沟区| 无为县| 和平县| 德兴市| 咸丰县| 光山县| 舟山市| 广平县| 赞皇县| 蓝田县| 砀山县| 栾城县| 固原市| 康乐县| 苍溪县| 光泽县| 湟中县| 康马县| 长汀县| 堆龙德庆县| 张掖市| 中江县| 明水县| 青川县| 保德县| 衡阳县| 丹凤县| 华容县| 温宿县| 乐陵市| 宁强县| 莱阳市| 台湾省| 林西县| 永春县| 浏阳市| 屏山县|