首页 > 其他分享 >Spring AI上架

Spring AI上架

时间:2024-03-01 23:55:28浏览次数:20  
标签:username String AI Spring 上架 spring new Response

Spring AI 来了

Spring AI 是 AI 工程师的一个应用框架,它提供了一个友好的 API 和开发 AI 应用的抽象,旨在简化 AI 应用的开发工序。

提供对常见模型的接入能力,目前已经上架 https://start.spring.io/,提供大家测试访问。(请注意虽然已经上架 start.spring.io,但目前还是在 Spring 私服,未发布至 Maven 中央仓库)

以 ChatGPT 模型为例

1. 添加依赖

  <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>

 <!-- 配置 Spring 仓库 -->
  <repositories>
      <repository>
          <id>spring-milestones</id>
          <name>Spring Milestones</name>
          <url>https://repo.spring.io/milestone</url>
          <snapshots>
              <enabled>false</enabled>
          </snapshots>
      </repository>
  </repositories>

2. 配置 OpenAI 相关参数

spring:
  ai:
    openai:
      base-url: # 支持 openai-sb、openai-hk 等中转站点,如用官方则不填
      api-key: sk-xxxx

API 使用

1. 聊天 API

@Autowired
private OpenAiChatClient chatClient;

@Test
void testChatClient() {
    String message = """
            树上有 9 只鸟,猎人开枪打死一只,树上还剩下多少只鸟?
            """;
    System.out.println(chatClient.call(message));
}

2. 生成图像

@Autowired
private OpenAiImageClient openaiImageClient;
@Test
void testImageClient() {
    ImageResponse response = openaiImageClient
            .call(new ImagePrompt("A light cream colored mini golden doodle", OpenAiImageOptions.builder()
                    .withQuality("hd").withN(4).withHeight(1024).withWidth(1024).build())
    );
}

3. Prompts 提示词 API

@Test
void testPrompts() {
    String systemText = """
            You are a helpful AI assistant that helps people find information.
            Your name is {name}
            You should reply to the user's request with your name.
            """;
    SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(systemText);

    String userText = """
            Tell me about three famous pirates from the Golden Age of Piracy and why they did.
            Write at least a sentence for each pirate.
            """;

    Message userMessage = new UserMessage(userText);
    Message systemMessage = systemPromptTemplate.createMessage(Map.of("name", "lengleng"));

    Prompt prompt = new Prompt(List.of(userMessage, systemMessage));

    List<Generation> response = chatClient.call(prompt).getResults();

    for (Generation generation : response){
        System.out.println(generation.getOutput().getContent());
    }
}

进阶:开发业务大模型

目标:在自然语言交流中,可通过调用外部工具来回答问题;将自然语言转换为 API 调用参数或查询数据库的条件;提取文本中的结构化数据

 

1. 创建 Function Calling

public class MockMathScoreService implements Function<MockMathScoreService.Request, MockMathScoreService.Response> {

    /**
     * 请求此模型必须入参的数据维度有哪些 (姓名)
     * <p>
     * input: 张三同学的数学成绩怎么样?
     */
    @JsonInclude(Include.NON_NULL)
    @JsonClassDescription("数学行业")
    public record Request(@JsonProperty(required = true,
            value = "username") @JsonPropertyDescription("学生姓名") String username) {
    }


    /**
     * 返回大模型的数据维度有哪些 (姓名,成绩)
     */
    public record Response(String username, double score) {
    }

    /**
     * 实际的数据源提供逻辑,根据用户输入 username 查询本地数据库,返回给大模型
     *
     * @param request the function argument  username
     * @return Response
     */
    @Override
    public Response apply(Request request) {
        if (request.username.contains("张三")) {
            return new Response("张三", 100);
        } else if (request.username.contains("李四")) {
            return new Response("李四", 99.5);
        }
        return new Response("null", 0);
    }
}

2. 调用

@Test
void  testCallFunc(){
    String promptText= "张三同学的数学成绩怎么样?";
    UserMessage userMessage = new UserMessage(promptText);

    var promptOptions = OpenAiChatOptions.builder()
            .withFunctionCallbacks(List.of(new FunctionCallbackWrapper<>(
                    "MathScoreService",
                    "教育行业AI机器人",
                    new MockMathScoreService())))
            .build();

    ChatResponse response = chatClient.call(new Prompt(List.of(userMessage), promptOptions));
    System.out.println(response.getResult().getOutput().getContent());
}

