LangChain4j 集成国产大模型(通义千问、文心一言、智谱 AI)实战
介绍在 LangChain4j 中集成主流国产大模型(通义千问、文心一言、智谱 AI)的方法,涵盖核心原理、代码实现及生产实践。 一、核心原理:国产模型集成的通用逻辑 LangChain4j 对国产大模型的集成,核心遵循「**统一接口 + 专属适配器**」的设计: 所有模型均实现 LangChain4j 的 ChatLanguageModel/EmbeddingModel 核心接口,保证调用方…

介绍在 LangChain4j 中集成主流国产大模型(通义千问、文心一言、智谱 AI)的方法,涵盖核心原理、代码实现及生产实践。 一、核心原理:国产模型集成的通用逻辑 LangChain4j 对国产大模型的集成,核心遵循「**统一接口 + 专属适配器**」的设计: 所有模型均实现 LangChain4j 的 ChatLanguageModel/EmbeddingModel 核心接口,保证调用方…

本文介绍在 LangChain4j 中集成主流国产大模型(通义千问、文心一言、智谱 AI)的方法,涵盖核心原理、代码实现及生产实践。
LangChain4j 对国产大模型的集成,核心遵循「统一接口 + 专属适配器」的设计:
ChatLanguageModel/EmbeddingModel 核心接口,保证调用方式一致;langchain4j-dashscope 对应通义千问);以下是可直接运行的生产级代码,覆盖三大主流国产模型的集成,包含基础调用、参数配置、异常处理等核心要点。
首先引入各模型的专属集成依赖(按需选择):
<dependencies><!-- LangChain4j 核心 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId><version>0.34.0</version></dependency><!-- 1. 通义千问(阿里云 DashScope) --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-dashscope</artifactId><version>0.34.0</version></dependency><!-- 2. 文心一言(百度 ERNIE) --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-ernie</artifactId><version>0.34.0</version></dependency><!-- 3. 智谱 AI(GLM) --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-zhipu-ai</artifactId><version>0.34.0</version></dependency><!-- 可选:Spring Boot 整合(生产环境常用) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>3.2.0</version></dependency></dependencies>
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.dashscope.QwenChatModel;
import dev.langchain4j.model.ernie.ErnieChatModel;
import dev.langchain4j.model.zhipuai.ZhipuAiChatModel;
import dev.langchain4j.model.output.Response;
import java.time.Duration;
public class ChineseLlmIntegrationDemo {
// ==================== 1. 通义千问集成 ====================
/**
* 构建通义千问模型(支持 qwen-turbo/qwen-plus/qwen-max 等版本)
* @param apiKey 阿里云 DashScope 的 API Key(控制台获取)
* @param modelName 模型版本
* @return 通义千问 Chat 模型
*/
private static ChatLanguageModel buildQwenModel(String apiKey, String modelName) {
return QwenChatModel.builder()
.apiKey(apiKey)
.modelName(modelName) // 核心:指定模型版本
.temperature(0.7) // 随机性
.topP(0.8) // 采样策略
.maxTokens(2048) // 输出最大 Token 数
.timeout(Duration.ofMinutes(1)) // 超时时间
.build();
}
// ==================== 2. 文心一言集成 ====================
/**
* 构建文心一言模型(支持 ernie-3.5/ernie-4.0/ernie-speed 等版本)
* @param apiKey 百度 API Key
* @param secretKey 百度 Secret Key
* @param modelName 模型版本
* @return 文心一言 Chat 模型
*/
private static ChatLanguageModel buildErnieModel(String apiKey, String secretKey, String modelName) {
return ErnieChatModel.builder()
.apiKey(apiKey)
.secretKey(secretKey)
.modelName(modelName)
.temperature()
.penaltyScore()
.timeout(Duration.ofMinutes())
.build();
}
ChatLanguageModel {
ZhipuAiChatModel.builder()
.apiKey(apiKey)
.modelName(modelName)
.temperature()
.maxTokens()
.timeout(Duration.ofMinutes())
.build();
}
String {
{
model.generate(prompt);
} (Exception e) {
( + e.getMessage(), e);
}
}
{
;
;
;
;
buildQwenModel(qwenApiKey, );
invokeLlm(qwenModel, );
System.out.println();
System.out.println(qwenResponse);
buildErnieModel(ernieApiKey, ernieSecretKey, );
invokeLlm(ernieModel, );
System.out.println();
System.out.println(ernieResponse);
buildZhipuAiModel(zhipuApiKey, );
Response<String> zhipuFullResponse = zhipuModel.generateRaw();
System.out.println();
System.out.println( + zhipuFullResponse.content());
System.out.println( + zhipuFullResponse.tokenUsage());
}
}
| 模型 | 核心依赖 | 密钥配置 | 主流模型版本 | 核心特点 |
|---|---|---|---|---|
| 通义千问 | langchain4j-dashscope | 仅需 API Key(DashScope) | qwen-turbo/qwen-plus/qwen-max | 通用性强,多模态能力突出 |
| 文心一言 | langchain4j-ernie | API Key + Secret Key | ernie-3.5/ernie-4.0/ernie-speed | 中文理解最优,速度快 |
| 智谱 AI | langchain4j-zhipu-ai | 仅需 API Key | glm-3-turbo/glm-4/glm-4v | 逻辑推理强,上下文长度大 |
penaltyScore(重复惩罚系数)是专属参数,用于降低响应重复率,默认 1.0 即可;enableSearch 参数(开启联网搜索),适合需要实时信息的场景;glm-4v 支持多模态(图文理解),需额外配置图像参数。// 通义千问多模态调用(qwen-vl 支持图文理解)
import dev.langchain4j.model.dashscope.QwenVisionModel;
public static String invokeQwenVision(String apiKey, String prompt, String imageUrl) {
QwenVisionModel visionModel = QwenVisionModel.builder()
.apiKey(apiKey)
.modelName("qwen-vl-plus") // 多模态模型版本
.build();
// 传入图片 URL 和文本提示,分析图片内容
return visionModel.generate(prompt, imageUrl);
}
penaltyScore);// 故障降级实现(生产环境常用)
public static String invokeWithFallback(String prompt) {
// 1. 优先调用通义千问
try {
ChatLanguageModel qwenModel = buildQwenModel(qwenApiKey, "qwen-turbo");
return qwenModel.generate(prompt);
} catch (Exception e) {
System.err.println("通义千问调用失败,降级到文心一言:" + e.getMessage());
// 2. 降级到文心一言
try {
ChatLanguageModel ernieModel = buildErnieModel(ernieApiKey, ernieSecretKey, "ernie-3.5");
return ernieModel.generate(prompt);
} catch (Exception ex) {
System.err.println("文心一言调用失败,降级到智谱 AI:" + ex.getMessage());
// 3. 最终降级到智谱 AI
ChatLanguageModel zhipuModel = buildZhipuAiModel(zhipuApiKey, "glm-3-turbo");
return zhipuModel.generate(prompt);
}
}
}
temperature(通用场景 0.6-0.7,创作场景 0.8-0.9);generateAsync)提升并发能力,示例:// 异步调用示例
CompletableFuture<String> asyncResponse = qwenModel.generateAsync(prompt);
asyncResponse.thenAccept(response -> System.out.println("异步响应:" + response));
langchain4j-dashscope)适配国产模型,所有模型均实现 ChatLanguageModel 接口,保证调用方式统一;
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online