前言
AI Agent是2026年最热门的技术方向之一。本文用LangChain4j带你从零开始构建一个Java智能体,实现对话、工具调用和记忆功能。
一、什么是AI Agent?
AI Agent(智能体)是能够自主决策并执行任务的AI系统,核心能力:
- 理解意图:解析用户自然语言
- 规划任务:分解复杂任务为步骤
- 调用工具:使用外部API或函数
- 记忆上下文:维护对话历史
二、环境准备
<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接口
- 配置语言模型
- 添加工具(可选)
- 配置记忆(可选)
- 构建并使用
AI Agent正在改变软件开发方式,现在就开始构建你的第一个智能体吧!
本文由AI辅助创作。
文章摘自:https://www.cnblogs.com/czlws/p/19774612
