LangGraph4j
用 Java 构建有状态、可循环并支持多智能体协作的 LLM 工作流。
工作流权限明确收窄为 contents:read,工具与外部调用由应用节点显式配置,状态流、条件边、检查点及持久化后端也有说明;因此最小权限、数据流透明度和回滚获得中等分。密钥示例使用环境变量,另有 Gitleaks 步骤,但基线 CI 仅支持手动触发,未展示依赖漏洞扫描、锁定提交或 SBOM,而且示例启用了模型请求/响应日志,故敏感数据与依赖安全未获满分。框架没有通用的人机确认机制;工具调用可能产生外部效果,但源码材料未展示审批、幂等或补偿策略。README、MIT 版权及上游灵感提供了归属信息,但维护者身份和发布者身份未得到独立验证。
README 对核心抽象、执行方式和 Java 基线的叙述总体一致,并给出 Maven Central、Ollama、LangChain4j、Spring AI及多种存储集成路径;但“开发快照”示例仍填写稳定版号,且外部模型、数据库和框架依赖的可用性由部署方承担,因此未满分。编译阶段会验证图结构并使用 GraphStateException/CompletableFuture 表达部分失败,但材料没有系统说明运行时错误分类、重试边界、超时或面向用户的诊断消息,所以 failure_messages 较薄。
受众、首个图、条件路由、持久化、框架集成和可视化调试等场景均有清晰入口,支持同步/异步节点、流式输出、子图、不同 LLM 框架及多种保存器,环境适配证据充分。条件边和条件入口使触发逻辑由开发者精确声明。扣分主要在能力边界:文档说明了构建机制,却没有完整界定不受支持的代理行为、生产安全边界或各集成的兼容矩阵。
README 的概念、模式矩阵、项目结构、安装、首例、运行方式和集成导航组织完善;Maven/BOM、Java 版本及稳定版/快照提示具体,示例和 how-to 覆盖面广。MIT 正文与元数据一致,可给满分。扣分在于未见专门 FAQ、完整已知限制清单、API 弃用/迁移政策或完整变更日志;README 只列最近版本。SECURITY.md 给出支持版本、报告途径和响应目标,但仍保留模板式措辞,且“项目所有者”的具体联系与职责不够明确。
共享状态、循环图、条件路由、检查点、流式处理、可视化和两大 Java AI 框架集成形成可直接组合的开发产物;首例和具体 API 使输出可用性较高,相比手写代理编排具有明确增量价值。未给满分的是成本效益:材料没有量化运行开销、令牌/模型成本、持久化成本、并发权衡或 Studio 的部署负担。
多数主张指向具体类名、方法、模块、配置、示例或测试位置,README、SECURITY.md、工作流和 YAML 配置之间也能相互印证 Java 版本、集成方式、密钥注入和维护路径。扣分是本次证据未包含实现源码、pom 依赖树、测试结果或发布记录全文,CI 又未自动触发;部分“无缝”“复杂”“优秀”等效益表述属于宣传性判断,未与可核验事实严格分栏。
- 框架本身未展示工具执行前的统一用户确认、权限策略或外部副作用补偿;生产应用必须在节点和工具层自行加入审批、范围限制、幂等及审计。
- 模型请求/响应日志可能包含提示词、个人信息、工具参数或凭据;启用日志前应脱敏并限制保留期和访问权限。
- WEATHER_API_KEY 等密钥通过环境变量注入是正确方向,但材料未展示密钥轮换、运行时隔离或泄漏响应流程。
- 基线 CI 和文档部署均仅为 workflow_dispatch,且未见依赖漏洞扫描或不可变提交固定;采用前应独立审计 Maven 依赖与 GitHub Actions 供应链。
- 检查点可能持久化完整代理状态和对话内容;使用数据库保存器时需自行落实加密、租户隔离、删除和保留政策。
- 静态材料没有证明示例、测试、发布声明或运行时行为已在该修订执行验证。
这个 Agent 能做什么,适合哪些场景?
LangGraph4j 是一个面向 Java 生态的库,用于构建有状态、多智能体的 LLM 应用,并可与 LangChain4j 或 Spring AI 集成。应用以 StateGraph、AgentState、节点和边描述执行过程,再编译为不可变且可运行的 CompiledGraph。它支持条件分支、循环、异步节点、流式结果、并行执行和作为节点嵌套的子图。检查点机制可以保存、检查和恢复执行状态,并提供 MySQL、PostgreSQL、Redis、SQLite、Oracle、DynamoDB、CockroachDB 与 Hazelcast 等持久化模块。其交付边界是嵌入 Java 应用的库;Studio 则提供可嵌入的 Web 界面,用于运行、观察和调试图。
开发者先用 Map<String, Channel<?>> 定义 AgentState 的状态结构及 reducer,再把 NodeAction<S> 或 AsyncNodeAction<S> 注册到 StateGraph。节点读取当前状态,可调用 LLM、工具或自定义 Java 逻辑,并返回 Map<String, Object> 状态更新;Channel reducer 决定覆盖、追加或以其他方式合并更新。普通边固定下一节点,addConditionalEdges(...) 和 addConditionalEntryPoint(...) 则依据当前状态动态选择路径,因此流程可以分支或循环。compile() 验证图结构并生成 CompiledGraph;stream(...) 逐节点产生状态,invoke(...) 通过 CompletableFuture 返回到达 END 后的最终状态。CheckpointSaver 可记录和恢复中间状态,PlantUML、Mermaid 与 Studio 可输出或呈现图结构和运行过程。
- 已经采用 Spring Boot 或 Spring AI 的 Java 团队,需要把模型调用、工具执行和条件路由编排成可循环的代理流程。
- 使用 LangChain4j 的应用开发者,需要通过仓库提供的 AgentExecutor 参考实现构建 ReAct 风格代理。
- 维护长时间运行任务的后端团队,需要用 CheckpointSaver 将执行状态保存到 PostgreSQL、MySQL、Redis 或其他已提供适配器的存储。
- 开发多轮对话服务的团队,需要为不同会话维护独立线程及各自的检查点历史。
- 需要调查复杂代理行为的工程师,希望逐节点查看流式状态、回放检查点,并通过 Mermaid、PlantUML 或 Studio 检查图结构。
- 构建模块化工作流的平台团队,需要把子图嵌入父图,并让可并行的分支同时执行。
这个 Agent 有哪些优点和局限?
- 执行模型原生支持循环和条件边,不局限于传统无环工作流,适合重试、澄清和工具选择等代理控制流。
- 核心库同时提供 LangChain4j 与 Spring AI 集成路径,模型调用也可替换为自定义 Java 逻辑。
- 检查点不只支持内存,还列出了 MySQL、PostgreSQL、Redis、SQLite、Oracle、DynamoDB、CockroachDB 和 Hazelcast 等专用 saver 模块。
- 同时覆盖 CompletableFuture 异步执行、流式状态、并行分支、子图和多会话线程。
- 可通过 PlantUML、Mermaid 和可嵌入 Studio 观察图结构及运行过程。
- 稳定版要求 Java 17+;若采用 how-tos/ 当前所述的笔记本工具,还需要 Java 22。
- 它是嵌入式 Java 库而非开箱即用的托管代理服务,使用者仍需选择并配置模型、工具、状态结构和部署环境。
- 持久化需要选用并运维相应数据库或缓存后端;MemorySaver 不能替代生产级持久存储。
- 不同模型框架需要不同的集成代码:LangChain4j 与 Spring AI 的模型、工具注解和构建器 API 并不相同。
- README 没有明确记录 ChatGPT、Codex、Claude 产品或 OpenAI、Anthropic API 的原生适配状态。
如何安装或部署这个 Agent?
要求 Java 17 或更高版本;how-tos/ 中当前所述的笔记本工具依赖 Java 22。Maven 项目可将版本设为 1.8.24,并导入 BOM:
<properties>
<langgraph4j.version>1.8.24</langgraph4j.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.bsc.langgraph4j</groupId>
<artifactId>langgraph4j-bom</artifactId>
<version>${langgraph4j.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.bsc.langgraph4j</groupId>
<artifactId>langgraph4j-core</artifactId>
</dependency>
</dependencies>
按需加入 LangChain4j、Spring AI、Studio 或具体 CheckpointSaver 模块。核心库本身未记录必需的 API 密钥;凭据和网络配置取决于所选模型提供方或存储后端。README 示例使用本地 Ollama,地址为 http://localhost:11434,模型为 qwen2.5:7b。
如何使用这个 Agent?
首次运行可定义一个继承 AgentState 的状态类,为 messages 配置 Channels.appender(ArrayList::new),再实现 GreeterNode 和 ResponderNode 两个 NodeAction。随后创建 new StateGraph<>(SimpleState.SCHEMA, SimpleState::new),通过 addNode(...) 注册节点,并连接 START -> greeter -> responder -> END。调用 stateGraph.compile() 得到 CompiledGraph,最后执行 compiledGraph.stream(Map.of(SimpleState.MESSAGES_KEY, "Let's, begin!")) 并遍历输出;每个结果表示一个节点完成后的状态。需要最终状态时可使用 invoke(initialState, RunnableConfig),需要持久化时则通过 CompileConfig.builder().checkpointSaver(...) 配置 saver。接入真实模型时,还需按照 LangChain4j 或 Spring AI 的集成模块创建 chatModel、注册工具并编译 AgentExecutor。
这个 Agent 与同类方案有什么区别?
它受到 Python LangGraph 的启发,但面向 Java 生态,并明确提供 LangChain4j 与 Spring AI 集成。与只支持 DAG 的传统工作流相比,LangGraph4j 允许控制流回到先前节点,适合代理重试、澄清和多步工具调用。