颜清华 发表于 2025-11-5 12:01:53

2. LangChain4J 中的 Hello World

2. LangChain4J 中的 Hello World

@
目录

[*]2. LangChain4J 中的 Hello World
[*]1. 接入阿里百炼大模型 —— 通义千问
[*]2. 接入 DeepSeek 大模型
[*]3. 同时接入 DeepSeek 和 通义千问
[*]4. 最后:

1. 接入阿里百炼大模型 —— 通义千问

接入阿里百炼平台的通义模型:https://bailian.console.aliyun.com/?tab=home#/home
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744138-21178613.png
大模型调用三件套:

[*]获得对应大模型的 Api-Key
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745324-1020787527.png

[*]获得模型名:
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745927-751240945.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745841-2119771423.png

[*]获得 baseUrl 开发地址:
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745790-196412328.png
假设你要换一个模型实例:
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745815-9874481.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744530-296458903.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744221-1581004353.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744093-632697768.png
初始总 pom.xml
    4.0.0    com.atguigu.stduy    langchain4j-atguiguV5    1.0-SNAPSHOT    pom    langchain4j-atguiguV5-Maven父工程POM配置            UTF-8      UTF-8      17      17      17                3.5.0                1.0.0                1.0.0-M6.1                1.0.1                1.0.1-beta6                3.1.1      1.3.0      3.8.1                                                      org.springframework.boot                spring-boot-dependencies                ${spring-boot.version}                pom                import                                                    org.springframework.ai                spring-ai-bom                ${spring-ai.version}                pom                import                                                    com.alibaba.cloud.ai                spring-ai-alibaba-starter                ${spring-ai-alibaba.version}                                                    dev.langchain4j                langchain4j-bom                ${langchain4j.version}                pom                import                                                    dev.langchain4j                langchain4j-community-bom                ${langchain4j-community.version}                pom                import                                                                org.springframework.boot                spring-boot-maven-plugin                ${spring-boot.version}                                        org.apache.maven.plugins                maven-deploy-plugin                ${maven-deploy-plugin.version}                                    true                                                      org.apache.maven.plugins                maven-compiler-plugin                ${maven-compiler-plugin.version}                                    ${java.version}                                          -parameters                                                                            org.codehaus.mojo                flatten-maven-plugin                ${flatten-maven-plugin.version}                true                                                            flatten                        process-resources                                                    flatten                                                                            true                            ossrh                                                            remove                              remove                              remove                              keep                              keep                              resolve                                                                                                                  flatten.clean                        clean                                                    clean                                                                                                            spring-milestones            Spring Milestones            https://repo.spring.io/milestone                            false                                        spring-snapshots            Spring Snapshots            https://repo.spring.io/snapshot                            false                                        aliyunmaven            aliyun            https://maven.aliyun.com/repository/public                                    public            aliyun nexus            https://maven.aliyun.com/repository/public                            true                                        false                        https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744129-1038020596.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744820-1749037021.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745137-5198406.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745230-444920331.png
