LangChain4j 集成 ChatGLM:在 JVM 中使用清华双语对话大模型
【免费下载链接】langchain4jLangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector stores, and makes implementing tool calling (including MCP support), agents and RAG easy. It integrates seamlessly with enterprise Java frameworks like Quarkus and Spring Boot.项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j
导读
本文介绍如何在 LangChain4j 项目中接入清华大学开源的 ChatGLM 系列双语对话大模型。你将掌握两种接入方式:一是通过官方ChatGLM模块(ChatGlmChatModel)直连本地部署的 ChatGLM 服务;二是针对 API 与 OpenAI 兼容的 ChatGLM2、ChatGLM3、GLM-4 系列,使用langchain4j-open-ai模块或智谱 AI(Zhipu AI)社区模块以标准 OpenAI 协议调用。文章同时给出 Maven 依赖管理、模型构建、能力边界与源码层面的佐证,可直接照抄运行。
背景:ChatGLM 是什么
ChatGLM 是由清华大学开源的双语对话大语言模型(open bilingual dialogue language model),官方项目地址为 THUDM/ChatGLM-6B。该系列模型以中英文双语能力见长,可用于对话生成、问答、文本摘要等 LLM 应用场景,并支持本地部署与私有化运行,因此在数据合规和离线场景下受到开发者青睐。
需要特别说明的是,ChatGLM 系列不同版本的 API 形态并不相同:
- ChatGLM(第一代):API 形态由 LangChain4j 的专用集成模块封装(即
ChatGlmChatModel),需要对接 ChatGLM 服务端。 - ChatGLM2、ChatGLM3、GLM-4:官方 API 与 OpenAI 兼容。因此无需专用模块,可以直接复用 LangChain4j 的 OpenAI 集成,或使用
langchain4j-zhipu-ai(1.0.0-alpha1之后为langchain4j-community-zhipu-ai)进行对接。
在 LangChain4j 官方能力对照表(见 docs/docs/integrations/language-models/index.md)中,ChatGLM 集成当前标注的能力为纯文本(text)输入模态,流式输出、工具调用(Tools)、JSON Schema、JSON Mode、思考(Reasoning)、可观测性等列为空或未标注,这一点会在下文详细展开。
第一步:引入 Maven 依赖
依赖坐标变更说明(1.0.0-alpha1 分水岭)
自1.0.0-alpha1起,ChatGLM 集成从 LangChain4j 主仓库迁移至langchain4j-community(社区仓库),artifactId 由langchain4j-chatglm更名为langchain4j-community-chatglm。这一点同样适用于智谱 AI 集成(langchain4j-zhipu-ai→langchain4j-community-zhipu-ai),迁移策略一致。
1.0.0-alpha1之前(旧坐标):
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-chatglm</artifactId> <version>${previous version here}</version> </dependency>1.0.0-alpha1及之后(新坐标):
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-community-chatglm</artifactId> <version>${latest version here}</version> </dependency>使用 BOM 统一管理版本
为了保持多模块项目的依赖版本一致,官方推荐通过 BOM(Bill of Materials)方式管理:
<dependencyManagement> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-community-bom</artifactId> <version>${latest version here}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencyManagement>引入 BOM 后,模块内的依赖可以省略<version>,由 BOM 统一约束,避免多模块之间出现版本漂移。本仓库根目录的 pom.xml 即采用 parent 聚合方式组织各子模块,实际项目中可参照该结构在根 POM 中声明 BOM 或父 POM 版本。
第二步:实例化 ChatGlmChatModel
ChatGLM 集成对外暴露的核心类型是ChatGlmChatModel,它实现了 LangChain4j 的统一ChatModel接口。因此初始化之后,你可以像使用其他任何ChatModel一样进行对话、接入 AI Service 或 Agent 框架。
官方推荐的实例化方式如下:
ChatModel model = ChatGlmChatModel.builder() .baseUrl(System.getenv("CHATGLM_BASE_URL")) .logRequests(true) .logResponses(true) .build();要点说明:
baseUrl:ChatGLM 服务端的地址,通过环境变量CHATGLM_BASE_URL注入,便于在开发、测试、生产环境间切换,避免把地址硬编码进代码。logRequests/logResponses:开启后会在请求发出与响应返回时打印详细的 HTTP 日志,是排查联调问题最直接的抓手,生产环境建议按需关闭。- 构建方式采用标准的 Builder 模式,
ChatGlmChatModel.builder()返回构建器,build()完成实例创建。
构建完成后,该对象就是一个标准的ChatModel,可以直接参与 LangChain4j 的对话流程,例如:
ChatResponse response = model.chat( ChatRequest.builder() .messages(UserMessage.from("你好,请介绍一下你自己")) .build()); System.out.println(response.aiMessage().text());能力边界:不支持 Function Calling 与 Structured Output
原文档明确指出:ChatGlmChatModel不支持函数调用(Function Calling)和结构化输出(Structured Output),详见 docs/docs/integrations/language-models/index.md 的能力对照表。
这意味着在接入 ChatGLM 第一代模型时:
- 无法通过 LangChain4j 的 Tool Calling 机制向模型注册工具(Tool Specification);
- 无法使用 JSON Schema / JSON Mode 等结构化输出能力强制模型按固定格式返回。
如果业务强依赖工具调用或结构化输出,应优先考虑使用 API 与 OpenAI 兼容的 ChatGLM2 / ChatGLM3 / GLM-4 系列,通过下述 OpenAI 兼容路线获得完整能力。
第三步:通过 OpenAI 兼容协议接入 ChatGLM2 / ChatGLM3 / GLM-4
对于 ChatGLM2、ChatGLM3 与 GLM-4,其官方 API 与 OpenAI 兼容,因此 LangChain4j 提供了两条等价路线:
路线 A:直接使用 langchain4j-open-ai 模块
这是最通用、最灵活的方案。LangChain4j 的 OpenAI 模块本身支持任意 OpenAI 兼容端点,官方在 docs/docs/integrations/language-models/openai-compatible.md 中给出了通用接入四步法:确认 Base URL(通常以/v1结尾)→ 获取 API Key → 指定模型名 → 配置OpenAiChatModel或OpenAiStreamingChatModel。
ChatModel model = OpenAiChatModel.builder() .baseUrl("YOUR_CHATGLM_COMPATIBLE_BASE_URL") // 例如 "http://localhost:8000/v1" .apiKey("YOUR_API_KEY_OR_PLACEHOLDER") // 本地无鉴权时可填占位符 .modelName("MODEL_NAME_AS_PER_PROVIDER_DOCS") // 例如 "glm-4" 或自定义名称 .logRequests(true) .logResponses(true) .build();对应源码层面,OpenAiChatModel.java 的 Builder 提供了baseUrl(默认指向 OpenAI 官方地址DEFAULT_OPENAI_URL)、apiKey、modelName等核心构建入口,你可以通过覆盖baseUrl将请求转发到任意 OpenAI 兼容服务。
在使用流式场景时,如果 ChatGLM 兼容端点返回的工具调用 ID 在每个 chunk 中都是完整值(而非增量拼接),还需要注意OpenAiStreamingChatModel的accumulateToolCallId配置——默认true按标准 OpenAI 行为对分片 ID 做累积拼接,设为false则改用"每个分片完整替换"语义,适用于 DeepSeek、Qwen 等非标准实现的服务端。接入 ChatGLM 兼容端点时若发现工具调用 ID 异常,可优先检查该配置。
路线 B:使用智谱 AI(Zhipu AI)社区模块
如果对接的是智谱 AI 开放平台上的 GLM-4 系列服务,可以使用langchain4j-zhipu-ai(1.0.0-alpha1后为langchain4j-community-zhipu-ai)。该模块针对智谱平台做了专门封装,官方文档(见 docs/docs/integrations/language-models/zhipu-ai.md)提供了完整的参数矩阵:
| Property | 说明 | 默认值 |
|---|---|---|
baseUrl | 服务地址 | https://open.bigmodel.cn/ |
apiKey | 平台 API Key | 无 |
model | 使用的模型 | glm-4-flash |
temperature | 采样温度,越高越发散,取值范围[0, 2) | 0.7 |
topP | 核采样概率阈值,范围(0, 1.0] | 无 |
maxToken | 单次请求最大生成 token 数 | 512 |
maxRetries | 最大请求重试次数 | 3 |
stops | 停止词,命中即停止生成 | 无 |
logRequests/logResponses | 是否打印请求/响应日志 | false |
doSample | 是否采样;false时使用贪心解码 | 无 |
toolStream | 是否启用流式工具调用增量输出 | false |
callTimeout/connectTimeout/writeTimeout/readTimeout | OKHttp 超时配置 | 无 |
典型用法:
ChatModel model = ZhipuAiChatModel.builder() .apiKey("Your API key here") .model("glm-4") .temperature(0.6) .maxToken(1024) .maxRetries(2) .callTimeout(Duration.ofSeconds(60)) .connectTimeout(Duration.ofSeconds(60)) .writeTimeout(Duration.ofSeconds(60)) .readTimeout(Duration.ofSeconds(60)) .build();需要 GLM-4 系列思考(Reasoning)能力时,可搭配ZhipuAiChatRequestParameters的thinking参数启用推理模式;ZhipuAiStreamingChatModel配合toolStream(true)还可实现工具调用的增量流式输出。这些能力正是第一代 ChatGLM 集成所不具备的,可作为选型时的重要依据。
第四步:运行集成测试验证
原文档在 Examples 一节给出了官方集成测试示例:ChatGlmChatModelIT(位于langchain4j-community仓库的models/langchain4j-community-chatglm/src/test/java/dev/langchain4j/community/model/chatglm/ChatGlmChatModelIT.java)。该测试以IT(Integration Test)命名,说明其运行依赖真实的 ChatGLM 服务端实例。
结合本仓库的测试组织方式可以推断:LangChain4j 各模型模块普遍采用XxxChatModelIT形式组织集成测试,通常通过环境变量注入baseUrl与apiKey,测试前先build()出模型实例,再以标准ChatModel接口发起对话断言。你在本仓库中可以找到大量同构示例,例如 langchain4j-open-ai 与 langchain4j-zhipu-ai 目录下的集成测试(若该目录在当前仓库存在)。运行这类测试前,请确保:
- ChatGLM 服务已启动且可通过网络访问;
CHATGLM_BASE_URL等环境变量已正确设置;- 本地已具备 Java 与 Maven 环境,可使用仓库根目录的 mvnw 执行测试。
选型建议:两条接入路线的对比
| 维度 | ChatGlmChatModel(第一代 ChatGLM) | OpenAI 兼容路线(ChatGLM2 / ChatGLM3 / GLM-4) |
|---|---|---|
| 依赖模块 | langchain4j-community-chatglm | langchain4j-open-ai或langchain4j-community-zhipu-ai |
| 对话能力 | ✅ 标准ChatModel | ✅ 标准ChatModel,另有StreamingChatModel |
| 函数调用 | ❌ 不支持 | ✅ 支持(智谱模块支持同步/流式工具调用) |
| 结构化输出 | ❌ 不支持 | ✅ JSON Schema / JSON Mode 视具体模块而定 |
| 思考(Reasoning) | 未标注 | 智谱模块通过thinking参数支持 |
| 适用场景 | 本地部署第一代 ChatGLM | 云端 GLM-4、或本地 OpenAI 兼容网关 |
总体而言:如果你部署的是第一代 ChatGLM 且只需要纯文本对话,ChatGlmChatModel即可满足;如果需要工具调用、流式或结构化输出等现代 LLM 能力,请选择 ChatGLM2/3 或 GLM-4 并走 OpenAI 兼容路线。
总结
本文围绕 LangChain4j 的 ChatGLM 集成(docs/docs/integrations/language-models/chatglm.md)展开,完整覆盖了依赖引入(含1.0.0-alpha1迁移说明与 BOM 管理)、ChatGlmChatModel的构建与使用、能力边界(不支持 Function Calling 与 Structured Output),以及面向 ChatGLM2 / ChatGLM3 / GLM-4 的 OpenAI 兼容接入方案。无论你是要在 JVM 应用里快速跑通本地 ChatGLM 对话,还是需要为 GLM-4 接入完整的工具调用与流式能力,都可以直接参照本文代码落地。能力对照与参数细节可进一步查阅 docs/docs/integrations/language-models/index.md 与 docs/docs/integrations/language-models/zhipu-ai.md。
【免费下载链接】langchain4jLangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector stores, and makes implementing tool calling (including MCP support), agents and RAG easy. It integrates seamlessly with enterprise Java frameworks like Quarkus and Spring Boot.项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考