LangChain4j 配置依赖问题java.lang.IllegalArgumentException: invocationContext cannot be null
·
LangChain4j有一个核心的设计模式是AI Service,但是最近学习的时候总是有一个测试类测试失败:
package com.wc.langchain4j.service;
import com.wc.langchain4j.LangChain4jApplication;
import com.wc.langchain4j.factory.AiCodeHelperServiceFactory;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ContextConfiguration;
@SpringBootTest
public class AiCodeHelperServiceTest {
@Autowired
private AiCodeHelperService aiCodeHelperService;
@Test
void chat(){
if (aiCodeHelperService == null) {
System.err.println("AiCodeHelperService is null!");
return;
}
String result = aiCodeHelperService.chat("你好");
System.out.println(result);
}
}
一直测试说是没有对应的bean,不可以注入空的依赖对象
java.lang.IllegalArgumentException: invocationContext cannot be null
就是这个问题控了我一天时间哈哈哈哈💦
问题就是Service类的工厂类没给Service类创造实例
service:负责业务接口定义
package com.wc.langchain4j.service;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
public interface AiCodeHelperService {
@SystemMessage("你是一位编程小助手")
String chat(@UserMessage String userMessage);
}
Factory:负责给Service具体依赖注入,算是实现这个接口
package com.wc.langchain4j.factory;
import com.wc.langchain4j.service.AiCodeHelperService;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.service.AiServices;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AiCodeHelperServiceFactory {
@Resource
private ChatModel deepseekChatModel;
@Bean
public AiCodeHelperService aiCodeHelperService() {
return AiServices.builder(AiCodeHelperService.class).chatModel(deepseekChatModel).build();
}
}
其中这个builder会创建一个model实体实现接口的代理对象
前面的报错导致我反反复复检查了 好几遍工厂类和Service,还有测试类,以为是测试类没有扫描到工厂类还手动导入了,又以为是工厂的注入bean名称有问题,手动指定bean名称
后面一直没招了,终于找到pom依赖上去了,尝试更新了一下依赖版本,
然后测试,
居然可以了!!!!!!!!!!!!!!!!!
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.11.0</version>
</dependency>
之前我一直用的是1.1.0的版本
shift!!!!!!!!!!又是依赖!!!!!!!!!!!
总之bean注入又问题,invoke为null的情况,不一定是配置bean有问题,有时候说不定是依赖版本太低不支持工厂的注入方法呢
💦💦,总算搞定了嗨嗨嗨
更多推荐


所有评论(0)