Spring AI vs Spring AI Alibaba:技术选型与平滑迁移策略

Spring AI vs Spring AI Alibaba:技术选型与平滑迁移策略

本章站在企业架构师视角,横向对比 Spring AI 官方与 Spring AI Alibaba,给出基于2026年最新版本的技术选型决策树、零风险迁移方案、双框架并行策略及生产级最佳实践。


一、定位差异一览

1.1 官方定位

官方 定位
Spring AI(Spring 官方团队) 通用 LLM 集成框架,对标语言级"AI SDK",核心使命是"connecting your enterprise Data and APIs with the AI Models"
Spring AI Alibaba(阿里巴巴 + Spring 社区) 基于 Spring AI 规范和阿里通义生态的企业级增强,其核心聚焦于多智能体编排(Multi-Agent Orchestration)

1.2 哲学差异

Spring AI 的核心哲学是"IoC for AI"------类似 Spring Data 用接口抽象多种数据库实现,Spring AI 定义了 ChatModelEmbeddingModelVectorStore 等通用接口,各模型厂商提供具体实现。这种设计保证了"写一次代码,切换模型只需改配置"的能力。Spring 团队刻意没把 Spring AI 做成一个 Agent Framework。

Spring AI Alibaba 的哲学是"End-to-End on Alibaba"------在 Spring AI 接口之下,加上阿里通义模型、云原生运维、图编排等企业能力。更准确的理解是:Spring AI = Spring 的 AI 标准规范的接口;Spring AI Alibaba = Spring AI 在阿里云与 Agent 工程方向上的完整落地实现。

两者的关系类似于 Spring Data JPA 与 Spring Data Alibaba------前者提供通用抽象,后者提供特定生态的深度优化。如果说 Spring AI 是 Java 领域的 LangChain,那么 Spring AI Alibaba 则更接近于 Java 领域的 LangGraph

1.3 核心差异矩阵(2026年最新版)

维度 Spring AI(官方) Spring AI Alibaba
核心接口 ChatModel / EmbeddingModel / VectorStore / ImageModel 完全对齐 Spring AI 接口,完全兼容
最新版本 1.1.7 CURRENT / 2.0.0-M8 PRE(2026年6月) 1.1.2.2(2026年3月)
默认模型 OpenAI / Azure OpenAI 通义千问(qwen-plus 默认)
开源时间 2024年2月 (0.8.0) 2024年9月
Graph 编排 ❌ 无内置(需外搭 LangGraph) Spring AI Alibaba Graph(Java 原生)
Agent Framework ❌ 无内置 ✅ ReactAgent + 多智能体模式
多智能体支持 ❌ 需自行实现 ✅ Graph 工作流编排 + A2A 协议
阿里 FC 集成 ✅ 函数计算弹性推理
中文 SOTA 依赖第三方模型 Qwen2.5 中文能力天花板
向量库支持 Neo4j / PGvector / Milvus Milvus / AnalyticDB / ES8 / OpenSearch / PGVector
MCP 协议 ✅ 1.1 全面支持 ✅ 支持
国产模型支持 ⚠️ 有限(需适配) ⭐⭐⭐⭐⭐ 通义千问、百川等
GitHub Stars Spring 官方项目 10k+ Stars
社区贡献者 Spring 官方团队 220+ 贡献者

注:

二、最终选型决策树(2026年更新版)

复制代码
你的主要模型是什么?
  │
  ├─ OpenAI GPT-4 / Azure OpenAI
  │   ├─ 仅英文场景 ──────────────→ Spring AI(官方)
  │   └─ 需要 Graph 编排 ──────────→ Spring AI(官方)+ LangGraph(Python)
  │
  ├─ 通义千问 / 智谱 GLM-4 / 国内模型
  │   ├─ 中文场景 ──────────────────→ Spring AI Alibaba ✅
  │   └─ 需要 Agent Skills ────────→ Spring AI Alibaba 1.1.2.x ✅
  │
  ├─ 多模型混用(OpenAI + Qwen + GLM)
  │   └─ 统一 Java 编排 ────────────→ Spring AI Alibaba(内置多模型路由)
  │
  ├─ 需要 Java 原生图编排(替代 Python LangGraph)
  │   └─ 企业级工作流 ──────────────→ Spring AI Alibaba Graph ✅
  │
  ├─ 多智能体协同(Subagent / Supervisor / Handoffs)
  │   └─ 团队协作 ──────────────────→ Spring AI Alibaba 1.1.2.2+ ✅
  │
  ├─ 语音 / 多模态 Agent(STT → Agent → TTS)
  │   └─ 实时语音交互 ──────────────→ Spring AI Alibaba 1.1.2.2+(Voice Agent)
  │
  └─ 不需要 Graph,仅简单 Chat + RAG
      └─ 任意模型都合适 ───────────→ Spring AI(官方)

