使用LangChain4J实现Agent与Tool调用

大模型实战-【Langchain4J中@Tool的应用】 Some LLMs, in addition to generating text, can also trigger actions.There is a concept known as “tools,” or “function calling”. It allows the LLM to call, when necessary, one or more available tools, usually defined by the developer. A tool can be anything 阅读详情
AI摘要

博客介绍了LLM大模型调用工具的功能,包括有无工具时的效果、两个抽象层次及底层和高级工具API。还阐述程序员学习大模型的必要性,并分享了LLM大模型学习资源,如经典书籍、报告合集等,给出了从基础理解到私有化部署的学习路线。

一些LLM除了生成文本,还可触发操作。

有一个被称为“工具(tools)”或“函数调用(function calling)”的概念。它允许LLM在必要时调用一或多个由开发者定义的工具。工具可以是任何东西:网页搜索、外部API调用、或执行一段特定代码等。LLM本身无法实际调用这些工具;它们会在响应中表达出调用某个工具的意图(而不是直接生成文本)。我们开发者,则需要根据提供的参数来执行这些工具并报告工具执行结果。

如我们知道LLM本身并不擅长数学运算。若你的应用场景涉及偶尔的数学计算,你可能希望为LLM提供一个“math tool”。通过在请求中声明一个或多个工具,LLM可以在认为适合时调用其中一个。如遇到数学问题并拥有一组数学工具时,LLM可能会决定首先调用其中的一个来正确回答问题。

1 有无工具时的效果

1.1 没有工具的消息示例

Request:
- messages:
    - UserMessage:
        - text: What is the square root of 475695037565?

Response:
- AiMessage:
    - text: The square root of 475695037565 is approximately 689710.

接近正确,但不完全对。

1.2 使用以下工具的消息示例

@Tool("Sums 2 given numbers")
public double sum(double a, double b) {
    return a + b;
}

@Tool("Returns a square root of a given number")
public double squareRoot(double x) {
    return Math.sqrt(x);
}
Request 1:
- messages:
    - UserMessage:
        - text: What is the square root of 475695037565?
- tools:
    - sum(double a, double b): Sums 2 given numbers
    - squareRoot(double x): Returns a square root of a given number

Response 1:
- AiMessage:
    - toolExecutionRequests:
        - squareRoot(475695037565)


... here we are executing the squareRoot method with the "475695037565" argument and getting "689706.486532" as a result ...


Request 2:
- messages:
    - UserMessage:
        - text: What is the square root of 475695037565?
    - AiMessage:
        - toolExecutionRequests:
            - squareRoot(475695037565)
    - ToolExecutionResultMessage:
        - text: 689706.486532

Response 2:
- AiMessage:
    - text: The square root of 475695037565 is 689706.486532.

如你所见,当LLM拥有工具时,它可在适当时决定调用其中的一个。

这是一个非常强大的功能。这简单例子,我们给LLM提供原始的数学工具,但可想象如提供如googleSearch和sendEmail工具,然后提供一个查询“我的朋友想知道AI领域的最新消息。请将简短的总结发送到friend@email.com”,那它可用googleSearch工具找到最新消息,然后总结并通过sendEmail工具发送总结。

经验法则

为了增加LLM调用正确工具和参数的几率,我们应该提供清晰且明确的:

  • 工具名称
  • 工具的功能描述以及何时使用
  • 每个工具参数的描述

一个好的经验法则是:如果人类能理解工具的用途和如何使用,那么LLM也能理解。

LLM被专门微调,以检测何时调用工具以及如何调用它们。某些模型甚至可以一次调用多个工具,如OpenAI。

注意,工具/函数调用与JSON模式不同。

2 两个抽象层次

LangChain4j 提供两个使用工具的抽象层:

  • 底层,使用 ChatLanguageModel API
  • 高级,使用AI服务和@Tool注解的Java方法

3 底层工具API

3.1 generate

可用ChatLanguageModel#generate(List<ChatMessage>, List<ToolSpecification>):

