开发|界面|引擎|交付|副驾——重写全栈法则:AI原生的倍速造应用流
你好,这里是nine[谈架构]系列。
欢迎关注评论私信交流~
SpringAI 在 AI 编程领域延续了Spring的诸多优势,从易于集成、到通用API设计进行模型切换等。
SpringAI为什么好用
1. 易于集成
- Spring 生态系统:基于 Spring Boot 构建,继承了其强大的依赖注入、自动配置和应用启动特性。
- 无缝集成:可以轻松地与其他 Spring 项目(如 Spring Data, Spring Cloud)结合使用,形成完整的解决方案。
2. 丰富的模型支持
- 多平台支持:支持多种主流 AI 平台(如 OpenAI, Hugging Face, IBM Watson 等),满足不同用户的需求。
- 灵活扩展:用户可以根据需要添加新的 AI 模型或服务,只需遵循现有的模块化设计模式。
3. 高效的开发体验
- 自动配置:通过 Spring Boot 的自动配置机制,减少了繁琐的手动配置工作。
- 文档齐全:提供了详尽的文档和示例代码,帮助开发者快速上手。
4. 性能优化
- 批处理支持:部分模型支持批量处理请求,提高了处理效率。
- 重试机制:引入了
spring-ai-retry
模块,增强了系统的容错能力,确保在不稳定网络环境下也能稳定运行。
5. 社区支持
- 活跃社区:作为 Spring 官方项目的一部分,拥有庞大的开发者社区和丰富的资源支持。
- 持续更新:定期发布新版本,修复 bug 并引入新特性,保持项目的活力和竞争力。
从SpringAI源码看设计
1. 模块化设计
-
核心模块 (
spring-ai-core
):- 提供了 AI 编程的核心领域模型和接口。
- 包含了如
Document
,EmbeddingModel
,ChatClient
等基础类。 - 定义了通用的工具类和辅助函数。
-
模型支持模块:
- 每个 AI 模型(如 Ollama, WatsonX, Bedrock, QianFan 等)都有独立的模块。
- 这些模块依赖于
spring-ai-core
,并实现了特定 AI 服务的客户端和配置。 - 例如,
spring-ai-ollama
模块提供了对 Ollama 模型的支持,并集成了 Jackson 库用于 JSON 处理。
-
向量存储模块:
- 支持多种向量数据库(如 Elasticsearch, Cassandra, MongoDB, Pinecone 等)。
- 提供了统一的 API 来与这些数据库进行交互,方便用户选择合适的存储方案。
-
文档读取器模块:
- 包含了 PDF、Markdown 和 Tika 文档读取器,用于处理不同格式的文本文件。
- 提供了灵活的配置选项,以适应不同的应用场景。
-
自动配置模块 (
spring-ai-spring-boot-autoconfigure
):- 利用 Spring Boot 的自动配置机制,简化了应用程序的初始化过程。
- 提供了针对不同 AI 模型和服务的自动配置类,减少了用户的配置负担。
2. 依赖管理
- 使用 Maven 进行依赖管理,确保所有子模块共享相同的版本控制。
- 通过 BOM(Bill of Materials)文件统一管理依赖版本,避免版本冲突。
- 引入了诸如 Jackson、Micrometer、JUnit 等常用库,增强了项目的可扩展性和测试能力。
3. 配置灵活性
- 提供了丰富的配置属性,允许用户自定义 AI 模型的行为。
- 例如,
BedrockTitanEmbeddingProperties
类允许用户配置 Titan Embedding 模型的启用状态、模型名称和输入类型。
4. 集成测试
- 各个模块都包含了详细的单元测试和集成测试,确保功能的正确性。
- 使用了 Testcontainers 和 Docker Compose 来模拟外部服务(如 Redis、Elasticsearch 等),提高了测试环境的真实性和可靠性。
案例
其他类似的框架还有:
- hncboy/ai-beehiveAI 蜂巢,基于 Java 使用 Spring Boot 3 和 JDK 17,支持的功能有 ChatGPT、OpenAi Image、Midjourney、NewBing、文心一言等等。
- alibaba/spring-ai-alibaba整合阿里生态基于SpringAI开发的框架。
更多使用demo可以查看 ThomasVitale/llm-apps-java-spring-ai
。该项目提供了文本、语音、向量库等相关模型的集成示例。