决策树解读 :如果你只需要"接入一个 OpenAI 做聊天",Spring AI 官方就够了;如果你的场景涉及中文强需求、国内合规、图编排、多智能体或多模型混用,Spring AI Alibaba 是更好的选择。截至 2026 年 8 月,两者并非替代关系,而是基础原子抽象与高级企业级编排运行时之间的互补关系


三、版本演进与兼容性

3.1 Spring AI Alibaba 版本演进路线图

Spring AI Alibaba 采用四位版本号管理,前三位与 Spring AI 主版本对应:

版本 发布时间 底层 Spring AI 核心特性
1.0.0.0 2025年5月 1.0.0 GA 正式版,基础模型接入
1.0.0.4 2025年9月 1.0.1 重建 Agent Graph Engine,A2A 通信 + Nacos 集成
1.1.0.0 2025年12月 1.1.0 生产级 Agent Graph Runtime
1.1.2.0 2026年2月2日 1.1.2 Agent Skills + 多智能体并行执行 + Graph 并行条件边
1.1.2.1 2026年3月9日 1.1.2 补丁修复
1.1.2.2 2026年3月10日 1.1.2 AgentScope 集成 + 多智能体模式示例 + Voice Agent
2.0.0-M1.1 2026年 2.0.0-M1 升级到 Spring Boot 4.0.0 和 Spring AI 2.0.0-M1

截至 2026 年 6 月,Spring AI Alibaba 已迭代至 v1.1.2.x,累计发布 18 个 Release

3.2 Spring AI 2.0 里程碑

Spring AI 2.0 于 2026 年 6 月 12 日正式发布 GA 版本,基于 Spring Boot 4.1 和 Spring Framework 7.0 构建。核心变化包括:

  • Tool Calling 成为一等公民 :工具调用循环从每个 ChatModel 中剥离,统一由 ChatClient 通过 ToolCallingAdvisor 在外部处理
  • JSpecify 空值安全注解:代码库全面采用 JSpecify 空值安全注解
  • Jackson 3 序列化:升级到 Jackson 3 序列化

3.3 版本兼容性速查表

Spring AI 版本 Spring AI Alibaba 版本 Spring Boot 兼容性 备注
1.0.x 1.0.0.x 3.2.x / 3.4.x 完全兼容 首个稳定版
1.1.2 1.1.2.x 3.5.x 完全兼容 Agent Skills + 多智能体
2.0.0-M1 2.0.0-M1.1 4.0.0 完全兼容 最新里程碑

四、零风险迁移方案

4.1 抽象一:自定义 ChatModel Bean

最关键的一步是按照 Spring AI 接口实现 ------未来切换模型只需改 Bean 定义。业务代码只依赖 ChatModel 接口,不感知具体实现。

java 复制代码
@Configuration
public class UnifiedChatModelConfig {

    @Bean
    @ConditionalOnProperty("llm.provider", havingValue = "openai")
    public ChatModel openAiChatModel() {
        return new OpenAiChatModel(
            OpenAiApi.builder().apiKey(System.getenv("OPENAI_API_KEY")).build(),
            OpenAiChatOptions.builder().model("gpt-4o").build());
    }

    @Bean
    @ConditionalOnProperty("llm.provider", havingValue = "tongyi")
    public ChatModel tongyiChatModel() {
        return new TongyiChatModel(
            DashScopeApi.builder().apiKey(System.getenv("DASHSCOPE_API_KEY")).build(),
            DashScopeChatOptions.builder().model("qwen-plus").build());
    }

    @Bean
    @ConditionalOnProperty("llm.provider", havingValue = "glm4")
    public ChatModel glm4ChatModel() {
        return new ZhipuAiChatModel(
            ZhipuAiApi.builder().apiKey(System.getenv("ZHIPUAI_API_KEY")).build(),
            ZhipuAiChatOptions.builder().model("glm-4-plus").build());
    }
}

