LangChain4j全集-14-Agents and Agentic AI

LangChain4j全集-14-Agents and Agentic AI Agents and Agentic AI梳理下面我按这个页面的内容结合你是 Spring Boot 开发者的视角帮你把 LangChain4j 里面的Agents and Agentic AI梳理一遍。这个页面主要讲的是如何使用langchain4j-agentic模块来构建“智能体应用”也就是让多个 AI 服务像一个团队一样协作完成更复杂的任务。1. 先说结论Agentic AI 是什么你可以先这样理解普通 AI 应用用户问题 - 调用一次大模型 - 返回答案Agentic AI 应用用户目标 - AI 分析任务 - 拆分步骤 - 调用不同 Agent - 可能调用工具、数据库、接口 - 汇总结果 - 返回最终答案也就是说Agentic AI 更像是一个“AI 工作流系统”。举个例子你让 AI帮我写一篇适合小学生阅读的科幻故事并检查语言风格是否足够简单。普通 AI 可能直接写一篇。Agentic AI 可能这样做CreativeWriter Agent先写故事 AudienceEditor Agent改成适合小学生 StyleScorer Agent检查语言是否足够简单 FinalReview Agent最终润色每个 Agent 都负责一件事组合起来完成复杂任务。2. 页面开头的 note实验性模块文档一开始强调langchain4j-agentic 模块目前是 experimental未来版本可能变化。也就是说这个模块还不是完全稳定 API。对于你这种 Spring Boot 开发者来说要注意可以学习、实验、做原型生产环境使用要谨慎升级 LangChain4j 版本时相关 API 可能会变最好把 Agent 相关代码封装在单独的 service 层避免后续改动影响业务代码。例如Controller - YourBusinessService - AgenticService / Agent Workflow不要让 Controller 直接依赖太多 agentic 模块的细节。3. Agentic systems智能体系统是什么文档中说虽然 AI Agent 没有统一定义但现在有一些常见模式可以通过多个 AI 服务组合完成复杂任务。你可以理解为Agentic System 多个 AI 能力 编排逻辑 上下文管理 工具调用它解决的问题是普通大模型只会“回答”但复杂业务通常需要拆任务调接口查数据库调工具多步骤推理保存中间结果根据结果继续判断多个 AI 角色协作。这就是 Agentic System 要做的事情。4. Anthropic 提到的两大类Workflows 和 Pure Agents文档引用了 Anthropic 的观点把 Agentic System 分成两大类1. Workflows工作流型 2. Pure Agents纯智能体型这两个概念很重要。4.1 Workflows工作流型 AgentWorkflow 就是流程由程序员提前设计好。比如你写死流程第一步写故事 第二步改成儿童风格 第三步评分 第四步如果分数不够再重新改 第五步返回结果这就是 Workflow。特点特点说明稳定流程是你定好的不容易乱跑可控适合企业业务系统易调试每一步是谁执行的很清楚适合生产比纯 Agent 更可控Spring Boot 业务系统里面我个人建议你优先学习 Workflow。因为企业应用通常需要可控可审计可测试可回滚可观测出错能定位。Workflow 更符合这些要求。4.2 Pure Agents纯智能体型Pure Agent 是让大模型自己决定下一步该做什么 调用哪个工具 调用哪个 Agent 什么时候停止比如用户说帮我分析这个客户为什么流失并给出挽回方案。Pure Agent 可能自己判断1. 先查客户订单记录 2. 再查客服工单 3. 再分析聊天记录 4. 再调用营销方案 Agent 5. 最后生成挽回建议这些步骤不是你写死的而是大模型自己规划的。特点特点说明灵活能处理开放式任务智能可以自己决定步骤不稳定可能走偏不好调试每次路径可能不一样成本较高可能多次调用模型和工具所以 Pure Agent 适合探索型任务助手型应用自动化研究复杂问题分析对稳定性要求没有那么高的场景。5. langchain4j-agentic 模块是干什么的文档中说langchain4j-agentic 模块提供了一组抽象和工具 帮助你构建 workflow 和 pure agentic AI 应用。它主要帮你做几件事5.1 定义 Agent让你可以把一个 AI 能力定义成一个 Java 接口方法。比如publicinterfaceCreativeWriter{UserMessage( You are a creative writer. Generate a draft of a story no more than 3 sentences long around the given topic. Return only the story and nothing else. The topic is {{topic}}. )Agent(Generates a story based on the given topic)StringgenerateStory(V(topic)Stringtopic);}这个CreativeWriter就是一个 Agent。它的作用是根据 topic 生成一个短故事。5.2 管理工具调用Agent 不一定只能调用大模型它也可以调用工具。比如查数据库调 REST API查订单发邮件生成文件调用内部系统查询向量数据库调用搜索引擎。在 LangChain4j 里这类能力通常通过 Tool / Function Calling 暴露给大模型。Agentic 模块可以把这些能力组合进工作流或智能体系统里。5.3 维护上下文复杂任务经常需要多个步骤共享数据。例如topic 太空旅行 story CreativeWriter 生成的故事 editedStory AudienceEditor 修改后的故事 score StyleScorer 打分结果这些中间结果需要保存起来后面的 Agent 才能使用。Agentic 模块会帮你管理这些输入输出和上下文。你可以把它理解成一个 Map{topic:太空旅行,story:...,editedStory:...,score:8.5}这类上下文在 Agent 工作流里面非常重要。6. Agents in LangChain4jLangChain4j 里的 Agent 是什么文档中说LangChain4j 中的 Agent 是一个使用 LLM 执行特定任务的组件。也就是说每个 Agent 最好只负责一类清晰任务。比如CreativeWriter负责创作 AudienceEditor负责根据目标读者修改 StyleEditor负责调整风格 Reviewer负责审核 Translator负责翻译 SummaryAgent负责总结 RouterAgent负责判断走哪个分支不要让一个 Agent 什么都干。好的 Agent 设计应该像好的 Java 类设计一样职责单一边界清晰。这和 Spring Boot 里面的 Service 设计很像UserServiceOrderServicePaymentServiceNotificationService不要写一个超级大的EverythingServiceAgent 也是一样。7. Agent 注解是干什么的文档中最核心的注解之一就是Agent它的作用是标记某个方法是一个 Agent 能力。比如Agent(Generates a story based on the given topic)StringgenerateStory(V(topic)Stringtopic);这里的含义是generateStory 方法是一个 Agent。 这个 Agent 的能力是根据给定主题生成故事。7.1 Agent 里的描述有什么用文档特别说最好给 Agent 提供简短描述。为什么因为在 Pure Agent 模式下可能会有别的 Agent 或 orchestrator 需要知道这个 Agent 是干什么的 什么时候应该调用它 它能解决什么问题比如你有三个 AgentCreativeWriter写故事 Translator翻译文本 MathSolver解决数学题当用户输入帮我把这个故事翻译成英文系统就应该知道要调用Translator而不是MathSolver。所以描述越清晰调度越准确。你可以把它理解成Agent的描述就是给大模型看的“接口文档”。8. Agent 的 name为什么每个 Agent 要有名字文档说Agents must also have a name uniquely identifying them inside the agentic system.意思是每个 Agent 在一个 agentic system 里都要有唯一名称。原因很简单如果多个 Agent 协作系统要区分它们。比如creativeWriter audienceEditor styleScorer translator如果不指定名称LangChain4j 会默认使用Agent标注的方法名作为名称。例如AgentStringgenerateStory(...)默认 name 可能就是generateStory但是在复杂系统中我建议你显式指定清楚。例如Agent(namecreativeWriter,descriptionGenerates a short story based on a topic)或者通过 builder 编程式设置。9. UserMessage 是干什么的示例里面有UserMessage( You are a creative writer. Generate a draft of a story no more than 3 sentences long around the given topic. Return only the story and nothing else. The topic is {{topic}}. )这个和普通 LangChain4j AI Service 里的用法类似。它的作用是定义发送给大模型的用户提示词模板。你可以理解成 Prompt 模板。里面的{{topic}}是变量占位符。调用时传入generateStory(机器人和小猫)LangChain4j 会替换成The topic is 机器人和小猫.然后发给大模型。10. V 是干什么的示例中有StringgenerateStory(V(topic)Stringtopic);V的作用是给参数命名让它能对应 Prompt 里的变量。V(topic)Stringtopic对应{{topic}}所以generateStory(太空冒险)会把{{topic}}替换成太空冒险你可以把V理解成参数绑定注解。类似 Spring MVC 里面的PathVariableRequestParamRequestBody只不过这里是把 Java 参数绑定到 Prompt 变量里。11. Agent 和普通 AI Service 有什么区别从写法上看它们很像。普通 AI Service 可能这样interfaceAssistant{UserMessage(回答用户问题{{question}})Stringchat(V(question)Stringquestion);}Agent 则加了Agent比如interfaceWriterAgent{UserMessage(根据主题 {{topic}} 写一个故事)Agent(Writes a story)Stringwrite(V(topic)Stringtopic);}区别在于对比项普通 AI ServiceAgent主要用途单次问答或简单任务参与复杂任务协作是否有描述可有可无很重要是否需要名字通常不需要需要唯一标识是否参与编排一般不参与可以参与 workflow 或 pure agent是否关注上下文较少更关注多步骤上下文一句话AI Service 是单个 AI 能力 Agent 是可以被编排、调度、协作的 AI 能力。12. AgenticServices.agentBuilder() 是干什么的文档后面提到AgenticServices.agentBuilder()它的作用是创建 Agent 实例。大致思路类似普通 LangChain4j 的AiServices.builder()。你可以理解成通过 builder把接口 模型 配置 组装成一个真正可调用的 Agent 对象。概念上类似CreativeWritercreativeWriterAgenticServices.agentBuilder(CreativeWriter.class).chatModel(chatModel).build();这里的意思是用指定的大模型 chatModel为 CreativeWriter 接口创建一个 Agent 实例。在 Spring Boot 里面你可以把它注册成 Bean。例如概念上ConfigurationpublicclassAgentConfig{BeanCreativeWritercreativeWriter(ChatLanguageModelchatModel){returnAgenticServices.agentBuilder(CreativeWriter.class).chatModel(chatModel).build();}}然后在业务服务中注入ServicepublicclassStoryService{privatefinalCreativeWritercreativeWriter;publicStoryService(CreativeWritercreativeWriter){this.creativeWritercreativeWriter;}publicStringcreateStory(Stringtopic){returncreativeWriter.generateStory(topic);}}13. 工作流编排是干什么的Agentic AI 里最重要的一点就是不是只创建一个 Agent而是把多个 Agent 编排起来。常见模式有几种。13.1 顺序执行 Sequential Workflow这是最常见的模式。Agent A - Agent B - Agent C - 最终结果例如CreativeWriter 写初稿 - AudienceEditor 改成儿童可读 - StyleEditor 改成幽默风格 - 返回最终故事适合场景文档生成内容润色审核流程数据清洗多步骤业务处理报告生成。Spring Boot 中类似result1serviceA.process(input);result2serviceB.process(result1);result3serviceC.process(result2);returnresult3;只不过这里的 service 是 AI Agent。13.2 并行执行 Parallel Workflow多个 Agent 同时处理同一个任务然后汇总结果。- Agent A 用户输入 - Agent B - Agent C ↓ 汇总 Agent例如写一篇产品分析报告MarketAgent分析市场 UserAgent分析用户 CompetitorAgent分析竞品 RiskAgent分析风险 SummaryAgent汇总报告适合场景多角度分析多专家评审内容比较风险评估多模型投票。优点速度快多视角。缺点成本更高因为会同时调用多个模型。13.3 条件分支 Conditional Workflow根据前一步结果决定走哪个 Agent。输入 - 判断类型 - 如果是投诉ComplaintAgent - 如果是咨询ConsultAgent - 如果是退款RefundAgent这很像 Java 里的if(...){...}elseif(...){...}适合场景工单分类客服路由意图识别多业务入口智能客服审批流程。例如用户说我要退款 系统判断退款类问题 调用RefundAgent13.4 循环 Loop Workflow循环模式是执行 Agent - 评估结果 - 不合格继续修改 - 合格结束例如写故事 - 打分 - 分数 8继续润色 - 分数 8返回适合场景文案优化代码修复自动评审自动改错反复生成直到达标。但要注意一定要设置最大循环次数。否则可能变成一直调用大模型一直花钱。在生产环境里非常重要。14. 上下文管理为什么重要多个 Agent 协作时最麻烦的是中间数据传递。比如topic - story - editedStory - score - finalStory如果你手动传代码会越来越乱。Agentic 模块的一个目标就是简化这个过程。你可以把上下文理解成一个共享数据区。类似MapString,ObjectcontextnewHashMap();context.put(topic,太空旅行);context.put(story,story);context.put(score,score);每个 Agent 可以从上下文里拿自己需要的数据也可以把结果写回上下文。这对于复杂 workflow 非常有用。15. Agent 的描述为什么在 Pure Agent 里特别重要在 Workflow 里调用顺序是你写死的先 A 后 B 再 C所以 Agent 描述没那么关键。但在 Pure Agent 里调用谁是大模型决定的。大模型需要看 Agent 描述来判断我现在应该调用哪个 Agent如果描述写得很模糊Agent(处理内容)大模型可能不知道什么时候用它。更好的写法是Agent(Generates a short creative story based on a given topic)或者Agent(Translates Chinese text into fluent English)描述要做到短准明确输入明确输出明确适用场景。16. Agent 名称设计建议建议你给 Agent 起语义清晰的名字。好的名字creativeWriter audienceEditor storyReviewer customerIntentClassifier refundPolicyAgent orderQueryAgent不好的名字agent1 testAgent doSomething processor handler因为在复杂系统里Agent 名字可能会出现在日志调试信息tracingprompt其他 Agent 的工具列表workflow 配置中。名字不清晰后面很难排查问题。17. 对 Spring Boot 开发者来说怎么落地你可以按照这个结构来组织代码。17.1 定义 Agent 接口publicinterfaceCreativeWriter{UserMessage( 你是一个创意作家。 请围绕主题 {{topic}} 写一个不超过 3 句话的故事。 只返回故事内容不要解释。 )Agent(根据给定主题生成短故事)StringgenerateStory(V(topic)Stringtopic);}17.2 配置 Agent BeanConfigurationpublicclassAgentConfig{BeanCreativeWritercreativeWriter(ChatLanguageModelchatModel){returnAgenticServices.agentBuilder(CreativeWriter.class).chatModel(chatModel).build();}}17.3 在 Service 中使用ServicepublicclassStoryApplicationService{privatefinalCreativeWritercreativeWriter;publicStoryApplicationService(CreativeWritercreativeWriter){this.creativeWritercreativeWriter;}publicStringgenerate(Stringtopic){returncreativeWriter.generateStory(topic);}}17.4 Controller 暴露接口RestControllerRequestMapping(/stories)publicclassStoryController{privatefinalStoryApplicationServicestoryService;publicStoryController(StoryApplicationServicestoryService){this.storyServicestoryService;}GetMappingpublicStringgenerate(RequestParamStringtopic){returnstoryService.generate(topic);}}18. 学习这页文档时你要重点掌握什么我建议你按下面顺序学。第一层理解基本概念先搞明白Agent 是什么 Agentic System 是什么 Workflow 和 Pure Agent 有什么区别这是基础。第二层会定义单个 Agent重点掌握AgentUserMessageVAgenticServices.agentBuilder()你先能写一个最简单的 Agent。第三层会组合多个 Agent重点掌握顺序执行 并行执行 条件分支 循环优化这才是 Agentic AI 真正有价值的地方。第四层结合工具调用比如 Agent 能调用数据库查询工具 HTTP 接口工具 订单查询工具 库存查询工具 知识库检索工具这样 AI 才能真正和你的业务系统结合。第五层生产化问题最后考虑日志 超时 重试 异常处理 Token 成本 最大循环次数 权限控制 敏感信息过滤 结果校验 可观测性这些是 Spring Boot 项目真正上线时绕不开的问题。19. 你可以把 LangChain4j Agentic 模块类比成什么如果你熟悉 Spring Boot可以这样类比Spring Boot 概念Agentic AI 概念ServiceAgentService 方法Agent 方法DTOAgent 输入输出Workflow / Orchestration多 Agent 编排ApplicationServiceAgentic SystemController用户入口Bean 配置Agent Builder日志链路Agent 执行轨迹RestTemplate/WebClient 调接口Tool Calling所以它不是一个完全陌生的东西。本质上还是定义组件 - 注入模型 - 编排流程 - 对外提供能力20. 简单总结这个页面的核心内容可以总结成一句话LangChain4j 的 agentic 模块让你可以把多个基于大模型的 AI Service 定义成 Agent然后通过工作流或智能体调度的方式组合起来完成比单次问答更复杂的任务。你需要重点记住1. Agent 用来声明一个 Agent。 2. Agent 最好职责单一。 3. Agent 要有清晰的 name 和 description。 4. Workflow 是程序员控制流程稳定可控。 5. Pure Agent 是大模型自己决定流程灵活但不可控。 6. 多 Agent 协作时上下文管理非常重要。 7. 在 Spring Boot 项目里建议把 Agent 配置成 Bean在 Service 层封装使用。如果你刚开始学我建议你先不要一上来就做 Pure Agent。更推荐学习路径是普通 AI Service - 单个 Agent - 顺序 Workflow - 条件 Workflow - 循环 Workflow - 工具调用 - Pure Agent这样会比较稳。