跳到主要内容

优势与差异点

这一页不列功能,而是回答一个更重要的问题:

如果你要向别人解释“AI4J 强在哪”,最值得强调的到底是什么?

先给一个可以直接复述的版本:

AI4J 的差异点,不只是多 provider 接入,而是它把 Java 场景下的模型访问、工具、Skill、MCP、RAG,以及向 Agent、Coding Agent、Flowgram 的上升路径,放进了一套连续且分层清楚的工程体系。

1. 它统一的是一整层能力,不只是模型请求

很多 AI SDK 的目标只是“能发请求”。

AI4J 当前真正统一的是这些会在真实项目里同时出现的能力:

  • 多 provider 服务入口
  • Chat / Responses / 流式 / 多模态
  • 本地函数工具
  • Skill
  • MCP
  • Memory
  • embedding / rerank / vector / websearch / ingestion
  • 扩展与装配入口

它更像“Java AI 基座”,而不是单点 provider wrapper。

2. 它最强的地方之一,是边界讲得清楚

AI 项目里最容易讲乱的几件事,在 AI4J 里被明确拆开了:

  • Function Call:本地可执行工具
  • Skill:说明、模板和工作流资产
  • MCP:协议化外部能力接入
  • Memory:会话事实层,不承担工具治理

这不是文档命名差异,而是工程分层差异。
一旦这些边界清楚,上层 AgentCoding AgentFlowgram 才不会变成概念泥团。

3. 它不是“假装所有 provider 完全对称”

这也是 AI4J 比较诚实的一点。

从当前 AiService 实现看:

  • Chat 覆盖最广
  • Responses 覆盖较窄
  • Embedding 只支持 OpenAI/Ollama
  • Audio / Realtime 只支持 OpenAI
  • Rerank 是独立 provider 矩阵

这说明它的目标不是做“看起来所有平台都一样”的假统一,而是:

  • 用统一入口管理能力
  • 同时保留真实的支持差异

对长期工程来说,这比把所有能力抽象成看似完美、实际难以兑现的一层更稳。

4. 它有清晰的向上演进路径

AI4J 的另一个优势不是“模块多”,而是这些模块之间能连续上升:

  1. ai4j 发第一个模型请求
  2. 接入 ai4j-spring-boot-starter
  3. 升级到 ai4j-agent
  4. 再进入 ai4j-codingai4j-cli
  5. 需要图式编排时继续进入 ai4j-flowgram-*

这条路径的价值在于:

  • 前面学到的概念能继续复用
  • 不需要每一层都推倒重来
  • 团队可以按复杂度逐步升级

5. 它对 Java 现实约束更友好

从当前仓库定位看,AI4J 很强调这些现实条件:

  • Java 8 兼容
  • 普通 Java 和 Spring 都能接
  • Maven 多模块治理
  • SDK、starter、runtime、CLI 的统一仓库组织

这使它特别适合那些不能假设“全员高版本 Java + 单一框架 + 单一 provider”的项目环境。

6. 它更偏工程交付,而不是一次性 demo

AI4J 的亮点并不只是“功能多”,而是很多长期工程问题已经被纳入体系:

  • 服务工厂与注册表
  • provider/profile 配置治理
  • 向量入库和检索流水线
  • 工具暴露与能力边界
  • 会话 memory 与压缩
  • 上升到 runtime 的连续路径

所以它更适合做:

  • 长期项目基座
  • 团队协作项目
  • 面向生产的 agentic 系统

7. 真正能写进选型文档的硬技术差异点

前面六点讲的是工程取向。下面这五项是已经落地、并且能在选型文档里直接复述的硬技术差异点,每一项都有对应模块和文档支撑,不是路线图。

7.1 A2A 协议:Agent 之间能互操作

ai4j-agent 内置 Google A2A 1.0 协议实现(A2AServer / A2AClient / AgentCard)。一个 ai4j Agent 既能作为 A2A 服务被外部发现和调用,也能作为客户端去调用别的 A2A Agent。

  • 能力发现:在 /.well-known/agent.json 暴露标准 AgentCard
  • 任务语义:SendMessage / SendStreamingMessage / GetTask / CancelTask,支持 SSE 流式更新与 push-notification 回调
  • 仅用 JDK stdlib(com.sun.net.httpserver),不引入新依赖,Java 8 可用

优势:多 Agent 系统不必绑死单一厂商,Agent 可以跨实现互操作。详见 A2A Protocol

7.2 多 provider 沙箱:一个 SPI,三套真实后端

SandboxProvider SPI 定义了“宿主如何把命令执行交给隔离环境”的合同,官方已带三个真实 provider:

  • E2BSandboxProvider(E2B,Firecracker 微 VM)
  • DaytonaSandboxProvider(Daytona)
  • CubeSandboxProvider(CubeSandbox)

Agent 需要执行 shell / 文件 / 项目命令时,可以按 spec 选择沙箱后端,而不是绑定到单一平台或自建容器。优势:执行隔离能力可替换、可移植。详见 Agent 沙箱 SPI

7.3 纯 Java 8、无 Kotlin、单一 JSON 栈

全 SDK 不引入 Kotlin 运行时,JSON 只用 fastjson2 一条栈(A2A、MCP、Agent 事件序列化都走它),编译目标面向 Java 8 bytecode。

  • 没有 Kotlin stdlib / 额外反射 / 双 JSON 序列化栈的依赖债
  • 存量 Java 8 + Maven 项目可以直接接入,不必先升 JDK
  • 对依赖治理严格的金融、政企、存量后端更友好

7.4 MCP 2.0 Streamable HTTP

StreamableHttpTransportStreamableHttpMcpServer 实现 MCP Streamable HTTP 传输,支持会话 ID 协商和 SSE 流式响应。MCP server / client 既可走 stdio、SSE,也可走当前规范推荐的 Streamable HTTP,不必绑定单一传输。优势:MCP 集成能贴近网关、代理和无状态部署的真实拓扑。

7.5 可观测、可重放、可审计

ai4j-agent 把运行时事件流做成了可观测、可重放、可审计的一等公民,而不是事后埋点:

  • 追踪:AgentTraceListener + 多个 TraceExporter(Console / JSONL / OpenTelemetry / Langfuse)
  • 节点级 I/O 捕获与重放:IoCaptureAgentListener / NodeReplayer / ResumableModelClient
  • 失败恢复与断点续跑:ResumeCache
  • 审计与防篡改:trace 投影保留完整节点输入输出

优势:生产级 Agent 系统能定位、能回放、能审计。详见 Trace ObservabilityReplay, Recovery, Audit

8. 这页也要讲诚实边界

AI4J 的优势不是“所有场景都绝对更强”,而是它优化目标很明确。

更适合它的场景:

  • 需要统一基础能力层
  • 需要后续上升到 Agent / Coding Agent / Flowgram
  • 需要兼顾普通 Java 和 Spring
  • 需要一套便于长期治理的模块结构

不一定最适合它的场景:

  • 只需要极薄的 provider HTTP wrapper
  • 完全不需要工具、协议扩展、RAG、runtime
  • 不在乎分层,只追求最小接入代码

9. 这一页的结论

AI4J 的差异点不在“它也能调很多模型”,而在它把多 provider 访问、工具、Skill、MCP、RAG 和向上 runtime 演进路径放进了一套连续的 Java 工程模型里。它更像长期系统的基础能力层,而不是一次性 demo SDK。

10. API Javadoc

AiService