Skip to content

6666ccc/Workflow_Demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

demo_spring_ai_Alibaba

基于 Spring BootSpring AI Alibaba(通义 DashScope)的教程向演示项目:对新闻文本执行多智能体流水线处理——去广告、情境建议、摘要生成与质检循环。

注意!!!

本仓库面向教程与上手练习,只保留:

  • 基础 Webspring-boot-starter-web 提供 REST,便于用 curl 联调;
  • 必须的 Spring AI Alibaba 能力:DashScope 对话模型 + Agent 框架(spring-ai-alibaba-starter-dashscopespring-ai-alibaba-agent-framework);
  • 最小工程配套:Lombok、Spring Boot Actuator(健康与指标占位)。

未引入数据库、缓存、消息队列、注册中心等中间件,也没有分层仓储、用户认证等业务模块,避免教程被基础设施带偏,读者可专注「如何编排 Agent 工作流」。

功能概览

步骤 说明
去广告 移除推广、软文、引流话术,保留事实性新闻内容
情境建议 结合天气、交通、健康等场景给出简短生活提示
摘要 + 质检循环 生成 50~300 字中文摘要,并由质检 Agent 校验;未通过则根据反馈重试,最多 3

实现方法概述(推荐工作流 API,而非底层 Graph 逐节点)

本 demo 没有使用最基础的「Graph + 手动 addNode / 连边」方式拼装图,而是采用 Spring AI Alibaba Agent 框架中面向工作流的组合 API

  • **ReactAgent**:单步智能体(去广告、情境建议、摘要、质检各一个);
  • **SequentialAgent**:顺序执行子 Agent(摘要 → 质检 一段;整条管线「去广告 → 情境建议 → 循环」又是一段);
  • **LoopAgent**:对子流程做条件循环(质检未通过则带着 quality_result 再跑摘要+质检,直到通过或达到最大轮次)。

这样与官方示例一致:声明「代理 + 顺序 + 循环」,由框架负责状态传递与调度;仅在 NewsWorkflowService.process 末尾用 OverAllState 读取各 outputKey 组装返回。若你需要极致可控的图拓扑,再考虑下沉到 Graph 细粒度 API。

流程图(文字步骤 + 对应代码位置)

下图从 HTTP 进入到各 Agent 职责,括号内为类与函数/构建块(逻辑均在 NewsWorkflowService.process 内构建与调用,除非另行标注)。

flowchart TD
    %% 样式定义(与项目 Mermaid 约定一致)
    classDef start_end fill:#37474f,stroke:#263238,color:#fff,stroke-width:2px;
    classDef node_box fill:#ffffff,stroke:#1565c0,stroke-width:2px;
    classDef tool_box fill:#e3f2fd,stroke:#1e88e5,stroke-dasharray: 5 5;

    E1["HTTP 请求<br/>POST /api/news/process 或 GET /api/news/demo"] --> C["校验/样例文本<br/>NewsController.process / NewsController.demo"]
    C --> S["编排入口<br/>NewsWorkflowService.process(String newsText)"]
    S --> P["顺序管线 SequentialAgent<br/>news_processing_pipeline"]
    P --> R1["去广告<br/>ReactAgent strip_ads_agent → outputKey cleaned_body"]
    R1 --> R2["情境建议<br/>ReactAgent context_advice_agent → outputKey situation_hints"]
    R2 --> L["质检循环 LoopAgent quality_loop<br/>LoopMode.condition 最多 3 轮"]
    L --> SC["顺序子流程 SequentialAgent summarize_and_check"]
    SC --> SM["摘要<br/>ReactAgent summarize_agent → outputKey summary"]
    SM --> QC["质检<br/>ReactAgent quality_check_agent → outputKey quality_result"]
    QC --> D{"通过或达上限?"}
    D -->|否 继续循环| SC
    D -->|是 结束循环| S2["组装结果<br/>extractText / isQualityPassed<br/>异常时 fallbackResult"]
    S2 --> OUT["返回 NewsProcessingResult<br/>NewsController → HTTP JSON"]

    class E1,OUT start_end;
    class C,D,L,P,SC node_box;
    class S,R1,R2,SM,QC,S2 tool_box;
Loading

调用链(可选对照):客户端 → NewsControllerNewsWorkflowService.processpipeline.invoke(...) → 上述 Agent 链 → NewsProcessingResult

sequenceDiagram
    participant U as Client
    participant C as NewsController
    participant S as NewsWorkflowService

    U ->> C: POST /process 或 GET /demo
    C ->> S: process(text)
    S -->> C: NewsProcessingResult
    C -->> U: JSON
Loading

各文件目的

文件 目的
pom.xml Maven 依赖与插件:Spring Boot、Spring AI / Alibaba BOM、DashScope、Agent 框架、Lombok 等。
src/main/resources/application.yml 服务端口、DashScope api-key(建议用环境变量 DASHSCOPE_API_KEY)。
DemoSpringAiAlibabaApplication.java Spring Boot 启动入口。
controller/NewsController.java 暴露 /api/news/process/api/news/demo,参数校验后调用工作流服务。
service/NewsWorkflowService.java 核心:用 ReactAgent / SequentialAgent / LoopAgent 组装新闻处理管线并执行,解析 OverAllStateNewsProcessingResult
dto/NewsRequest.java POST 请求体:text 字段。
dto/NewsProcessingResult.java 统一响应:清洗正文、情境建议、摘要、质检是否通过、循环次数、质检说明。
test/.../DemoSpringAiAlibabaApplicationTests.java 默认 Spring Boot 上下文加载测试。
mvnw / mvnw.cmd Maven Wrapper,无全局 Maven 时也可构建。
.gitignore 忽略构建产物、IDE 配置等。

技术栈

  • Java 17
  • Spring Boot 3.5.13
  • Spring AI BOM 1.1.2 + Spring AI Alibaba BOM 1.1.2.0(含 spring-ai-alibaba-agent-frameworkspring-ai-alibaba-starter-dashscope
  • LombokSpring WebSpring Boot Actuator

环境要求

  • JDK 17+
  • Maven 3.6+(或使用项目自带的 mvnw / mvnw.cmd
  • 有效的阿里云 DashScope(通义)API Key控制台 申请)

配置说明

src/main/resources/application.yml 中配置 DashScope:

spring:
  ai:
    dashscope:
      api-key: ${DASHSCOPE_API_KEY}
server:
  port: 8080

构建与运行

启动前请先设置环境变量(示例):

# Windows PowerShell(当前会话)
$env:DASHSCOPE_API_KEY = "你的DashScope_API_Key"
# Linux / macOS(当前会话)
export DASHSCOPE_API_KEY="你的DashScope_API_Key"

默认服务地址:http://localhost:8080

调用示例

curl -s -X POST http://localhost:8080/api/news/process ^
  -H "Content-Type: application/json" ^
  -d "{\"text\":\"某地今日降雪,出行请注意安全。【广告】点击领券\"}"

(Linux / macOS 请将 ^ 换为 \ 并写成一行或使用单引号包裹 JSON。)

源码目录简图

src/main/java/cn/lc/demo_spring_ai_alibaba/
├── DemoSpringAiAlibabaApplication.java
├── controller/NewsController.java
├── service/NewsWorkflowService.java
└── dto/NewsRequest.java、NewsProcessingResult.java

参考文档

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages