【LangChain4j】大模型实战-SpringBoot(阿里云百炼控制台)

一、介绍

LangChain4j 是一个专为 Java 和 Kotlin 开发者设计的开源 AI 框架,旨在简化和加速基于大语言模型(LLM)的应用程序开发。它是广受欢迎的 Python 库 LangChain 的官方 Java 实现,致力于将 LangChain 的强大功能与设计理念完整地带入 JVM 生态系统。它是一个模块化的 AI 开发工具包,提供了一套完整的组件和 API,帮助开发者快速构建智能应用。

通过 LangChain4j,Java 开发者可以轻松地将大语言模型集成到企业级应用中,无需从零构建复杂的底层逻辑。

二、简单对话调用实现步骤

1. 引入LangChain4j依赖

   <!-- https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-open-ai -->
   <!--LangChain4j依赖 -->
   <dependency>
       <groupId>dev.langchain4j</groupId>
       <artifactId>langchain4j-open-ai</artifactId>
       <version>1.1.0</version>
   </dependency>

2. 获取Api Key 和 Base url

阿里云百炼平台访问地址:https://bailian.console.aliyun.com

配置环境变量:

到模型广场找想使用的大模型的base url:

3. 构建OpenAiChatModel对象,调用chat方法

@SpringBootTest
class Langchain4jDemoApplicationTests {
    public static void main(String[] args) {
        // 创建OpenAiChatModel模型对象
        OpenAiChatModel model = OpenAiChatModel.builder()
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")  // 模型地址
                .apiKey(System.getenv("API-KEY"))  // 获取系统环境变量的API-KEY
                .modelName("qwen-plus")  // 模型名称
                .build();  // 构建模型对象
        // 调用模型对象chat方法,获取模型结果
        System.out.println(model.chat("你好"));
    }
}

注意:设置完环境变量后要重启编辑器

运行获取输出结果:

添加请求和响应信息打印:

 .logRequests(true)   // 打印请求信息
 .logResponses(true)  // 打印响应信息

三、完整会话功能实现步骤

1. 会话功能

Springboot项目勾选spring web起步依赖,添加下方LangChain4j起步依赖


<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
    <version>1.0.1-beta6</version>
</dependency>

配置application.yaml文件

langchain4j:
  open-ai:
    chat-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${API-KEY}
      model-name: qwen-plus

创建Controller类

@RestController
@RequestMapping("/api")
public class ChatController {
    @Autowired
    private OpenAiChatModel model;
    @GetMapping("/chat")
    public String chat(String message) {
        return model.chat(message);
    }
}

@RestController=@Controller + @ResponseBody 

标明控制器,并表示所有方法的返回值都为HTTP响应体,通常为Json或文本格式

使用@Autowired注解,自动从容器中获取OpenAiChatModel类型的实例并注入到该变量中(OpenAiChatModel起步依赖已由springboot接管并自动配置)

@GetMapping("/chat"):表示该方法处理 HTTP GET 请求,完整访问路径为/api/chat

方法参数String message:Spring 会自动从请求参数中获取名为message的参数值并传入

调用OpenAiChatModelchat方法,将接收的message作为输入发送给 OpenAI 模型,然后将模型返回的结果直接作为 HTTP 响应返回

测试效果:

2. 日志功能

修改application.yaml配置文件

langchain4j:
  open-ai:
    chat-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${API-KEY}
      model-name: qwen-plus
      log-requests: true
      log-responses: true

logging:
  level:
    dev.langchain4j: DEBUG

重新启动,进行测试:

日志输出如下:

四、AiServices工具类使用

(1)继续引入AiServices依赖

 <!--AiServices依赖-->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-spring-boot-starter</artifactId>
    <version>1.0.1-beta6</version>
</dependency>

(2)声明接口

package com.breeze.langchain4jdemo.service;

public interface ConsultantService {
    // 用于聊天的方法
    public String chat(String message);
}

(3)使用AiServices为接口创建代理对象

