Java AI开发实战指南:从零开始掌握LangChain4j应用开发
【免费下载链接】langchain4j-examples项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j-examples
LangChain4j作为Java生态中领先的大语言模型集成框架,为开发者提供了构建智能代理、自动化工作流和知识库系统的完整工具链。本文将通过实战案例带你系统掌握LangChain4j的核心功能,从基础配置到高级应用,全面提升Java AI开发能力。
1. 环境搭建:5分钟启动LangChain4j开发
1.1 项目初始化
首先克隆官方示例仓库,获取完整的代码模板:
git clone https://gitcode.com/GitHub_Trending/la/langchain4j-examples进入项目根目录,通过Maven构建基础环境:
cd langchain4j-examples ./mvnw clean compile1.2 API密钥配置
创建ApiKeys.java文件,集中管理各AI服务提供商的凭证:
public class ApiKeys { // OpenAI API密钥配置 public static String openAiApiKey() { return System.getenv("OPENAI_API_KEY"); } // Azure OpenAI配置(如使用微软云服务) public static String azureOpenAiApiKey() { return System.getenv("AZURE_OPENAI_API_KEY"); } }⚠️ 安全提示:生产环境中建议使用环境变量或配置服务器管理密钥,避免硬编码
1.3 第一个AI服务
创建基础聊天服务实例,这是所有LangChain4j应用的起点:
// 从*other-examples模块*中获取的基础示例 ChatModel chatModel = OpenAiChatModel.builder() .apiKey(ApiKeys.openAiApiKey()) .modelName("gpt-3.5-turbo") .temperature(0.7) // 控制输出随机性,0=确定性,1=高度随机 .build(); // 发送简单消息并获取响应 String response = chatModel.generate("解释什么是大语言模型"); System.out.println(response);2. 智能代理开发:3大核心组件解析 🤖
2.1 工具定义与集成
工具是智能代理与外部系统交互的桥梁,以天气查询工具为例:
// 定义工具接口 public interface WeatherTool { // @Tool注解标记该方法可被AI调用 @Tool("获取指定城市的当前天气") WeatherInfo getCurrentWeather(String city); } // 实现工具 public class WeatherToolImpl implements WeatherTool { @Override public WeatherInfo getCurrentWeather(String city) { // 实际实现调用天气API的逻辑 return weatherService.fetch(city); } }2.2 代理配置与运行
通过AiService注解快速创建具备工具使用能力的智能代理:
// 定义AI服务接口 @AiService public interface WeatherAssistant { String answerWeatherQuestion(String question); } // 创建代理实例并使用 WeatherAssistant assistant = AiServices.create( WeatherAssistant.class, chatModel, new WeatherToolImpl() // 注入工具 ); // 调用代理处理用户查询 String result = assistant.answerWeatherQuestion("北京今天天气怎么样?");2.3 对话记忆管理
实现上下文感知的对话系统,使用内置的内存管理机制:
// 配置带记忆的AI服务 ChatMemory chatMemory = TokenWindowChatMemory.withMaxTokens(2000); WeatherAssistant assistant = AiServices.builder(WeatherAssistant.class) .chatLanguageModel(chatModel) .tools(new WeatherToolImpl()) .chatMemory(chatMemory) .build(); // 多轮对话保持上下文 assistant.answerWeatherQuestion("上海明天会下雨吗?"); assistant.answerWeatherQuestion("那我需要带伞吗?"); // 理解"那"指代上海明天的天气3. 工作流引擎:4种控制模式深度应用 ⚙️
3.1 顺序工作流
通过SequentialWorkflow实现任务的线性执行,适用于步骤明确的业务流程:
// 来自*agentic-tutorial模块*的顺序工作流示例 SequentialWorkflow workflow = SequentialWorkflow.builder() .step(cvGenerator) // 步骤1:生成简历初稿 .step(cvReviewer) // 步骤2:评审简历内容 .step(cvFormatter) // 步骤3:格式化简历排版 .build(); // 执行工作流并获取结果 WorkflowExecutionResult result = workflow.execute(initialCvData);3.2 条件分支工作流
基于业务规则动态选择执行路径,在_5a_Conditional_Workflow_Example.java中展示:
ConditionalWorkflow workflow = ConditionalWorkflow.builder() .condition("if application.status == 'new' then route to triage else route to review") .when("triage", triageAgent) .when("review", reviewAgent) .default(escalationAgent) .build();3.3 循环工作流
通过LoopWorkflow实现任务的迭代优化,如简历持续改进流程:
LoopWorkflow workflow = LoopWorkflow.builder() .agent(cvImprover) // 执行改进的智能代理 .condition(context -> { // 循环条件:评分低于90分继续优化 return context.get("score") < 90; }) .maxIterations(5) // 防止无限循环的安全机制 .build();3.4 并行工作流
利用多代理同时处理任务,显著提升处理效率:
ParallelWorkflow workflow = ParallelWorkflow.builder() .addAgent(hrReviewer) // HR评审 .addAgent(techReviewer) // 技术评审 .addAgent(managerReviewer)// 经理评审 .build(); // 所有代理并行执行,结果汇总 Map<String, Object> results = workflow.execute(candidateProfile);4. RAG技术实践:构建企业级知识库系统 📚
4.1 文档加载与处理
使用LangChain4j的文档加载器处理多种格式文件:
// 从*rag-examples模块*简化的文档加载示例 List<Document> documents = Documents.load( Paths.get("src/main/resources/docs"), new TxtDocumentLoader(), new PdfDocumentLoader() ); // 文档分块处理 List<Document> chunks = DocumentSplitters.recursive( 1000, // 块大小 200 // 重叠字符数 ).splitAll(documents);4.2 向量存储集成
将文档向量存储到Chroma向量数据库:
// 配置嵌入模型和向量存储 EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder() .apiKey(ApiKeys.openAiApiKey()) .modelName("text-embedding-ada-002") .build(); EmbeddingStore<TextSegment> embeddingStore = new ChromaEmbeddingStore( "http://localhost:8000", "company-docs" ); // 存储文档向量 embeddingStore.addAll( embeddingModel.embedAll(chunks.stream() .map(Document::text) .collect(Collectors.toList())) );4.3 检索增强生成
实现基于知识库的智能问答:
// 创建RAG增强的AI服务 Retriever retriever = EmbeddingStoreRetriever.from(embeddingStore, embeddingModel); RagAssistant assistant = AiServices.builder(RagAssistant.class) .chatLanguageModel(chatModel) .retriever(retriever) .build(); // 基于知识库回答问题 String answer = assistant.answer("公司的远程工作政策是什么?");图:集成RAG技术的JavaFX聊天界面,展示了基于知识库的智能问答功能
5. 5个高级优化技巧提升系统性能 🚀
5.1 对话记忆优化
实现基于用户ID的记忆隔离,避免对话混淆:
// 为每个用户创建独立的记忆存储 Map<String, ChatMemory> userMemories = new ConcurrentHashMap<>(); ChatMemory getOrCreateMemory(String userId) { return userMemories.computeIfAbsent(userId, id -> TokenWindowChatMemory.withMaxTokens(1000)); }5.2 工具调用缓存
减少重复API调用,提升响应速度:
// 为工具添加缓存层 public class CachedWeatherTool implements WeatherTool { private final WeatherTool delegate; private final LoadingCache<String, WeatherInfo> cache; public CachedWeatherTool(WeatherTool delegate) { this.delegate = delegate; this.cache = CacheBuilder.newBuilder() .expireAfterWrite(15, TimeUnit.MINUTES) // 15分钟缓存 .build(); } @Override public WeatherInfo getCurrentWeather(String city) { try { return cache.get(city, () -> delegate.getCurrentWeather(city)); } catch (ExecutionException e) { throw new RuntimeException(e); } } }5.3 异步处理
使用CompletableFuture实现非阻塞AI服务调用:
// 异步AI服务接口 @AiService public interface AsyncWeatherAssistant { CompletableFuture<String> answerWeatherQuestion(String question); } // 使用异步API assistant.answerWeatherQuestion("广州天气如何") .thenAccept(answer -> updateUI(answer)) .exceptionally(ex -> { showError(ex.getMessage()); return null; });5.4 模型选择策略
根据查询复杂度动态选择模型:
ChatModel selectModel(String query) { int complexity = estimateQueryComplexity(query); if (complexity > 7) { return gpt4Model; // 复杂查询使用更强大的模型 } else { return gpt35Model; // 简单查询使用高效模型 } }5.5 监控与指标
集成观测性工具监控系统运行状态:
// 添加模型调用监听器 ChatModel chatModel = OpenAiChatModel.builder() .apiKey(ApiKeys.openAiApiKey()) .modelName("gpt-3.5-turbo") .listener(new ChatModelListener() { @Override public void onResult(ChatModelResult result) { metrics.recordTokenUsage( result.getInputTokenCount(), result.getOutputTokenCount() ); } }) .build();6. 常见问题排查与解决方案 🔍
6.1 模型调用超时
问题:API调用经常超时或返回504错误
解决方案:实现重试机制和超时控制
ChatModel chatModel = OpenAiChatModel.builder() .apiKey(ApiKeys.openAiApiKey()) .timeout(Duration.ofSeconds(30)) // 设置超时时间 .build(); // 添加重试逻辑 RetryPolicy retryPolicy = RetryPolicy.builder() .maxAttempts(3) .delay(Duration.ofSeconds(1)) .retryOn(TimeoutException.class, IOException.class) .build(); String response = retryPolicy.execute(() -> chatModel.generate(prompt));6.2 上下文窗口溢出
问题:对话过长导致"context length exceeded"错误
解决方案:实现智能记忆管理
ChatMemory chatMemory = TokenWindowChatMemory.builder() .maxTokens(4096) .pruneable(true) // 允许自动修剪 .build(); // 手动控制记忆大小 if (chatMemory.tokenCount() > 3000) { chatMemory.removeOldestMessages(2); // 移除最旧的两条消息 }6.3 工具调用效率低
问题:AI频繁调用不必要的工具
解决方案:优化工具描述和调用条件
// 更精确的工具描述减少误调用 public interface WeatherTool { @Tool("仅当用户明确询问天气情况时使用,返回温度、天气状况和建议") WeatherInfo getCurrentWeather(String city); }7. 框架集成:与现代Java技术栈无缝整合 🔄
7.1 Spring Boot集成
通过langchain4j-spring-boot-starter快速集成到Spring应用:
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-spring-boot-starter</artifactId> <version>0.24.0</version> </dependency>创建AI服务Bean:
@Configuration public class AiConfig { @Bean public ChatModel chatModel() { return OpenAiChatModel.builder() .apiKey(ApiKeys.openAiApiKey()) .build(); } @Bean public WeatherAssistant weatherAssistant(ChatModel chatModel) { return AiServices.create(WeatherAssistant.class, chatModel, new WeatherToolImpl()); } }7.2 Jakarta EE集成
在wildfly-example模块中展示了与Jakarta EE的集成方式:
@ApplicationScoped public class AiServiceProducer { @Produces public ChatModel chatModel() { return OpenAiChatModel.builder() .apiKey(ApiKeys.openAiApiKey()) .build(); } }图:LangChain4j与WildFly应用服务器集成架构图
8. 学习资源与进阶路径 📖
8.1 推荐学习顺序
- 基础入门:从tutorials模块的
_00_HelloWorld.java开始 - 核心概念:学习agentic-tutorial模块的代理开发示例
- 高级功能:研究rag-examples模块的检索增强生成技术
- 框架集成:参考spring-boot-example和quarkus-example
8.2 社区资源
- 官方文档:项目根目录下的README.md
- 示例代码:各功能模块的示例程序
- 问题讨论:通过项目Issue系统提交问题和建议
8.3 进阶方向
- 多模态模型集成(图像、音频处理)
- 分布式工作流设计
- AI代理的安全与伦理考量
- 模型微调与定制化训练
通过本文介绍的技术和示例,你已经具备了使用LangChain4j构建企业级AI应用的基础能力。随着大语言模型技术的不断发展,持续探索框架的新特性和最佳实践,将帮助你在Java AI开发领域保持领先地位。
【免费下载链接】langchain4j-examples项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j-examples
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考