开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐

📅 发布时间:2026/10/20 11:48:48
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
开源了一个 Java 多智能体 LLM 框架 Baton一个依赖把 Agent 循环、工具调用、记忆、编排全配齐我把做 LLM 应用最常踩的坑——多厂商接入、会话记忆、工具调用、多智能体编排——做成了一套开箱即用的 Java 框架已发布 Maven Central。核心模块零 Spring 依赖JDK 17 开箱即用。前言用 Java 做 LLM 应用开发你会发现一个尴尬的现状Python 生态里 LangChain、LlamaIndex 卷得飞起Java 这边却基本只有 Spring AI 一条路——绑定 Spring 全家桶想在自己已有的工程里嵌一个 Agent 循环或者不用 Spring选择就很有限。所以我写了Baton指挥棒/接力棒单智能体的 ReAct 循环是“接力”多智能体的工作流编排是“指挥”。它不是 Spring AI 的替代品而是一套核心纯 Java、按需组合的积木——你可以只拿一个对话循环嵌进任何工程也可以一个依赖拉起带 HTTP/SSE/WebSocket/gRPC 的完整服务。已经发布 Maven Central欢迎体验xmldependency groupIdio.github.lookfukc/groupId artifactIdbaton-all/artifactId version1.0.0/version /dependencyGitHubGitHub - Lookfukc/baton: Baton is a Java library for building LLM/Tool/Memory pipelines. · GitHub一、它能干什么能力说明多厂商接入一套 API 适配 OpenAI / Anthropic / Gemini 三种协议DeepSeek、GLM 等 OpenAI 兼容厂商开箱即用带 per-model 定价与成本核算ReAct Agent 循环有状态/无状态双模式流式输出、迭代熔断、dangling tool-call 自动修复工具调用工具注册表 内置工具安全计算器/时钟/SSRF 防护的 HTTP 抓取 完整 MCP 客户端stdio/HTTP会话记忆文件 / SQLite / PostgreSQL / Redis 四后端TTL 过期、摘要压缩、快照回滚、AES-256-GCM 加密长期记忆pgvector 向量关键词混合召回、LLM 事实抽取多智能体编排顺序 / Router / Supervisor / 人工 Checkpoint运行状态落盘、断点续跑可观测性Micrometer 指标、trace、事件总线、HMAC 签名 webhook中间件链重试 / 限流 / 主备切换 / 响应缓存流式与非流式全覆盖二、3 分钟跑起第一个 Agent注册厂商 → 组装 → 跑循环就这么点代码java// 1. 注册厂商密钥永远走环境变量 Registry registry new Registry(); registry.register(ProviderConfig.builder() .id(deepseek).protocol(openai) .baseURL(https://api.deepseek.com/v1) .apiKeyEnv(DEEPSEEK_API_KEY) .defaultModel(deepseek-chat) .addModel(ModelConfig.builder().id(deepseek-chat) .capabilities(ModelCapabilities.builder() .streaming(true).toolCalls(true).contextWindow(64_000).build()) .inputPricePerMtok(0.28).outputPricePerMtok(1.10) .build()) .build()); registry.mustGet(deepseek).loadApiKeyFromEnv(); // 2. 组装 中间件日志→重试→流式重试 LLM llm Adapters.newLLM(registry.mustGet(deepseek)); LLM wrapped Pipeline.streamRetry( Pipeline.of(llm, Pipeline.logging(null), Pipeline.retry(3)), 3); // 3. Agent 循环 Loop loop new Loop(wrapped, new ToolRegistry(), PersistentMemory.open(./sessions, null), Loop.Config.builder() .model(deepseek-chat) .systemPrompt(你是一个简洁的助手) .maxIterations(16) // 熔断防失控 .tokenBudget(32_000) // 预算内自动截断历史 .onEvent(e - { // 流式回调 if (e.type() LoopEvent.Type.DELTA_TEXT) System.out.print(e.text()); }) .build()); Loop.RunOutcome out loop.run(user-42, 帮我查下明天天气并总结); System.out.printf(tokens: in%d out%d%n, out.usage().inputTokens(), out.usage().outputTokens());自定义工具也只要几行javatools.register(Tool.of(weather, 查询城市天气, Json.parse( {type:object,properties:{city:{type:string}},required:[city]}), args - ToolResult.of(Json.parse(args).get(city).asText() 晴23°C)));三、两个我特别想聊的设计1. 有状态 / 无状态一个 API 讲清楚框架最常被问的问题历史由谁保管Baton 两种都给内部循环逻辑完全一致有状态loop.run(sessionId, input)——只传会话 ID记忆、截断、工具配对全由框架管。适合服务端聊天应用。无状态loop.runWithHistory(history, input)——框架零存储跑完把本轮新增消息newMessages()还给你自己存库。适合 Serverless、已有用户表、数据合规严格的场景水平扩展天然不需要共享存储。2. 多智能体编排带人工审批点javaOrchestrator orch new Orchestrator(FileRunStore.open(./runs)); orch.registerAgent(writer, writerLoop); orch.registerAgent(reviewer, reviewerLoop); orch.registerWorkflow(new Workflow(review, List.of( new AgentStep(, writer, $input), new CheckpointStep(approve, 审核草稿), // 人工审批点 new AgentStep(, reviewer, $prev)))); try { orch.run(review, 写一首关于秋天的诗); } catch (Orchestrator.CheckpointException cp) { // 暂停在审批点人工批复后跨进程、跨重启续跑 orch.resume(cp.state.id, 通过发表它); }Router 步骤分类器选路由、Supervisor 步骤监督者循环委派 worker也都内置了。四、模块化要什么拿什么核心链路core→agent→orchestrator零 Spring 依赖不想挑模块就baton-all一个依赖全家桶引入用途baton-agent只跑对话循环自动带 core/toolsbaton-provider连真实 LLMOpenAI/Anthropic/Gemini 协议baton-memory会话记忆四后端可选baton-orchestrator多智能体baton-ltmpgvector 长期记忆baton-server直接起 HTTP/SSE/WS/gRPC 服务五、质量怎么保证349 个测试用例覆盖协议适配流式语义、Agent 并发、记忆原子组截断、编排断点续跑、SSRF/限流/重试回归GitHub Actions CI 里跑真实 Redis / PostgreSQLpgvector 服务容器外部存储联调用例全量激活不是摆设开发过程抓出并修复过若干有意思的 bugJDK 线程中断污染 BlockingQueue 导致流式事件静默丢失、Lettuce 单连接上 MULTI..EXEC 被并发读穿透、pgvector 占位符风格不兼容 PgJDBC 等——每个都有对应回归用例钉死总结如果你在用 Java 做 LLM 应用想要一套不绑框架、按需组合、API 朴素直白的 Agent 工具箱可以试试 Baton操作上手指引Baton 完整上手教程-CSDN博客GitHubGitHub - Lookfukc/baton: Baton is a Java library for building LLM/Tool/Memory pipelines. · GitHub 中英双语文档点个 ⭐ 是对开源人最大的鼓励Maven Centralio.github.lookfukc:baton-all:1.0.0许可MIT随便用欢迎 issue / PR 交流。