news 2026/4/15 15:29:47

AI大模型实用(四)Java快速实现智能体整理(LangChain4j实现智能小工具)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI大模型实用(四)Java快速实现智能体整理(LangChain4j实现智能小工具)

目录

一、实现翻译助手

二、实现计算器

三、流式输出json

四、实现会话记忆


一、实现翻译助手

1、AI Service接口:可把它看作标准 Spring Boot的 @Service,但带有 AI 功能。 * * 当应用程序启动时,LangChain4j 启动器将扫描类路径并找到所有带有 @AiService 注解的接口。对于每个找到的 AI 服务,它将使用应用程序上下文中的所有 LangChain4j 组件创建此接口的实现,并将其注册为一个 bean* 2、最大限度的调用函数工具:@UserMessage 我们通过提示词,让大模型尽量考虑调用我们的需求。 3、@SystemMessage 注解定义系统提示词。系统提示词是设置 AI 模型行为规则和角色定位的隐藏指令,用户通常不能直接看到。系统 Prompt 相当于给 AI 设定人格和能力边界,也就是告诉 AI “你是谁?你能做什么?”。
package com.ai.LangChain4j; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; import dev.langchain4j.service.spring.AiService; @AiService public interface TranslatorService { @SystemMessage("你是一位翻译助手") @UserMessage("请将以下句子翻译成英文:{{message}}") // 模板化提示 String chat(String message); }

controller实现:

@Autowired private ChatModel chatModel; // 汉译英 @GetMapping("/translator") public String translator(@RequestParam(defaultValue = "请介绍一下杜甫")String message) { translator = AiServices.builder(TranslatorService.class) .chatModel(chatModel) .build(); return translator.chat(message); }

运行结果

二、实现计算器

工具类实现:

package com.ai.LangChain4j; import dev.langchain4j.agent.tool.Tool; /** 定义工具类(类似函数调用) * @Tool用于对函数进行功能描述 * 描述的越清楚,大模型越容易考虑是否需要使用函数工具 *工具可以是任何东西:网页搜索、外部API调用、或执行一段特定代码等 * * */ public class CalculatorTool { @Tool("计算字符串的长度") int stringLength(String s) { return s.length(); } @Tool("计算两个整数的和") int add(int a, int b) { return a + b; } @Tool("计算两个整数的差") int sub(int a, int b) { return a - b; } @Tool("计算两个整数的商(除法)") int div(int a, int b) { return a / b; } @Tool("计算整数的平方根") double sqrt(int x) { return Math.sqrt(x); } }

AIService及controller实现:

package com.ai.LangChain4j; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; import dev.langchain4j.service.spring.AiService; @AiService public interface CalculatorService { @UserMessage("针对提出的问题:{{userMessage}},请尽量调用已有的函数工具") @SystemMessage("你是一个专业的计算器助手.") String cal(String userMessage); }
@Autowired private CalculatorService calculator; //简单计算器 @GetMapping("/calculator") public String calculator(String message) { calculator = AiServices.builder(CalculatorService.class) .chatModel(chatModel) .tools(new CalculatorTool()) .build(); return calculator.cal(message); }

运行结果:

三、流式输出json

按json格式输出

方法一:

@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); } }); }); }

运行结果,可以完整输出:

方法二:

定义:QaService
package com.ai.LangChain4j; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.spring.AiService; import java.util.List; @AiService public interface QaService { // resources 目录下新建文件 system-prompt.txt 来存储系统提示词 // @SystemMessage("你是一个精通Java的助理。请用中文回答。") @SystemMessage(fromResource = "system-prompt.txt") Report chatForReport(String userMessage); // 学习报告 record Report(String name, List<String> suggestionList){} }

controller实现:

@Autowired private QaService qaService; @GetMapping("/memory") public QaService.Report memory(@RequestParam(defaultValue = "你好,我是程序员小黑,学Java编程五年半,请帮我制定AI大模型学习路线")String message) { return qaService.chatForReport(message); }

运行结果:

四、实现会话记忆

@AiService public interface QaService { // resources 目录下新建文件 system-prompt.txt 来存储系统提示词 // @SystemMessage("你是一个精通Java的助理。请用中文回答。") @SystemMessage(fromResource = "system-prompt.txt") Report chatForReport(String userMessage); // 学习报告 record Report(String name, List<String> suggestionList){} }

定义bean:

@Bean public QaService qaHelperService() { /** * 会话记忆 * 开箱即用的 MessageWindowChatMemory 会话记忆,最多保存 N 条消息,多余的会自动淘汰。 * 创建会话记忆后,在构造 AI Service 设置 chatMemory */ ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10); QaService qaHelperService = AiServices.builder(QaService.class) .chatModel(chatModel) .chatMemory(chatMemory) .build(); return qaHelperService; }

controller

@Autowired private QaService qaService; @GetMapping("/memory") public QaService.Report memory(@RequestParam(defaultValue = "你好,我是程序员小黑,学Java编程五年半,请帮我制定AI大模型学习路线")String message) { return qaService.chatForReport(message); }

运行结果;

继续追问:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 15:28:03

24、VR UI设计与减少不适策略

VR UI设计与减少不适策略 1. VR UI设计 1.1 STEM系统数据集成 开发者借助Unity现有的逆运动学支持,能够轻松地将STEM系统的数据集成到虚拟世界中。对于更高级的集成,可使用Sixense SDK(sixense.com/hardware/sixensesdk)。在STEM系统的早期原型中,Sixense曾建议将第五个…

作者头像 李华
网站建设 2026/4/15 9:50:02

小红书直播录制终极方案:告别地址失效,实现永久监控

你是否曾经因为小红书直播地址频繁失效而错过心仪主播的精彩内容&#xff1f;每次都要手动更新直播间链接&#xff0c;不仅效率低下&#xff0c;还经常因为忘记更新而错过直播&#xff1f;今天&#xff0c;我将为你揭秘一套完美解决方案&#xff0c;让你彻底摆脱这些烦恼。 【免…

作者头像 李华
网站建设 2026/4/5 13:45:04

35、虚拟现实增强技术探索

虚拟现实增强技术探索 1. 图像增强 在增强现实领域,OpenCV库是一个宝库,它提供了众多易于使用的开源计算机视觉算法。以下是使用OpenCV能实现的一些常见功能: - 图像平滑、锐化和清理 - 去除静态图像或实时视频中的噪点模糊。 - 提高图像清晰度。 - 边缘检测和直线…

作者头像 李华
网站建设 2026/4/12 7:26:57

群晖Audio Station歌词神器:QQ音乐插件完整使用指南

群晖Audio Station歌词神器&#xff1a;QQ音乐插件完整使用指南 【免费下载链接】Synology-Lrc-Plugin-For-QQ-Music 用于群晖 Audio Station/DS Audio 的歌词插件 power by QQ music &#x1f642; 项目地址: https://gitcode.com/gh_mirrors/sy/Synology-Lrc-Plugin-For-Q…

作者头像 李华
网站建设 2026/4/14 3:28:06

深度评测:deepin-wine让Linux系统完美运行Windows软件

对于许多从Windows转向Linux的用户来说&#xff0c;最大的痛点莫过于无法使用QQ、微信等日常必备软件。deepin-wine跨平台兼容解决方案的出现&#xff0c;彻底改变了这一局面。这款基于deepin官方软件包的移植项目&#xff0c;让Ubuntu和Debian用户也能轻松享受Windows应用的便…

作者头像 李华
网站建设 2026/4/14 0:30:27

告别字幕提取混乱:video-subtitle-extractor版本控制与协作指南

你是否曾经在团队协作中遇到过这样的困扰&#xff1f;&#x1f914; 精心调整好的字幕提取参数被同事无意覆盖&#xff0c;模型文件更新导致版本混乱&#xff0c;或者多人修改同一份配置文件引发的冲突不断&#xff1f;这些问题不仅影响工作效率&#xff0c;更让字幕提取质量难…

作者头像 李华