标签:username,String,AI,Spring,上架,spring,new,Response
From: https://www.cnblogs.com/smallfa/p/18048201

相关文章

  • Spring-自动配置
    自动配置流程细节梳理:1、导入starter-web:导入了web开发场景1、场景启动器导入了相关场景的所有依赖:starter-json、starter-tomcat、springmvc2、每个场景启动器都引入了一个spring-boot-starter,核心场景启动器。(上面三个也有)3、核心场景启动器引入了spring-boot-autoconfig......
  • 手动创建spring boot项目
    1.我们首先要创建一个Maven项目(这里就不过多演示)2.然后我们点击创建新模块,选择创建Maven模块,然后修改名称,Archtype选择quicker那个,再点击确定。3,创建好以后,我们进行手动的配置pom文件,输入红框中的东西4,创建相应的包,和Java文件5.在SpringbootCreatManualApplication和contro......
  • 【Spring AOP】SpringAOP配置过程——基于XML&&基于注解 && Spring AOP实现原理
    概念SpringAOP-AspectOrientedProgramming面向切面编程AOP的做法是将通用、与业务无关的功能抽象封装为切面类切面可配置在目标方法的执行前、后运行,真正做到即插即用可以在不修改源码的情况下对程序进行扩展AOP配置过程——基于XML配置0.添加依赖创建配置文件......
  • Spring-Boot学习
    Spring-boot学习笔记从零开始创建项目先创建一个空的Maven项目,然后在pom.xml引入Spring-boot-starter的父依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2......
  • SpringCloud Alibaba-4-Feign远程调用
    远程调用:在分布式系统中,我们使用springboot创建了各种各样服务,那么这些服务之间如何进行远程调用呢。如:订单微服务怎么去调用商品微服务?Ribbon:是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon支持的负载均衡策略:BestAvailableRuleAvai......
  • [ABC217F] Make Pair 题解
    [ABC217F]MakePair题解思路解析通过\(n\le200\)和“选出的两个学生离开队列,空出来的位置左右合拢”这两个细节可以想到能用区间dp做,\(f_{i,j}\)表示将\(i\toj\)这个区间全部选完的方案数,然后常规区间dp,加一个判断如果当前区间\([l,r]\)中\(l,r\)是朋友,就可......
  • 10199元起 LG gram Pro 2024款笔记本上架:酷睿Ultra 7+120Hz OLED屏
    LGgramPro2024款笔记本目前已经上架,首发10199元起。设计上,新款笔记本的重量只有1199克,厚度仅为12.4毫米,轻薄机身可以轻松放入日常背包。据悉,新款笔记本提供了16英寸(16Z90SP)和17英寸(17Z90SP)版本,采用2.8KOLED屏幕,支持120Hz超高刷新率。性能上,新款笔记本可选英特尔酷睿Ultra......
  • 在 Spring Boot 3.x 中使用 SpringDoc 2 / Swagger V3
    SpringDocV1只支持到SpringBoot2.xspringdoc-openapiv1.7.0isthelatestOpenSourcereleasesupportingSpringBoot2.xand1.x.SpringBoot3.x要用SpringDoc2/SwaggerV3,并且包名也改成了springdoc-openapi-starter-webmvc-uiSpringDocV2https://spr......
  • 从WPS AI摘下来的比较实用的办公指令
    分类名称简介prompt职场办公工作计划根据岗位及工作要求,生成工作计划现在你扮演一位职场办公人员,我请你帮我写一个[第三季度]的工作计划,目标是[完成测试用例管理后台及至少三个通用的重要业务自动测试脚本]。你的计划需要包括以下要点:工作目标、工作任务、所需资源、......
  • TSINGSEE青犀AI智能分析网关V4工业园区/厂区/工厂智慧安监方案
    一、背景与需求分析随着科技的不断发展,传统的安全监管方式已经难以满足现代工业园区的安全需求。为了提高工业园区的安全监管水平,智慧安监方案成为了新的选择。针对工业园区化工企业多且安全及环保等方面存在风险高、隐患多、精细化管控复杂的情况,需要建立工业园区的智能化视频监......