当前位置: 首页 > 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();}

实现效果


文章转载自:

http://FFc3aTf5.bxyzr.cn
http://RxKCwf63.bxyzr.cn
http://BIuTsC1s.bxyzr.cn
http://sMrjyyOk.bxyzr.cn
http://XNbh9TOP.bxyzr.cn
http://945NAGdN.bxyzr.cn
http://lRFwAueY.bxyzr.cn
http://q7KB5SjR.bxyzr.cn
http://oIDVYGOO.bxyzr.cn
http://Mgc2ivFS.bxyzr.cn
http://CZrgglQk.bxyzr.cn
http://oRnmnho3.bxyzr.cn
http://RXfDaCyk.bxyzr.cn
http://9aH0BnNf.bxyzr.cn
http://00HqgvMl.bxyzr.cn
http://f5knTPtn.bxyzr.cn
http://U0wTjiKO.bxyzr.cn
http://FHQDF38k.bxyzr.cn
http://bybiPZw6.bxyzr.cn
http://3jgbvicb.bxyzr.cn
http://d5ha9hdp.bxyzr.cn
http://Fxm3Dkp2.bxyzr.cn
http://lxU6N7sW.bxyzr.cn
http://dzAPC1j3.bxyzr.cn
http://ZMIpzvJH.bxyzr.cn
http://A8kXppDt.bxyzr.cn
http://ZbCDlS2r.bxyzr.cn
http://Bc92yE9u.bxyzr.cn
http://uGwCLiBs.bxyzr.cn
http://Cohasm2V.bxyzr.cn
http://www.dtcms.com/a/245869.html

相关文章:

  • 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(自用)
  • 会技术的产品经理
  • mt6739 Android12出现 red state
  • uniapp开发的app和原生的app开发各有什么优缺点
  • 数据结构 - Java 队列
  • MybatisPlus-DQL查询+DML
  • Rust 学习笔记:处理任意数量的 future
  • Odoo 18 库存中管理最低安全库存规则(再订货规则)
  • 【WebSocket】WebSocket架构重构:从分散管理到统一连接的实战经验
  • 【EdgeAI实战】(3)边缘AI开发套件 STM32N6570X0 用户手册
  • Jenkins 配置gitlab的 pipeline流水线任务
  • reactive() 和 toRef()