Ohhnews

分类导航

$ cd ..
DZone Java原文

Java中的AI代理:构建智能健康数据系统

#ai代理#java#健康数据#spring ai#djl

执行摘要

现代健康数据分析越来越多地利用AI代理软件组件,这些组件处理信息并做出决策,通常使用大语言模型(LLM)或机器学习模型。在Java中,你可以使用DJL(Deep Java Library)、Spring AI等库或集成LLM API来构建代理系统。本文档包括Maven设置、最小的Spring Boot代码(控制器和服务)、一个简单的代理示例、图表以及不同代理方法的比较。

流程图

[LOADING...]

Maven依赖

pom.xml中定义必要的依赖(Spring Web、Validation、DJL、OpenAI SDK等):

$ xml
org.springframework.bootspring-boot-starter-web org.springframework.bootspring-boot-starter-validation com.openaiopenai-java 4.0.0 ai.djlapi 0.36.0 ai.djl.mxnetmxnet-engine 0.36.0 org.springframework.experimentalspring-boot-starter-ai 0.0.1

此设置假设你将使用OpenAI Java SDK和DJL。根据需要替换spring-boot-starter-ai版本为最新版本。

1. 领域模型与配置

com.example.health中定义用于健康分析请求和响应的简单数据类:

$ java
package com.example.health;
public record VitalSigns(
    double temperature,
    double bloodPressure,
    int heartRate
) {}

此示例记录保存患者生命体征。如果需要,你还可以添加Spring @Configuration,例如配置DJL引擎:

$ java
package com.example.config;
import org.springframework.context.annotation.Configuration;
import ai.djl.Engine;
@Configuration
public class DjLConfig {
    public DjLConfig() {
        Engine.getEngine("MXNet");
    }
}

OpenAI不需要特殊配置;它从OPENAI_API_KEY环境变量读取API密钥。

2. 服务层/代理组件

实现一个充当"代理"的服务。它可以使用本地DJL模型或调用外部LLM API:

$ java
package com.example.agent;
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import org.springframework.stereotype.Service;
@Service
public class HealthAgent {
    private final OpenAIClient openAiClient;
    public HealthAgent() {
        this.openAiClient = OpenAIOkHttpClient.fromEnv();
    }
    public String analyzeVitals(String patientId, VitalSigns vitals) {
        String prompt = String.format(
            "Patient %s has temperature %.1f°C, blood pressure %.0f/%d, heart rate %d. Suggest the next diagnostic step.",
            patientId, vitals.temperature(), vitals.bloodPressure(), vitals.bloodPressure(), vitals.heartRate()
        );
        ResponseCreateParams params = ResponseCreateParams.builder()
            .model("health")
            .input(prompt)
            .build();
        Response response = openAiClient.responses().create(params);
        return response.outputText();
    }
}

HealthAgent服务从VitalSigns构建提示,并使用OpenAI Java SDK调用LLM。

3. REST控制器

暴露一个HTTP API来触发代理:

$ java
package com.example.api;
import com.example.agent.HealthAgent;
import com.example.health.VitalSigns;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/health")
public class HealthController {
    private final HealthAgent agent;
    public HealthController(HealthAgent agent) {
        this.agent = agent;
    }
    @PostMapping("/analyze")
    public ResponseEntity analyze(
        @RequestParam String patientId,
        @RequestBody VitalSigns vitals) {
        String result = agent.analyzeVitals(patientId, vitals);
        return ResponseEntity.ok(result);
    }
}

此控制器将POST /api/health/analyze?patientId=XYZ与包含VitalSigns的JSON主体映射。它委托给HealthAgent并返回响应。

4. 代理模式与架构

AI"代理"可以遵循不同的模式。Spring AI文档将工作流与完全自主行动的代理系统区分开来。在医疗保健领域,出于安全考虑,通常更倾向于可预测的工作流,尽管基于LLM的代理可以是动态的。常见的代理模式包括:

  • 链式: 多步推理
  • 并行化: 并行运行任务并组合结果
  • 路由: 将输入定向到专门的提示或工具
  • 循环: 迭代直到达成目标

Spring AI提供了实现这些模式的抽象。例如,链式工作流可以顺序调用ChatClient.prompt(...).call(),同时在步骤之间传递输出。上面的示例是单步LLM调用,但架构可以扩展:客户端 → Spring Boot API → 代理(Spring AI或自定义逻辑) → LLM/模型 → API响应

5. 表格:代理方法

方法优点缺点用例
自定义Java逻辑完全可控的代码,无外部调用智能有限,无学习或语言理解简单的基于规则的分析,严格的数据隐私要求
DJL在JVM上运行,支持GPU,完全控制模型和数据依赖较重,必须训练/下载模型,资源密集本地分析,私有数据处理,固定ML模型足够时
LLM API(OpenAI等)最先进的语音理解,由提供商管理延迟、成本和数据隐私问题,需要API密钥自然语言处理密集型任务,原型设计和研究
Spring AI模式高级工作流(链式、并行、路由),内置,与Spring集成底层调用仍然是模型/API,复杂度开销企业应用需要结构化LLM代理,结合LLM与Spring生态系统

6. 实施时间表

  • 2026-02-01: 项目启动(设置Spring Boot)
  • 2026-02-03: 定义领域模型(VitalSigns等)
  • 2026-02-05: 配置依赖(DJL、OpenAI SDK)
  • 2026-02-07: 实现HealthAgent服务(LLM调用)
  • 2026-02-10: 添加REST控制器和测试端点
  • 2026-02-12: 可选:集成DJL模型(本地推理)
  • 2026-02-14: 添加错误处理和验证
  • 2026-02-15: 最终测试和本地部署

7. 本地运行

设置API密钥: 确保OPENAI_API_KEY已设置为环境变量。 构建并运行(使用Maven): mvn spring-boot:run 默认情况下,应用运行在http://localhost:8080测试API:

$ bash
curl -X POST "http://localhost:8080/api/health/analyze?patientId=123" \
 -H "Content-Type: application/json" \
 -d '{"temperature": 38.5, "bloodPressure": 130, "heartRate": 95}'

你应该会看到AI代理的响应作为纯文本。

8. 假设

  • Java版本: Java 17(假设无许可限制)
  • 外部服务: OpenAI或其他LLM API需要网络访问和有效的API密钥
  • 数据隐私: 健康数据必须安全处理(例如加密、HIPAA合规)
  • 机器学习: DJL默认使用MXNet;GPU加速需要适当设置
  • 架构: 为简洁起见,省略了Kafka、WebSocket或数据库

结论

本文档概述了如何将AI代理集成到Spring Boot Java应用程序中。关键要点:

  • 项目设置: 使用Spring Boot构建REST API,并添加ML/LLM依赖
  • 代理逻辑: 实现调用LLM API或本地ML模型的服务
  • 模式: 对复杂工作流使用结构化的代理模式
  • 权衡: 根据需求在自定义逻辑、本地ML或LLM API之间选择

DZone贡献者表达的观点仅代表其个人观点。