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

简介: Baton 是一款开源 Java 多智能体 LLM 框架,单依赖集成 Agent 循环、工具调用、多后端记忆(文件/Redis/PG)、pgvector 长期记忆及多智能体编排(含人工审批)。纯 Java 实现,零 Spring 依赖,JDK 17 开箱即用,已发布至 Maven Central。

开源了一个 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,欢迎体验:

xml

<dependency>
    <groupId>io.github.lookfukc</groupId>
    <artifactId>baton-all</artifactId>
    <version>1.0.0</version>
</dependency>

GitHub:GitHub - 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());

自定义工具也只要几行:

java

tools.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. 多智能体编排,带人工审批点

java

Orchestrator 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/tools)
baton-provider 连真实 LLM(OpenAI/Anthropic/Gemini 协议)
baton-memory 会话记忆(四后端可选)
baton-orchestrator 多智能体
baton-ltm pgvector 长期记忆
baton-server 直接起 HTTP/SSE/WS/gRPC 服务

五、质量怎么保证

  • 349 个测试用例,覆盖协议适配流式语义、Agent 并发、记忆原子组截断、编排断点续跑、SSRF/限流/重试回归
  • GitHub Actions CI 里跑真实 Redis / PostgreSQL+pgvector 服务容器,外部存储联调用例全量激活,不是摆设
  • 开发过程抓出并修复过若干有意思的 bug:JDK 线程中断污染 BlockingQueue 导致流式事件静默丢失、Lettuce 单连接上 MULTI..EXEC 被并发读穿透、pgvector 占位符风格不兼容 PgJDBC 等——每个都有对应回归用例钉死

总结

如果你在用 Java 做 LLM 应用,想要一套不绑框架、按需组合、API 朴素直白的 Agent 工具箱,可以试试 Baton:

操作上手指引:Baton 完整上手教程-CSDN博客

欢迎 issue / PR 交流。

相关文章
|
11月前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
6212 86
|
20天前
|
弹性计算 负载均衡 安全
阿里云国际站服务代理商:SLB批量采购怎么做预算?按地域还是业务系统拆分
阿里云国际站SLB批量采购预算需兼顾地域(定价/部署)与业务系统(成本归属)双维度,避免重复计费;ALB/NLB/CLB计费模型不同,不可混用单价;应按实际资源清单(产品类型、网络类型、环境、周期)精细化报价与对账。
89 27
|
19天前
|
存储 弹性计算 固态存储
阿里云服务器收费价格:2026年10月最新整理(轻量 + ECS + GPU)费用清单
本文汇总2026年阿里云最新服务器价格:轻量应用服务器(38元起/年,200M峰值带宽)、ECS(99元/年起,含经济型/通用型/第九代c9i/g9i/r9i)、GPU服务器及详细带宽、系统盘计费标准,助用户精准选配。
|
20天前
|
存储 人工智能 弹性计算
阿里云38元服务器200M峰值带宽:购买入口、限制条件、使用场景及注意事项
阿里云新人专享:38元/年轻量应用服务器(2核2G/40G SSD/200M带宽/不限流量),预装宝塔面板,适合个人网站、小程序后端、AI Agent及轻量电商站部署。限量秒杀,仅限新用户。
149 2
|
人工智能 安全 机器人
一个机器人同时待在 QQ、微信和飞书里 —— AstrBot
AstrBot 是一个多平台聊天机器人框架,平台适配、消息收发、插件调度都由它接手,你只需要配一次模型和一份人格,就能把同一个助手放进 QQ、微信、飞书等群聊。通过阿里云计算巢部署,管理面板经控制台安全代理访问,端口不用暴露到公网,也不用留一台机器在家常开。
一个机器人同时待在 QQ、微信和飞书里 —— AstrBot
|
20天前
|
Java Linux 开发工具
【保姆级】IDEA官网下载+安装+配置+使用教程(所有版本汇总,2026最新版)
IntelliJ IDEA 是 JetBrains 开发的主流 Java IDE,支持 Java、Kotlin、Spring 等开箱即用,提供智能代码分析、重构与调试。含免费社区版(适合学习/中小型项目)和付费 Ultimate 版(含微服务、数据库、远程开发等高级功能),全面支持 Windows/macOS/Linux。
|
19天前
|
数据采集 存储 安全
合法云平台被滥用的大规模钓鱼攻击机理与防御研究
本文揭示云平台滥用型钓鱼攻击新态势:攻击者利用Cloudflare、Vercel等合法PaaS平台部署钓鱼页面,绕过域名黑名单与MFA防护。基于39万起真实事件,剖析多阶段技术链路,指出传统“拦域名”模式失效,提出平台治理、企业运营、身份防护、用户教育四层闭环防御体系。(239字)
72 1
|
19天前
|
JSON 人工智能 数据库
同一个指标写在七个地方:把口径收敛成单一事实源的一套做法
本文介绍治理“指标口径漂移”的实战方案:通过建立**单一事实源(JSON)**与**四关校验机制**(自洽性、权威库一致、可自证性、锚点扫描),自动拦截配置不一致。避免因多处硬编码导致的改一处漏多处问题,将人工纠错转为机器阻断,显著提升口径变更可靠性。(239字)
|
20天前
|
人工智能 并行计算 API
秋叶 ComfyUI-v9.5 本地部署教程|整合包安装、显存优化与批量出图代码实战
本教程详解秋叶ComfyUI-v9.5本地部署:涵盖NVIDIA显卡硬件要求、英文路径解压、一键启动、OOM显存优化(lowvram/fp16/xformers)、Python API批量绘图及插件安装,4G显存亦可流畅运行。
1184 1
|
19天前
|
人工智能 API
阿里云百炼Coding Plan深度解析:Pro套餐200元/月、API接入配置与省钱订阅指南
阿里云百炼Coding Plan是面向AI编程的订阅服务,月付200元(Pro版),整合通义千问、GLM、Kimi等多模型,按请求次数计费(月9万次),额度滚动恢复,专钥专用,限量抢购。阿里云CodingPlan官网:https://t.aliyun.com/U/na1clH
138 0

热门文章

最新文章