/**
  * 根据消息列表和工具规范列表从模型生成响应。响应可以是文本消息,也可以是执行指定工具之一的请求。通常,该列表包含按以下顺序排列的消息:System (optional) - User - AI - User - AI - User ...
  * messages – 消息列表
  * toolSpecifications – 允许模型执行的工具列表。该模型自主决定是否使用这些工具中的任何一个
  * return:模型生成的响应
  * AiMessage 可以包含文本响应或执行其中一个工具的请求。
  */
default Response<AiMessage> generate(List<ChatMessage> messages, List<ToolSpecification> toolSpecifications) {
    throw new IllegalArgumentException("Tools are currently not supported by this model");
}

类似方法也存于StreamingChatLanguageModel。

3.2 ToolSpecification

package dev.langchain4j.agent.tool;

// 包含工具所有信息
public class ToolSpecification {
    // 工具的`名称`
    private final String name;
    // 工具的`描述`
    private final String description;
    // 工具的`参数`及其描述
    private final ToolParameters parameters;

推荐尽可能提供关于工具的所有信息:清晰的名称、详尽的描述和每个参数的描述等。

3.2.1 创建ToolSpecification
① 手动
ToolSpecification toolSpecification = ToolSpecification.builder()
    .name("getWeather")
    .description("返回指定城市的天气预报")
    .addParameter("city", type("string"), description("应返回天气预报的城市"))
    .addParameter("temperatureUnit", enums(TemperatureUnit.class)) // 枚举 TemperatureUnit { 摄氏, 华氏 }
    .build();
② 使用辅助方法
  • ToolSpecifications.toolSpecificationsFrom(Class)
  • ToolSpecifications.toolSpecificationsFrom(Object)
  • ToolSpecifications.toolSpecificationFrom(Method)
class WeatherTools { 
  
    @Tool("Returns the weather forecast for a given city")
    String getWeather(
            @P("The city for which the weather forecast should be returned") String city,
            TemperatureUnit temperatureUnit
    ) {
        ...
    }
}

List<ToolSpecification> toolSpecifications = ToolSpecifications.toolSpecificationsFrom(WeatherTools.class);

一旦你拥有List<ToolSpecification>,可调用模型:

UserMessage userMessage = UserMessage.from("伦敦明天的天气如何?");
Response<AiMessage> response = model.generate(List.of(userMessage), toolSpecifications);
AiMessage aiMessage = response.content();

若LLM决定调用工具,返回的AiMessage将包含toolExecutionRequests字段中的数据。此时,AiMessage.hasToolExecutionRequests()将返回true。根据LLM不同,它可包含一或多个ToolExecutionRequest对象(某些LLM支持并行调用多个工具)。

每个ToolExecutionRequest应包含:

public class ToolExecutionRequest {
  	// 工具调用的`id`(某些LLM不提供)
    private final String id;
  	// 要调用的工具名称,例如:`getWeather`
    private final String name;
  	// 工具的`参数`,例如:`{ "city": "London", "temperatureUnit": "CELSIUS" }`
    private final String arguments;

你要用ToolExecutionRequest中的信息手动执行工具。

如希望将工具执行的结果发回LLM,你要为每个ToolExecutionRequest创建一个ToolExecutionResultMessage并与之前的所有消息一起发送:

String result = "预计明天伦敦会下雨。";
ToolExecutionResultMessage toolExecutionResultMessage = ToolExecutionResultMessage.from(toolExecutionRequest, result);
List<ChatMessage> messages = List.of(userMessage, aiMessage, toolExecutionResultMessage);
Response<AiMessage> response2 = model.generate(messages, toolSpecifications);

4 高级工具API

高层,你可为任何Java方法添加@Tool注解,并将其与AI服务一起使用。

AI服务会自动将这些方法转换为ToolSpecification,并在每次与LLM的交互中包含它们。当LLM决定调用工具时,AI服务将自动执行相应的方法,并将方法的返回值(如果有)发送回LLM。实现细节可以在DefaultToolExecutor中找到。

@Tool("Searches Google for relevant URLs, given the query")
public List<String> searchGoogle(@P("search query") String query) {
    return googleSearchService.search(query);
}

@Tool("Returns the content of a web page, given the URL")
public String getWebPageContent(@P("URL of the page") String url) {
    Document jsoupDocument = Jsoup.connect(url).get();
    return jsoupDocument.body().text();
}

4.1 @Tool

任何用@Tool注解并在构建AI服务时明确指定的Java方法,都可以被LLM执行

interface MathGenius {
    