配置我们对应进入的大模型的三件套:对应大模型的 Key,模型名,调用地址:
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744510-912529771.png
我们可以将上述大模型三件套写入到 application.properties 配置文件当中如下:
我们接入阿里百炼大模型——
server.port=9001spring.application.name=langchain4j-01helloworld# alibaba qwen-turbo-0624       help langchain4j# https://bailian.console.aliyun.com/#/model-market/detail/qwen-turbo-0624#langchain4j.open-ai.chat-model.api-key=${aliQwen-api}langchain4j.open-ai.chat-model.api-key=sk-d2902588e5eb45ssssdasfaf4xxxxlangchain4j.open-ai.chat-model.model-name=qwen-pluslangchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120747609-388839086.png
编写对外的 Cutroller
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744186-1182299899.png
package com.rainbowsea.langchain4j01helloworld.controller;import dev.langchain4j.model.chat.ChatModel;import jakarta.annotation.Resource;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestController@Slf4jpublic class HelloLangChain4JController {    @Resource    private ChatModel chatLanguageModel;    // http://localhost:9001/langchain4j/hello?prompt=你是谁    @GetMapping(value = "/langchain4j/hello")    public String hello(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)    {      String result = chatLanguageModel.chat(prompt);      System.out.println("通过langchain4j调用模型返回结果:\n"+result);      return result;    }}运行测试:
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745028-1630656495.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744128-11821980.png
2. 接入 DeepSeek 大模型

上述我们是将大模型的 Key 配置到了,application.properties 配置文件当中。
这种方式不太安全,官方建议我们将其配置到系统变量当中。让程序去系统变量当中获取。

[*]https://docs.langchain4j.info/get-started
[*]https://docs.langchain4j.dev/get-started
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744136-1003708812.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745058-2088544944.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745230-1004210602.png
特别注意:想让 IDEA 可以读取到我们系统变量当中的值,需要重启 IDEA,如果重启 IDEA 还是读取不到我们系统变量当中的值,则重启系统即可。
你在系统变量名可以随意,尽量见名之意,不要中文,对应变量名的值,就是你对应大模型的 key 的值。
在系统环境变量当中的值,有两种获取方式。

[*]第一种就是:我们在 application.yaml / properties 配置文件当中,使用 ${}占位符。如下图所示:
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744534-1613428108.png

[*]第二种方式:就是编写我们的 config 配置类,读取我们系统当中的配置大模型 key 。
这里我们使用配置类的方式,配置我们连接操作 DeepSeek 大模型的三件套配置信息(大模型的 key,name,url)。这些从 DeepSeek 开发文档当中就可以获取到
https://api-docs.deepseek.com/zh-cn/
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745570-1793572794.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745804-1921095533.png
package com.rainbowsea.langchain4j01helloworld.config;//import dev.langchain4j.model.chat.ChatLanguageModel;import dev.langchain4j.model.chat.ChatModel;import dev.langchain4j.model.openai.OpenAiChatModel;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class LLMConfig {    // DeepSeek    @Bean    public ChatModel ChatLanguageModel() {      //String apiKey = System.getenv("deepseek_api");      return OpenAiChatModel.builder()                .apiKey(System.getenv("deepseek_api"))                .modelName("deepseek-chat")                .baseUrl("https://api.deepseek.com/v1")                .build();    }    // aliQwen_api    //@Bean    //public ChatModel ChatLanguageModel() {    //    //String apiKey = System.getenv("aliQwen_api");    //    return OpenAiChatModel.builder()    //            .apiKey(System.getenv("aliQwen_api"))    //            .modelName("qwen-plus")    //            .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")    //            .build();    //}}https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744372-269066899.png
还是之前的那个 Cutroller ,不同的是我们这次接入的是 DeepSeek 大模型。
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744179-1684959676.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744090-11607811.png
3. 同时接入 DeepSeek 和 通义千问

我们可以同时接入DeepSeek 和 通义千问 两个大模型,进行一个切换使用。
就是将这两个大模型的配置,都编写好,切换着使用即可。如下:
我们将这两个大模型的配置三件套,都写入到我们的配置类当中。如下:
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745633-1552235495.png
package com.rainbowsea.langchain4j01helloworld.config;//import dev.langchain4j.model.chat.ChatLanguageModel;import dev.langchain4j.model.chat.ChatModel;import dev.langchain4j.model.openai.OpenAiChatModel;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class LLMConfig {    // DeepSeek    //@Bean    @Bean(name = "deepseek")    public ChatModel chatModelDeepSeek() {      //String apiKey = System.getenv("deepseek_api");      return OpenAiChatModel.builder()                .apiKey(System.getenv("deepseek_api"))                .modelName("deepseek-chat")                .baseUrl("https://api.deepseek.com/v1")                .build();    }    // aliQwen_api    //@Bean    @Bean(name = "qwen")    public ChatModel chatModelQwen() {      //String apiKey = System.getenv("aliQwen_api");      return OpenAiChatModel.builder()                .apiKey(System.getenv("aliQwen_api"))                .modelName("qwen-plus")                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")                .build();    }}https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745976-595426337.png
package com.rainbowsea.langchain4j01helloworld.controller;import dev.langchain4j.model.chat.ChatModel;import jakarta.annotation.Resource;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;/** */@RestController@Slf4jpublic class MultiModelController{    @Resource(name = "qwen")    private ChatModel chatModelQwen;    @Resource(name = "deepseek")    private ChatModel chatModelDeepSeek;    // http://localhost:9001/multimodel/qwen    @GetMapping(value = "/multimodel/qwen")    public String qwenCall(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)    {      String result = chatModelQwen.chat(prompt);      System.out.println("通过langchain4j调用模型返回结果:\n"+result);      return result;    }    // http://localhost:9001/multimodel/deepseek    @GetMapping(value = "/multimodel/deepseek")    public String deepseekCall(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt)    {      String result = chatModelDeepSeek.chat(prompt);      System.out.println("通过langchain4j调用模型返回结果:\n"+result);      return result;    }}测试:
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745778-1599301087.png
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120744189-655343278.png
web开发中的 token 和 大模型中的 token 的区别:?
用途不同:

[*]Web开发中的Token通过加密字符串验证用户身份或授权访问资源,例如JWT令牌用于API访问权限控制。
[*]大模型中的Token将文本拆分为最小处理单元(如词元),用于模型计算,例如将中文句子拆分为字、词或符号序列。
生成机制不同:

[*]Web Token通常由加密算法生成唯一字符串(如JWT包含用户信息)。
[*]大模型Token通过特定算法(如分词规则)对文本进行拆分,不同模型拆分规则可能不同。
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745008-1594452784.png
4. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”
https://img2024.cnblogs.com/blog/3084824/202508/3084824-20250826120745764-726078487.gif

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

摹熹 发表于 2025-11-20 15:57:21

分享、互助 让互联网精神温暖你我

兑谓 发表于 2025-11-27 18:24:10

东西不错很实用谢谢分享

煅汾付 发表于 前天 19:30

很好很强大我过来先占个楼 待编辑
页: [1]
查看完整版本: 2. LangChain4J 中的 Hello World