GitHub 推出了适用于 Java 的 Copilot SDK——这是一个经过生产环境测试的运行时,你可以将其作为 Maven 依赖项添加到任何 Java 应用中。除了用于 Spring Boot 项目的 Spring AI 和用于框架无关开发的 LangChain4j 之外,该 SDK 为 Java 团队提供了构建 AI Agent 的第三种选择。

为什么需要新的选择

为后端添加生成式 AI 现在已成为 Java 开发团队的常规需求。大多数团队通常会在两个成熟的库之间做出选择:

  • Spring AI – 与 Spring Boot 紧密耦合;它引入了整个 Spring 生态系统来进行配置、可观测性和生命周期管理。
  • LangChain4j – 框架无关,但仍会为其内存、工具调用和模型访问引入自己的抽象层。

两者都迫使开发者采用一套可能并不适用于所有架构的规范和运行时。GitHub 的 Copilot SDK 提供了一种更精简的替代方案,它跳过了 Spring 上下文以及 LangChain4j 的高层抽象。

该 SDK 的实际功能

Copilot SDK 不仅仅是 LLM API 的一个薄封装。它自带一个轻量级的 Agent 运行时,运行在与宿主应用程序相同的 JVM 中。在“自带密钥”(BYOK)模式下,该 SDK 可以直接连接到 OpenAI、Anthropic 或任何兼容的端点,而无需 Copilot 订阅。

核心能力包括:

  • 自动工具调用 – 你只需传递一个 Java 方法引用;SDK 会根据方法签名生成所需的 JSON schema,从而消除了手动编写 schema 的麻烦。
  • 响应式流 – 基于原始的 Reactive Streams 构建,它提供了背压(back-pressure)处理机制,保护 servlet 容器在长时间运行的补全过程中免受内存膨胀的影响。
  • 极低耦合 – 该运行时可在任何 servlet 容器中工作,不会将项目锁定在特定的框架中。
  • 上下文管理 – 它会自动跟踪 token 使用情况和对话历史,减轻了通常在 LLM 调用过程中繁琐的记录工作。

你仍需自行构建的部分

该 SDK 的极简主义将一些职责留给了应用程序:

  • 内存管理 – 运行时不会截断对话历史。你必须实现滑动窗口或其他策略,以确保保持在模型的 token 限制之内。
  • 重试逻辑 – 对于速率限制或瞬时错误,没有内置的重试策略。为此,请使用 Resilience4j 等库。
  • 可观测性 – 该 SDK 不提供开箱即用的指标(metrics)或链路追踪(traces)。你需要手动对调用进行埋点,例如使用 OpenTelemetry。

这些缺失是刻意为之的;该 SDK 的设计理念是“不干预”,而不是强制提供一套全栈解决方案。

与其他方案的对比

特性 Copilot SDK Spring AI LangChain4j
框架依赖性 无 —— 可在任何 servlet 容器中工作 需要 Spring Boot 无,但会引入自己的抽象层
内置可观测性 与 Spring 可观测性集成
内存处理 手动 部分支持
工具调用支持 根据方法引用自动生成 schema 手动
响应式流 原生 Reactive Streams

追求完全控制权且已经拥有监控栈的开发者可能会更青睐 Copilot SDK 的“精简”方式。而希望获得开箱即用的可观测性、配置管理或与 Spring 依赖注入更紧密集成的团队,则可能会继续使用 Spring AI。LangChain4j 则处于中间地带,在不强制使用 Spring 上下文的情况下提供了一些高级实用程序。