业务代码完全脱离具体实现

java 复制代码
@Service
public class ChatService {
    private final ChatModel chatModel;  // 接口,不依赖具体实现
    public ChatService(ChatModel chatModel) {
        this.chatModel = chatModel;
    }
    public String chat(String message) {
        return chatModel.call(message);  // 与模型无关
    }
}

修改 application.yml 即可切换模型:

yaml 复制代码
llm:
  provider: tongyi       # 改这里即可切换:openai/tongyi/glm4

4.2 抽象二:自定义 VectorStore

java 复制代码
@Configuration
public class UnifiedVectorStoreConfig {

    @Bean
    @ConditionalOnProperty("vector.provider", havingValue = "milvus")
    public VectorStore milvusStore() { return new MilvusVectorStore(...); }

    @Bean
    @ConditionalOnProperty("vector.provider", havingValue = "analyticdb")
    public VectorStore adsStore() { return new AnalyticDbVectorStore(...); }

    @Bean
    @ConditionalOnProperty("vector.provider", havingValue = "pgvector")
    public VectorStore pgStore() { return new PGvectorStore(...); }
}

4.3 抽象三:Graph 适配层

即使 Graph 编排层的实现不同,业务代码也可以通过 GraphRunner 接口保持不变:

java 复制代码
public interface GraphRunner {
    Flux<GraphEvent> stream(String input, RunConfig config);
    <T> T invoke(String input, Class<T> resultType);
}

@Component
@ConditionalOnProperty("graph.provider", havingValue = "alibaba")
public class AlibabaGraphRunner implements GraphRunner {
    // 基于 Spring AI Alibaba Graph 的实现
}

@Component
@ConditionalOnProperty("graph.provider", havingValue = "langgraph")
public class LangGraphHttpRunner implements GraphRunner {
    // 调用 LangGraph 远程服务(Python 微服务)
}

4.4 双框架并行运行策略

在迁移过渡期,可以同时引入 Spring AI 和 Spring AI Alibaba------通过 Spring Profile 隔离:

java 复制代码
@Configuration
@Profile("!alibaba")
public class SpringAiOfficialConfig { /* Spring AI 官方 Bean */ }

@Configuration
@Profile("alibaba")
public class SpringAiAlibabaConfig { /* Spring AI Alibaba Bean */ }

渐进学习路径:Spring AI(基础)→ Spring AI Alibaba(进阶)→ AgentScope-Java(高级)。


五、Spring AI Alibaba 1.1.2.x 核心新特性

5.1 Agent Skills(技能系统)

1.1.2.0 中,ReactAgent 集成了 Agent Skills 能力,支持以「技能」为单位做可复用指令与上下文的渐进式披露(Progressive Disclosure)。

核心概念

  • 渐进式披露 :系统提示中先只注入技能列表(name、description、skillPath);模型在需要某技能时调用 read_skill(skill_name) 加载完整 SKILL.md
  • Skill 目录结构:每个技能一个子目录,必须包含 SKILL.md,可选 references/、examples/、scripts/ 等
  • SKILL.md:YAML front matter 中需提供 name、description,正文为功能说明、使用方法与可用资源列表

使用示例

java 复制代码
SkillRegistry registry = FileSystemSkillRegistry.builder()
    .projectSkillsDirectory(System.getProperty("user.dir") + "/skills")
    .build();

SkillsAgentHook hook = SkillsAgentHook.builder()
    .skillRegistry(registry)
    .build();

ReactAgent agent = ReactAgent.builder()
    .name("skills-agent")
    .model(chatModel)
    .saver(new MemorySaver())
    .hooks(List.of(hook))
    .build();

agent.call("请介绍你有哪些技能");

核心收益:降低 token 消耗、扩展能力规模、技能可与 Python/Shell 等工具配合使用。

5.2 多智能体模式(Multi-agent Patterns)

1.1.2.0 在工作流智能体上增强了多智能体模式能力。1.1.2.2 版本提供了完整的多智能体模式示例:

模式 说明 适用场景
Subagent 主编排器通过 Task/TaskOutput 工具将任务委托给专业子 Agent 代码库探索、网页研究
Supervisor 中央监督者 Agent 将日历和邮件 Agent 封装为工具(AgentTool),按需调用并综合结果 多工具协调
Skills 单 Agent 使用 read_skill 按需加载技能内容 渐进式技能披露
Routing(simple) LlmRoutingAgent 分类用户查询,并行调用专业 Agent(GitHub/Notion/Slack) 多领域并行查询
Routing(graph) LlmRoutingAgent 作为 StateGraph 节点 Graph 内路由
Handoffs Sales/Support Agent 作为图节点,handoff 工具更新 active_agent,条件边路由 销售/客服交接
Workflow RAG(改写→检索→准备→Agent)和 SQL Agent(list_tables→get_schema→run_query) 自定义工作流

5.3 AgentScope 集成(1.1.2.2)

1.1.2.2 版本集成了 AgentScope JavaAgentScopeAgent 将 AgentScope ReActAgent 封装为 BaseAgent,可在 Graph 工作流中使用:

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter-agentscope</artifactId>
    <version>1.1.2.2</version>
</dependency>

5.4 Voice Agent(语音智能体)

1.1.2.2 新增了 Voice Agent 示例------三明治架构(STT → ReactAgent → TTS),基于 WebSocket 流式传输,集成 DashScope ASR 和 CosyVoice TTS。

5.5 Graph 并行能力增强

1.1.2.0 中 Graph 新增:

  • 并行条件边:支持并行执行的条件分支
  • 并行分支聚合策略:AllOf(等待所有完成)/ AnyOf(任意完成即可)
  • 批量 addEdge:一次添加多条边
  • interruptAfter Hook:节点执行后可中断
  • AgentToolNode 异步工具执行:工具调用异步化
  • 流式节点完整输出:节点执行过程中持续输出

六、性能与成本实测

6.1 测试条件

复制代码
- 测试集:1000 条中文客服问题
- 对比模型:gpt-4o-mini vs qwen-plus vs qwen-turbo
- 硬件:阿里云 ecs.c7.2xlarge x 1(Java 编排)+ Qwen 模型同节点
- 网络:阿里云内网

6.2 对比结果

模型 平均 Latency P95 Latency 准确率 单价(¥/百万 token) 月度成本(100万次)
gpt-4o-mini 920ms 2100ms 82% 1.08 ¥2,160
qwen-plus 780ms 1800ms 87% 1.20 ¥2,400
qwen-turbo 650ms 1400ms 79% 0.36 ¥720
qwen-long 1500ms 3800ms 92% 1.50 ¥3,000

6.3 结论

  • Qwen-plus 中文强于 gpt-4o-mini(高 5+ 个百分点)
  • Qwen-turbo 性价比最高(1/3 价格,gpt-4o-mini 90% 的能力)
  • Qwen-long 上下文场景完胜(1000 万上下文)
  • 延迟(Qwen 国内区)显著低于 OpenAI(国内跨洋)

6.4 实战迁移效能数据

某金融科技公司的真实迁移案例数据:

指标 迁移前(OpenAI) 迁移后(Qwen) 变化
平均响应延迟 1200ms 800ms -33%
P99 延迟 3200ms 2100ms -34%
月度 Token 成本 ¥25,000 ¥12,000 -53%
准确率(内部评测) 85% 88% +3.5%
代码改动行数 - 42行 极低

七、风险与注意事项

7.1 供应商锁定风险

风险 缓解策略
通义 API 格式非标 Spring AI Alibaba 完全对齐 Spring AI 接口,模型层可换
Graph 编排的 Checkpoint 表 标准 SQL 表,可迁移到任何 Spring AI 图框架
向量库为 Milvus Milvus 是 CNCF 项目,完全开源
Nacos / Sentinel 为阿里云 可替换为 Spring Cloud Config + Resilience4j

7.2 常见迁移陷阱与应对

陷阱 原因 应对策略
API 行为不一致 各厂商 Tool Calling 的 JSON 格式略有不同 在抽象层增加"厂商适配器"
Token 计算差异 不同模型的 Tokenizer 不同 切换到新模型后重新校准 Token 限制参数
成本预估失效 新模型倾向于生成更长的回复 对每次模型切换进行成本回归测试
监控盲区 监控指标名称/维度变化 迁移前统一指标体系,使用抽象的指标名
Prompt 兼容性 System Message 处理方式不同 渐进式 Prompt 调优

