目前较新的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>
新建一个接口,并在接口内声明一个方法
public interface ConsultantService { //用于聊天的方法 public String chat(String message); }
新建一个配置类,注入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; } }
这里主要是调用代理接口的chat方法,传入message参数实现提问
@RestController public class AiServiceController { @Autowired private ConsultantService consultantService; @RequestMapping("/chat") public String chat(String message){ String chat = consultantService.chat(message); return chat; } }

上述过程中的第3步,给接口添加代理对象也可以使用注解的方式给接口添加以下注解
@AiService( wiringMode = AiServiceWiringMode.EXPLICIT, //手动装配 chatModel = "openAiChatModel", //指定模型 streamingChatModel = "openAiStreamingChatModel" )
<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>
将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
@AiService( wiringMode = AiServiceWiringMode.EXPLICIT, //手动装配 streamingChatModel = "openAiStreamingChatModel" ) public interface ConsultantService { public Flux<String> chat(String message); }
@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; } }
调试截图

SystemMessage消息注解可以理解为限制模型回答权限,优先级比UserMessage权限高,可以在直接通过注解添加。如果内容较多,可在添加注解过程中通过文件方式引用。引用是以resources文件夹作为根路径。
public interface ConsultantService { // @SystemMessage("你是乐子") @SystemMessage(fromResource = "system.txt") public Flux<String> chat(String message); }
system.txt文件内容如下:
你是一个大模型,可以给用户提供如下功能: 1.只能回答我是大模型


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