1. LangChain4j初探为什么选择它作为Java开发者的AI助手三周前接手一个需要整合大语言模型(LLM)的Java项目时我发现了LangChain4j这个宝藏框架。作为Java版的LangChain它让AI能力集成变得像调用普通SDK一样简单。与Python生态的LangChain相比LangChain4j完美适配Java项目的技术栈不需要为了AI功能额外维护Python服务。关键优势零配置即可接入OpenAI/Gemini等主流模型内置RAG、Agent等AI工程模式调试信息可视化程度高2. 环境准备5分钟快速搭建开发环境2.1 基础依赖配置在Maven项目中添加核心依赖以0.28.0版本为例dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId version0.28.0/version /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai/artifactId version0.28.0/version /dependency2.2 模型密钥管理推荐使用环境变量存储API密钥String openAiKey System.getenv(OPENAI_API_KEY); OpenAiChatModel model OpenAiChatModel.builder() .apiKey(openAiKey) .modelName(gpt-4-turbo) .temperature(0.3) .build();避坑提示不要将密钥硬编码在代码中LangChain4j会自动读取OPENAI_API_KEY环境变量3. 核心功能实战从对话到复杂Agent系统3.1 基础对话实现// 最简单的聊天示例 String response model.generate(用Java写个快速排序); System.out.println(response); // 带记忆的持续对话 ChatMemory memory MessageWindowChatMemory.withMaxMessages(10); Assistant assistant AiServices.builder(Assistant.class) .chatLanguageModel(model) .chatMemory(memory) .build(); String answer1 assistant.chat(推荐几个Java单元测试框架); String answer2 assistant.chat(刚才说的框架里哪个最适合新手);3.2 文档问答系统(RAG)实现// 1. 加载本地文档 EmbeddingStoreTextSegment store new InMemoryEmbeddingStore(); EmbeddingModel embeddingModel new AllMiniLmL6V2EmbeddingModel(); DocumentSplitter splitter new DocumentByParagraphSplitter(300, 50); ListTextSegment segments splitter.split(document); // 2. 生成嵌入并存储 ListEmbedding embeddings embeddingModel.embedAll(segments).content(); store.addAll(embeddings, segments); // 3. 构建问答链 RetrieverTextSegment retriever EmbeddingStoreRetriever.from(store, embeddingModel); AnswerTemplate answerTemplate AnswerTemplate.from(基于以下信息回答{{information}}\n\n问题{{question}}); ConversationalRetrievalChain chain ConversationalRetrievalChain.builder() .chatLanguageModel(model) .retriever(retriever) .promptTemplate(answerTemplate) .build(); String answer chain.execute(文档中提到的安全规范有哪些);4. 生产级应用开发技巧4.1 性能优化方案批处理请求对多个独立问题使用generate(ListString)方法缓存策略为Embedding模型添加CachingEmbeddingModel装饰器超时控制OpenAiChatModel.builder() .timeout(Duration.ofSeconds(30)) .logRequests(true) .logResponses(true) .build();4.2 异常处理最佳实践try { return model.generate(userInput); } catch (OpenAiHttpException e) { if (e.statusCode() 429) { // 处理限流 } else if (e.getMessage().contains(context_length_exceeded)) { // 处理上下文过长 } } catch (LangChain4jException e) { // 框架级异常处理 }5. 调试与监控方案5.1 对话追踪实现ModelListener listener new ModelListener() { Override public void onResponse(ChatModelRequest request, ChatModelResponse response) { System.out.println(请求耗时 (response.tokenUsage().totalTokenCount())); } }; OpenAiChatModel model OpenAiChatModel.builder() .apiKey(openAiKey) .modelName(gpt-4) .listeners(listener) .build();5.2 结构化输出处理interface RecipeExtractor { UserMessage(从文本中提取菜谱信息) Recipe extractRecipe(String text); } Recipe recipe AiServices.create(RecipeExtractor.class, model) .extractRecipe(先将洋葱炒香...);实际项目中我们发现LangChain4j最惊艳的是其对Java类型系统的深度整合。通过接口定义输出结构可以自动将LLM的非结构化响应转换为类型安全的Java对象这在处理复杂业务逻辑时大幅减少了胶水代码。