目录
亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力,谢谢大家!有问题请私信或联系邮箱:fn_kobe@163.com
一、AI大模型
1.1、AI大模型概念
AI 大模型是指具有高参数量(通常数以亿计乃至千亿以上)、深层网络结构、以及在海量数据上预训练的深度学习模型。其核心优势在于:
①强泛化能力:通过大规模预训练,模型具备更好的迁移学习能力。
②多任务适应性:同一模型可通过微调(fine-tuning)完成不同下游任务。
③灵活扩展:可通过模型压缩、蒸馏、切片等技术适配不同部署场景。
1.2、大模型的分类
1.2.1、按模态(Modality)分类
①文本模型:如 GPT、BERT 系列,擅长自然语言理解与生成。
②图像模型:如 ViT、Swin Transformer,专注于视觉识别与生成。
③多模态模型:如 CLIP、DALL·E、GPT-4V,将文本、图像、音频等多种模态融合处理。
1.2.2、按开源性分类
①开源大模型:如 LLaMA、Bloom,代码与权重可公开获取,便于二次开发及本地部署。
②闭源/商用大模型:如 OpenAI GPT、Anthropic Claude,通常通过 API 调用,受限于使用条款与计费模式。
1.2.3、按规模(Scale)分类
①中小型大模型(数亿~数十亿参数):推理成本较低,适合资源受限场景。
②超大规模模型(百亿~千亿+参数):性能更优,但对算力和内存需求高,适合云端部署。
1.2.4、按用途(Application)分类
①通用对话/写作:如 GPT 系列,侧重语言生成与交互。
②专业领域:如 BioGPT(生物医药)、LegalBERT(法律文本),针对垂直领域优化。
③代码辅助:如 Codex、CodeGeeX,专注编程与代码生成。
④图像生成与编辑:如 Stable Diffusion、Midjourney,生成高质量视觉内容。
二、接入大模型
2.1、使用大模型的两种途径
在实际开发过程中,使用AI大模型主要有两种途径:云服务与自部署,各有优缺点。
2.1.1、云服务
- 无需基础设施投入:直接调用第三方厂商已部署好的大模型服务,无需考虑服务器、GPU 等硬件。
- 按需付费:无需前期大量基础设施投入,按调用量或时长计费。
- 高可用 & 低维护:服务可随时可用,厂商负责运维与扩缩容。
- 自动更新:即时获取最新版本的模型能力。
- 安全合规:通常具备完善的安全措施与合规保障。
2.1.2、自部署
- 数据全控 & 高隐私:所有数据流在本地或私有云,满足严苛的数据安全需求。
- 高度定制化:可根据业务场景微调、剪枝或二次开发模型。
- 无网络延迟:适合对响应速度和离线能力有严格要求的场景。
- 一次性成本高:需采购硬件、搭建集群,并由专业团队维护。
- 企业级场景优选:适合对合规、审计、专属运维有严格要求的项目。
选型建议
- 个人开发者或中小团队:优先考虑 云服务,快速上线,降低维护成本。
- 对数据安全、定制化要求高的企业级应用:可选择 自部署,获得最大化控制权 。通过Ollama本地部署,部署教程参考我之前写的博客链接:Ollama部署。
2.2、接入大模型的 3 种方式
在项目中使用 AI 大模型时,可选择以下三种接入方式,各有优劣和适用场景。
2.2.1、AI 应用平台接入
通过云服务商提供的一站式 AI 应用平台,快速构建并调用大模型能力。
- 特点
- 平台提供从模型调用到应用构建的全流程支持 。
- 无需关心底层算力与运维,一键启动 。
- 示例
- 阿里云百炼(Alibaba Cloud TiDE):一站式大模型开发与应用构建平台,支持界面化操作和自动化训练、部署。
- 阿里云百炼(Alibaba Cloud TiDE):一站式大模型开发与应用构建平台,支持界面化操作和自动化训练、部署。
2.2.2、AI 软件客户端接入
使用桌面或 Web 客户端软件,即可获得大模型交互和生产力工具。推荐两款使用较多的客户端:
-
- 多模型对话、知识库管理 。
- AI 绘画、翻译等功能一体化。
- 高度自定义界面与强扩展能力。
-
- 以 AI 为核心的编程开发工具。
- 快速生成项目代码,智能理解并补全代码。
- 提供代码库导航与建议,提升开发效率。
2.3、程序调用 AI 大模型
在实际开发中,有多种方式可以在应用程序中调用 AI 大模型。下面介绍 4 种主流接入方式,并以阿里云百炼平台(Paodian)Java SDK 为示例。
2.3.1、SDK 接入
描述
- 使用官方提供的软件开发工具包(SDK),最直接的集成方式。
- 支持语言:Java、Python、Go 等。
- 选择SDK版本时,在Maven仓库查看最新的版本号。链接如下:Maven仓库信息
步骤
- 1、pox.xml引入阿里云灵积SDK依赖。
<!-- 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、选择合适的模型进行调用,点击模型、api参考、找到DashScope、选择Java代码接入。
- 4、测试程序。执行成功,包含Token数等信息。
优点
- 简洁易用,一步到位。
- 自动处理鉴权、序列化、重试等细节。
2.3.2、HTTP 接入
描述
- 通过 REST API 直接发送 HTTP 请求调用模型。
- 适用于任意语言和平台。
步骤
1、点击模型、api参考、找到DashScope、选择curl代码接入。特别说明:curl是检验http相应的工具。
2、通过AI工具将上述请求转换为 hutool 工具类的请求代码。
package com.funian.agent.demo.invoke;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
/**
* @Auther FuNian
* @Major Computer Software
*/
/**
* HTTP 方式调用 AI
*/
public class HttpAiInvoke {
public static void main(String[] args) {
// API密钥
String apiKey = TestApiKey.API_KEY;
// 构建请求URL
String url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";
// 构建请求JSON数据
JSONObject inputJson = new JSONObject();
JSONObject messagesJson = new JSONObject();
// 添加系统消息
JSONObject systemMessage = new JSONObject();
systemMessage.set("role", "system");
systemMessage.set("content", "You are a helpful assistant.");
// 添加用户消息
JSONObject userMessage = new JSONObject();
userMessage.set("role", "user");
userMessage.set("content", "你好,我是爱健身的大学生,如何进行科学健身?");
// 组装messages数组
messagesJson.set("messages", JSONUtil.createArray().set(systemMessage).set(userMessage));
// 构建参数
JSONObject parametersJson = new JSONObject();
parametersJson.set("result_format", "message");
// 构建完整请求体
JSONObject requestJson = new JSONObject();
requestJson.set("model", "qwen-plus");
requestJson.set("input", messagesJson);
requestJson.set("parameters", parametersJson);
// 发送请求
String result = HttpRequest.post(url)
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.body(requestJson.toString())
.execute()
.body();
// 输出结果
System.out.println(result);
}
}
优点
- 灵活,不依赖特定 SDK。
- 易于与微服务架构集成。
2.3.3、Spring AI
描述
- 基于 Spring 生态的 AI 调用框架。
- 提供 Spring Bean 封装,可通过依赖注入快速调用大模型。
- 跨供应商可移植 API 支持
适用于聊天、文本转图像和嵌入模型,支持同步与流式调用,并可访问各供应商特定功能。 - 多模型供应商兼容
支持 Anthropic、OpenAI、微软、亚马逊、谷歌、Ollama 等主流厂商,涵盖聊天、补全、嵌入、文本转图像、音频转录、文本转语音等多种模型类型。 - 结构化输出
将模型输出映射为 POJO(普通 Java 对象),方便业务代码直接消费。 - 向量数据库集成
支持 Apache Cassandra、Azure Cosmos DB、Azure Vector Search、Chroma、Elasticsearch、GemFire、MariaDB、Milvus、MongoDB Atlas、Neo4j、OpenSearch、Oracle、PostgreSQL/PGVector、Pinecone、Qdrant、Redis、SAP Hana、Typesense、Weaviate 等。 - 跨向量存储可移植 API
包括新颖的类 SQL 元数据过滤 API,简化检索层开发。 - 工具/函数调用
允许模型在运行时调用客户端工具和函数,根据上下文动态获取所需信息并执行操作。 - 可观测性
提供与 AI 相关操作的监控与指标采集。 - 文档 ETL 框架
适用于大规模文档与数据处理场景。 - AI 模型评估工具
帮助评估生成内容质量并防范幻觉(hallucination)。 - Spring Boot 自动配置与启动器
支持 AI 模型和向量存储的一键引入与管理。 - ChatClient API
类似 WebClient/RestClient 的流式通信 API,用于与聊天模型高效交互。 - Advisors API
封装常见生成式 AI 模式,将请求发送到 LLM 并解析返回结果,提供跨模型与跨用例的统一调用接口。 - 对话记忆与检索增强生成(RAG)支持
内置对话状态管理与检索-生成流程,简化 RAG 应用开发。
步骤
- 1、使用Spring AI alibaba,pom.xml引入依赖,Maven中央仓库下载版本。
<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、编写yml配置。
spring:
application:
name: Agent
ai:
dashscope:
api-key: ${AI_DASHSCOPE_API_KEY}
chat:
options:
model: qwen-plus
- 3、使用charmodel方式注入模型,模型参数为dashscopeChatModel,之后会自动注入大模型,实现CommandLineRunner接口,启动SpringBoot项目时会单次执行该类的run方法,从而达到测试效果。
@Component
public class SpringAiAiInvoke implements CommandLineRunner {
@Resource
private ChatModel dashscopeChatModel;
@Override
public void run(String... args) throws Exception {
AssistantMessage output = dashscopeChatModel.call(new Prompt("你好,我是爱健身的大学生"))
.getResult()
.getOutput();
System.out.println(output.getText());
}
}
- 4、测试成功。
优点
- 与现有 Spring Boot 项目无缝集成。
- 支持配置化管理与自动化监控。
2.3.4、LangChain4j
描述
- 专注于构建 LLM 应用的 Java 框架。
- 提供丰富的 AI 调用组件、链式调用和流水线支持。
步骤
- 1、pom.xml引入依赖。
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);
}
}
- 2、参考官方代码撰写示例,地址如下:https://docs.langchain4j.dev/integrations/language-models/dashscope/。
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);
}
}
- 3、测试成功。
优点
- 高度模块化,适合复杂业务场景。
- 内置常见 LLM 操作(prompt 模板、缓存、并发控制等)。
2.3.5、接入方式对比
以下是 4 种 AI 大模型接入方式的优缺点对比:
接入方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
SDK 接入 | - 类型安全,编译时检查 - 完善的错误处理 - 通常有详细文档,性能优化好 |
- 依赖特定版本,可能增加项目体积 - 语言受限 |
- 需要深度集成 - 单一模型提供商 - 对性能要求高 |
HTTP 接入 | - 无语言限制,不增加额外依赖 - 灵活性高 |
- 需要手动处理错误、序列化/反序列化 - 代码冗长 |
- SDK 不支持的语言 - 简单原型验证 - 临时性集成 |
Spring AI | - 统一抽象接口,易于切换模型提供商 - 与 Spring 生态完美融合 - 提供高级功能 |
- 增加额外抽象层,可能不支持某些模型特性 - 版本仍在快速迭代中 |
- Spring 应用 - 需要支持多种模型 - 需高级 AI 功能 |
LangChain4j | - 提供完整 AI 应用工具链,支持复杂工作流 - 丰富的组件和工具,适合构建 AI 代理 |
- 学习曲线较陡,文档相对较少 - 高度抽象可能引入性能开销 |
- 构建复杂 AI 应用 - 需要链式操作、RAG 应用开发 |
推荐:
- 我个人更倾向于 Spring AI,因为它属于 Spring 生态,简单易用、资源丰富,能满足绝大多数 AI 项目的开发需求。
- 无论选择哪种接入方式,都建议先用简单的测试用例验证接入是否成功,再进行复杂功能开发。
三、Spring AI 接入ollama部署的本地大模型
描述
- 链接:安装Ollama本地Deepseek大模型。
- 本地部署大模型保证更好的数据隐私控制、无需网络即可调用。
步骤
- 1、检验大模型是否安装成功、pom.xml引入依赖。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
<version>1.0.0-M6</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、编写yml配置。
spring:
ai:
ollama:
base-url: http://localhost:11434
chat:
model: deepseek-r1:7b
3、编写测试代码。
@Component
public class OllamaAiInvoke implements CommandLineRunner {
@Resource
private ChatModel ollamaChatModel;
@Override
public void run(String... args) throws Exception {
AssistantMessage output = ollamaChatModel.call(new Prompt("你好,我是爱健身的大学生"))
.getResult()
.getOutput();
System.out.println(output.getText());
}
}
4、启动项目测试,显示成功。