AI大模型实用(三)Java快速实现智能体整理(Springboot+LangChain4j)

目录

1.1 简介

1.2 示例

步骤一: 添加pom

步骤二:配置

步骤三:流式输出

步骤四: 正常输出

步骤五: 【类似函数调用】AI Service接口

1.3 调试问题

问题1: ClassNotFoundException: dev.langchain4j.exception.IllegalConfigurationException

问题2: overriding is disabled

问题3 :dev.langchain4j.exception.IllegalConfigurationException

1.4  langchain4j与springAI对比


1.1 简介

一个基于 Java 的库,旨在简化自然语言处理(NLP)和大型语言模型(LLM)的集成;

提供了大量现成的组件(文档加载器、工具、链),用于构建AI应用,是目前Java生态中最接近Python LangChain成熟度的选择。

1.2 示例

步骤一: 添加pom

<!-- https://mvnrepository.com/artifact/dev.langchain4j/langchain4j --> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j</artifactId> <version>1.9.1</version> </dependency> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-core</artifactId> <version>1.9.1</version> </dependency> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId> <version>1.9.1-beta17</version> </dependency> <!-- 导入响应式编程依赖包--> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-reactor</artifactId> <version>1.9.1-beta17</version> </dependency>

步骤二:配置

langchain4j.open-ai.chat-model.api-key=你的deepseekkey langchain4j.open-ai.chat-model.model-name=deepseek-chat langchain4j.open-ai.chat-model.base-url=https://api.deepseek.com langchain4j.open-ai.chat-model.log-requests=true langchain4j.open-ai.chat-model.log-responses=true

如果没有key:

langchain4j.open-ai.chat-model.api-key=demo

langchain4j.open-ai.chat-model.model-name=gpt-4o-mini

langchain4j.open-ai.chat-model.base-url=http://langchain4j.dev/demo/openai/v1

步骤三:流式输出

package com.ai.LangChain4j; import dev.langchain4j.model.chat.StreamingChatModel; import dev.langchain4j.model.openai.OpenAiStreamingChatModel; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.HashMap; import java.util.Map; //创建流式聊天模型配置 @Configuration public class Langchain4jStreamingChatModelConfig { @Value("${langchain4j.open-ai.chat-model.api-key}") private String apiKey; @Value("${langchain4j.open-ai.chat-model.base-url}") private String baseUrl; @Value("${langchain4j.open-ai.chat-model.model-name}") private String modelName; @Value("${langchain4j.open-ai.chat-model.log-requests}") private Boolean logRequests; @Value("${langchain4j.open-ai.chat-model.log-responses}") private Boolean logResponses; @Bean("langchain4jStreamingChatModel") public StreamingChatModel streamingChatModel() { Map<String,String> map = new HashMap<>(); map.put("Content-Type","application/json"); map.put("charset","utf-8"); return OpenAiStreamingChatModel.builder() .baseUrl(baseUrl) .apiKey(apiKey) .modelName(modelName) //使用的模型名称 .temperature(0.7) // 控制回答的随机性(0-1,越高越随机) .maxTokens(1000) // 单次回答的最大token数 .logRequests(logRequests) // 记录请求日志 .logResponses(logResponses) // 记录响应日志 .returnThinking(true) // 是否返回AI的思考过程 // .customHeaders(map) .build(); } } @Resource(name = "langchain4jStreamingChatModel") private OpenAiStreamingChatModel streamingChatModel; @RequestMapping(value = "/chatstream") public Flux<String> chatstream(@RequestParam("message") String prompt) { return Flux.create(emitter -> { streamingChatModel.chat(prompt, new StreamingChatResponseHandler() { @Override public void onPartialResponse(String partialResponse) { emitter.next(partialResponse); } @Override public void onCompleteResponse(ChatResponse chatResponse) { emitter.complete(); } @Override public void onError(Throwable throwable) { emitter.error(throwable); } }); }); } 

