整体介绍
本文是一个详细的例子,讲解了如何基于spring ai 来调用通义千问国产大模型,有详细的代码和配置,并且免费。
Spring AI:简化Java开发者构建AI应用的统一框架
在过去,Java 开发者在构建 AI 应用时面临的一大挑战是缺乏一个统一且高效的框架。这导致开发者需要针对不同的 AI 服务提供商编写各自的接口代码,增加了开发和维护的成本。Spring AI 的出现解决了这一问题。作为 Spring 生态系统的一部分,Spring AI 提供了一套标准化的接口,使得开发者只需编写一次代码,通过简单的配置即可轻松切换不同的 AI 服务提供商。此外,Spring AI 完美地兼容了 Java 的面向对象编程模型,允许开发者使用熟悉的 POJOs 进行开发。这种设计不仅简化了 AI 应用的开发流程,还提高了代码的可移植性和模块化程度,极大地提升了开发效率。
Spring AI的核心功能
能力名字:模型(Model)
一句话说明:Spring AI支持多种AI提供者,如OpenAI、Azure和阿里云的百炼系列,并通过统一接口实现标准化。
输入输出举例:开发者可以通过配置文件简单切换不同的AI提供者,无需修改代码。例如,使用spring.ai.dashscope.model: qwen-max
可以指定使用通义千问大模型。
能力名字:提示(Prompt)
一句话说明:Prompt是用于与AI模型进行交互的一系列消息容器,允许构造复杂且详细的对话。
输入输出举例:发送一个请求“我想知道天气”,接收模型返回的当前天气状况描述。
能力名字:提示词模板(Prompt Template)
一句话说明:通过预定义的模板来生成具体的prompt,便于复用并保持一致性。
输入输出举例:利用模板“Tell me a {adjective} joke about {topic}”,传入参数{"adjective":"funny", "topic":"cows"}
后,得到一个关于奶牛的有趣笑话。
能力名字:嵌入(Embedding)
一句话说明:将文本转换为向量表示,以便于执行诸如相似度计算等任务。
输入输出举例:输入一段文字,输出该段文字对应的高维向量表示。
能力名字:结构化输出(Structured Output)
一句话说明:将模型的非结构化输出自动映射到POJO对象中,简化结果处理流程。
输入输出举例:对于模型返回的JSON字符串,直接解析成Java对象,比如User
或Message
类实例。
能力名字:检索增强生成(RAG)
一句话说明:结合了检索系统与生成模型,使生成内容基于私有知识库中的信息。
输入输出举例:输入问题“2024年6月止,云智能集团的营收是多少?”,根据存储的知识库文档返回准确的答案。
能力名字:函数调用(Function Calling)
一句话说明:允许语言模型在必要时调用外部工具或函数,以获取额外的信息或执行特定任务。
输入输出举例:当用户询问某条消息的状态时,通过调用已注册的消息状态查询函数,返回该消息的具体状态信息。
能力名字:向量存储
一句话说明:提供向量数据的持久化存储方案,适用于各种应用场景下的向量检索需求。
输入输出举例:存储并索引由文本或其他类型数据生成的向量,在需要时快速检索最相关的向量记录。
Spring AI Alibaba:接入阿里云大模型的一站式开发方案
Spring AI Alibaba 是基于 Spring AI 构建的实现,旨在为开发者提供接入阿里云通义大模型(如千问等国产大模型)的一站式解决方案。其核心优势在于通过统一的接口抽象,支持一次编码即可无缝切换不同AI服务提供商,极大地简化了开发和迁移成本。此外,它还兼容主流的流式输出模型,并提供了包括对话、文生图、文生语音等多种生成式AI能力。Spring AI Alibaba 使得利用阿里云强大的国产大模型资源变得更加简单高效,特别适合需要快速集成AI功能的应用场景。
使用Spring AI Alibaba构建聊天API的详细指南
要集成Spring AI Alibaba完成一个有Prompt和流(Flux)返回的聊天API实现,您需要按照以下步骤进行配置与开发。本指南将详细介绍从环境设置到具体代码实现的所有细节,包括所需的POM配置、环境变量设置以及如何编写控制器等。
环境准备
- 确保JDK版本:项目需要基于JDK 17或更高版本运行。
- Spring Boot版本:您的项目应使用Spring Boot 3.3.x及以上版本。
- 申请API Key:访问阿里云百炼页面,登录账号后开通“百炼大模型推理”服务,并创建一个新的API Key用于后续配置。
配置API Key
在终端中执行如下命令以设置环境变量:
export AI_DASHSCOPE_API_KEY=your_valid_api_key_here
同时,在application.properties
文件中添加API Key的配置项:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
添加Maven仓库
由于Spring AI Alibaba的部分依赖尚未发布至Maven中央仓库,请在项目的pom.xml
文件中添加如下仓库配置:
<repositories><repository><id>sonatype-snapshots</id><url>https://oss.sonatype.org/content/repositories/snapshots</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>
添加依赖
同样地,在pom.xml
中加入对spring-ai-alibaba-starter
及其父级Spring Boot项目的依赖:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2</version></dependency><!-- 其他必要的依赖 -->
</dependencies>
编写Controller
现在我们来创建一个简单的RESTful API,它接收用户输入并通过流式接口返回AI生成的内容。首先定义ChatController
类,并注入ChatClient
实例:
@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*")
public class ChatController {private final ChatClient chatClient;@Value("classpath:correct-and-expand.st")Resource resource;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping("/chat")public String chat(String input) {return this.chatClient.prompt().user(input).call().content();}@GetMapping(value = "/chatStream")public Flux<String> chatSteam(@RequestParam String input) {PromptTemplate promptTemplate = new PromptTemplate(resource);Prompt prompt = promptTemplate.create(Map.of("input", input));return chatClient.prompt(prompt).stream().content();}
}
这里定义了两个方法:
chat
:接受用户输入并立即返回响应内容。
chatSteam
:通过Flux
异步处理用户请求,并流式返回AI模型生成的内容。这种方法适合于长时间运行的任务,如对话系统中的连续交互场景。
Prompt模板
为了更灵活地控制与AI模型的对话流程,可以创建提示词模板文件correct-and-expand.st
,放在src/main/resources/
目录下。例如:
You are a helpful assistant. Answer the following question as concisely as possible, and provide additional context if necessary.Question: {input}
Answer:
此模板定义了一个基本的助手角色及问答模式,其中{input}
是用户实际提供的文本。
测试API
完成上述所有配置后,启动您的Spring Boot应用,并尝试通过浏览器或Postman等工具访问/ai/chat?input=你好
或者/ai/chatStream?input=你好
端点测试功能是否正常工作。
以上就是使用Spring AI Alibaba构建具备Prompt支持及流式返回特性的聊天API所需的所有步骤。请确保每一步都严格按照指示操作,以便顺利搭建起自己的AI聊天服务。