    String ask(String question);
}

class Calculator {
    
    @Tool
    public double add(int a, int b) {
        return a + b;
    }

    @Tool
    public double squareRoot(double x) {
        return Math.sqrt(x);
    }
}

MathGenius mathGenius = AiServices.builder(MathGenius.class)
    .chatLanguageModel(model)
    .tools(new Calculator())
    .build();

String answer = mathGenius.ask("What is the square root of 475695037565?");

System.out.println(answer); // The square root of 475695037565 is 689706.486532.

调用ask方法时,会发生两次与LLM的交互,如前文所述。交互期间,会自动调用squareRoot方法。

@Tool注解有两个可选字段:

  • name: 工具的名称。如果未提供,方法名将作为工具名称。
  • value: 工具的描述。

根据具体工具,即使不提供描述,LLM也可能理解其用途(例如,add(a, b)很明显),但通常最好提供清晰且有意义的名称和描述。这样,LLM在决定是否调用工具以及如何调用时会有更多信息。

4.2 @P

方法的参数可以使用@P注解。

@P注解有两个字段:

  • value: 参数的描述,此字段是必填的。
  • required: 参数是否是必需的,默认值为true,此字段为可选。

4.3 @ToolMemoryId

如果AI服务方法的某个参数使用了@MemoryId注解,则可以在@Tool方法的参数上使用@ToolMemoryId进行注解。这样,提供给AI服务方法的值将自动传递给@Tool方法。这对于多个用户和/或每个用户有多个聊天或记忆的场景非常有用,可以在@Tool方法中区分它们。

4.4 访问已执行的工具

如果你希望访问AI服务调用过程中执行的工具,可以通过将返回类型封装在Result类中轻松实现:

interface Assistant {

