LangChain4j @AiService注入OllamaChatModel触发NPE问题排查
问题分析
报错核心原因:
- 手动实现了被
@AiService标记的Assistant接口,导致LangChain4j的Spring自动代理逻辑冲突,无法正确识别@AiService注解(即报错中的aiServiceAnnotation为null)。 - 未将
OllamaChatModel注册为Spring容器中的Bean,@AiService无法找到指定名称的chatModel实例。
正确配置步骤
1. 移除手动实现的LlamaService类
@AiService的作用是让LangChain4j自动生成接口的代理实现类,无需手动编写实现类,请删除你编写的LlamaService类。
2. 将OllamaChatModel注册为Spring Bean
通过配置类将OllamaChatModel注入Spring容器,确保Bean名称与@AiService中指定的chatModel参数一致:
import dev.langchain4j.model.ollama.OllamaChatModel; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OllamaConfig { @Bean(name = "ollamaChatModel") public OllamaChatModel ollamaChatModel() { return OllamaChatModel.builder() .temperature(0.4) .responseFormat(OllamaChatModel.ResponseFormat.JSON) .modelName("llama2") .baseUrl("http://127.0.0.1:11434") .build(); } }
注意:确保ResponseFormat.JSON的导入路径为OllamaChatModel.ResponseFormat.JSON。
3. 修正@AiService接口配置
保留Assistant接口,确保@AiService配置正确,无需手动实现该接口:
import dev.langchain4j.service.AiService; import dev.langchain4j.service.SystemMessage; @AiService(wiringMode = AiService.WiringMode.EXPLICIT, chatModel = "ollamaChatModel") public interface Assistant { @SystemMessage("You are a polite assistant") String chat(String userMessage); }
4. 依赖版本优化(可选)
beta版本可能存在兼容性问题,建议升级到稳定版:
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-ollama</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency>
5. 注入使用Assistant接口
在需要调用的类中直接注入Assistant接口,Spring会自动注入LangChain4j生成的代理实例:
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class ChatController { private final Assistant assistant; public ChatController(Assistant assistant) { this.assistant = assistant; } @PostMapping("/chat") public String chat(@RequestBody String userMessage) { return assistant.chat(userMessage); } }
关键注意事项
- 禁止手动实现被
@AiService标记的接口,否则会破坏LangChain4j的自动代理逻辑,引发注解识别异常。 - 必须将ChatModel注册为Spring Bean,且Bean名称要与
@AiService中chatModel参数的名称完全一致。 - 确保Ollama服务在
http://127.0.0.1:11434正常运行,且已拉取llama2模型。
内容的提问来源于stack exchange,提问作者Tim Zhang




