Java AI 入门:LangChain4j 函数调用 vs Agent 智能体(核心区别 + 可运行代码)

Java AI 入门:LangChain4j 函数调用 vs Agent 智能体(核心区别 + 可运行代码)

作为 Java 后端开发者,刚入门 AI 智能体(Agent)和函数调用(Function Call)时,我发现很多小伙伴都会和我一样犯迷糊------这俩代码写起来几乎一模一样,但实际用起来差别可太大了!

所以今天就结合我自己跑通的 Demo,用通俗易懂的方式,把两者的核心区别讲明白,全程附可直接复制的代码,不管你是刚入门 Java AI,还是想快速上手 LangChain4j,都能看懂、能跟着跑,求职时拿出来展示也很加分~


一、前置准备(新手必看)

先跟大家说下我用的技术环境,大家照着配,能避免很多环境坑,确保 Demo 一次跑通,不用反复折腾:

  • JDK 17(LangChain4j 官方推荐)
  • LangChain4j 0.34.0(稳定版,完美支持Ollama 工具调用)
  • 大模型支持:阿里云通义千问、Ollama 本地模型
  • 统一配置:通过 AiModelFactory 统一获取模型实例,集中管理密钥与配置,方便快速切换多模型

1.1 Maven 依赖

xml 复制代码
<dependencies>
    <!-- LangChain4j 核心 -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j</artifactId>
        <version>0.34.0</version>
    </dependency>
    <!-- 通义千问 -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-dashscope</artifactId>
        <version>0.34.0</version>
    </dependency>
    <!-- Ollama 本地模型 -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-ollama</artifactId>
        <version>0.34.0</version>
    </dependency>
</dependencies>

1.2 项目结构图

二、公共工具类

函数调用与 Agent 智能体,共用同一套自定义工具,统一封装、全局复用,减少代码冗余。

2.1 WeatherTool 工具类

java 复制代码
package com.xiaoyuancode.langchain4j.tools;

import dev.langchain4j.agent.tool.P;
import dev.langchain4j.agent.tool.Tool;

public class WeatherTool {

    @Tool("根据城市查询天气")
    public String getWeather(@P("城市") String city){
        System.out.println("[Tool] 查询城市天气:" + city);
        return city + " 晴天,24℃";
    }
}

2.2 CalculatorTool 工具类

java 复制代码
package com.xiaoyuancode.langchain4j.tools;

import dev.langchain4j.agent.tool.P;
import dev.langchain4j.agent.tool.Tool;

public class CalculatorTool {
    @Tool("计算两个数相加")
    public int add(@P("数字a") int a, @P("数字b") int b) {
        System.out.println("[Tool] 执行加法计算:" + a + "+" + b);
        return a + b;
    }
}

三、函数调用(Function Call)是什么?

简单说:函数调用就是让大模型根据需求,调用我们提前写好的工具方法,一次对话只调用一个工具,不会自主进行多步推理

3.1 Assistant 接口

java 复制代码
package com.xiaoyuancode.langchain4j.functioncall;

import dev.langchain4j.service.SystemMessage;

public interface Assistant {
    @SystemMessage("你是智能助手,必须调用工具获取结果,不能编造答案。")
    String chat(String message);
}

3.2 FunctionCallDemo 主程序

java 复制代码
package com.xiaoyuancode.langchain4j.functioncall;

import com.xiaoyuancode.langchain4j.config.AiModelFactory;
import com.xiaoyuancode.langchain4j.tools.CalculatorTool;
import com.xiaoyuancode.langchain4j.tools.WeatherTool;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.service.AiServices;

public class FunctionCallDemo {
    public static void main(String[] args) {
        ChatLanguageModel model = AiModelFactory.getChatModel();
        Assistant assistant = AiServices.builder(Assistant.class)
                .chatLanguageModel(model)
                .tools(new WeatherTool(),new CalculatorTool())
                .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
                .build();
        System.out.println("用户:北京天气如何?");
        String res1 = assistant.chat("北京天气如何?");
        System.out.println("AI:" + res1 + "\n------");

        System.out.println("用户:100 + 200 等于多少?");
        String res2 = assistant.chat("100 + 200 等于多少?");
        System.out.println("AI:" + res2);
    }
}

3.3 运行结果

3.4 函数调用特点

  • 单次请求仅支持单工具调用
  • 无自主规划能力,无法串联多个任务
  • 可加 chatMemory 记住上下文,但依然不会自动多步调用
  • 适合简单、单一、明确的业务场景