参考:https://www.cnblogs.com/timothy020/p/19043509

步骤四: 正常输出

@Autowired private OpenAiChatModel model; @RequestMapping("/chat") public String chat(String message) { return model.chat(message); }

步骤五: 【类似函数调用】AI Service接口

package com.ai.LangChain4j; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.spring.AiService; import dev.langchain4j.service.UserMessage; /** * AI Service接口 :可把它看作标准 Spring Boot的 @Service,但带有 AI 功能。 * * 当应用程序启动时,LangChain4j 启动器将扫描类路径并找到所有带有 @AiService 注解的接口。对于每个找到的 AI 服务,它将使用应用程序上下文中的所有 LangChain4j 组件创建此接口的实现,并将其注册为一个 bean * * 最大限度的调用函数工具:@UserMessage 我们通过提示词,让大模型尽量考虑调用我们的函数工具 */ @AiService interface Assistant { @UserMessage("针对提出的问题:{{it}},请尽量调用已有的函数工具") @SystemMessage("You are a polite assistant") String chat(String userMessage); } package com.ai.LangChain4j; import dev.langchain4j.agent.tool.Tool; /** 定义工具类(类似函数调用) * @Tool用于对函数进行功能描述 * 描述的越清楚,大模型越容易考虑是否需要使用函数工具 *工具可以是任何东西:网页搜索、外部API调用、或执行一段特定代码等 * * */ public class CalculatorTool { @Tool("计算字符串的长度") int stringLength(String s) { System.out.println("Called stringLength with + s + "'"); return s.length(); } @Tool("计算两个整数的和") int add(int a, int b) { System.out.println("Called add with a=" + a + ", b=" + b); return a + b; } @Tool("计算整数的平方根") double sqrt(int x) { System.out.println("Called sqrt with x=" + x); return Math.sqrt(x); } } @Autowired private ChatModel chatModel; @Autowired Assistant assistant; @GetMapping("/assistantchat") public String assistantchat(String message) { assistant = AiServices.builder(Assistant.class) .chatModel(chatModel) .tools(new CalculatorTool()) .build(); return assistant.chat(message); }

注: 运行时有日志

 @RequestMapping("/chat") public String chat(String message) { return model.chat(message); }

运行结果:

@GetMapping("/assistantchat") public String assistantchat(String message) { assistant = AiServices.builder(Assistant.class) .chatModel(chatModel) .tools(new CalculatorTool()) .build(); return assistant.chat(message); }

运行结果:

参考:

https://blog.ZEEKLOG.net/matrixlzp/article/details/150610135

https://blog.ZEEKLOG.net/m0_71741473/article/details/148379520

https://cloud.tencent.com/developer/article/2512470

1.3 调试问题

问题1: ClassNotFoundException: dev.langchain4j.exception.IllegalConfigurationException

解决:  检查

application.properties的配置

langchain4j.open-ai.chat-model.api-key=demo langchain4j.open-ai.chat-model.model-name=gpt-4o-mini langchain4j.open-ai.chat-model.base-url=http://langchain4j.dev/demo/openai/v1

注: 如果你暂时没有密钥,也可以使用 LangChain4j 提供的演示密钥(同上),这个密钥是免费的,有使用配额限制,且仅限于 gpt-4o-mini 模型

注: 如果已经有密钥,直接替换即可。

问题2: overriding is disabled

The bean 'openAiChatModel', defined in class path resource [org/springframework/ai/autoconfigure/openai/OpenAiAutoConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [dev/langchain4j/openai/spring/AutoConfig.class] and overriding is disabled.

解决: 

去掉langchain4j的openapi相关的依赖或者去掉SpringAI的openapi相关的依赖

<!-- &lt;!&ndash; LangChain4j OpenAI 支持(用于兼容 OpenAI 接口的模型,如 GPT 或阿里云百炼) &ndash;&gt;--> <!-- <dependency>--> <!-- <groupId>dev.langchain4j</groupId>--> <!-- <artifactId>langchain4j-open-ai</artifactId>--> <!-- <version>1.9.1</version>--> <!-- </dependency>--><!-- <dependency>--> <!-- <groupId>dev.langchain4j</groupId>--> <!-- <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>--> <!-- <version>1.9.1-beta17</version>--> <!-- </dependency>-->

问题3 :dev.langchain4j.exception.IllegalConfigurationException

解决: 该问题是langchain4j-spring-boot-starter版本兼容问题。 可以对应修改和langchain4j生态兼容的版本。例如 <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-spring-boot-starter</artifactId> <version>1.9.1-beta17</version> </dependency>

1.4  langchain4j与springAI对比

核心功能对比

  1. ‌设计理念与定位‌: 
    • Spring AI 由 Spring 官方团队维护,核心目标是简化 AI 模型集成,提供统一 API 调用(如 OpenAI、Azure OpenAI),降低开发门槛,尤其适合已使用 Spring 生态的项目。‌‌
    • LangChain4j 是 LangChain 的 Java 实现,专注于模块化设计,支持智能 Agent、链式调用、记忆管理等高级功能,灵活性更高,但需要开发者手动组装组件。‌‌
  2. ‌高级功能支持‌: 
    • ‌多步骤推理与 Agent 管理‌:LangChain4j 内置 Agent 框架,支持复杂工作流编排(如动态工具调用、多条件决策),而 Spring AI 需开发者自行实现逻辑。‌‌
    • ‌记忆与上下文管理‌:LangChain4j 提供多样化记忆存储方案(如会话记忆、长期记忆),Spring AI 需手动管理对话状态。‌‌
    • ‌工具集成‌:LangChain4j 支持直接定义和调用外部工具(如天气查询、计算器),Spring AI 需额外处理函数调用。‌‌
  3. ‌RAG(检索增强生成)支持‌:LangChain4j 提供文本加载、解析、分割等完整工具链,Spring AI 的 RAG 功能相对基础

注意:

可以与 Spring Boot 等整合(langchain4j-spring 模块),但核心是一个纯 Java 库,需要手工 wiring 多数部分。

  • 使用 Spring AI 的典型用途:
    • 在已有 Spring Boot 微服务中嵌入 Chat 或 文本生成功能,例如客服机器人、内部文档助手。
    • 快速开发 embedding 搜索 + AI 文本摘要 + 图像生成业务。
    • 利用 Spring 的现有安全配置 /配置中心 /监控系统,保持统一架构。
  • 使用 LangChain4j 的典型用途:
    • 构建需要 Agent 调度、工具调用、Memory 管理的智能体。例如“用户输入 → 检索数据库 → 调用外部 API → 合成响应 → 写入日志”这种多步骤流程。
    • 构建自定义 RAG 服务:可插入自定义向量数据库、检索策略、重排序逻辑等。
    • 希望在 Java 应用中迁移或复制 LangChain Python 的工作流逻辑。

 参考:

https://www.cnblogs.com/duanxz/p/19088542

https://cloud.tencent.com/developer/article/2531640

Read more

【花雕学编程】Arduino BLDC 之模糊动态任务调度机器人

【花雕学编程】Arduino BLDC 之模糊动态任务调度机器人

基于 Arduino 的 BLDC 模糊动态任务调度机器人,是一种将模糊逻辑控制理论应用于机器人多任务管理与执行机构(BLDC 电机)协同控制的智能系统。该方案的核心在于解决传统基于固定优先级或时间片轮转的调度算法在面对非结构化环境时,对“不确定性”和“实时性”处理能力不足的问题。 1、主要特点 模糊逻辑驱动的优先级动态仲裁 这是系统区别于传统实时操作系统的核心,它将离散的“任务优先级”转化为连续的“任务紧迫度”。 * 多输入变量融合: 系统不再仅依据任务注册的时间或预设的静态优先级来调度,而是将传感器数据(如障碍物距离、电池电量、目标接近度)作为模糊输入变量。 * 语言值描述与规则库: 通过定义“很近”、“较远”、“极低”、“正常”等模糊集合,将数值型数据转化为语言型描述。例如,规则库中可定义:“如果前方障碍物距离为‘很近’且电池电量为‘充足’,则避障任务的优先级为‘最高’,巡航任务的优先级为‘零’”。 * 平滑的优先级过渡: 相较于传统算法中任务优先级的“

UMI-机器人采集数据的通用框架

UMI-机器人采集数据的通用框架

UMI-机器人采集数据的通用框架 引言 在机器人学习领域,如何高效采集高质量的训练数据一直是研究的核心挑战。传统方式主要包括 遥操作(teleoperation)、基于视频的学习(video learning) 与 手持夹持器(hand-held gripper)。其中,遥操作虽然能够直接获得可用于模仿学习的数据,但硬件部署复杂、成本高昂且依赖专家操作;基于人类视频的学习方法具有良好的环境多样性,但由于 人与机器人之间存在显著的形态差异(embodiment gap),动作迁移效果有限;而手持夹持器作为一种折中方案,虽然提升了数据采集的直观性与便携性,但以往研究多局限于简单的抓取或静态操作,难以覆盖动态与复杂任务。 针对这些问题,斯坦福大学提出了 Universal Manipulation Interface (UMI)。其核心创新在于: 1.手持夹持器设计 —— 将传感器和摄像头直接安装在夹持器上,使人类示范与机器人执行的视觉输入对齐,从而大幅减少观测空间的差异; 2.改造后的 SLAM 系统 —— 结合视觉与动作信息,解决了传统基于单目相机的动作恢复精度不足的问题;

dify接入企业微信群聊机器人详细步骤(从零到上线全记录)

第一章:dify接入企业微信群聊机器人详细步骤(从零到上线全记录) 准备工作:获取企业微信机器人Webhook URL 在企业微信管理后台创建群聊机器人,获取唯一的 Webhook 地址。该地址用于外部系统向指定群组发送消息。登录企业微信 → 进入“应用管理” → 创建或选择一个自建应用 → 添加“群机器人”,复制生成的 Webhook URL。 配置Dify工作流触发外部通知 在 Dify 中设置自定义响应后处理逻辑,通过 HTTP 请求将输出内容推送到企业微信群。使用内置的“HTTP 请求”节点,填写以下参数: * Method: POST * URL: 企业微信机器人的 Webhook 地址 * Body (JSON): 包含要发送的消息内容 { "msgtype": "text", "text"

RISC-V开源处理器实战:从Verilog RTL设计到FPGA原型验证

RISC-V开源处理器实战:从Verilog RTL设计到FPGA原型验证

引言:开源浪潮下的RISC-V处理器设计 在芯片设计领域,RISC-V架构正以其开源免授权、模块化扩展和极简指令集三大优势重塑行业格局。与传统闭源架构不同,RISC-V允许开发者自由定制处理器核,从嵌入式微控制器到高性能服务器芯片均可覆盖。本文以Xilinx Vivado 2025工具链和蜂鸟E203处理器为核心,完整呈现从Verilog RTL设计到FPGA原型验证的全流程,为嵌入式工程师和硬件爱好者提供一套可复现的实战指南。 项目目标与技术栈 * 核心目标:基于RISC-V RV32I指令集,设计支持五级流水线的32位处理器核,实现基础算术运算、逻辑操作及访存功能,并在Xilinx Artix-7 FPGA开发板验证。 * 工具链:Xilinx Vivado 2025(逻辑设计、综合实现)、ModelSim(功能仿真)、Xilinx Artix-7 XC7A35T FPGA开发板(硬件验证)。 * 参考案例:蜂鸟E203处理器(芯来科技开源RISC-V核,已在Xilinx FPGA上完成移植验证,最高运行频率50MHz)。 一、数字系统设计流程:从需求到架构 1.