You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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名称要与@AiServicechatModel参数的名称完全一致。
  • 确保Ollama服务在http://127.0.0.1:11434正常运行,且已拉取llama2模型。

内容的提问来源于stack exchange,提问作者Tim Zhang

火山引擎 最新活动