    Result<String> chat(String userMessage);
}

Result<String> result = assistant.chat("取消我的预订 123-456");

String answer = result.content();
List<ToolExecution> toolExecutions = result.toolExecutions();

4.5 以编程方式指定工具

在使用AI服务时,也可以通过编程方式指定工具。这种方法非常灵活,因为工具可以从外部资源(如数据库和配置文件)加载。

工具名称、描述、参数名称和描述都可以使用ToolSpecification进行配置:

ToolSpecification toolSpecification = ToolSpecification.builder()
    .name("get_booking_details")
    .description("返回预订详情")
    .addParameter("bookingNumber", type("string"), description("B-12345格式的预订编号"))
    .build();

对于每个ToolSpecification,需要提供一个ToolExecutor实现来处理LLM生成的工具执行请求:

ToolExecutor toolExecutor = (toolExecutionRequest, memoryId) -> {
    Map<String, Object> arguments = fromJson(toolExecutionRequest.arguments());
    String bookingNumber = arguments.get("bookingNumber").toString();
    Booking booking = getBooking(bookingNumber);
    return booking.toString();
};

一

旦我们拥有一个或多个(ToolSpecification,ToolExecutor)对,我们可以在创建AI服务时指定它们:

Assistant assistant = AiServices.builder(Assistant.class)
    .chatLanguageModel(chatLanguageModel)
    .tools(singletonMap(toolSpecification, toolExecutor))
    .build();

4.6 动态指定工具

在使用AI服务时,每次调用时也可以动态指定工具。可以配置一个ToolProvider,该提供者将在每次调用AI服务时被调用,并提供应包含在当前请求中的工具。ToolProvider接受一个包含UserMessage和聊天记忆ID的ToolProviderRequest,并返回包含工具的ToolProviderResult,其形式为ToolSpecification到ToolExecutor的映射。

下面是一个示例,展示如何仅在用户消息中包含“预订”一词时添加get_booking_details工具:

ToolProvider toolProvider = (toolProviderRequest) -> {
    if (toolProviderRequest.userMessage().singleText().contains("booking")) {
        ToolSpecification toolSpecification = ToolSpecification.builder()
            .name("get_booking_details")
            .description("返回预订详情")
            .addParameter("bookingNumber", type("string"))
            .build();
        return ToolProviderResult.builder()
            .add(toolSpecification, toolExecutor)
            .build();
    } else {
        return null;
    }
};

Assistant assistant = AiServices.builder(Assistant.class)
    .chatLanguageModel(model)
    .toolProvider(toolProvider)
    .build();

程序员为什么要学大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

继科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉优快云大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

​

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

LLM大模型学习路线 ↓

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容:

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容:

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容:

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容:

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉优快云大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

​

Langchain4J从AI Agent开始 AI Agent是智能体的概念,以大模型为核心,集决策能力、记忆能力、工具调用能力为一体的智能体。langchain框架是python写的,它是一个大语言模型智能框架,Langchain4J是langchain框架对应的java语言编写的。langchain框架中,包含了模型、数据集成、链式、工具包、代理、提示词、记忆等概念。代理Agent是一个高层级概念,它以大模型为核心,集成记忆和工具等为一体,构造了它的决策能力、执行能力、记忆能力,因此被称为智能体。决策能力: 来源于接入大模型。 阅读详情

相关推荐

[笔记] SpringBoot + LangChain4j: 构建 AI Agent 技术总结(上篇)

干货满满!一份帮你理解 SpringBoot + LangChain4j 构建 AI Agent 的核心笔记

bukeyizhongwen的博客 2303

Java文档阅读笔记-AI LangChain4j - Agent Multiple Tools Calling Example

本文展示了如何使用LangChain4J框架构建一个多工具智能代理。通过创建SystemTools类定义了两个工具方法:获取当前系统时间(systemMillis)和将时间戳转换为UTC格式(formatMillis)。AgentExample类实现了工具链式调用逻辑,先获取时间戳再转换为可读格式。项目使用Java 17环境,基于Ollama本地LLM模型(llama3.2)运行,通过Maven管理依赖。代码演示了智能代理如何依次调用多个工具,并将前一个工具的输出作为后一个工具的输入,最终输出格式化的UTC

IT1995的博客 456

agent-tools:一组用于将代理程序本地和远程地加载到JVM的工具的集合

#agent-tools允许将本地和远程将代理加载到JVM的工具集合。 概述 它提供了12种方法: (本地版本)->在本地JVM上有效。 加载(ClassFileTransformer ctf)->加载ClassFileTransformer 删除(ClassFileTransformer ctf)->删除ClassFileTransformer reset(String ... classNames)->加载类的原始版本(无任何字节码修改) 重新转换(ClassFileTransformer ctf,String ... classNames)->使用ctf重新转换类 redefine(String ... classNames)->使用当前加载的ctfs重新定义类 getObjectSize(Object obj)->返回对象的大小(以字节为单位) (远程版本)->与本地相

LangChain4j核心接口使用(五)Agent

SystemMessage("你是一个智能助手,可以帮助用户查找员工信息和文档链接。")

w_t_y_y的博客 746

Mac上安装Label Studio

以上步骤详细说明了如何在Mac上通过Anaconda安装Label Studio。记得根据你的具体需求选择是否创建新的环境,并使用conda或pip进行安装。安装完成后,务必验证Label Studio是否成功运行。

g2526的博客 1958

Akamai移动端Sensor数据采集与BMP风控机制深度解析

本文深度解析了Akamai在移动端风控中的核心机制,重点阐述了Sensor数据如何通过采集陀螺仪、加速度计等硬件信息,结合设备指纹生成连续且符合物理规律的行为轨迹。详细剖析了数据从采集、加密校验到通过BMP风控三重验证(校验位、时间差、数据逻辑)的完整流程,并提供了从模拟优化到自建风控模型的实用应对思路。

quiet的专栏 285

LangChain4j 中如何定义和使用工具(Tool)?请简述其底层的调用机制。

本文介绍了如何在LangChain4j框架中定义和使用工具(Tool)来扩展语言模型的能力。主要内容包括:1) 通过实现Tool接口定义工具类,示例展示了计算器工具的实现;2) 通过创建Agent和Chain来使用工具,演示了如何执行计算指令;3) 解析了底层调用机制,包括输入解析、工具选择、方法执行和结果返回四个步骤。工具机制使开发者能够灵活扩展语言模型功能,实现复杂应用的智能交互。

