环境准备

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
    <version>0.35.0</version>
</dependency>
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>0.35.0</version>
</dependency>

回到顶部

三、基础对话Agent

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.UserMessage;

// 定义Agent接口
public interface ChatAgent {
    @UserMessage("{{it}}")
    String chat(String message);
}

// 创建Agent实例
ChatLanguageModel model = OpenAiChatModel.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .modelName("gpt-4")
    .build();

ChatAgent agent = AiServices.builder(ChatAgent.class)
    .chatLanguageModel(model)
    .build();

// 使用
String response = agent.chat("你好,请介绍一下Java线程池");
System.out.println(response);

回到顶部

四、带工具的Agent

import dev.langchain4j.agent.tool.Tool;
import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.UserMessage;

public interface ToolAgent {
    @UserMessage("{{it}}")
    String chat(@MemoryId String sessionId, String message);
}

// 定义工具类
public class WeatherTools {
    
    @Tool("获取指定城市的天气信息")
    public String getWeather(String city) {
        // 实际调用天气API
        return city + "今天晴,25°C";
    }
    
    @Tool("获取当前时间")
    public String getCurrentTime() {
        return LocalDateTime.now().toString();
    }
}

// 创建带工具的Agent
ToolAgent agent = AiServices.builder(ToolAgent.class)
    .chatLanguageModel(model)
    .tools(new WeatherTools())
    .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))
    .build();

// Agent会自动判断何时调用工具
String response = agent.chat("session-1", "北京今天天气怎么样?");

回到顶部

五、带记忆的Agent

import dev.langchain4j.memory.chat.MessageWindowChatMemory;

// 为每个用户会话创建独立记忆
ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(20);

ChatAgent agent = AiServices.builder(ChatAgent.class)
    .chatLanguageModel(model)
    .chatMemory(chatMemory)
    .build();

// 多轮对话保持上下文
agent.chat("我叫张三");  // 记住名字
agent.chat("我叫什么?"); // 回答:你叫张三

回到顶部

六、流式输出

import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;

StreamingChatLanguageModel streamingModel = OpenAiStreamingChatModel.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .build();

// 实时输出,类似ChatGPT的效果
streamingModel.generate("写一首关于Java的诗", new StreamingResponseHandler() {
    @Override
    public void onNext(String token) {
        System.out.print(token);  // 逐字输出
    }
    
    @Override
    public void onComplete(Response response) {
        System.out.println("\n输出完成");
    }
});

回到顶部

七、完整实战案例

@SpringBootApplication
public class AgentApplication {
    
    @Bean
    public ChatLanguageModel chatLanguageModel() {
        return OpenAiChatModel.builder()
            .apiKey("${openai.api-key}")
            .modelName("gpt-4")
            .build();
    }
    
    @Bean
    public Assistant assistant(ChatLanguageModel model) {
        return AiServices.builder(Assistant.class)
            .chatLanguageModel(model)
            .tools(new Calculator(), new WeatherService())
            .chatMemoryProvider(id -> MessageWindowChatMemory.withMaxMessages(10))
            .build();
    }
}

@RestController
public class ChatController {
    
    @Autowired
    private Assistant assistant;
    
    @PostMapping("/chat")
    public String chat(@RequestBody ChatRequest request) {
        return assistant.chat(request.getSessionId(), request.getMessage());
    }
}

回到顶部

总结

LangChain4j让Java开发者也能轻松构建AI Agent。核心步骤:

  1. 定义Agent接口
  2. 配置语言模型
  3. 添加工具(可选)
  4. 配置记忆(可选)
  5. 构建并使用
Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