7.3 AI 应用的多活容灾设计

流量切换层:在 API Gateway 层实现流量切换------当检测到某区域的服务成功率低于阈值时,自动将流量切换到另一区域。AI 模型切换通常需要数秒到数十秒(模型加载),建议采用"温备用"模式。

状态同步层:多轮对话的状态需要在多活节点间同步。使用 Redis Cluster 跨区复制实现会话状态的灾难恢复。

模型一致性层:多活节点间的模型版本需要一致。使用配置中心(如 Nacos)统一管理模型版本。

7.4 版本依赖

Spring AI Alibaba 版本依赖:

  • Spring Boot:3.x(推荐 3.5+),2.0.0-M1.1 已升级到 Spring Boot 4.0.0
  • Spring AI 接口版本:≥ 1.0.0-M4
  • JDK:≥ 17

八、社区与生态

8.1 GitHub 社区数据(2026年8月)

指标 数据
GitHub Stars 10,643+(+67 / 7天,+519 / 30天)
Forks 2,366+
Contributors 220+
Open Issues 99
Last Commit 2026-08-15

截至 2026 年 7 月,仓库已有 10,202 stars、2,259 forks,最近一次 push 在 2026-07-03。

8.2 学习资源

资源 链接 说明
官方文档 java2ai.com 从入门到生产部署的完整文档
GitHub 仓库 github.com/alibaba/spring-ai-alibaba 源码 + 示例
示例工程 github.com/spring-ai-alibaba/examples 50+ 示例场景
钉钉群 搜索"Spring AI Alibaba 开发者" 技术问答
贡献 直接 PR 到 GitHub 220+ 贡献者
在线课程 阿里云联合 Java2AI 免费 AI 开发课程

8.3 何时选择 Spring AI(官方)

在以下场景下,Spring AI 官方仍是更好的选择:

  • 完全英文的场景------OpenAI GPT-4 在英文场景下仍然领先
  • 国际化产品------产品需要同时部署在多个国家/地区,不希望绑定单一云提供商
  • Python 生态依赖------项目中需要使用 LangChain、LlamaIndex 等 Python 库
  • 纯技术实验------技术预研阶段,需要最大支持范围和最低绑定

8.4 Spring AI Alibaba 的独特价值

  • Spring AI 官方战略级项目:Spring AI 不会淘汰,它是 Spring 官方战略级项目,迭代稳定(1.0 GA → 1.1 GA → 2.0 M8)
  • Java 工程化能力稀缺:Java + AI 工程化能力是稀缺资源,薪资溢价 30%-50%
  • Java 不会死:工程化能力就是 Java 程序员在 AI 时代的护城河

九、工程化最佳实践

9.1 推荐项目结构

复制代码
ai-service/
├── pom.xml (spring-ai + spring-ai-alibaba)
├── src/main/
│   ├── java/com/example/ai/
│   │   ├── config/          # AI 配置类(多模型切换)
│   │   ├── controller/      # REST API 控制器
│   │   ├── service/         # 业务服务层
│   │   ├── rag/             # RAG 能力(索引+检索+生成)
│   │   ├── tool/            # AI 工具(@Tool 注解)
│   │   ├── agent/           # Agent 智能体
│   │   ├── graph/           # Graph 工作流编排
│   │   ├── evaluation/      # AI 能力评估
│   │   └── monitoring/      # 监控与可观测性
│   └── resources/
│       ├── application.yml  # 全局配置
│       ├── prompts/         # Prompt 模板
│       └── skills/          # Agent Skills 目录
└── src/test/
    └── resources/
        └── application-test.yml

9.2 性能调优最佳实践

连接池优化:调整 HTTP Client 连接池参数------最大连接数(建议 100-200)、路由级最大连接数(50-100)、空闲连接保活(60 秒)。

模型预热:应用启动后主动发送 Warmup 请求------用短文本测试推理流程,让模型加载到 GPU 内存中并建立 CUDA Context。预热可以消除首次请求的冷启动延迟(从 30-60 秒降低到 ❤️ 秒)。

并行推理:对于批量处理场景------如同时处理多个用户的查询请求,使用批量 API(如 QWen 的 Batch 接口)替代逐条调用,吞吐量可以提升 3-5 倍。

