SpringAI初体验之HelloWorld

目录

前言

在逛SpringBoot页面时突然看到页面上新增了一个SpringAI项目,于是试了一下,感觉还行。其实就是封装了各家的api调用过程,不过这也是一个好的开始。最近我一直在思考,什么是AI时代的程序员?最后得到的答案是可能一个人就是一个开发团队吧 。目前AI的能力在单个需求方面对程序员都是碾压性的,程序员现在能做的就是理解整个的业务需求,进而合作实现。试想如果未来AI能一个人干一个团队的活,那程序员就只需要做业务分析就好了。那时可能谁理解的好,谁就是好的程序员。

1.准备工作

首先我们需要的是全面的新环境。因为国内很多项目都还是基于JDK1.8做的,很多人还用的是IDEA2019,这已经完全跟不上时代的潮流了。因此现在我们需要的是:

  1. JDK ≥ 17
  2. IDEA ≥ 2022
  3. OpenAI的key
  4. Fan Qiang

如果你无法使用OpenAI的环境,那么你还可以看看其他的环境,目前SpringAI支持的环境有很多了,具体可以查看https://spring.io/projects/spring-ai

2.初始化项目

  • 新建项目
  • 勾选WebAI

  • 等待Maven完成安装

如果阿里云的仓库下载失败,就不要死磕了,换成默认的

java 复制代码
 <repository>
     <id>spring-milestones</id>
     <name>Spring Milestones</name>
     <url>https://repo.spring.io/milestone</url>
     <snapshots>
         <enabled>false</enabled>
     </snapshots>
 </repository>
  • 注意观察pom中的引用
java 复制代码
 <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>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • 新建一个ChatController,代码及其简单
java 复制代码
@RestController
public class ChatController {

   private final OpenAiChatClient chatClient;

   @Autowired
   public ChatController(OpenAiChatClient chatClient) {
       this.chatClient = chatClient;
   }

   @GetMapping("/ai/generate")
   public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
       System.setProperty("http.proxyHost", "127.0.0.1");
       System.setProperty("http.proxyPort", "10809");
       System.setProperty("https.proxyHost", "127.0.0.1");
       System.setProperty("https.proxyPort", "10809");
       System.setProperty("proxySet", "true");
       return Map.of("generation", chatClient.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 chatClient.stream(prompt);
   }
}
  • application.properties中配置OpenAi的key
java 复制代码
spring.ai.openai.api-key=YOUR_API_KEY
spring.ai.openai.chat.options.model=gpt-3.5-turbo
spring.ai.openai.chat.options.temperature=0.7

目前可以选择的模型有:

3.解决问题

3.1 Connection Time out 连接超时问题

这是因为java代码里并没有设置开启代理导致的。有些梯子默认就是全局,所以在代码里并不用设置,但是有的梯子不是,需要设置,其实上面的代码里写过了,还有一些人通过socks5设置代理,自己选择合适的方式吧。

java 复制代码
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "10809");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "10809");
System.setProperty("proxySet", "true");

如果你不知道你的梯子使用的ip和端口是多少,那么你可以按照这个顺序查看一下:

win10和win11的ip和端口查找方法:右键开始菜单-设置-网络和Internet-代理-手动设置代理

关于这个问题,我也让ChatGPT回答了一下:

3.2 You exceeded your current quota 额度超限问题

429问题在OpenAI的官网有解释:

简单来说就是你需要升级为付费账户,或者你的账户额度不够用了,再加钱就是了。

4.访问调用

还记得我们问的什么问题吗?对,tell me a joke

再访问一次,看会不会变化?

nice,变了,说明有效。

5.总结

新技术的出现总会让人有种焦虑感,有些人是抵制,有些人拥抱,有些人是无感,有些人是冷漠。但是我想,这可能就是当初电和汽车的出现一样,会毁掉很多人的饭碗,但是同时也会产生很多新的饭碗。因此不要怕,AI就是一个工具,程序员应该比很多人更加有机会首先了解并使用AI。只要你能坚持不断学习,相信未来的你,一定不会被机器取代,因为机器没得感情。

相关推荐
探索宇宙真理.9 分钟前
WordPress AI Engine信息泄露漏洞 | CVE-2025-11749 复现&研究
人工智能·经验分享·开源·安全漏洞
_妲己13 分钟前
stable diffusion的MLSD直线(AI室内设计)
人工智能·stable diffusion
Mr.朱鹏21 分钟前
大模型入门学习路径(Java开发者版)上
java·开发语言·spring boot·spring·大模型·llm·transformer
古月฿27 分钟前
大学生素质测评系统设计与实现
java·vue.js·redis·mysql·spring·毕业设计
FF-Studio29 分钟前
Ubuntu 24.04 磁盘爆满“灵异“事件:Btrfs, Snapper 与删不掉的空间
linux·运维·人工智能·ubuntu
2401_8414956434 分钟前
【自然语言处理】关系性形容词的特征
人工智能·python·自然语言处理·自动识别·特征验证·关系性形容词·语言学规则和计算
源码获取_wx:Fegn089537 分钟前
基于springboot + vue物业管理系统
java·开发语言·vue.js·spring boot·后端·spring·课程设计
rebekk41 分钟前
Hydra介绍
人工智能·python
我不是小upper42 分钟前
从理论到代码:随机森林 + GBDT+LightGBM 融合建模解决回归问题
人工智能·深度学习·算法·随机森林·机器学习·回归
Faker66363aaa1 小时前
CornerNet-Hourglass104生产线检测与分类-1模型训练与部署
人工智能·分类·数据挖掘