当前位置: 首页 > ops >正文

Spring AI:程序调用 AI 大模型

在实际开发中,有؜多种方式可以在应用程序中调用 ⁠AI 大模型。下面详细介绍 4‏ 种主流的接入方式,并通过实例‌代码展示如何在 Java 项目‏中实现与 AI 大模型的交互。

  1. SDK 接入:使用官方提供的软件开发工具包,最直接的集成方式
  2. HTTP 接入:通过 REST API 直接发送 HTTP 请求调用模型
  3. Spring AI:基于 Spring 生态系统的 AI 框架,更方便地接入大模型
  4. LangChain4j:专注于构建 LLM 应用的 Java 框架,提供丰富的 AI 调用组件

阿里系大模型‏对 Java 开发生‌态支持较好,更易与‏现有 Java 框架集成,故而推荐阿里云百炼

1.SDK 接入

SDK是官⁠方提供的最直接的集‏成方式,通常提供了‌完善的类型支持和错误‏处理机制。

1)在 pom.xml 中引入依赖:

<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->
<dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.19.1</version>
</dependency>

2)先在百炼平台申请一个 API Key,注意不要泄露:

3)调用的示例代码:

// 该代码 OpenAI SDK 版本为 2.6.0
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;public class Main {public static void main(String[] args) {OpenAIClient client = OpenAIOkHttpClient.builder().apiKey(System.getenv("DASHSCOPE_API_KEY")).baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();ChatCompletionCreateParams params = ChatCompletionCreateParams.builder().addUserMessage("你是谁").model("qwen-plus").build();try {ChatCompletion chatCompletion = client.chat().completions().create(params);System.out.println(chatCompletion);} catch (Exception e) {System.err.println("Error occurred: " + e.getMessage());e.printStackTrace();}}
}

使用成功:

"我是通义千问,阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我可以帮助你回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,欢迎随时告诉我!"

2.HTTP 接入

对于 SD؜K 不支持的场‏景,可以直接使用 H‌TTP 请求调用 A‏I 大模型的 API。

💡 建؜议:一般来说,如果有官⁠方 SDK 支持,优先‏使用 SDK,否则再考虑直接 HTTP调用。

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "qwen-plus","messages": [{"role": "system","content": "You are a helpful assistant."},{"role": "user", "content": "你是谁?"}]
}'

3.Spring AI

Spring AI是 Spring 官方推出的生成式人工智能应用框架,旨在为 Java/Kotlin 开发者提供构建 AI 驱动应用的全栈解决方案。

Spring AI 默认没有支持所有的大模型(尤其是国产的),更多的是支持兼容 OpenAI API 的大模型的集成,参考 官方的模型对比。因此,我们如果想要调用阿里系大模型(比如通义千问),推荐直接使用阿里自主封装的 Spring AI Alibaba 框架,它不仅能直接继承阿里系大模型,用起来更方便,而且与标准的 Spring AI 保持兼容。

可以参考下列官方文档,来跑通调用大模型的流程:

  • 通义千问接入指南

1)引入依赖:

<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M6.1</version>
</dependency>
<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository>
</repositories>

2)编写配置:

spring:ai:dashscope:api-key: ${AI_DASHSCOPE_API_KEY}chat:options:model: qwen-plus

3)编写示例代码,注意要注入 dashscopeChatModel:

// 取消注释即可在 SpringBoot 项目启动时执行
@Component
public class SpringAiAiInvoke implements CommandLineRunner {@Resourceprivate ChatModel dashscopeChatModel;@Overridepublic void run(String... args) throws Exception {AssistantMessage output = dashscopeChatModel.call(new Prompt("你好,我是桂电的学生")).getResult().getOutput();System.out.println(output.getText());}
}

上述代码实现了 C؜ommandLineRunner 接⁠口,我们启动 Spring Boot‏ 项目时,会自动注入大模型 Chat‌Model 依赖,并且单次执行该类的‏ run 方法,达到测试的效果。

4.LangChain4j

LangChain4j 是 LangChain 的 Java 版本,提供工具和抽象层,简化与大型语言模型(LLM)的交互和应用开发。

1)首先引入依赖:

<!-- https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-community-dashscope -->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-dashscope</artifactId><version>1.0.0-beta2</version>
</dependency>

2)参考 官方文档 来编写示例对话代码:

