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

使用Spring AI调用AI模型

简介

Spring AI是Spring推出的用于快速集成AI功能。该项目从著名的Python项目(如LangChain和LlamaIndex)中汲取灵感,经过多个版本迭代,逐渐集成了OpenAI、Google、Amazon、Baidu等大语言模型平台。 Spring AI支持将模型数据结构化输出、RAG(Retrieval-Augmented Generation)、支持对接所有主要的向量数据库(如:Apache Cassanra、Redis、Elasticsearch、PostgreSQL等),允许模型请求客户端工具和函数,支持以下模型类型:

  • Chat Completion
  • Embedding
  • Text to Image
  • Audio Transcription
  • Text to Speech
  • Moderation

部分例子

添加依赖

Spring AI 1.0 M6之后的版本已经可以直接从中央仓库下载了,添加如下BOM

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.0-M6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- openAI 服务 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
        </dependency>

        <!-- 百度千帆 服务 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-qianfan-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

对接Chat Model

@RestController
public class ChatController {
    private final OpenAiChatModel chatModel;

    @Autowired
    public ChatController(OpenAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map 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);
    }

    
    @GetMapping("/ai/tool/calling")
    public Map toolCalling(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        //目前会循环调用工具方法, 应该跟deepseek自身有关 https://api-docs.deepseek.com/zh-cn/guides/function_calling
        String response = ChatClient.create(chatModel).prompt(message).tools(new IdiomsTools()).call().content();
        return Map.of("generation", response);
    }

}

application.properties需要配置对应api key 信息


spring.ai.openai.api-key=youkey
spring.ai.openai.base-url=https://api.deepseek.com
spring.ai.openai.chat.options.model=deepseek-chat

# 千帆
spring.ai.qianfan.api-key=you api key
spring.ai.qianfan.secret-key=you secret key

使用Advisors API增强AI交互

@RestController
@RequestMapping("/qianfan/advisor")
public class QianfanAdvisorController {

    private final QianFanChatModel chatModel;
    private final ChatClient chatClient;

    @Autowired
    public QianfanAdvisorController(QianFanChatModel chatModel) {
        this.chatModel = chatModel;
        this.chatClient = ChatClient.builder(chatModel)
                .defaultAdvisors(
                        new MessageChatMemoryAdvisor(new InMemoryChatMemory()) // chat-memory advisor
                )
                .build();
    }
    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {

        return Map.of("generation", this.chatClient.prompt().advisors(new LoggingAdvisor()).user(message).call().content());
    }

}

上面示例中通过InMemroyChatMemory实现每次会话过程将之前的上下文一起代入每次会话中。

对接阿里大模型

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。

更多功能和例子详见:

Spring AI Alibaba文档: https://java2ai.com/

Spring AI 文档:https://docs.spring.io/spring-ai/reference/

相关文章:

  • YOLOv8改进SPFF-LSKA大核可分离核注意力机制
  • docker oracle11
  • windows2012部署redis5并安装为服务
  • svn 通过127.0.01能访问 但通过公网IP不能访问,这是什么原因?
  • Nacos简介、安装与使用(保姆级教程!!!)
  • ProfibusDP主站转ModbusTCP网关如何进行数据互换
  • 学习日记-250305
  • 大数据环境(单机版) Flume传输数据到Kafka
  • C++ JSON库的使用示例
  • MambaMorph:基于 Mamba 的医学 MR-CT 可变形配准框架
  • scBaseCamp:一个AI代理的可持续扩充的单细胞数据存储库
  • Huggingface transformers库使用教程(翻译)--------(2)使用piplines进行推理
  • IDC权威认证!永洪科技入选 IDC「GBI图谱」,点亮生成式 BI 价值灯塔
  • 【Linux】使用问题汇总
  • MySQL-多表查询
  • 模拟数据文件少写“+”加在本地如何恢复?
  • Java 实现 Oracle 的 MONTHS_BETWEEN 函数
  • 在PyCharm开发环境中,如何建立hello.py文件?
  • 小菜鸟系统学习Python-迭代实现斐波那契和汉诺塔问题
  • C语言——链表
  • 网站怎么做企业/昆明seo
  • 网站公告弹窗源码/站内优化主要从哪些方面进行
  • 网站制作公司兴田德润简介/用广州seo推广获精准访问量
  • 昆明hph网站建设/关键词自动优化工具
  • 个人网站建设方案书 范文/模板免费网站建设
  • 网站点击排名/全网最好的推广平台