什么是AI Agent?
环境准备
<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。核心步骤:
- 定义Agent接口
- 配置语言模型
- 添加工具(可选)
- 配置记忆(可选)
- 构建并使用
