阿里出手了:Spring AI Alibaba正式版发布!

Spring AI Alibaba 提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。

Spring AI Alibaba 是基于 Spring AI 构建的,专门针对阿里云生态(如通义千问、OSS 等)进行深度适配和功能增强。

Spring AI Alibaba 提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。

主要功能

Spring AI Alibaba 提供的主要功能如下:

  • 开发复杂 AI 应用的高阶抽象 Fluent API — ChatClient。
  • 提供多种大模型服务对接能力,包括主流开源与阿里云通义大模型服务(百炼)等。
  • 支持的模型类型包括聊天、文生图、音频转录、文生语音等。
  • 支持同步和流式 API,在保持应用层 API 不变的情况下支持灵活切换底层模型服务,支持特定模型的定制化能力(参数传递)。
  • 支持 Structured Output,即将 AI 模型输出映射到 POJOs。
  • 支持矢量数据库存储与检索。
  • 支持函数调用 Function Calling。
  • 支持构建 AI Agent 所需要的工具调用和对话内存记忆能力。
  • 支持 RAG 开发模式,包括离线文档处理如 DocumentReader、Splitter、Embedding、VectorStore 等,支持 Retrieve 检索等。
  • 支持 MCP 调用。

正式版发布

Spring AI Alibaba 在前段时间也发布了第一个 GA(General Availability,正式发布版) 版  1.0.0.2,这是第一个 GA 版本!

“Spring AI Alibaba 支持 ChatBot、Workflow 和 Multi-agent(多智能体)应用程序的开发。

主要特点

  1. 全面框架集成:无缝连接阿里巴巴服务,包括百联的 Dashscope,支持 Qwen 和 Deepseek 等各种主流 AI 模型。
  2. 多智能体框架:基于图的多代理框架:受 Langgraph 的启发,Spring AI Alibaba Graph 可以轻松构建工作流和多代理应用程序。
  3. 企业级 AI 代理解决方案
  • Nacos MCP 注册表。
  • 分布式 MCP 发现和负载均衡。
  • 动态 API 到 MCP 代理。
  • NL2SQL 用于将自然语言查询转换为 SQL 语句。
  • 可观察性。

快速开始

1.引入 spring-ai-alibaba-starter 依赖

复制

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>3.3.4</version>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter</artifactId>
    <version>1.0.0.2</version>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
2.设置配置文件 application.yml

复制

spring:
  ai:
    dashscope:
      api-key: ${AI_DASHSCOPE_API_KEY}
  • 1.
  • 2.
  • 3.
  • 4.
3.注入 ChatModel

复制

private final ChatModel dashScopeChatModel;

