Spring AI Alibaba 接入国产大模型通义千问

整体介绍

本文是一个详细的例子,讲解了如何基于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对象,比如UserMessage类实例。

能力名字:检索增强生成(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配置、环境变量设置以及如何编写控制器等。

环境准备

  1. 确保JDK版本:项目需要基于JDK 17或更高版本运行。
  1. Spring Boot版本:您的项目应使用Spring Boot 3.3.x及以上版本。
  1. 申请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聊天服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450614.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ios】解决xcode版本过低无法真机调式的问题

最低要求和支持的 SDK&#xff1a;Xcode - 支持 - Apple Developer 我的Xcode版本是14.2 手机系统版本是iOS15.8.3 步骤一 在终端中运行 open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 步骤二 先去https://github.com/fi…

AI 设计工具合集

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏AI_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; ​ 前言: AI 视频&#xff0c;科技与艺术的精彩融合。它借助先进的人工智能技术&#xff0c;为影像创作带来全新可能。本书…

星海智算:【萤火遛AI-Stable-Diffusion】无需部署一键启动

部署流程 1、注册算力云平台&#xff1a;星海智算 https://gpu.spacehpc.com/ 2、创建实例&#xff0c;镜像请依次点击&#xff1a;“镜像市场”->“更换”->“AI绘画”->“萤火遛AI-Stable Diffusion”。 程序首次启动可能需要几分钟&#xff0c;待实例显示“运行…

2009年国赛高教杯数学建模A题制动器试验台的控制方法分析解题全过程文档及程序

2009年国赛高教杯数学建模 A题 制动器试验台的控制方法分析 汽车的行车制动器&#xff08;以下简称制动器&#xff09;联接在车轮上&#xff0c;它的作用是在行驶时使车辆减速或者停止。制动器的设计是车辆设计中最重要的环节之一&#xff0c;直接影响着人身和车辆的安全。为了…

MOE论文详解(4)-GLaM

2022年google在GShard之后发表另一篇跟MoE相关的paper, 论文名为GLaM (Generalist Language Model), 最大的GLaM模型有1.2 trillion参数, 比GPT-3大7倍, 但成本只有GPT-3的1/3, 同时效果也超过GPT-3. 以下是两者的对比: 跟之前模型对比如下, 跟GShard和Switch-C相比, GLaM是第一…

[WPF初学到大神] 1. 什么是WPF, MVVM框架, XAML?

什么是WPF? WPF(Windows Presentation Foundation) 包含XAML标记语言和后端代码来开发桌面应用程序的. 用VS新建项目有WPF(.Net Framework和.Net应用程序), 该怎么选? 首选 .NET 应用程序(.NET Core 或 .NET 5/6/7/8新版本)拥有更好的性能、跨平台Windows, Linux, Mac支…

电气自动化13:PLC控制硬件组成与工作扫描原理

1.PLC硬件组成&#xff1a; CPU&#xff08;中央处理器&#xff09; 存储器 系统程序存储器用户程序存储器分为&#xff1a;用户程序存储器&#xff08;程序区&#xff09;、功能存储器&#xff08;数据区&#xff09; 输入/输出&#xff08;I/O&#xff09;接口电路 电源 …

SpringBoot优雅下线

一&#xff0c;什么是优雅下线 当我们需要部署新版本代码的时候&#xff0c;需要重启服务&#xff0c;这个时候可能会出现一些问题&#xff0c;比如之前服务正在处理的请求还在处理&#xff0c;这个时候如果强制的停止服务&#xff0c;会造成数据丢失或者请求失败的情况。那么…

后端Web开发

一、Maven &#xff08;一&#xff09;、概述 视频中要用的是jdk11 &#xff08;二&#xff09;、 idea集成Maven 1.配置Maven环境 2.创建Maven项目 3.导入Maven项目 法一&#xff1a; 法二&#xff1a; &#xff08;三&#xff09;、依赖管理 1.依赖配置 2.依赖传递 3.依…

数控机械制造工厂ERP适用范围有哪些

在当今制造业高速发展的背景下&#xff0c;企业资源计划(ERP)系统已成为提升工厂管理效率、实现生产自动化与信息化的关键工具。特别是对于数控机械制造工厂而言&#xff0c;一个合适的ERP系统能够帮助其优化生产流程、提高产品质量、降低生产成本并增强市场竞争力。 1. 生产计…

06 算法基础:算法的定义、表现形式(自然语言、伪代码、流程图)、五个特性(有穷性、确定性、可行性、输入、输出)、好算法的设计目标

目录 1 算法的定义 2 算法的三种表现形式 2.1 自然语言 2.2 伪代码 2.3 流程图 3 算法的五个特性 3.1 有穷性 3.2 确定性 3.3 可行性 3.4 输入 3.5 输出 4 好算法的设计目标 4.1 正确性 4.2 可读性 4.3 健壮性 4.4 通用性 4.5 高效率与低存储量 1 算法的定义 …

Java笔记-static关键字

1.static关键字内存说明 2.访问特点 package com.test.Statics2;import com.test.statics.Student;public class Test {public static void main(String[] args) {// 静态成员中访问非静态成员// method3() // 错误-不能直接调用&#xff0c;需要new对象调用Test test01 new T…

英伟达开源超强模型Nemotron-70B;OpenAI推出Windows版ChatGPT桌面客户端

&#x1f989; AI新闻 &#x1f680; 英伟达开源超强模型Nemotron-70B 摘要&#xff1a;英伟达近日开源了新型AI模型Nemotron-70B&#xff0c;迅速超越GPT-4o和Claude 3.5 Sonnet&#xff0c;成为AI社区的新宠。该模型在多项基准测试中表现优异&#xff0c;采用混合训练方法和…

STM32CUBEIDE新建工程

新建工作区 可以在下面的目录创建工作区&#xff0c;来管理不同的工程&#xff0c;其中有一个是第一次打开软件的时候创建的。 新建一个工程 使用stm32cubeMX生成程序 生成之后直接打开&#xff0c;由于有一些.c.h文件是我们自己建立的&#xff0c;所以需要手动添加进工程…

Linux的开发工具gcc Makefile gdb的学习

一&#xff1a;gcc/g 1. 1 背景知识 1. 预处理&#xff08;进行宏替换) 预处理 ( 进行宏替换 ) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结…

Unicode编码检查, 字符计算, Utf8与Utf16互转, GBK字符计算

CUnicodeUtils #pragma once #include <stdint.h> #include <string>class CUnicodeUtils { public:// // brief: 获取UTF16字符个数// param: pData 数据(UTF16编码, 大端字节序或小端字节序, 可包含BOM)// param: size 数据长度(字节)//…

MySQL日期类型选择建议

我们平时开发中不可避免的就是要存储时间&#xff0c;比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间、用户下单时间等等。你会发现时间这个东西与我们开发的联系还是非常紧密的&#xff0c;用的好与不好会给我们的业务甚至功能带来很大的影响。所以…

对话型AI:Auto Possess Player Auto Possess AI

Auto Possess Player “Auto Possess Player” 是一个常见于游戏开发&#xff0c;尤其是在 Unreal Engine 中的术语。它指的是一个功能或设置&#xff0c;使得一个特定的角色或对象在游戏开始时自动接管玩家的控制权。以下是一些关键点&#xff1a; 含义 自动控制&#xff…

STM32外设之ADC应用--寄存器开发

1.ADC简介 模数转换器&#xff08;Analog-to-Digital Converter&#xff0c;简称ADC&#xff09;是一种重要的电子设备&#xff0c;它能够将模拟信号转换为数字信号。是一种将连续变化的模拟信号转换为离散的数字信号的电子设备。这种转换使得模拟信号可以在数字系统中进行处理…

A-23OH型树脂在汽车涂装行业溶剂回收中的应用

随着汽车制造业的不断发展&#xff0c;市场竞争愈发激烈。为了提升生产柔性、生产效率和成本效益&#xff0c;同时确保喷漆质量并满足日益增长的非标和定制化设计需求&#xff0c;汽车生产商需要寻求更加高效、环保的解决方案。 其中&#xff0c;水性涂料的应用已经成为一种趋势…