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

SPRING AI 入门

1.创建一个模块

2.yml 文件配置

server:port: 8899
spring:application:name: spring_aiai:openai:api-key: sk-a2780a577b7e4c25b296f284d5c7099abase-url: https://api.deepseek.comchat:options:model: deepseek-chattemperature: 0.7

3.pom 文件设置 可按需修改

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>cloud-demo</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../../pom.xml</relativePath></parent><groupId>org.example</groupId><artifactId>spring_ai</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-ai.version>1.0.0-M5</spring-ai.version></properties><dependencies><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></dependency>
<!--        <dependency>-->
<!--            <groupId>springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-test</artifactId>-->
<!--            <scope>test</scope>-->
<!--        </dependency>--></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

4.创建启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringAIApplication {public static void main(String[] args) {SpringApplication.run(SpringAIApplication.class,args);}
}

5.Controller层测试

@RestController
public class AIController {@Autowiredprivate OpenAiChatModel chatModel;@GetMapping("/ai/generate")public String generate(@RequestParam(value = "message")String message){String call = this.chatModel.call(message);return call;}
}

6.简单聊天交互

@RestController
public class ChatClientController {private  final ChatClient chatClient;private ChatClientController(ChatClient.Builder chatClientBuilder){this.chatClient = chatClientBuilder.build();}@GetMapping("/chat")public String chat(@RequestParam(value = "massage") String message){return this.chatClient.prompt().user(message).call().content();}
}

 ChatClient  Config注入方式的实现

@Configuration
public class AiConfig {@Beanpublic ChatClient chatClient(ChatClient.Builder builder){return builder.build();}
}

7.实现角色预设

@Configuration
public class AiConfig {@Beanpublic ChatClient chatClient(ChatClient.Builder builder){return builder.defaultSystem("你是java开发程序员,你精通java").build();}
}

流式返回 逐个返回 增加体检感

// 流式返回@GetMapping(value = "/chat/stream",produces = "text/html;charset=UTF-8")public Flux<String> chatStream(@RequestParam(value = "massage") String message){return this.chatClient.prompt().user(message).stream().content();}

chatModel 的使用

 @Autowiredprivate ChatModel chatModel;@GetMapping(value = "/chatModel")public String chatModel (@RequestParam(value = "massage")String massage){String call = chatModel.call(massage);return call;}@GetMapping(value = "/chatModel02")public String chatModel02 (@RequestParam(value = "massage")String massage){ChatResponse chatResponse = chatModel.call(new Prompt(massage, OpenAiChatOptions.builder().model("deepseek-chat").temperature(0.8).build()));String content = chatResponse.getResult().getOutput().getContent();return content ;}

chatModel提示词使用

  @Autowiredprivate ChatModel chatModel;/***  chatModel 提示词相关的操作* @param name  用户名* @param voice  习惯* @return*/@GetMapping("/prompt")public String prompt (@RequestParam(value = "name")String name,@RequestParam(value = "voice")String voice){// 设置用户输入信息String userText = """ 给我推荐至少三种河南美食""";UserMessage userMessage = new UserMessage(userText);// 设置系统提示词String systemText = """你是一个美食咨询助手,可以帮助人们查询美食信息。你的名字是{name},你应该用你的名字和{voice}的饮食习惯回复用户的请求。""";SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemText);// 替换占位符Message message = systemPromptTemplate.createMessage(Map.of("name", name, "voice", voice));// 使用 prompt Template 设置信息Prompt prompt = new Prompt(List.of(userMessage, message));// 调用chatModel方法List<Generation> results = chatModel.call(prompt).getResults();// 返回结果是多个 使用流处理String collect = results.stream().map(map -> map.getOutput().getContent()).collect(Collectors.joining(""));return collect;}

chatModel函数调用

config 文件中创建函数方法

// 创建函数import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Description;import java.util.function.Function;@Configuration
public class CalculatorService {public record  AddOperation(int a,int b){}public record MulOperation(int m,int n){}// 注册方法@Bean@Description("加法")public Function<AddOperation,Integer> addOperation(){return request->{return  request.a + request.b;};}@Bean@Description("乘法")public Function<MulOperation,Integer> mulOperation(){return request->{return  request.m * request.n;};}
}

controller层调用

 @Autowiredprivate ChatModel chatModel;@GetMapping("/function")public String function01(@RequestParam(value="message")String message) {return ChatClient.builder(chatModel).build().prompt().system("""您是算术计算器的代理。您能够支持加法运算,乘法运算的操作,其余功能将在后续版本中添加,如果用户问的问题不支持请告知详情,再提供加法运算,乘法运算操作前,您必须从用户处获得如下信息:两个数字,运算类型,请调用自定义函数执行加法运算,乘法运算。请回答中文""").user(message).functions("addOperation","mulOperation").call().content();}

实现效果

相关文章:

  • TCN+Transformer+SE注意力机制多分类模型 + SHAP特征重要性分析,pytorch框架
  • Docker 网络模式
  • Golang启用.exe文件无法正常运行
  • SM4 与 AES 在 GPU 上的性能比较
  • GAN+ECA注意力机制实现图像超分辨率重建
  • 第七十九篇 大数据开发基石:堆数据结构解析与生活化应用
  • Vue3 计算属性 computed
  • 在macOS上运行Linux容器的方法
  • G1周打卡——GAN入门
  • linux 中pdf 的自动分页工具
  • 专题:2025年跨境B2B采购买家行为分析及采购渠道研究报告|附160+份报告PDF汇总下载
  • 【Go-补充】实现动态数组:深入理解 slice 与自定义实现
  • 2025年硬件实习/秋招面试准备
  • Cordova移动应用对云端服务器数据库的跨域访问
  • Python原生爬虫教程:微店商品详情API接口攻略指南
  • 手写muduo网络库(七):深入剖析 Acceptor 类
  • 如何正确评估服务器CPU/内存/IO利用率 (性能过剩or瓶颈)
  • SpringBoot后端开发知识点总结(持续更新)
  • Nginx(自用)
  • 会技术的产品经理
  • 淘宝网那样的网站模板/百度全网营销
  • 百度上开个网站怎么做/电子技术培训机构
  • 网站建设的主要功能及定位/重庆森林为什么叫这个名字
  • 嘉峪关网站seo/seo优化一般包括哪些内容
  • 做网站如何语音对话/seo综合查询怎么用的
  • 免费搭建网站教程/seo的外链平台有哪些