Skip to content

LangChain4j 完整指南

LangChain4j 是 LangChain 的 Java 版本,提供丰富的 AI 应用开发组件和工具。

什么是 LangChain4j?

LangChain4j 是一个 Java AI 应用开发框架,提供:

  • 完整的组件生态 - Prompt、Memory、Chain、Agent 等
  • 灵活的架构 - 可以自由组合各种组件
  • 丰富的集成 - 支持 20+ 模型提供商
  • Java 原生 - 完全用 Java 编写,类型安全

核心概念

1. Models(模型)

java
// 聊天模型
ChatLanguageModel chatModel = OpenAiChatModel.builder()
    .apiKey("your-api-key")
    .modelName("gpt-4")
    .build();

// 流式输出
TokenStream tokenStream = chatModel.generate(
    SystemMessage.from("你是一个助手"),
    UserMessage.from("介绍一下 Java")
);

tokenStream.onNext(System.out::println)
    .onComplete(System.out::println)
    .onError(Throwable::printStackTrace)
    .start();

2. Prompts(提示词)

java
// Prompt 模板
String prompt = PromptTemplate.from("""
    将以下文本翻译为 {{language}}:
    {{text}}
    """).apply(
    Map.of(
        "language", "英文",
        "text", "你好世界"
    )
);

String result = chatModel.generate(prompt);

3. Memory(记忆)

java
// 对话记忆
ChatMemory chatMemory = MessageWindowChatMemory.builder()
    .maxMessages(10)
    .build();

// 添加消息
chatMemory.add(UserMessage.from("我叫张三"));
chatMemory.add(AiMessage.from("你好张三!"));

// 使用记忆
AiMessage response = chatModel.generate(
    chatMemory.messages(),
    UserMessage.from("我叫什么名字?")
);

4. Tools(工具)

java
// 定义工具
@Tool("获取当前天气")
public String getWeather(@P("城市名称") String city) {
    // 调用天气 API
    return WeatherService.getWeather(city);
}

// 让 LLM 使用工具
Assistant assistant = AiServices.builder(Assistant.class)
    .chatLanguageModel(chatModel)
    .tools(new WeatherTool())
    .build();

String answer = assistant.chat("北京今天天气怎么样?");

5. RAG(检索增强生成)

java
// 创建嵌入模型
EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder()
    .apiKey("your-api-key")
    .build();

// 向量存储
EmbeddingStore<TextSegment> store = InMemoryEmbeddingStore.create();

// 添加文档
TextSegment segment = TextSegment.from("Spring AI 是 Spring 官方的 AI 框架");
Embedding embedding = embeddingModel.embed(segment).content();
store.add(embedding, segment);

// 检索
Embedding queryEmbedding = embeddingModel.embed("什么是 Spring AI?").content();
List<EmbeddingMatch<TextSegment>> matches = store.findRelevant(queryEmbedding, 5);

// 生成回答
String answer = chatModel.generate(
    SystemMessage.from("基于以下信息回答问题:" + matches)
);

高级功能

1. Agent(智能体)

java
// 定义 Agent
@SystemMessage("""
    你是一个有用的助手。
    可以使用以下工具:{{tools}}
    """)
public interface MyAssistant {
    String chat(String userMessage);
}

// 创建 Agent
MyAssistant assistant = AiServices.builder(MyAssistant.class)
    .chatLanguageModel(chatModel)
    .tools(new WeatherTool(), new CalculatorTool())
    .build();

// 使用
String response = assistant.chat("北京今天天气怎么样?");

2. Chain(链)

java
// 串行链
Chain chain = Chain.builder()
    .first((text) -> summarize(text))
    .then((summary) -> translate(summary, "英文"))
    .then((translation) -> sentimentAnalysis(translation))
    .build();

String result = chain.execute("这是一段长文本...");

3. Prompt Template 高级用法

java
// 多段 Prompt
String prompt = PromptTemplate.from("""
    你是 {{role}}。

    上下文:
    {{context}}

    用户问题:{{question}}

    要求:
    1. 回答准确
    2. 语气友好
    3. 使用 {{language}}
    """).apply(
    Map.of(
        "role", "技术顾问",
        "context", "Spring AI 是...",
        "question", "如何使用 Spring AI?",
        "language", "中文"
    )
);

支持的模型提供商

提供商聊天模型嵌入模型图像生成
OpenAI
Anthropic
Azure OpenAI
Google Vertex AI
Hugging Face
Ollama
LocalAI

向量存储

  • 内存存储: InMemoryEmbeddingStore
  • 文件存储: InMemoryEmbeddingStore + 持久化
  • 数据库:
    • PostgreSQL (PgVector)
    • MySQL
    • MongoDB
    • Redis
    • Elasticsearch
  • 专用向量库:
    • Milvus
    • Weaviate
    • Qdrant
    • Pinecone

最佳实践

1. 错误处理

java
ChatLanguageModel model = OpenAiChatModel.builder()
    .apiKey(apiKey)
    .timeout(Duration.ofSeconds(30))
    .maxRetries(3)
    .build();

try {
    String response = model.generate(prompt);
} catch (TokenLimitExceededException e) {
    // 处理 token 超限
} catch (RateLimitExceededException e) {
    // 处理速率限制
} catch (ModelException e) {
    // 处理模型错误
}

2. 成本优化

java
// 使用更便宜的模型
ChatLanguageModel cheapModel = OpenAiChatModel.builder()
    .modelName("gpt-3.5-turbo")  // 而不是 gpt-4
    .build();

// 批量处理
List<String> prompts = List.of("问题1", "问题2", "问题3");
List<Response<AiMessage>> responses = model.generate(prompts);

3. 性能优化

java
// 流式输出
TokenStream stream = model.generate(prompt);
stream.onNext(System.out::println)
    .onComplete(() -> System.out.println("完成"))
    .start();

// 并发处理
ExecutorService executor = Executors.newFixedThreadPool(10);
List<Future<String>> futures = prompts.stream()
    .map(p -> executor.submit(() -> model.generate(p)))
    .collect(Collectors.toList());

与 Spring AI 对比

特性LangChain4jSpring AI
组件丰富度非常丰富基础
学习曲线中等
Spring 集成需要手动集成原生集成
社区活跃度中等
文档详细简洁
灵活性中等

适用场景

LangChain4j 适合以下场景:

  1. 复杂 AI 应用 - 需要组合多种组件
  2. 自定义需求 - 需要灵活的架构
  3. 非 Spring 项目 - 不依赖 Spring 生态
  4. 快速原型 - 组件丰富,快速开发

相关资源


更新时间: 2026-03-14 分类: Java AI 平台 | LangChain4j

MIT