agent-hub 项目图标
agent-hub · 对话式数据分析 Agent
Java 21 · AI Agent · 开源

Agent 查完数据,
直接给你卡片。

一个基于 AgentScope Java 2.0 与 Spring Boot WebFlux 的对话式数据分析 Agent。工具不再吐一坨 markdown,而是返回带 type 的结构化 JSON,浏览器直接挂载成图表卡片;向量、全文、标量三路检索用 RRF 融合排序,会话之外还有能被语义召回的长期记忆。

Java 21 Spring Boot 3.3.4 AgentScope 2.0.3 Apache-2.0
agent-hub / chat · a2ui
帮我找 2020 年后评分最高的几本书
TOOLseek_book_search✓
A2UI · hybrid 三路召回 · RRF 融合
向量Designing Data-Intensive Applications0.91
全文《数据密集型应用系统设计》0.88
标量year ≥ 2020 · rating ≥ 4.512 条
A2UI · chart 按年份统计
界面示意 · 数据仅用于展示卡片结构
工具返回 JSON,前端直接挂卡片
为什么

问一句数据问题,
它回你一堵文字墙。

工具输出是 markdown,模型再复述一遍,结构没了,数字也容易走样。

结果被复述一遍

LLM 把工具返回的表格重新写成人话,既多花一轮 token,数字还可能走样,用户也没法直接拿去用。

检索只有一条路

纯向量召回会漏掉精确条件——「2020 年后、评分 4.5 以上」这类标量过滤,没地方放。

聊完就忘

会话一关,上次说过的口径和事实全丢,下次又得从头交代一遍。

所以 agent-hub 把「工具返回什么」和「界面怎么显示」拆成了两件事。

做了什么

从编排到记忆,都自己搭了

每一块都能在仓库里找到对应的包和设计文档。

ReAct 编排

AgentScope 2.0 的 ReActAgent 驱动,31 类事件被折叠成 5 种领域事件,通过 SSE 推到浏览器。

A2UI 结构化卡片

工具返回 type: chart | hybrid | table 的 JSON 信封,前端检测后挂载原生卡片,并明确禁止模型复述结果。

混合检索 + RRF

本地哈希向量、全文匹配、标量过滤三路召回,用 Reciprocal Rank Fusion 融合排序,不依赖外部向量服务。

双层记忆

会话内历史之外,异步 MemoryExtractor 蒸馏稳定事实,跨会话按语义召回。

DDD 分层

presentation → application → domain ← infrastructure,依赖只向内,外部系统只由基础设施适配器接触。

可换人格 / A2A

换一个 AgentPersona 就换行业;A2A 协议配合 Nacos 发现,出站委派与取消都带签名。

跑起来

三步,本地就能对话

需要 JDK 21、Maven 3.9+ 和 Docker Compose。

1

起基础设施

SeekDB :2881、MongoDB :27017、Neo4j :7687 一次拉起,初始化 SQL 由容器挂载执行。

docker-compose up -d
2

配置密钥并构建

模型密钥只走环境变量,仓库里只有 .env.example 的字段名。

export AGENT_MODEL_API_KEY=sk-... mvn clean package -DskipTests
3

启动并打开

先通过手机号验证码或微信扫码登录,再进入聊天页。

java -jar target/agent-hub-1.0.0.jar # localhost:8080/chat.html
设计取舍

几个被问过的问题

为什么不用图表库?

柱状图就是 div 的高度,饼图是 CSS 的 conic-gradient。前端零依赖、完全自包含,也不用为了画一张图引入一整个库。

为什么要三个 profile?

seekdb / mongo / oceanbase 共用同一套应用,换仓储实现和 AgentPersona,就能从电商数据分析切到 OceanBase 知识图谱问答。

模型密钥会进仓库吗?

不会。AGENT_MODEL_API_KEY 只从环境变量读取,仓库里只放 .env.example 说明有哪些变量可配。

代码、架构图和设计文档,都摊开在仓库里

想看分层图、混合检索设计,或 A2UI 的信封格式,README 与 doc/ 目录里都有。