大模型——Spring AI 简介

大模型——Spring AI 简介

1、概览

Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Spring Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动。

2、Spring AI 的主要概念

首先回顾一下一些关键的领域术语和概念。

Spring AI 最初专注于处理语言输入和生成语言输出的模型。该项目的理念是为开发人员提供一个抽象接口,为将生成式 AI 作为独立组件纳入应用奠定基础。

接口 AiClient 就是这样一个抽象,它有两个基本实现:OpenAIAzure OpenAI

public interface AiClient 
### 如何在 Spring Boot 中接入星火大模型 API #### 准备工作 为了成功集成星火大模型API到Spring Boot应用中,需先完成必要的准备工作。这包括引入所需的依赖项并设置配置文件中的参数。 对于依赖管理,在`pom.xml`中加入如下片段来添加OkHttp3用于发起HTTP请求以及Fastjson2作为JSON处理工具[^3]: ```xml <dependencies> <!-- okhttp3 --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> </dependency> <!-- 阿里JSON解析器 --> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> </dependency> </dependencies> ``` 接着,在项目的资源配置文件(`application.yml`)内指定连接至星火AI服务所需的信息,例如主机地址、应用程序ID以及其他认证凭证等: ```yaml xunfei: ai: hostUrl: https://spark-api.xf-yun.com/v3.5/chat appId: xxx apiSecret: xxx apiKey: xxx ``` #### 创建数据传输对象(DTOs) 定义两个Java类用来封装发送给星火服务器的数据结构——一个是代表整个消息体的`SparkDto`;另一个则是具体的消息内容载体`SparkParamDto`。这两个实体均采用Lombok库简化getter/setter方法编写,并利用Hutool框架下的JSONObject来进行序列化操作[^4]: ```java import cn.hutool.json.JSONObject; import lombok.Data; @Data public class SparkDto { private JSONObject payload; private JSONObject parameter; private JSONObject header; } @Data public class SparkParamDto { private String content; } ``` #### 实现业务逻辑 创建一个名为`XunFeiAIService`的服务层组件负责实际调用远程接口并与之交互。此部分会涉及到构建完整的POST请求包体并通过同步方式等待响应结果返回后再做进一步处理。 下面给出了一种可能的设计方案: ```java @Service @Slf4j @RequiredArgsConstructor(onConstructor_ = {@Autowired}) public class XunFeiParamService { @Value("${xunfei.ai.hostUrl}") private String hostUrl; @Value("${xunfei.ai.appId}") private String appId; @Value("${xunfei.ai.apiKey}") private String apiKey; @Value("${xunfei.ai.apiSecret}") private String apiSecret; /** * 发送对话请求. */ public String sendChatRequest(String messageContent) throws Exception { OkHttpClient client = new OkHttpClient(); // 构造DTO实例填充必要字段... SparkParamDto param = new SparkParamDto(); param.setContent(messageContent); SparkDto sparkDto = buildMessage(param); RequestBody body = RequestBody.create( MediaType.parse("application/json"), JSON.toJSONString(sparkDto)); Request request = new Request.Builder() .url(hostUrl) .post(body) .addHeader("Authorization", "Bearer " + generateToken()) .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); return Objects.requireNonNull(response.body()).string(); } } private SparkDto buildMessage(SparkParamDto param){ SparkDto dto=new SparkDto(); dto.setPayload(new JSONObject().fluentPut("text",param.getContent())); dto.setParameter(new JSONObject()); dto.setHeader(new JSONObject().fluentPut("app_id",appId)); return dto; } private String generateToken(){ // 这里应该实现获取token的方法, 可能涉及时间戳和签名算法 return ""; } } ``` 上述代码展示了如何基于先前准备好的环境搭建起一套基本的工作流程:从组装待发报文直至接收对方回复为止。值得注意的是,这里省略了一些细节上的考量(如错误重试机制),开发者可根据实际情况加以完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不二人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值