java1234的博客 257

SAP FI实战入门:从借贷法则到F-02记账,新手必懂的会计凭证操作

本文详细介绍了SAP FI模块中借贷记账法的核心逻辑及F-02凭证录入的全流程操作。通过实例解析借贷方向规则、科目编码设置及金额镜像原则,帮助新手快速掌握会计凭证操作技巧。同时提供了FS10N余额查询和常见错误排查方法,助力用户高效完成SAP财务记账任务。

weixin_29306571的博客 263

LangGraph4j+LangChain4J 实验智能客服系统

本文介绍了一个基于LangChain4j和LangGraph4j构建的智能客服系统设计方案。系统采用多节点架构,包含客服主管、售前、售后、人工和输出五个核心模块。客服主管作为路由节点,通过LLM判断用户问题类型并分发给相应节点;售前节点负责商品查询和促销活动,集成工具实现产品信息检索;售后节点处理订单相关问题。系统使用Java 17开发,结合LangChain4j 1.12.2和LangGraph4j 1.8.11版本,通过模块化设计实现了客服流程的自动化处理,并保留了人工介入的灵活性。代码示例展示了各节点

ALONG的博客 498

EMS案例:BMS传导发射超标整改案例

BMS作为新能源汽车的关键部件,其EMC性能直接影响整车的安全性和可靠性。本文通过一个实际的传导发射整改案例,详细展示了从问题定位、分析到解决方案实施的全过程。希望这些经验能够为从事类似产品设计的工程师提供有价值的参考,在未来的产品开发中避免类似问题,设计出更加可靠、稳定的BMS产品。EMC设计是一门结合理论与实践的艺术,只有通过不断积累经验、深入理解电磁场理论,并紧密结合实际应用场景,才能在复杂的电磁环境中设计出鲁棒性强的电子产品。

m0_56451176的博客 272

knowhere | 第一课:项目导论与环境搭建

摘要 本课程是Knowhere项目的第一课,重点介绍项目整体架构和开发环境搭建。Knowhere定位为AI Agent的文档记忆基础设施,通过解析多格式文档并保留结构化信息(如章节层级、表格语义等),为Agent提供可导航的文档知识。项目采用Python monorepo结构,核心包括: apps/api:FastAPI服务,处理HTTP请求和流程调用 apps/worker:Celery服务,执行文档解析等耗时任务 packages/shared-python:共享基础设施层 课程明确了各层职责边界,并推

weixin_43674738的博客 152

Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)

最近在学习 Java AI 应用开发,先用 Spring Boot 搭了一个最小项目,完成了大模型调用,然后在这个基础上继续接入 AI Service 和 Tool Calling。这篇文章记录整个实现过程,也把中间遇到的几个配置问题整理出来。目前使用固定数据模拟查询,后续可以把 Tool 接到 Service、MyBatis 和 MySQL。

weixin_61898502的博客 283

python乘法运算 信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

本文解析了全国青少年信息素养大赛Python编程挑战赛的乘法运算题目。题目要求通过递归算法实现两个自然数的乘法运算,并输出算式。算法分析指出可将乘法转化为累加,使用递归函数实现。程序代码展示了一个自定义函数add(),通过递归调用完成累加运算。文章还分析了考点,包括递归函数、输入处理、分支语句等编程基础知识的应用。最后强调解题方法的多样性,重点在于理解递归原理和实现题目要求。该题目难度适中,主要考查选手对递归算法的理解和编程基础能力。

青少年编程学习指导 789

springboot+langchain4j 实战 Day14——工具嵌入多 Agent(Tool-Equipped Multi-Agent)

在 Day 13 多 Agent 协作基础上,**给每个子 Agent 注入专属 Tool**,让子 Agent 不仅是"能说"—更能"能干"。

qq_44909430的博客 185