@Configuration
public class CommonConfig {
    @Autowired
    private OpenAiChatModel model;
    @Bean
    public ConsultantService consultantService(){
        ConsultantService consultantService = AiServices.builder(ConsultantService.class)
                .chatModel( model)
                .build();
        return consultantService;
    }
}
  • @Configuration:标识该类是一个 Spring 配置类,用于定义 Bean(组件)并交给 Spring 容器管理。Spring 会扫描并加载该类中的配置,将其中定义的 Bean 注册到容器中。

@Autowired:自动从 Spring 容器中注入OpenAiChatModel类型的实例。OpenAiChatModel是 LangChain4J 提供的 OpenAI 聊天模型封装类,负责与 OpenAI API 交互。

  • @Bean:标识该方法会创建一个 Bean,并将其注册到 Spring 容器中。其他组件可以通过@Autowired自动注入ConsultantService实例使用。
  • AiServices.builder(...):LangChain4J 提供的工具类,用于创建 “AI 增强的服务”。它可以将一个普通的接口(ConsultantService)与 AI 模型(如 OpenAI)绑定,让接口方法具备调用 AI 的能力。
    • ConsultantService.class:传入一个接口类,LangChain4J 会为该接口生成实现类,实现类的方法会自动调用 AI 模型处理逻辑。
    • .chatModel(model):指定使用注入的OpenAiChatModel作为底层 AI 模型,即接口方法的逻辑会通过该模型与 OpenAI 交互。
    • .build():构建并返回ConsultantService的实例。

(4)控制器部分

@RestController
@RequestMapping("/api")
public class ChatController {

    @Autowired
    private ConsultantService consultantService;

    @GetMapping("/chat")
    public String chat(String message) {
        return consultantService.chat(message);
    }
}
  • @Autowired从 Spring 容器中自动获取ConsultantService类型的实例并注入到该变量中。
  • ConsultantService一个自定义的服务接口(由AiServices生成实现类,结合了 AI 模型能力),用于处理聊天逻辑并与 AI 模型交互。

仍然正常响应:

方法二:使用声明式注解

去掉config配置类,直接使用@AiServices注解即可

@AiService
public interface ConsultantService {
    // 用于聊天的方法
    public String chat(String message);
}

其他部分不变,成功运行

五、流式调用

(1)引入依赖

       <!--流式调用依赖·-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-reactor</artifactId>
            <version>1.0.1-beta6</version>
        </dependency>

(2)配置流式模型对象

langchain4j:
  open-ai:
    chat-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${API-KEY}
      model-name: qwen-plus
      log-requests: true
      log-responses: true
    streaming-chat-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${API-KEY}
      model-name: qwen-plus
      log-requests: true
      log-responses: true
    
logging:
  level:
    dev.langchain4j: DEBUG

(3)切换接口中方法的返回值类型

@AiService(
  wiringMode = AiServiceWiringMode.EXPLICIT,
        chatModel = "openAiChatModel",
        streamingChatModel = "openAiStreamingChatModel"
)
public interface ConsultantService {
    // 用于聊天的方法
    public Flux<String> chat(String message);
}

(4)修改Controller

返回值修改为Flux<String> ,produces = "text/html;charset=utf-8"防止乱码

@RestController
@RequestMapping("/api")
public class ChatController {

    @Autowired
    private ConsultantService consultantService;

    @GetMapping(value = "/chat",produces = "text/html;charset=utf-8")
    public Flux<String> chat(String message) {
        return consultantService.chat(message);
    }

流式输出实现效果:

六、消息注解

@SystemMessage

在业务层方法上添加@SystemMessage注解实现系统角色设定:

public interface ConsultantService {
    // 用于聊天的方法
    @SystemMessage("你是一个吉他手,很擅长弹吉他")
    public Flux<String> chat(String message);
}

测试效果:

--------配置文件形式--------

在resources下创建配置文件 .txt   文件内容按照实际需求写

业务类方法注解给出文件路径

public interface ConsultantService {
    // 用于聊天的方法
    @SystemMessage(fromResource = "system.txt")
    public Flux<String> chat(String message);
}

测试效果:

由此可见,大模型已经完全按照预设的格式输出内容,对于不相关的问题拒绝回答。

@UserMessage

在业务层方法上添加@UserMessage注解实现用户角色设定:

public interface ConsultantService {
    // @SystemMessage(fromResource = "system.txt")