public DashScopeChatModelController(ChatModel chatModel) {
  this.dashScopeChatModel = chatModel;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
4.编写控制器

复制

@GetMapping("/simple/chat")
public String simpleChat() {

  return dashScopeChatModel.call(new Prompt(DEFAULT_PROMPT)).getResult().getOutput().getContent();
}

/**
 * Stream 流式调用。可以使大模型的输出信息实现打字机效果。
 * @return Flux<String> types.
 */
@GetMapping("/stream/chat")
public Flux<String> streamChat(HttpServletResponse response) {

  // 避免返回乱码
  response.setCharacterEncoding("UTF-8");

  Flux<ChatResponse> stream = dashScopeChatModel.stream(new Prompt(DEFAULT_PROMPT));
  return stream.map(resp -> resp.getResult().getOutput().getContent());
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

至此,已经完成了 DashScope 的基本接入。现在您已经可以和 DashScope 模型对话了。

官方案例

官方社区开发了一个 Playground 示例,其中包括基于 Spring AI Alibaba 的完整前端 UI 和后端。Playground 允许用户体验所有核心框架功能,例如聊天、可观察性、多轮对话、图像生成、多模态、工具调用、MCP 和 RAG,体验了一下它的文生图还不错,如下图所示:

项目地址:https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-playground

小结

AI 已经不再是选择题,而是生死题的今天,早早行动起来,拥抱 AI、享受 AI 赋予这个时代的红利,才是事业稳定和成功的关键,所以一起搞起来吧~

<think>我们正在创建一个整合Dify与Spring AI Alibaba的工程示例。根据引用,Spring AI Alibaba是一个以Spring AI为基础的AI框架,深度集成百炼平台。而Dify是一个AI应用开发平台。我们的目标是将两者集成到一个Spring Boot项目中。 步骤: 1. 创建Spring Boot项目 2. 添加Spring AI Alibaba依赖 3. 配置Dify API(假设Dify提供API接口,我们可以通过RestTemplate或WebClient调用) 4. 编写代码调用Dify API 5. 集成Spring AI Alibaba的功能(如使用其提供的智能体) 注意:由于Dify和Spring AI Alibaba是两个不同的框架,我们需要分别配置它们。 具体步骤: 1. 创建Spring Boot项目 使用Spring Initializr(https://start.spring.io/)创建一个新的Spring Boot项目,选择以下依赖: - Spring Web - Spring AI Alibaba (目前可能不在Initializr中,需要手动添加) 2. 添加依赖 在pom.xml中添加Spring AI Alibaba的依赖(根据引用[2]): ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-ai-alibaba-spring-boot-starter</artifactId> <version>1.0.0</version> <!-- 请查看最新版本 --> </dependency> ``` 同时,由于我们需要调用Dify的API,添加Spring Web的依赖(如果创建时没有选): ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 3. 配置Dify API 在application.yml(或application.properties)中配置Dify的API密钥和端点: ```yaml dify: api-key: your-dify-api-key base-url: https://api.dify.ai/v1 # 假设的Dify API地址,请根据实际修改 ``` 4. 创建Dify客户端 创建一个DifyClient的Bean,用于调用Dify API: ```java @Configuration public class DifyConfig { @Value("${dify.api-key}") private String apiKey; @Value("${dify.base-url}") private String baseUrl; @Bean public RestTemplate difyRestTemplate() { RestTemplate restTemplate = new RestTemplate(); restTemplate.getInterceptors().add((request, body, execution) -> { request.getHeaders().add("Authorization", "Bearer " + apiKey); return execution.execute(request, body); }); return restTemplate; } } ``` 5. 创建服务类调用Dify 创建一个服务类,通过RestTemplate调用Dify的API。例如,调用Dify的聊天接口: ```java @Service public class DifyService { private final RestTemplate restTemplate; private final String baseUrl; public DifyService(RestTemplate difyRestTemplate, @Value("${dify.base-url}") String baseUrl) { this.restTemplate = difyRestTemplate; this.baseUrl = baseUrl; } public String chat(String message) { // 构建请求体 Map<String, Object> requestBody = new HashMap<>(); requestBody.put("query", message); // 这里根据Dify API实际需要的参数构建 // 发送请求 ResponseEntity<Map> response = restTemplate.postForEntity(baseUrl + "/chat/completions", requestBody, Map.class); // 解析响应 // 注意:这里简化了,实际需要根据Dify返回的JSON结构来解析 Map<String, Object> responseBody = response.getBody(); return (String) responseBody.get("answer"); } } ``` 6. 集成Spring AI Alibaba 根据引用[2],我们可以使用Spring AI Alibaba来创建智能体。这里我们假设创建一个简单的智能体服务: ```java @Service public class AlibabaAIService { private final ChatClient chatClient; public AlibabaAIService(ChatClient chatClient) { this.chatClient = chatClient; } public String generate(String prompt) { return chatClient.call(prompt); } } ``` 在配置文件中配置Spring AI Alibaba(例如使用百炼平台): ```yaml spring: ai: alibaba: chat: # 配置百炼平台的访问信息 url: https://bailian.aliyun.com/... # 百炼平台的聊天接口URL access-key-id: your-access-key-id access-key-secret: your-access-key-secret ``` 7. 创建控制器 创建一个控制器,分别调用Dify和Spring AI Alibaba的服务: ```java @RestController public class AIController { private final DifyService difyService; private final AlibabaAIService alibabaAIService; public AIController(DifyService difyService, AlibabaAIService alibabaAIService) { this.difyService = difyService; this.alibabaAIService = alibabaAIService; } @GetMapping("/dify") public String difyChat(@RequestParam String message) { return difyService.chat(message); } @GetMapping("/alibaba") public String alibabaChat(@RequestParam String message) { return alibabaAIService.generate(message); } } ``` 8. 运行和测试 启动Spring Boot应用,访问: - http://localhost:8080/dify?message=你好 调用Dify - http://localhost:8080/alibaba?message=你好 调用Spring AI Alibaba 注意:以上代码是一个简化的示例,实际使用时需要根据Dify和百炼平台的具体API文档调整请求和响应的处理。 这个示例工程整合了Dify和Spring AI Alibaba,使得在一个Spring Boot项目中可以同时使用两个平台的能力。 引用: [^1]: 阿里巴巴发布Spring AI Alibaba,深度集成百炼平台。 [^2]: Spring AI Alibaba 1.0 GA 正式发布,支持智能体开发。 [^3]: Dify与传统工具的比较,这里我们通过API调用方式集成Dify。 [^4]: Spring AI的特点,而Spring AI Alibaba是基于Spring AI的。 §§相关问题§§ 1. 如何获取Dify的API密钥? 2. Spring AI Alibaba支持哪些具体的AI模型? 3. 在集成Dify和Spring AI Alibaba时,如何处理两个服务返回结果不一致的情况? 4. 如何优化这个整合工程的性能?</think>### 整合Dify与Spring AI Alibaba的工程示例 #### 1. **创建基础Spring Boot项目** ```bash # 使用Spring Initializr创建项目 curl https://start.spring.io/starter.zip \ -d dependencies=web,ai \ -d type=gradle-project \ -d language=java \ -d bootVersion=3.2.0 \ -d groupId=com.example \ -d artifactId=dify-springai-demo \ -o project.zip unzip project.zip && cd dify-springai-demo ``` #### 2. **添加依赖配置** 在`build.gradle`中添加: ```gradle dependencies { // Spring AI Alibaba核心依赖 implementation 'com.alibaba.cloud:spring-ai-alibaba-spring-boot-starter:1.0.0' // Dify API客户端 implementation 'org.springframework.boot:spring-boot-starter-webflux' // 向量数据库支持(示例使用Redis) implementation 'org.springframework.ai:spring-ai-redis-spring-boot-starter' } ``` #### 3. **配置连接参数** `application.yml`配置: ```yaml # Dify配置 dify: api-key: YOUR_DIFY_API_KEY base-url: https://api.dify.ai/v1 # Spring AI Alibaba配置 spring: ai: alibaba: access-key-id: YOUR_ALIBABA_ACCESS_KEY access-key-secret: YOUR_ALIBABA_SECRET chat: model: qwen-max embedding: model: text-embedding-v1 vectorstore: redis: uri: redis://localhost:6379 ``` #### 4. **实现Dify集成服务** ```java @Service public class DifyIntegrationService { private final WebClient webClient; public DifyIntegrationService(@Value("${dify.base-url}") String baseUrl, @Value("${dify.api-key}") String apiKey) { this.webClient = WebClient.builder() .baseUrl(baseUrl) .defaultHeader("Authorization", "Bearer " + apiKey) .build(); } public Mono<String> callDifyAPI(String prompt) { return webClient.post() .uri("/chat-messages") .bodyValue(Map.of("inputs", Map.of("query", prompt))) .retrieve() .bodyToMono(String.class); } } ``` #### 5. **创建Spring AI智能体** ```java @Bean public ChatClient alibabaChatClient(AiClient aiClient) { return new PromptTemplateChatClient(aiClient) { @Override public String call(String message) { // 添加Dify结果增强 String difyContext = difyService.callDifyAPI(message).block(); String enhancedPrompt = "Dify上下文: " + difyContext + "\n用户问题: " + message; return super.call(enhancedPrompt); } }; } ``` #### 6. **实现REST控制器** ```java @RestController public class AIController { private final ChatClient chatClient; public AIController(ChatClient chatClient) { this.chatClient = chatClient; } @PostMapping("/ask") public ResponseEntity<String> askQuestion(@RequestBody String question) { String response = chatClient.call(question); return ResponseEntity.ok(response); } } ``` #### 7. **运行与测试** ```bash # 启动应用 ./gradlew bootRun # 测试请求 curl -X POST http://localhost:8080/ask \ -H "Content-Type: text/plain" \ -d "如何优化电商推荐系统?" ``` ### 关键集成点说明 1. **双引擎协同** - Dify处理非结构化数据检索(如知识库查询) - Spring AI Alibaba执行核心推理任务 - 通过`enhancedPrompt`实现结果融合 2. **工作流设计** ```mermaid graph LR A[用户请求] --> B{Dify API} B --> C[知识库检索] C --> D[Spring AI Alibaba] D --> E[生成最终响应] ``` 3. **部署优化建议** - 使用Spring Cloud LoadBalancer实现AI服务动态路由 - 通过`@Retryable`注解添加服务容错机制 - 集成Prometheus监控双引擎调用延迟 > **提示**:完整示例需申请[Dify API Key](https://dify.ai/)和[阿里云百炼平台账号](https://bailian.aliyun.com/),实际部署时建议使用配置中心管理敏感信息[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值