注意力机制模块:CVPR 2026 新宠:MLLA(多尺度线性注意力)即插即用,在 YOLO 和 ConvNeXt 上全面涨点

MLLA核心创新点与实践价值摘要(146字) 清华大学LeapLab团队通过解构Mamba模型,发现其核心优势源于遗忘门机制与块设计,而非传统SSM架构。基于此提出的MLLA模块创新性地将这两项设计融入线性注意力框架:1)用位置编码替代循环计算保留遗忘门的位置感知能力;2)通过门控投影+DWConv+MLP重构高效块结构。在COCO检测任务中,MLLA使小目标AP提升11.6%而仅损失6%FPS,支持ONNX/TensorRT全链路部署,代码已开源。该工作为高分辨率视觉任务提供了近乎零代价的性能提升方案。

ZXSXJ的博客 155

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

springboot+langchain4j 实战 Day15——打造一个“生产“级 Agent 服务:单个 Agent 同时持有多个 Tool,LLM 自主判断调用哪个

融合 Day 1-14 全部能力,打造一个**生产级 Agent 服务**:单个 Agent 同时持有多个 Tool,LLM 自主判断调用哪个;数据落 MySQL、Tool 结果走 Redis 缓存、每次调用被 AOP 追踪。

qq_44909430的博客 289

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深入浅出LangChain4J

LangChain4J就像Java的Spring框架一样,为LLM的接入提供了一套标准的接入能力。LangChain4J是LangChain在Java生态下的具体实现,用于构建基于LLM的应用和Agent系统。LangChain4J为不同的LLM提供了一个统一的API,屏蔽了底层API供应商的实现和调用差异,开发者可以使用LangChain无缝切换不同的LLM。

m0_64363449的博客 727

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java小白必看:Spring AI、LangChain4j、Semantic Kernel Java大模型框架全面对比与收藏指南

本文深入对比了 Java 生态中三大主流 AI 框架:Spring AI、LangChain4j 和 Semantic Kernel Java。文章从架构设计、代码实现和生产适用性等维度进行了详细分析,并提供了代码级对比。推荐 LangChain4j 作为首选框架,因其声明式 API、功能完整度、国内模型支持和活跃社区。同时,文章也探讨了 Spring AI 的优势与短板,以及 Semantic Kernel Java 的不足。最后,文章给出了推荐技术栈和 Spring AI 2.0 的前瞻分析,为 Jav

Android_XG的博客 808

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【0-1的agent源码进阶篇】深入 Tool Calling 的底层逻辑与生命周期---拆解langchain4j源码

本文深入剖析了LangChain4j中Function Calling/Tool Calling的底层实现原理。通过逐段解析源码,揭示了从工具定义(@Tool注解)、规格说明(ToolSpecification)、执行请求(ToolExecutionRequest)、执行器(DefaultToolExecutor)到服务协调(ToolService)五个核心组件的协同工作机制。文章详细阐述了AI Agent如何将大模型的意图转化为具体的Java方法调用,完成参数类型转换、反射执行和结果回传的完整闭环

任岁月风干理想再也找不回真的我 2414

高级java每日一道面试题-2025年8月08日-基础篇[LangChain4j]-什么是 Tool Execution? 如何实现自定义工具?

本文详细介绍了LangChain4j中的Tool Execution机制,包括工具定义、调用和执行三个阶段。通过@Tool注解可以轻松将Java方法转化为AI可调用的工具,框架会自动处理工具描述生成、参数解析和结果回传。文章还讲解了如何实现自定义工具、控制工具行为、处理错误以及底层实现原理,并提供了完整的天气工具示例。Tool Execution是连接AI与外部系统的关键桥梁,掌握这一机制可以构建强大的智能应用。

qq_43071699的博客 495

LangChain4j全集-18-Agents

Agent 就是一个由大模型驱动的“智能任务执行器”,它能理解用户目标,并自动调用你在 Java/Spring Boot 里提供的工具方法来完成任务。

qq_35659915的博客 298
上一篇: 大模型好书推荐!BERT基础教程:Transformer大模型实战(附文档)
下一篇: RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?
Llama-Turbo
博客等级 码龄4年 9901粉丝 2022原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值