public class LangChainAiInvoke {public static void main(String[] args) {ChatLanguageModel qwenModel = QwenChatModel.builder().apiKey(TestApiKey.API_KEY).modelName("qwen-max").build();String answer = qwenModel.chat("我是桂电的学生");System.out.println(answer);}
}

5.接入方式对比

以下是 4 种 AI 大模型接入方式的优缺点对比:

接入方式优点缺点适用场景
SDK 接入• 类型安全,编译时检查• 完善的错误处理• 通常有详细文档• 性能优化好• 依赖特定版本• 可能增加项目体积• 语言限制• 需要深度集成• 单一模型提供商• 对性能要求高
HTTP 接入• 无语言限制• 不增加额外依赖• 灵活性高 ؜• 需要手动处理错误• 序列化/反序列化复杂• 代码冗长• SDK不支持的语言• 简单原型验证• 临时性集成
Spring⁠ AI• 统一的抽象接口• 易于切换模型提供商• 与Spring生态完美融合• 提供高级功能• 增加额外抽象层• 可能不‏支持特定模型的特性• 版本还在快速迭代• Spring应用• 需要支持多种模型• 需要高级AI功能
LangChain4j‌ • 提供完整的AI应用工具链• 支持复杂工作流• 丰富的组件和工具• 适合构建AI代理• 学习曲线较陡• 文档相对较少• 抽‏象可能引入性能开销• 构建复杂AI应用• 需要链式操作• RAG应用开发

💡个人更推荐选择 Spring؜ AI

对比维度Spring AI 优势其他方式的局限
生态适配性与 Spring 无缝融合,契合 Java 主流技术栈SDK 接入绑定单一厂商,LangChain4j 需单独学习新框架,HTTP 接入与 Spring 无联动。
灵活性支持多模型切换,且保留扩展空间(可自定义模型适配)SDK 接入受限于厂商功能,HTTP 接入需手动处理不同模型的 API 差异,LangChain4j 抽象过重。
开发效率提供开箱即用的组件(如配置自动加载、异常统一处理),代码简洁HTTP 接入需手动处理序列化 / 错误,LangChain4j 学习曲线陡,SDK 接入需适配厂商特定 API。

大功告成!

出处:编程导航

http://www.xdnf.cn/news/15638.html

相关文章:

  • Python编程进阶知识之第二课学习网络爬虫(selenium)
  • Java HashMap key为Integer时,遍历是有序还是无序?
  • 信息学奥赛一本通 1575:【例 1】二叉苹果树 | 洛谷 P2015 二叉苹果树
  • 基于LiteNetLib的Server/Client Demo
  • 深入理解 Redis 集群化看门狗机制:原理、实践与风险
  • 当OT遇见IT:Apache IoTDB如何用“时序空间一体化“技术破解工业物联网数据孤岛困局?
  • iOS 文件深度调试实战 查看用户文件 App 沙盒 系统文件与日志全指南
  • iOS WebView 调试实战 全流程排查接口异常 请求丢失与跨域问题
  • 深入理解进程地址空间:虚拟内存与进程独立性
  • 首个直播流扩散(LSD)AI模型:MirageLSD,它可以实时把任意视频流转换成你的自定义服装风格——虚拟换装新体验
  • LVS(Linux Virtual Server)详细笔记(实战篇)
  • 基于ROS2进行相机标定,并通过测试相机到棋盘格之间的距离进行验证
  • SpringSecurity-spring security单点登录
  • 【数据结构初阶】--双向链表(一)
  • VUE目录结构详解
  • 1 初识C++
  • ElasticSearch Doc Values和Fielddata详解
  • 数学积分方程显式求解
  • Android性能优化之电量优化
  • http与https的主要区别是什么?
  • http性能测试命令ab
  • sqli-labs靶场通关笔记:第29-31关 HTTP参数污染
  • 【前端】输入框输入内容时,根据文本长度自动分割,中间用横杠分割
  • 模版匹配的曲线好看与否有影响吗?
  • Git 中如何比较不同版本之间的差异?常用命令有哪些?
  • 金属伪影校正的双域联合深度学习框架复现
  • Prometheus错误率监控与告警实战:如何自定义规则精准预警服务器异常
  • Spring Boot 应用优雅停机与资源清理:深入理解关闭钩子
  • SQLite 数据库字段类型-详细说明,数据类型详细说明。
  • ES v.s Milvus v.s PG