结果缓存:对于高频查询(如 FAQ 类的问题),使用 Redis 缓存"问题→回答"映射。建议对缓存结果设置版本号,模型更新时自动清空旧缓存。

9.3 Grafana 监控大盘配置建议

Spring AI 应用的 Grafana 大盘建议包含以下图表:

  • 请求量 :按模型分组的时序图(rate(requests_total[5m])
  • 延迟:P50/P95/P99 延迟热力图
  • 错误率:按错误类型分组的堆叠图
  • Token 消耗:输入/输出 Token 的每日趋势和占比
  • 成本:月度成本趋势和预算使用百分比
  • 模型版本分布:各模型版本在流量中的占比饼图

9.4 跨团队协作注意事项

代码规范:统一使用 Spring AI Alibaba 的 API,对于 Spring AI Alibaba 不支持的功能(如某些 Vector Store Adapter),才使用 Spring AI 原生 API 并在代码注释中标注原因。

文档维护:维护一份内部知识库,记录两个框架的差异点和常见踩坑。

评审机制:代码评审时需要关注是否混用了两个框架的 API(混用可能导致依赖冲突和运行时错误)。


十、迁移 Checklist

text 复制代码
[ ] 1. 引入 spring-ai-alibaba-starter-dashscope 依赖
[ ] 2. 配置 spring.ai.dashscope.api-key
[ ] 3. 灰度切换:5% 流量切到 qwen-plus 跑 1 天
[ ] 4. 核心业务 eval 回归(准确率不下降)
[ ] 5. Token 接入 Sentinel,设 QPS 上限
[ ] 6. 核心业务切换到 Spring AI Alibaba Graph
[ ] 7. Nacos 配置中心接管 Prompt 与 API Key
[ ] 8. 如需 Agent Skills,升级到 1.1.2.0+
[ ] 9. 如需多智能体,参考 multiagent-patterns 示例
[ ] 10. FC 冷门任务弹性扩缩容上线
[ ] 11. ARMS 监控大盘接入
[ ] 12. 全量迁移,下线旧 OpenAI 密钥

十一、总结

本章给出 Spring AI 官方 vs Spring AI Alibaba 的详细对比和迁移路径。核心要点

  1. 接口完全对齐:基于 Spring AI 规范,代码完全可移植
  2. 中文 + 国内合规 + 国内区部署:Qwen 的核心优势
  3. 图编排 + 多智能体:Spring AI Alibaba 的独特卖点
  4. 零风险迁移:分阶段、灰度、回滚机制
  5. 成本下降:对比 OpenAI,Qwen 平均节省 40% 费用
  6. 长期锁定低:所有封装在 Spring AI 接口内部,未来换模型/换云可无损切
  7. 版本成熟:1.1.2.x 累计发布 18 个 Release
  8. 社区活跃:10k+ Stars、220+ 贡献者

一句话总结:Spring AI 解决的是"怎么接入 AI",Spring AI Alibaba 解决的是"怎么让多个 AI 协同工作"。


参考资源:

相关推荐
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】Ollama本地大语言模型部署
c++·人工智能·语言模型·自然语言处理·面试
Raas1001 小时前
AI网关和OpenRouter区别在哪?MAI Gateway(魔芋企业级AI网关)统一治理方案深度解析
大数据·人工智能·gateway·ai网关·mai gateway
JJJennie7771 小时前
MAI Gateway能力解析:大模型网关支持本地模型吗?AI网关核心功能详解
人工智能
拽着尾巴的鱼儿1 小时前
Idea:Cannot Run Git 无法运行git
java·git·intellij-idea
找方案1 小时前
AI安全攻防:大模型越狱、提示注入与防御之道
人工智能·安全·机器学习
张彦峰ZYF1 小时前
从“记住对话”到“经营组织经验”:TencentDB Agent Memory 的团队级记忆架构、工程取舍与企业落地边界
人工智能·架构·llm·agent·skill·agent memory·tencentdb
shionhana1 小时前
从资料到演示稿:AI 生成 PPT 的工作流拆解
人工智能·ai·powerpoint
kyle~1 小时前
标注平台---CVAT
人工智能·目标检测·计算机视觉·机器视觉
编程_大白1 小时前
IDEA配置SQL方言
java·sql·intellij-idea