当前位置:首页 > 技术 > 正文内容

使用LangChain4j在Java中实现AI智能体:从工具集成到任务规划

访客 技术 2026年6月29日 1

AI Agent的核心机制与Java实现路径

随着生成式AI技术的演进,AI Agent已不再局限于简单的对话响应。它具备感知环境、推理决策、执行动作和持续记忆的能力。基于LangChain4j框架,Java开发者可以快速构建具备实际功能的智能代理系统。

依赖配置与基础组件初始化

首先,在Maven项目中引入LangChain4j核心库及OpenAI支持模块:

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
    <version>0.36.0</version>
</dependency>
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>0.36.0</version>
</dependency>

自定义外部能力:工具接口开发

Agent通过调用工具扩展其能力边界。以下为两个典型工具实现:

public class CityWeatherService {

    @Tool("获取指定城市实时气象数据")
    public String fetchCurrentWeather(String cityName) {
        // 模拟真实API调用
        return String.format("%s当前天气为多云,温度26℃,湿度55%%", cityName);
    }
}
public class MathEvaluator {

    @Tool("解析并计算数学表达式结果")
    public double evaluateExpression(String formula) {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        try {
            return ((Number) engine.eval(formula)).doubleValue();
        } catch (ScriptException e) {
            throw new RuntimeException("表达式解析失败: " + formula, e);
        }
    }
}

构建具备上下文记忆的智能代理

通过组合语言模型、记忆组件和工具集,创建可交互的服务接口:

ChatLanguageModel llm = OpenAiChatModel.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .modelName("gpt-4o-mini")
    .temperature(0.3)
    .build();

ChatMemory conversationHistory = MessageWindowChatMemory.withMaxMessages(10);

interface SmartAssistant {
    String respondTo(String input);
}

SmartAssistant assistant = AiServices.create(SmartAssistant.class)
    .chatModel(llm)
    .memory(conversationHistory)
    .tools(new CityWeatherService(), new MathEvaluator())
    .systemPrompt("你是一个多功能助手,能查询天气和执行算术运算。" +
                  "根据用户需求判断是否需调用外部工具完成任务。")
    .build();

多轮交互测试示例

验证Agent在连续对话中的行为表现:

String reply1 = assistant.respondTo("深圳现在天气如何?");
System.out.println(reply1); 
// 输出:正在获取深圳天气...深圳当前天气为多云,温度26℃,湿度55%

String reply2 = assistant.respondTo("广州呢?");
System.out.println(reply2);
// 输出:广州当前天气为晴,温度29℃,空气质量良好

String reply3 = assistant.respondTo("两地温差是多少?");
System.out.println(reply3);
// 内部触发MathEvaluator.evaluateExpression("29 - 26") → 3.0
// 输出:深圳与广州的气温相差3度

结构化输出:复杂任务分解实践

利用记录类(record)接收格式化响应,实现任务拆解自动化:

record ExecutionStrategy(
    String objective,
    java.util.List<String> actionSteps,
    String successCriteria
) {}

interface TaskDecomposer {
    @SystemPrompt("作为项目架构师,请将用户目标拆解为可执行步骤")
    ExecutionStrategy decompose(String userRequest);
}

TaskDecomposer scheduler = AiServices.create(TaskDecomposer.class)
    .chatModel(llm)
    .build();

ExecutionStrategy strategy = scheduler.decompose("搭建一个商品库存管理系统");
// LLM返回JSON格式结构体,自动映射至ExecutionStrategy实例

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。