Spring AI Alibaba 与 JManus 入门指南

发布于:2025-07-27 ⋅ 阅读:(21) ⋅ 点赞:(0)

1. Spring AI Alibaba 介绍

背景

Spring AI Alibaba 是由阿里云基于 Spring AI 框架开发的一个开源 AI 应用开发框架,专为 Java 开发者设计。它深度集成了阿里云通义系列模型和百炼平台,旨在帮助开发者快速构建智能化的企业级 AI 应用。它的核心优势包括:

核心功能

  • 统一接口:通过抽象化的 API,支持与多种 AI 模型(如通义千问 Qwen-2.5)无缝切换。
  • 云原生集成:支持阿里云的百炼平台、ARMS 可观测性工具、Nacos MCP 注册中心等,提供从开发到生产的全链路解决方案。
  • 多功能支持:包括聊天机器人、工作流、多智能体应用、RAG(检索增强生成)等功能。
  • 低代码/高代码/零代码:通过 JManus 和 DeepResearch 等产品,支持灵活的开发方式。

适用场景

  • 构建聊天机器人(如客服助手)。
  • 开发智能工作流(如自动化文档处理)。
  • 实现 RAG 驱动的知识管理系统。
  • 支持企业级 AI 应用的快速部署。

2. JManus 介绍**

JManus 是基于 Spring AI Alibaba 开发的通用智能体平台,灵感来源于 OpenManus,专为构建任务驱动的 AI 智能体而设计。它不仅是一个智能体实现,还提供了一个开发平台,允许开发者创建定制化的、面向特定业务场景的智能体。

背景

  • JManus 诞生于阿里云对多智能体系统(Multi-Agent Systems)的探索,目标是让 AI 智能体能够自主规划和执行复杂任务。
  • 它利用 Spring AI Alibaba 的 Graph 框架,结合 ReAct(Reasoning + Acting)架构,适合企业级场景,如自动化客服、数据分析、行程规划等。
  • JManus 支持从代码开发到低代码/零代码的开发方式,适合不同技术水平的开发者。

核心功能

  • 任务规划:通过 Planning Agent 自动分解复杂任务,生成可执行的工作流。
  • 工具调用:支持 Web 搜索、Python 脚本、外部 API 等工具,增强智能体的能力。
  • 企业级确定性:通过定制化子智能体和工具,确保业务逻辑的稳定性。
  • 可视化调试:结合 Dify DSL,提供工作流的可视化编辑和调试。

适用场景

  • 自动化业务流程(如自动生成行程规划)。
  • 智能数据处理(如从 Web 提取信息并生成报告)。
  • 复杂任务的协同处理(如多部门协作的智能助手)。

3. 技术解析

`Spring AI Alibaba 的核心架构围绕 ChatClient 和 Graph 抽象,结合云原生基础设施,提供了强大的 AI 应用开发能力。以下是主要技术点的解析:

Spring AI Alibaba 技术架构

  • ChatClient:核心接口,用于与大语言模型交互,支持对话、函数调用、流式输出等。
    示例:调用通义千问模型回答用户问题。
  • Graph 框架:支持多智能体协作和复杂工作流,基于 Dify DSL(领域特定语言)定义任务逻辑。
    示例:设计一个工作流,分解“规划旅行”任务为查询航班、酒店和景点。
  • RAG 集成:通过百炼平台的向量数据库,实现数据增强生成。
    示例:从企业文档中提取信息,生成精准回答。
  • MCP(Model Context Protocol):统一模型与外部系统的交互方式,简化集成。
  • 可观测性:通过 ARMS 和 OpenTelemetry,监控模型性能和运行状态。

JManus 技术亮点

  • ReAct 架构:结合推理(Reasoning)和行动(Acting),让智能体自主规划和执行任务。
  • 工具调用:支持多种工具(如 Python 脚本、Web 爬虫),增强智能体功能。
  • 子智能体:每个子智能体负责特定任务,确保模块化开发。
  • 可视化支持:通过 Dify 平台,提供工作流的可视化编辑和调试。

4.简单实现

ai-assistant/
├── pom.xml
├── src/
│   └── main/
│       ├── java/
│       │   └── com.example.ai/
│       │       ├── AiAssistantApplication.java
│       │       ├── controller/AiController.java
│       │       └── service/AiService.java
│       └── resources/
│           ├── application.yml

application.yml 配置

server:
 port: 8080

spring:
 ai:
   alibaba:
     qwen:
       api-key: sk-xxx               # 替换为你在阿里云申请的 Key
       model: qwen-turbo             # 模型名称
       options:
         temperature: 0.7

AiService.java

package com.example.ai.service;

import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.messages.ChatMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class AiService {

   private final ChatClient chatClient;

   // 保存简单上下文
   private final List<ChatMessage> history = new ArrayList<>();

   public AiService(ChatClient chatClient) {
       this.chatClient = chatClient;
   }

   public String ask(String question) {
       ChatMessage message = new UserMessage(question);
       history.add(message);

       ChatResponse response = chatClient.call(history);
       String answer = response.getResult().getOutput();

       // 记录 AI 回复到上下文
       history.add(response.getResult().getOutputMessage());

       return answer;
   }

   public void resetContext() {
       history.clear();
   }
}

AiController.java

package com.example.ai.controller;

import com.example.ai.service.AiService;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/ai")
public class AiController {

    private final AiService aiService;

    public AiController(AiService aiService) {
        this.aiService = aiService;
    }

    @PostMapping("/ask")
    public String ask(@RequestBody String question) {
        return aiService.ask(question);
    }

    @PostMapping("/reset")
    public String reset() {
        aiService.resetContext();
        return "上下文已清除";
    }
}

使用示例

提问

curl -X POST http://localhost:8080/api/ai/ask -d "杭州西湖有多美?"

清楚上下文

curl -X POST http://localhost:8080/api/ai/reset

网站公告

今日签到

点亮在社区的每一天
去签到