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

零基础学习Spring AI Java AI SpringBoot AI调用大模型OpenAi Ollama集成大模型

零基础学习Spring AI Java AI SpringBoot AI调用大模型OpenAi Ollama集成大模型

环境准备

  • jdk17+ 这里自行安装,我安装的jdk21

  • idea

  • Ollama安装,请参考下面链接:

本地部署大模型,不需要GPU就能玩本地模型-亲测成功

Ollama前端页面调用大模型 知识问答 模型切换

创建项目

maven的pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springai</artifactId><version>0.0.1-SNAPSHOT</version><name>springai</name><description>springai</description><properties><java.version>23</java.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--        <dependency>-->
<!--            <groupId>org.springframework.ai</groupId>-->
<!--            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>-->
<!--        </dependency>--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><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></project>

配置ollama大模型调用api地址

其他配置请看官网说明:https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html

spring.application.name=springai#如果是调用chatGPT的接口,这里配置openai的key,并把maven的配置放开
spring.ai.openai.api-key=34223242432424324#ollama配置地址
spring.ai.ollama.base-url=http://192.168.1.59:11434
spring.ai.ollama.init.pull-model-strategy=never
spring.ai.ollama.init.timeout=60s
spring.ai.ollama.init.max-retries=1#ollama配置使用的本地大模型:llama3.1:latest
spring.ai.ollama.chat.options.model=llama3.1:latest
spring.ai.ollama.chat.options.temperature=0.7spring.ai.ollama.embedding.enabled=true
spring.ai.ollama.embedding.options.model=llama3.1-instruct:latest

使用流式的方式调用时可能会超时报错:Resolved [org.springframework.web.context.request.async.AsyncRequestTimeoutException]

设置超时时间为300秒

package com.example.springai.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void configureAsyncSupport(AsyncSupportConfigurer configurer) {//报错:Resolved [org.springframework.web.context.request.async.AsyncRequestTimeoutException]configurer.setDefaultTimeout(300000); // 设置超时时间为300秒}
}

调用Ollama的API对话

package com.example.springai.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.ollama.OllamaChatModel;
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 OllamaController {private final OllamaChatModel chatModel;@Autowiredpublic OllamaController(OllamaChatModel chatModel) {this.chatModel = chatModel;}@GetMapping("/ai/generate")public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", this.chatModel.call(message));}//流式返回@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {Prompt prompt = new Prompt(new UserMessage(message));return this.chatModel.stream(prompt);}}

一次性调用返回效果:
在这里插入图片描述
在这里插入图片描述

流式调用效果:
在这里插入图片描述


http://www.mrgr.cn/news/66318.html

相关文章:

  • 电机轴设计的技术参数研究
  • C中定义字符串有下列几种形式
  • Android沙箱
  • solidity call使用
  • FreeRTOS | 信号量(第十四天)
  • VuePress文档初始化请求过多问题探讨
  • HarmonyOS开发 - Ability往页面(Pages)中传递数据
  • 年薪平均几十万?!哪些行业的软件测试工程师需求量大,前景好?
  • ubuntu工具 -- ubuntu服务器临时没有网络,急需联网下载东西怎么办? 使用手机提供网络
  • @ApiOperation(“修改帐号状态“)详细解释一下以上代码
  • 视频监控接入平台功能:视频平台系统的硬件性能直观显示和系统软件运行情况和状态显示
  • 【初阶数据结构篇】链式结构二叉树(续)
  • vue组件在项目中的常用业务逻辑(3)
  • 11.5 dmy NOIP模拟赛DAY4 总结
  • operator[ ]和迭代器,auto,for流,reserve
  • MySQL初学之旅(1)配置与基础操作
  • 数据库基础(4) . 数据库结构
  • Unity自动打包——Shell交互
  • 【C/C++】memcpy函数的使用
  • centos 6 yum安装 rabbitmq
  • 软硬链接与动静态库
  • 无需懂代码!用AI工具Bolt一键生成网站的入门指南!
  • RTX 50很快就能见面!3个月内 全家登场
  • 基于 JAVASSM(Java + Spring + Spring MVC + MyBatis)框架开发一个医院挂号系统
  • 90%会展主办方都会用的6款数字化工具
  • 基于 JAVASSM(Java + Spring + Spring MVC + MyBatis)框架开发一个九宫格日志系统