四、Agent 智能体(Agent)是什么?

Agent 是函数调用的智能化升级版 ,核心能力是:自主理解需求 → 规划步骤 → 自动多轮调用工具,不需要我们手动干预。

注:本章复用上方已定义的WeatherTool 工具与 CalculatorTool 工具,不再重复贴码

4.1 独立Assistant 接口

java 复制代码
package com.xiaoyuancode.langchain4j.agent;

import dev.langchain4j.service.SystemMessage;

public interface Assistant {
    @SystemMessage("你是一个智能Agent,可以自主思考、调用工具。必须调用工具,不能编造答案")
    String chat(String message);
}

4.2 AgentDemo 主程序

java 复制代码
package com.xiaoyuancode.langchain4j.agent;

import com.xiaoyuancode.langchain4j.tools.CalculatorTool;
import com.xiaoyuancode.langchain4j.tools.WeatherTool;
import com.xiaoyuancode.langchain4j.config.AiModelFactory;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.service.AiServices;

public class AgentDemo {
    public static void main(String[] args) {
        ChatLanguageModel model = AiModelFactory.getChatModel();
        Assistant agent = AiServices.builder(Assistant.class)
                .chatLanguageModel(model)
                .tools(new WeatherTool(),new CalculatorTool())
                .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
                .build();
        System.out.println("===== 智能体测试 =====");
        System.out.println("用户:先查上海天气,再算 55+45");
        String response = agent.chat("先查上海天气,再算 55+45");
        System.out.println("AI:" + response);
    }
}

4.3 运行结果

4.4 Agent 特点

  • 支持自主多步、多工具连续调用
  • 自动理解复杂需求,拆解分步执行
  • 更贴合实际复杂业务、智能问答场景
  • 本质:函数调用 + 自主思考 + 记忆

五、函数调用(Function Call)和 Agent 智能体(Agent)的区别

对比维度 函数调用 Agent 智能体
代码写法 几乎一样 几乎一样
核心能力 单步调用,无规划 多步调用,自主决策
适用场景 简单任务 复杂多步骤、多工具串联任务
行为模式 被动执行 主动规划

六、新手常见误区

  1. 加chatMemory 就是 Agent? 不是,记忆只是记住上下文,不会自动多步调用工具
  2. 两者代码差不多,能力就一样? 看似配置接近,但大模型底层调度逻辑完全不同,能力边界差距很大。
  3. 简单问题能体现Agent? 不能,必须用复合任务(先......再......)才能看出差距。

七、总结

函数调用是大模型工具交互的基础,Agent是在此之上的智能化升级。

两者代码实现高度相近,核心分水岭在于AI是否自主多步执行与任务规划

日常简单查询、固定工具调用选用函数调用即可;

面对复杂业务、连环场景、智能问答需求,优先使用Agent智能体。

后续计划:

  • LangChain4j多模态动态切换
  • 本地 Ollama 大模型整合实战
  • Spring AI 与 LangChain4j 对比
  • 企业级 RAG 知识库落地实战

🔴 快速运行指南

  1. git clone 源码仓库
  2. 配置通义千问 API Key
  3. 直接运行 FunctionCallDemo / AgentDemo

源码已上传Gitee,欢迎 Start & Fork:

gitee.com/xiaoyuancod...


作者简介

XiaoYuanCode

拥有多年全栈开发经验,前后端均有扎实的项目落地实践;

早期深耕 PHP 技术生态,近年主力技术栈全面转向 Java & Spring Boot;

现阶段聚焦大模型应用开发,持续研究 LangChain4j、Spring AI 等智能化技术;

专注输出实战向技术博文,记录学习与踩坑过程,共同进步。

相关推荐
roc981 小时前
这个系统能跑,但我不敢改:一次典型的 vibecoding 反思
人工智能·后端
用户412467508372 小时前
再也不用 /usage 了!用 Claude Code 自定义状态栏,把用量焦虑彻底消灭
后端
覆东流2 小时前
第5天:Python字符串操作进阶
开发语言·后端·python
0xDevNull2 小时前
队列(Queue)实战教程:从原理到架构应用
java·开发语言·后端
tonydf2 小时前
日志模块该如何设计
后端·elasticsearch
BING_Algorithm2 小时前
JDBC核心教程
java·后端·mysql
smallyoung2 小时前
RAG Chunking 全攻略:5 种策略 + LangChain4j 实战代码
人工智能·后端
小强19882 小时前
Python中的"设计模式":这5个技巧让代码优雅得像诗
后端