    @UserMessage("你是一位厨师,{{it}}")
    public Flux<String> chat(String message);
}

实现效果:

使用@V注解修改占位词

后续--> 会话记忆+RAG+Tools 即将出炉,期待下一篇文章!

<think>好的,我现在需要帮助用户在Spring Boot项目中集成阿里云百炼平台的多轮对话功能,使用langchain4j-community-dashscope-spring-boot-starter依赖。首先,我得回顾一下用户提供的引用内容,确保配置步骤正确。 用户提到需要配置依赖,引用[2]中的代码示例显示需要添加langchain4j-community-dashscope-spring-boot-starterlangchain4j核心库以及WebFlux依赖。所以第一步是确认pom.xml中的依赖是否正确。此外,用户可能还需要在application.yml中配置API密钥和服务参数,比如dashscope.api-key和dashscope.service,这里需要提醒用户替换为自己的实际信息。 接下来,用户需要创建Controller来处理多轮对话。根据引用[1]中的启动类示例,用户已经有了基本的Spring Boot结构,但需要添加一个RestController。这里可能需要使用@RestController和@PostMapping注解,并注入DashScopeChatModel来调用服务。 然后,多轮对话需要维护对话历史,所以需要设计一个数据结构来保存历史消息。例如,使用List<ChatMessage>来存储每次的请求和响应。每次用户发送消息时,将用户输入加入历史,调用模型生成回复,再将回复加入历史,最后返回结果。 需要注意的是,用户可能对异步处理感兴趣,因为引用了WebFlux依赖。因此,可能需要使用Mono或Flux来支持响应式编程,但根据用户当前需求,可能先提供同步示例,再提及异步选项。 最后,要检查是否遗漏了任何配置步骤,比如API密钥的获取方式,或者是否需要处理异常情况。同时,生成的相关问题需要围绕配置、依赖管理、多轮对话实现和高级功能展开,帮助用户进一步探索。</think>### Spring Boot集成阿里云百炼多轮对话功能配置步骤 #### 一、基础环境配置 1. **引入依赖** 在`pom.xml`中添加以下依赖(注意版本号需与SpringBoot 3.x兼容): ```xml <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId> <version>1.0.0-beta2</version> </dependency> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j</artifactId> <version>1.0.0-beta2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> ``` 2. **API密钥配置** 在`application.yml`中添加阿里云密钥: ```yaml dashscope: api-key: "your-api-key" # 阿里云控制台获取 service: "dashscope" # 服务标识 ``` #### 二、多轮对话实现 1. **对话历史管理** 使用`ChatMemory`组件维护上下文: ```java @Bean public ChatMemory chatMemory() { return new TokenWindowChatMemory(500); // 限制最大token数 } ``` 2. **服务层实现** ```java @Service public class ChatService { @Autowired private DashScopeChatModel chatModel; @Autowired private ChatMemory chatMemory; public String multiTurnChat(String userInput) { chatMemory.add(ChatMessage.fromUser(userInput)); AssistantMessage response = chatModel.generate( chatMemory.messages(), ModelOptions.Temperature.of(0.7) ).content(); chatMemory.add(response); return response.text(); } } ``` 3. **控制器层** ```java @RestController @RequestMapping("/chat") public class ChatController { @Autowired private ChatService chatService; @PostMapping("/multi-turn") public Mono<String> handleChat(@RequestBody String message) { return Mono.just(chatService.multiTurnChat(message)); } } ``` #### 三、测试验证 发送POST请求测试: ```bash curl -X POST http://localhost:8080/chat/multi-turn -H "Content-Type: text/plain" -d "如何做番茄炒蛋?" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值