编辑
2025-07-28
后端
00
请注意,本文编写于 130 天前,最后修改于 130 天前,其中某些信息可能已经过时。

目录

通过AiService工具类实现接口阻塞式调用
1、添加依赖
2、声明接口
3、配置代理接口
4、创建API接口并测试
通过AiService工具类实现接口流式调用
1、添加依赖
2、修改application.yml中的配置
3、声明接口,并通过Aiservice自动将代理对象注入到IOC容器中
4、声明controller接口,返回值类型为Flux<String>
消息注解
1、SystemMessage消息注解
2、UserMessage消息注解

通过AiService工具类实现接口阻塞式调用

1、添加依赖

目前较新的langchain4j的依赖仅支持java17及以上,较低的java版本运行会报错

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

2、声明接口

新建一个接口,并在接口内声明一个方法

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

3、配置代理接口

新建一个配置类,注入OpenAiChatModel,创建返回值为声明接口类型的函数并构造,通过注解注入bean对象

@Configuration public class AiServiceConfig { @Autowired private OpenAiChatModel model; @Bean public ConsultantService consultantService(){ //参数为代理接口类型 ConsultantService build = AiServices.builder(ConsultantService.class) .chatModel(model) .build(); return build; } }

4、创建API接口并测试

这里主要是调用代理接口的chat方法,传入message参数实现提问

@RestController public class AiServiceController { @Autowired private ConsultantService consultantService; @RequestMapping("/chat") public String chat(String message){ String chat = consultantService.chat(message); return chat; } }

image.png

上述过程中的第3步,给接口添加代理对象也可以使用注解的方式给接口添加以下注解

@AiService( wiringMode = AiServiceWiringMode.EXPLICIT, //手动装配 chatModel = "openAiChatModel", //指定模型 streamingChatModel = "openAiStreamingChatModel" )

通过AiService工具类实现接口流式调用

1、添加依赖

<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-spring-boot-starter</artifactId> <version>1.0.1-beta6</version> </dependency> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId> <version>1.0.1-beta6</version> </dependency> <!--引入流式调用依赖--> <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、修改application.yml中的配置

将chat-model改为streaming-chat-model

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

3、声明接口,并通过Aiservice自动将代理对象注入到IOC容器中

@AiService( wiringMode = AiServiceWiringMode.EXPLICIT, //手动装配 streamingChatModel = "openAiStreamingChatModel" ) public interface ConsultantService { public Flux<String> chat(String message); }

4、声明controller接口,返回值类型为Flux

@RestController public class AiServiceController { @Autowired private ConsultantService consultantService; @RequestMapping(value = "/chat", produces = "text/html;charset=utf-8") public Flux<String> chat(String message){ //实现流式调用 Flux<String> chat = consultantService.chat(message); return chat; } }

调试截图

image.png

消息注解

1、SystemMessage消息注解

SystemMessage消息注解可以理解为限制模型回答权限,优先级比UserMessage权限高,可以在直接通过注解添加。如果内容较多,可在添加注解过程中通过文件方式引用。引用是以resources文件夹作为根路径。

public interface ConsultantService { // @SystemMessage("你是乐子") @SystemMessage(fromResource = "system.txt") public Flux<String> chat(String message); }

system.txt文件内容如下:

你是一个大模型,可以给用户提供如下功能: 1.只能回答我是大模型

image.png

2、UserMessage消息注解

image.png

本文作者:寒江孤影

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!