LangChain4j 写一次工具调用:Spring AI 的另一副面孔
选型篇的末尾说过,两个框架的差别都在工单循环外面,循环本身一模一样。纸上对比不过瘾,这篇把 LangChain4j 这边跑通,同一个查天气的工单换个框架实现,差别落在哪一眼可见。跑完两个框架的 demo,选型时那三道判断题就不再是背下来的,而是亲手试过的。
台子怎么搭
LangChain4j 不挑工程,纯 Java 就能跑,加一个主依赖和你要的模型适配(版本口径:1.x 主线,核验 2026-10-25,动手前查 Maven 最新版)。
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.22.0</version>
</dependency>
模型客户端直接 new 出来即可,以 OpenAI 兼容接口为例,baseUrl 和 apiKey 指向你的供应商。
ChatModel model = OpenAiChatModel.builder()
.baseUrl("https://api.example.com/v1")
.apiKey(System.getenv("AI_API_KEY"))
.modelName("gpt-4o-mini")
.build();
工具还是那个方法
和 Spring AI 一样,工具是普通类里的普通方法加一个 @Tool 注解,说明书放在描述里。包路径在 1.x 是 dev.langchain4j.service.tool.Tool,旧版本在 dev.langchain4j.agent.tool,以你用的版本为准。
class WeatherTools {
@Tool("查询指定城市的当前天气")
String getWeather(String city) {
return city + ",晴,25 度"; // 真实场景在这里发 HTTP
}
}
方法名会被翻译成工单里的工具名,参数名翻译成参数名,这套翻译逻辑和 Spring AI 逐字相同。
接口就是门面
LangChain4j 的调用入口长得不像 Spring,它用一个接口当门面,AiServices 把接口和工具绑起来,调接口方法就像调本地代码。
interface Assistant {
String chat(String userMessage);
}
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(model)
.tools(new WeatherTools())
.build();
String answer = assistant.chat("北京今天多少度?");
System.out.println(answer);
工单循环在底下照常转:模型写工单、框架解析、执行 getWeather、回填、模型总结,只是这一圈活全藏在接口代理后面。这副面孔的气质是「声明式」,Spring AI 则是「构建器式」,两种都是 Java 程序员熟悉的语法,差别只在口味。
逐点对照
| Spring AI | LangChain4j | |
|---|---|---|
| 工具形态 | Spring Bean 加注解 | 普通类加注解 |
| 调用入口 | ChatClient 流式构建 | 接口门面加 AiServices |
| 装配方式 | 自动配置与注入 | 手工 builder |
| 适合的工程 | Spring 全家桶 | 任意 Java,包括无 Spring |
| 自定义扩展 | Advisor 链(拦截器思维) | 自定义能力原语 |
亲手跑
三段代码加一个 main 就是完整程序,把 ChatModel 的配置换成你的供应商,运行 main 就能看到回答。更有价值的是打开日志(把 langchain4j 的日志级别调到 DEBUG),两个框架的工单报文都能看见,形状完全一致,这就是「循环相同」的实证。
跑完顺手做两个对照实验。把方法的参数加上 @Tool 的描述,看工单 JSON Schema 的变化,说明书是给模型读的。把 getWeather 里改成抛异常,对比两个框架把错误包回 tool_result 的措辞差异,这是排查问题时真会用到的细节。
记住一句话:框架选的是语法和装配习惯,工单循环永远是那一圈。
适用边界
这一篇管工具调用的最小闭环。LangChain4j 的记忆与检索模块、流式输出的 handler 写法、以及和 Spring 融合(Spring AI 之外的 LangChain4j Spring 集成)是另外的题。包路径和 Builder 的方法名随版本微调,本文按 2026-10-25 的 1.x 口径整理。两个框架的最小 demo 都在手里之后,选型篇那三道判断题可以重答一遍,答案会比上次笃定。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/D_ENG_F/article/details/169837904




