当前位置: 首页 > article >正文

Java工程师视角:j-langchain 快速上手 Agent

引言为什么 Java 工程师也需要 Agent过去两年几乎所有 AI Agent 教程都默认使用 Python。你看到的往往是LangChainLangGraphAutoGenCrewAI但现实情况是大多数企业后端系统并不是 Python而是 Java。很多 Java 工程师会遇到一个非常现实的问题我已经有 Spring Boot、MySQL、Redis、MQ、公司内部接口难道为了做 AI就要整套系统重写成 Python答案当然是否定的。对于绝大多数企业场景更合理的方式是在现有 Java 服务里直接接入 AI 能力。而 j-langchain就是专门为这件事准备的。它是一个纯 Java 实现的 AI 应用开发框架对标 Python 版 LangChain帮助 Java 工程师快速实现问答摘要翻译RAG 知识库工具调用Agent流式输出而且它的使用方式非常符合 Java 工程师熟悉的“链式调用”和“组件编排”思维。一句话理解j-langchain 用 Java 写 LangChain。一、j-langchain 到底是什么j-langchain 的核心思想其实很简单把 Prompt、模型、输出解析器、工具调用像流水线一样串起来。也就是说一次 AI 调用本质上是输入 → Prompt 模板 → 大模型 → 输出解析 → 最终结果在 j-langchain 里这种流水线被称为FlowInstance你可以把它理解为类似 Spring 中的一条调用链类似责任链模式类似一个“AI 工作流”而 Agent就是在这个基础上继续增加工具多步决策推理循环所以如果你会 Java、会 Spring其实上手会非常快。二、第一步添加依赖首先在 Maven 项目中加入依赖dependencygroupIdorg.salt.jlangchain/groupIdartifactIdj-langchain/artifactIdversion1.0.12/version/dependency如果你使用的是 Spring Boot 项目建议直接放到现有服务里。例如my-project ├─ src/main/java ├─ src/test/java ├─ application.yml └─ pom.xml这样后面就可以直接在现有 Controller、Service 中接入 AI。三、第二步配置 API Keyj-langchain 默认支持多种模型提供商。例如阿里云通义千问OpenAIOllama本地模型对于国内开发者最容易开始的通常是通义千问。在application.yml中加入spring:ai:aliyun:api-key:${ALIYUN_KEY}然后在系统环境变量里设置exportALIYUN_KEY你的keyWindowsset ALIYUN_KEY你的key不要把 Key 写死在代码里很多人第一次测试时会直接这样写StringapiKeyxxxxxx;这非常危险。推荐始终使用环境变量application.yml.env这样未来无论你换模型换环境部署服务器提交 Git都不会出问题。四、Hello AI三步构建第一个 AI 调用j-langchain 最核心的体验就是Prompt → 模型 → 输出解析下面这个例子就是最小可运行版本。Testpublicvoidhello(){// Step 1定义 Prompt 模板PromptTemplatepromptPromptTemplate.fromTemplate(Tell me a joke about ${topic});// Step 2选择模型ChatAliyunllmChatAliyun.builder().model(qwen-plus).build();// Step 3组装流水线FlowInstancechainchainActor.builder().next(prompt).next(llm).next(newStrOutputParser()).build();// Step 4执行ChatGenerationresultchainActor.invoke(chain,Map.of(topic,Java));System.out.println(result.getText());}如果你是 Java 工程师可以把它理解成输入参数 ↓ PromptTemplate 负责拼 Prompt ↓ ChatAliyun 负责调用大模型 ↓ StrOutputParser 负责解析返回值最终得到字符串结果。整个过程其实非常像Controller → Service → Converter → Result只是中间调用的不是数据库而是大模型。五、核心概念为什么 PromptTemplate 很重要很多 Java 工程师第一次接触 Prompt 时会把它理解成一段字符串。但在 j-langchain 中更推荐你把 Prompt 当成“模板”。例如PromptTemplatepromptPromptTemplate.fromTemplate(请用中文总结下面内容${content});后面真正执行时只需要传入变量Map.of(content,article)这样做的好处是Prompt 和业务逻辑分离更容易维护更适合复用更适合后期抽到配置文件里在企业项目里一个 Prompt 往往会不断调整。如果你把它写死在代码里后面会非常难维护。六、流式输出像 ChatGPT 一样逐字显示默认情况下大模型会等全部生成完再一次性返回。但真实产品里这种体验并不好。用户会感觉卡住了。所以大多数 AI 产品都会使用流式输出。在 j-langchain 中只需要调用llm.stream()示例TestpublicvoidstreamOutput(){ChatAliyunllmChatAliyun.builder().model(qwen-plus).build();AIMessageChunkchunkllm.stream(请用一句话解释什么是 Agent);StringBuildersbnewStringBuilder();while(chunk.getIterator().hasNext()){Stringtokenchunk.getIterator().next().getContent();sb.append(token);System.out.print(token);}}运行效果会像Agent 是一种能够自主完成目标的 AI 系统。但它不是一次性打印而是一个字一个字出来。这对于WebSocketSSE前端聊天框实时日志都非常有用。如果你已经在 Spring Boot 中做过 SSE那么这里会非常容易接。七、结构化输出不要让 AI 返回一大段乱文本很多业务系统并不希望 AI 返回一大段自然语言。真正需要的往往是{name:Java,year:1995}因为这样才能保存数据库返回前端继续下一步处理j-langchain 提供了JsonOutputParser示例TestpublicvoidjsonOutput(){ChatAliyunllmChatAliyun.builder().model(qwen-plus).build();FlowInstancechainchainActor.builder().next(llm).next(newJsonOutputParser()).build();ChatGenerationresultchainActor.invoke(chain,请以 JSON 格式列出3个编程语言包含 name 和 year 字段。);System.out.println(result.getText());}输出示例[{name:Java,year:1995},{name:Python,year:1991},{name:Go,year:2009}]这一步非常重要。因为真正的企业 Agent最后都需要让 AI 输出“可被程序消费的数据”。八、事件流调试为什么 Agent 经常“看起来没问题实际上有问题”很多人第一次做 AI 调用时会遇到一个问题最终结果不对但不知道是哪一步出了问题。可能是Prompt 写错模型理解错Parser 解析失败工具返回异常j-langchain 提供了一个非常实用的能力streamEvent()它会把整个链路中每个节点的输入输出都打印出来。TestpublicvoideventMonitor(){PromptTemplatepromptPromptTemplate.fromTemplate(Tell me a joke about ${topic});ChatAliyunllmChatAliyun.builder().model(qwen-plus).build();FlowInstancechainchainActor.builder().next(prompt).next(llm).next(newStrOutputParser()).build();EventMessageChunkeventschainActor.streamEvent(chain,Map.of(topic,Java));while(events.getIterator().hasNext()){EventMessageChunkeventevents.getIterator().next();System.out.println(event.toJson());}}你会看到类似on_chain_start on_llm_start on_llm_end on_parser_end on_chain_end对于调试复杂 Agent这个功能几乎是必备的。九、切换到本地模型不用花钱也能跑 Agent很多人刚开始做 Agent 时最担心的是调 API 太贵。其实你完全可以先在本地跑开源模型。最常见的方法就是 Ollama。先安装 Ollama然后拉取模型ollama pull qwen2.5:0.5b然后只需要把这一行ChatAliyunllmChatAliyun.builder()换成ChatOllamallmChatOllama.builder().model(qwen2.5:0.5b).build();完整代码TestpublicvoidlocalModel(){PromptTemplatepromptPromptTemplate.fromTemplate(用中文回答${question});ChatOllamallmChatOllama.builder().model(qwen2.5:0.5b).build();FlowInstancechainchainActor.builder().next(prompt).next(llm).next(newStrOutputParser()).build();ChatGenerationresultchainActor.invoke(chain,Map.of(question,Java 和 Python 有什么区别));System.out.println(result.getText());}其余代码完全不用改。这就是框架抽象层最大的价值换模型不换业务逻辑。十、从“调用模型”到“真正的 Agent”还差什么很多 Java 工程师跑通第一个 Demo 后会有一个误区我已经在用 AI 了。其实这时候你只是完成了Prompt LLM真正的 Agent还需要工具调用多步推理状态记忆ReAct 循环多轮决策例如用户帮我查今天北京天气如果下雨就提醒我带伞。这已经不是一个简单的 Prompt而是调天气工具判断结果决定是否提醒这类能力通常会在后面的 ReAct Agent 中实现。而 j-langchain 后续也支持ToolAgentExecutorReAct多工具路由所以你现在看到的只是第一步。十一、核心 API 一张表看懂API作用PromptTemplate.fromTemplate()创建 Prompt 模板ChatAliyun.builder()创建通义千问模型ChatOllama.builder()创建本地模型chainActor.builder()构建调用链chainActor.invoke()同步执行llm.stream()流式输出JsonOutputParserJSON 解析streamEvent()调试链路如果你已经会 Spring、MyBatis、责任链模式那么理解这些 API 会非常快。结语对于 Java 工程师来说最大的障碍从来不是不会 AI而是过去没有一个足够 Java 化、足够工程化的 AI 框架。而 j-langchain 正在解决这个问题。一句话总结PromptTemplate 负责“说什么”ChatAliyun / ChatOllama 负责“让模型回答”Parser 负责“把结果变成程序可用的数据”FlowInstance 负责“把这些串起来”。只要你会 Java就已经可以开始做 AI 应用了。下一步你就可以继续进入多步链式编排RAGTool CallingReAct Agent多 Agent 系统而这一切都不需要离开你熟悉的 Java 技术栈。

相关文章:

Java工程师视角:j-langchain 快速上手 Agent

引言:为什么 Java 工程师也需要 Agent? 过去两年,几乎所有 AI Agent 教程都默认使用 Python。 你看到的往往是: LangChainLangGraphAutoGenCrewAI 但现实情况是,大多数企业后端系统并不是 Python,而是 Java…...

豆包 Rocky Linux 10.1 环境下 100 道 grep 命令高频面试题 + 详细答案

Rocky Linux 10.1 环境下 100 道 grep 命令高频面试题 + 详细答案 全部基于 GNU grep,可直接在 Rocky Linux 10.1 / RHEL 10 / CentOS Stream 上运行验证,覆盖基础、正则、递归、过滤、运维场景、性能与坑点。 一、基础用法(1–10) 1. grep 基本语法 答案 grep [选项] …...

Photon光影包深度技术解析:从物理渲染到游戏体验的全面优化方案

Photon光影包深度技术解析:从物理渲染到游戏体验的全面优化方案 【免费下载链接】photon A gameplay-focused shader pack for Minecraft 项目地址: https://gitcode.com/gh_mirrors/photon3/photon Photon是一个专注于游戏体验的Minecraft光影包&#xff0c…...

LVGL实战:5分钟用ESP32驱动ST7789屏幕打造智能家居控制面板(附完整代码)

ESP32LVGLST7789智能家居控制面板实战指南 1. 硬件准备与环境搭建 在开始之前,我们需要准备好所有必要的硬件组件。ESP32开发板因其强大的处理能力和丰富的接口资源,成为物联网项目的首选。ST7789则是一款性价比极高的TFT LCD驱动芯片,支持24…...

Maple_公式推导进阶:subs与isolate的高效应用技巧

1. Maple公式推导的核心优势 第一次接触Maple时,我被它纸面般的公式显示效果惊艳到了。这就像用钢笔在草稿纸上演算,但永远不用担心写错——因为随时可以按CtrlZ重来。在完成流体力学方程的推导项目后,我总结了Maple最打动工程师的四个特点&a…...

手把手教你用GD32的ADC+DMA实现多通道数据采集(含二分查找法优化技巧)

GD32多通道ADC数据采集实战:从DMA配置到二分查找优化 在嵌入式开发中,模拟信号采集是连接物理世界与数字系统的关键桥梁。GD32系列MCU凭借其高性能ADC模块和灵活的DMA控制器,为多通道数据采集提供了可靠解决方案。本文将带您从基础配置到高级…...

高项论文「范围管理」超详细写作攻略:从框架到字句,手把手教你写出高分答卷

前言:阅卷老师到底在看什么? 很多人认为论文是“玄学”,其实不然。范围管理论文的评分标准非常清晰,阅卷老师在几分钟内重点抓取以下5个关键得分维度:得分维度占比具体含义你的对策结构完整性20%6个子过程是否全部覆盖…...

如何用AI修复受损音频:VoiceFixer完整指南

如何用AI修复受损音频:VoiceFixer完整指南 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 还在为嘈杂的录音、失真的语音或老旧音频而烦恼吗?VoiceFixer是你的AI音频修复专家&…...

如何快速通过手机号找回QQ账号:Python工具终极指南

如何快速通过手机号找回QQ账号:Python工具终极指南 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾经因为忘记QQ号而无法登录工作群聊,或者因为更换手机导致重要账号无法找回?现在&#x…...

Spring Boot 4 Spring Data AOT:从反射深渊到编译时确定性

我们是由枫哥组建的IT技术团队,成立于2017年,致力于帮助IT从业者提供实力,成功入职理想企业,我们提供一对一学习辅导,由知名大厂导师指导,分享Java技术、参与项目实战等服务,并为学员定制职业规…...

当医生意见不一时,AI怎么办?聊聊CVPR 2025 AmbiSSL如何解决医学图像分割的‘标注模糊’难题

当医生意见不一时,AI如何破局?解读CVPR 2025 AmbiSSL在医学图像分割中的创新实践 在放射科读片室里,三位资深医师正对同一张肺部CT片展开讨论。一位认为结节边缘需要扩大2mm勾画以确保安全切除,另一位坚持精确贴合可见边界&#x…...

AI声学A-59P模组:智能降噪,清晰通话

随着物联网与智能交互技术普及,语音已成为人机交互的主流入口。在楼宇对讲、车载通讯、远程会议、安防拾音等实际场景中,设备常面临稳态噪声(空调 / 风扇)、冲击噪声(敲击 / 碰撞)、风噪、交通噪声及强耦合…...

计算机网络 --- 动态路由

静态路由:由网络管理员手工配置的路由信息动态路由:所有路由器运行相同的路由协议,彼此之间沟通交流最终计算出到达未知网段的路由信息静态路由:优点:1.静态路由选路更加合理2.不需要额外消耗资源3.更加安全缺点&#…...

基于“灵珠AI平台”从0到1搭建一个博物馆数字人导游智能体教程

一、前言 有没有小伙伴去过博物馆?是不是经常遇到这种情况:租一个讲解器,走到哪听到哪,但它只管自己讲,根本不关心你想听什么。你对某件青铜器特别好奇,想多问两句?不好意思,讲解器不…...

寄存器与操作寄存器(小白级教学)

前言到目前为止,计算机依然只能读入二进制,此时肯定会有读者好奇了,那我们电脑中各种各样的图案,声音还有颜色都是如何来的呢,因为电脑本身就是硬件,硬件内部中,1就是代表高电压,0就…...

MyBatisPlus之核心功能+扩展功能

1.核心功能之Lamba更新普通写法:基于lamba写法:1.在controller层中编写接口,调用一个自己写的方法2.在IUserService接口,在UserServiceImpl实现该方法3.在UserServiceImpl编写代码,使用Lamba编写与lambdaQuery方法类似…...

用python实现一个简单的聊天功能

学完了python基础,写一个脚本,调用通义千问大模型API实现一个简单的聊天功能。 一、准备工作 1、执行以下命令,安装请求库 pip install requests 2、去通义千问开放平台申请API Key 注册阿里云账号并完成实名认证:https://das…...

Flutter 开源鸿蒙动效实战:全场景动效集成精简指南

🎉 Flutter 开源鸿蒙动效实战:全场景动效集成精简指南(鸿蒙兼容 可直接运行) 欢迎加入开源鸿蒙跨平台社区→https://openharmonycrosplatform.csdn.net 哈喽宝子们!我是刚学跨平台开发的大一新生😆 这次给我的鸿蒙 …...

别再裸奔了!给若依前后端分离项目加上AES接口加密(Vue3 + Spring Boot保姆级配置)

若依框架前后端分离项目AES接口加密实战指南 在当今数据安全日益重要的环境下,企业级应用开发中接口传输的安全性已成为不可忽视的一环。许多开发者在使用若依这类优秀框架时,往往只关注功能实现而忽略了数据传输过程中的安全隐患。本文将带您从零开始&a…...

D2: AI 工具的 ROI 评估框架(附 Excel 模板)

文章目录 D2: AI 工具的 ROI 评估框架(附 Excel 模板) 🎯 为什么这个话题重要? 现实痛点 真实案例 本章价值 核心内容 一、ROI 评估的核心公式 直接收益(可量化) 间接收益(需估算) 显性成本(必须计算) 隐性成本(最容易被低估) 风险成本(必须量化) 二、五维评估模…...

任务管理器怎么打开?【图文讲解】电脑卡死怎么关程序?任务管理器快捷键?电脑结束任务快捷键?6 种超简单方法,电脑卡死一键救急!

(1)问题背景 谁没碰到过电脑当场 “摆烂” 的崩溃时刻?软件卡死不动、页面关不掉、鼠标点啥都没反应,整个电脑卡成 PPT,急得人直跺脚! 这时候能救电脑于水火的,只有任务管理器。它就像电脑的急…...

BFF 架构决策与落地实践:从第一性原理到工程取舍

在主导过多个前后端分离项目的架构演进后,我对 BFF 这一层有了更系统的审视。它并非一个必须存在的组件,而是在特定约束下为解决特定问题而产生的架构模式。理解它,需要回到问题本源,厘清收益与代价,再谈如何落地。 一…...

【入门C++语法】第3章 输入cin

第3章 输入cin 一、 输入指令 C的输入指令&#xff1a;cin >> cin >> a;作用&#xff1a;读入一个变量&#xff0c;存储在变量a中 二、 完整示例程序 #include <iostream> using namespace std;int main() {int a,b;cin >> a >> b;cout <<…...

2026年工程AI动画框架:USD+知识图谱新标准

针对“2026年工程AI动画框架是否会形成基于USD知识图谱的统一语义标准”这一问题&#xff0c;答案是&#xff1a;到2026年&#xff0c;形成全球性、强制性的统一标准可能性较低&#xff0c;但以USD为几何与场景描述基础、以领域知识图谱为语义增强与推理层的“事实性”融合架构…...

ROS Melodic下,手把手教你用MoveIt Setup Assistant配置带夹爪的机械臂(附Gazebo仿真避坑点)

ROS Melodic机械臂配置实战&#xff1a;从MoveIt Setup Assistant到Gazebo仿真的全流程解析 在工业自动化和服务机器人领域&#xff0c;机械臂的运动规划一直是核心挑战。ROS Melodic作为长期支持版本&#xff0c;其MoveIt框架的配置流程与早期版本存在显著差异。本文将深入剖析…...

毕业论文排版救星!Paperxie 一键搞定 4000 + 高校格式,本科生再也不用熬夜改格式了

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图https://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 一、写在前面&#xff1a;被论文格式支配的恐惧&#xff0c;你一定懂 本科毕业论文的最后一关&#xff…...

在 ADT 里把当前焦点对象直接做成可点击清单,基于 HTML 结果的 Focused Objects Display IDE Action 实战

你在 Eclipse 版 ADT 里写代码时,真正高频的动作往往不是再新建一个对象,而是快速看清楚当前到底选中了什么。编辑器里盯着一个类,Project Explorer 里又顺手多选了几个对象,或者传输组织器里正在核对一个请求里的条目,这时候如果能有一个小动作,把当前焦点里的对象直接读…...

【限时解禁】SITS2026评测套件V1.0完整数据集+评估Pipeline(含中文细粒度标注子集)

第一章&#xff1a;SITS2026发布&#xff1a;多模态大模型评测集 2026奇点智能技术大会(https://ml-summit.org) 评测集设计目标 SITS2026&#xff08;Singularity Intelligence Test Suite 2026&#xff09;是面向下一代多模态大模型构建的综合性基准评测集&#xff0c;聚焦…...

计算机网络之TCP和UDP的底层机制

文章目录 1. TCP和UDP区别&#xff1f;2.TCP为什么可靠传输3. 怎么用UDP实现HTTP&#xff1f;4. TCP粘包怎么解决5. 滑动窗口6. 拥塞控制 1. TCP和UDP区别&#xff1f; TCP&#xff1a; 报头 TCP发送数据 客户端&#xff1a; #include <iostream> #include <strin…...

基于深度学习的苹果叶片病虫害识别系统,resnet50,vgg16,resnet34【pytorch框架,python源码】

更多图像分类、图像识别、目标检测、图像分割&#xff0c;图像检索等项目可从主页查看 功能演示(要看shi pin下面的简介)&#xff1a; https://www.bilibili.com/video/BV1Bs4XzcEdH/?spm_id_from333.1387.homepage.video_card.click&vd_source95b9b70984596ccebdb2780f0…...