Java 版本的 LangChain 核心功能示例
以下是 Java 版本的 LangChain 核心功能示例(基于 Spring Boot + LangChain4j 库):
1. LangChain4j 简介
LangChain4j 是 LangChain 的 Java 实现,提供类似的模块化 AI 应用开发能力。
依赖配置(Maven)
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId><version>0.25.0</version>
</dependency>
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.25.0</version>
</dependency>
2. 核心功能示例
(1) 基础 LLM 调用
import dev.langchain4j.model.openai.OpenAiChatModel;public class BasicLlmExample {public static void main(String[] args) {OpenAiChatModel model = OpenAiChatModel.builder().apiKey("your-openai-key").modelName("gpt-3.5-turbo").build();String answer = model.generate("用中文解释LangChain");System.out.println(answer);}
}
输出:
LangChain 是一个用于构建大语言模型(LLM)应用的框架...
(2) Prompt 模板
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.input.PromptTemplate;public class PromptExample {public static void main(String[] args) {OpenAiChatModel model = OpenAiChatModel.withApiKey("your-openai-key");PromptTemplate template = PromptTemplate.from("用不超过{{max_words}}个字回答:{{question}}");Prompt prompt = template.apply(Map.of("max_words", "50", "question", "什么是人工智能?"));String answer = model.generate(prompt.text());System.out.println(answer);}
}
输出:
人工智能是模拟人类智能的计算机系统,能学习、推理和解决问题。
(3) 对话记忆(Memory)
import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;public class MemoryExample {interface Assistant {String chat(String message);}public static void main(String[] args) {ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);Assistant assistant = AiServices.builder(Assistant.class).chatLanguageModel(OpenAiChatModel.withApiKey("your-openai-key")).chatMemory(memory).build();System.out.println(assistant.chat("你好!")); // 输出:你好!有什么可以帮您?System.out.println(assistant.chat("我是张三")); // 能记住上下文}
}
(4) 数据增强(RAG 流程)
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import dev.langchain4j.data.document.splitter.DocumentSplitters;
import dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;public class RagExample {public static void main(String[] args) {// 1. 加载文档Document document = FileSystemDocumentLoader.loadDocument("path/to/file.txt");// 2. 分割文本List<TextSegment> segments = DocumentSplitters.recursive(300, 0).split(document);// 3. 向量化存储EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();embeddingStore.addAll(embeddingModel.embedAll(segments));// 4. 检索增强问答String question = "文档的主要内容是什么?";List<EmbeddingMatch<TextSegment>> relevantSegments = embeddingStore.findRelevant(embeddingModel.embed(question), 3);}
}
(5) 工具调用(Agent)
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.Tool;public class AgentExample {interface Calculator {@Tool("计算两个数的和")double add(double a, double b);}interface Assistant {String ask(String question);}public static void main(String[] args) {Calculator calculator = new Calculator() {@Overridepublic double add(double a, double b) {return a + b;}};Assistant assistant = AiServices.builder(Assistant.class).chatLanguageModel(OpenAiChatModel.withApiKey("your-key")).tools(calculator).build();String answer = assistant.ask("计算 123 加 456 等于多少?");System.out.println(answer); // 输出:123 + 456 = 579}
}
3. 关键组件对比(Python vs Java)
| 功能 | Python (LangChain) | Java (LangChain4j) |
|---|---|---|
| LLM 调用 | OpenAI() | OpenAiChatModel |
| Prompt 模板 | PromptTemplate | PromptTemplate |
| 对话记忆 | ConversationBufferMemory | MessageWindowChatMemory |
| 向量存储 | FAISS.from_documents() | InMemoryEmbeddingStore |
| Agent | initialize_agent() | AiServices.builder() |
4. 适用场景
- 企业级应用:适合需要集成到 Spring Boot 服务的场景
- 高并发系统:Java 的线程模型更适合高负载
- 已有 Java 技术栈:无需切换 Python 生态
如果需要更复杂的示例(如 Spring Boot 集成),可以进一步扩展!