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

SpringAi整合免费大模型(NVIDIA)

接上回,发布了springAI整合本地大模型之后,我们来看看怎么去利用别人已经训练好的大模型。

如果对整合本地大模型感兴趣的,请阅读:

SpringAI集成本地AI大模型ollama(调用篇)非常简单!!_spring ai ollama-CSDN博客

同样这里只做一些最基本的调用构造讲解,如果对深入使用比较感兴趣的,请阅读本文最后的Demo讲解。

一,拿到大模型的密钥

        只有拿到对应大模型的密钥才能去调用该模型的API,当然目前springAI支持的大模型有很多除了上次讲过的ollama之外,还有像千帆,通义千问,openai等等,当然本次使用的为英伟达的llama大模型。

        为啥呢,主要是人穷,银行卡比脸还干净,所以只能借用提供免费的API大模型了。

        废话不多说,请访问英伟达官网,拿到我们需要的密钥信息。

llama-3-swallow-70b-instruct-v0.1 Model by Tokyotech-llm | NVIDIA NIM

二, 编写代码,提供对外访问chatAPI

        如果你们有访问SpringAI官网的习惯也能找到简单的构造例子,但是需要注意的有几点。不小心会浪费大量时间在排查问题上。下面进行代码展示,同时会对需要注意的问题进行讲解。

        博主主要是写Java的,这里以java为例

构建简单的SpringBoot的maven项目。

1,pom文件中主要的依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.ai</groupId>
			<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
			<version>1.0.0-M4</version>
		</dependency>

可以按照SpringAI官网中提供的依赖管理

2,  坑1依赖无法下载

按照这个配置完后,你会发现我们无法拉取到

spring-ai-openai-spring-boot-starter

的依赖,国内我们大多使用的是阿里云镜像,出现无法下载的情况,可以去实际的仓库地址看看有没有该依赖包。

解决该问题我们需要指定仓库,在pom文件中加入

<!--	使用自定义的仓库地址-->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>

即可下载,如果不通外网,请自行考虑联通性问题。

当然这里还有一个坑,如果你使用了SpringAI提供的版本依赖管理,没有自己指定版本,也会出现无法拉取的问题。这里可以直接去仓库看看

原因很简单,根本没有

1.0.0-SNAPSHOT

快照版本当然拉取不到了。

2,编写基础的调用demo代码

        默认的启动类

@SpringBootApplication
public class SpringAiDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringAiDemoApplication.class, args);
	}
}

        配置信息

spring.application.name=springAiDemo
spring.ai.openai.api-key={这是密钥}
spring.ai.openai.base-url=https://integrate.api.nvidia.com

spring.ai.openai.chat.options.model=meta/llama-3.1-70b-instruct

# The NVIDIA LLM API doesn't support embeddings, so we need to disable it.
spring.ai.openai.embedding.enabled=false

# The NVIDIA LLM API requires this parameter to be set explicitly or server internal error will be thrown.
spring.ai.openai.chat.options.max-tokens=2048

        简单的controller(其中一个为流式调用)

package org.example.springaidemo.controller;

import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.util.Map;

@RestController
public class SimpleController {

    private final OpenAiChatModel chatModel;

    @Autowired
    public SimpleController(OpenAiChatModel openAiChatModel) {
        this.chatModel = openAiChatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "讲个笑话") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "讲个笑话") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }

}

3, 坑2--项目无法启动

        第一请检查JDK版本是不是17,17以下的请更换到17.

        如果JDK版本正确,启动却报

Type must be a Function, BiFunction, Function1 or Function2. Found: org.apache.groovy.internal.util.Function<org.example.springaidemo.SpringAiDemoApplication$MockWeatherService$WeatherRequest, org.example.springaidemo.SpringAiDemoApplication$MockWeatherService$WeatherResponse>

        请删除您pom中的版本管理

三,正确启动,测试

测试1

        

测试2--流式调用需要前端做一定处理进行展示

以上。

如果对进阶使用感兴趣,请看下一篇

SpringAi整合大模型(进阶版)-CSDN博客


http://www.kler.cn/a/416616.html

相关文章:

  • Pytorch使用手册- PyTorch 中 non_blocking 和 pin_memory() 的使用指南(专题十一)
  • 【WPS】【EXCEL】将单元格中字符按照分隔符拆分按行填充到其他单元格
  • 开展网络安全成熟度评估:业务分析师的工具和技术
  • 【从零开始的LeetCode-算法】3264. K 次乘运算后的最终数组 I
  • C++初阶—C++入门
  • LLAVA论文简记
  • 电子应用设计方案-31:智能AI音响系统方案设计
  • Python3 爬虫 Scrapy的使用
  • 力扣--LCR 124. 推理二叉树
  • aws(学习笔记第十五课) 如何从灾难中恢复(recover)
  • Ubuntu 包管理
  • Ubuntu Server 22.04.5 从零到一:详尽安装部署指南
  • 【JS】面试八股文
  • 【自学笔记】流形学习
  • 汽车控制软件下载移动管家手机控车一键启动app
  • DIGIT视触觉传感器:融合视触技术,赋能多领域智能感知
  • 1.Shell变量
  • 七:仪表盘安装-controller node
  • SAP SD学习笔记16 - 请求书的取消 - VF11
  • AWS海外注册域名是否需要实名认证?
  • Qt详解QUiLoader 动态加载UI文件
  • Qt 窗口类型、窗口标志和窗口属性
  • rocketmq windows环境部署
  • uniapp图片上传预览uni.chooseImage、uni.previewImage
  • 数组和链表OJ题
  • 「网络安全入门」什么是网络安全