Type something to search...
打造你的专属AI API!深入浅出Spring Boot与Google Gemini的完美融合!

打造你的专属AI API!深入浅出Spring Boot与Google Gemini的完美融合!

创建一个智能网络服务,利用生成式 AI 的力量回答问题

在本教程中,我们将整合 Spring BootSpring AI/Gen AI,构建一个利用 Google’s Gemini 生成式 AI 模型的网络服务。我们的目标是创建一个简单的网络服务,能够基于生成式 AI 的能力智能地回答用户问题。借助 Gemini 的强大功能,我们可以利用尖端 AI 提供准确且具有上下文感知的响应,使我们的网络服务既实用又互动。

概述

我们将使用 Spring Boot,一个流行的基于Java的框架,来创建我们的web服务的后端。我们还将集成 Spring AI,使得与机器学习和生成式AI模型的工作变得无缝。使用Gemini作为我们的AI模型,我们将建立一个系统,以先进的自然语言响应来回答用户的问题。

前提条件

  • Java 11 或更高版本:确保您安装了正确版本的 Java。
  • Maven:用于依赖管理和构建项目。
  • 基本的 Spring Boot 理解:熟悉 Spring Boot 和 RESTful Web 服务将会有所帮助。
  • Gemini API 访问:您需要访问 Google 的 Gemini 模型的 API,以获取生成式 AI 功能。

第一步:设置 Spring Boot 项目

首先,让我们创建一个 Spring Boot 应用程序。您可以使用 Spring Initializr 来设置项目结构。

  1. 访问 Spring Initializr
  2. 填写详细信息: 项目:Maven 项目 语言:Java Spring Boot 版本:最新 依赖项:选择“Spring Web”、“Spring AI”和“Spring Boot Actuator”。
  3. 生成项目并解压缩。
  4. 将项目导入您喜欢的 IDE(例如,IntelliJ IDEA 或 Eclipse)。

第2步:添加Spring AI和Google Gemini的依赖

打开您的pom.xml文件,添加集成Spring AI和Gemini所需的依赖。每个依赖都有其特定的用途:

  • Spring Boot Web:提供创建Web应用程序的核心功能,使我们能够构建RESTful API。
  • Spring AI:将机器学习和生成式AI能力无缝集成到Spring Boot应用程序中。
  • Google Gemini API Client:允许我们与Google Gemini AI模型进行交互,以生成智能响应。
  • Jackson用于JSON解析:用于将JSON数据解析为Java对象及其反向操作,这对于处理API请求和响应是必要的。
<dependencies>
    <!-- Spring Boot Web dependency -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  
    <!-- Spring AI dependency -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai</artifactId>
        <version>1.0.0</version>
    </dependency>
    <!-- Google Gemini API Client -->
    <dependency>
        <groupId>com.google.api</groupId>
        <artifactId>google-gemini-client</artifactId>
        <version>1.0.0</version>
    </dependency>
    <!-- Jackson for JSON parsing -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
</dependencies>

第 3 步:配置 Google Gemini API 访问

要与 Google 的 Gemini 模型进行交互,您需要从 Google 获取 API 密钥并配置 API 访问。以下是获取 API 密钥的方法:

  1. 注册 Google Cloud:如果您还没有 Google Cloud 账户,请在 Google Cloud Platform 注册。
  2. 启用 Gemini API:前往 Google Cloud Console,搜索 Gemini API,并为您的项目启用它。如果您没有项目,可能需要创建一个新项目。
  3. 获取 API 密钥:在 Cloud Console 中导航到 APIs & Services 部分。 - 点击 Credentials。 - 选择 Create Credentials > API Key。 - 复制生成的 API 密钥。
  4. 一旦您拥有 API 密钥,您可以将其添加到 application.properties 文件中:
gemini.api.key=YOUR_GEMINI_API_KEY

YOUR_GEMINI_API_KEY 替换为 Google 在您注册访问时提供的 API 密钥。

第4步:为Gemini交互创建客户端接口

为了使系统更加灵活,我们将为与Gemini API交互创建一个单独的客户端接口层。这样,如果将来需要,我们可以轻松地将Gemini API替换为其他AI提供商。

创建一个名为AIClient的接口,然后提供Gemini的实现。

package com.example.demo.client;

public interface AIClient {
    String getAnswer(String question);
}

现在,创建一个使用Gemini API的AIClient实现。

package com.example.demo.client.impl;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.google.api.gemini.GeminiClient;
import com.google.api.gemini.model.GeminiRequest;
import com.google.api.gemini.model.GeminiResponse;
import com.example.demo.client.AIClient;

@Component
public class GeminiClientImpl implements AIClient {

    @Value("${gemini.api.key}")
    private String apiKey;

    private final GeminiClient geminiClient;

    public GeminiClientImpl() {
        this.geminiClient = new GeminiClient(apiKey);
    }

    @Override
    public String getAnswer(String question) {
        GeminiRequest request = new GeminiRequest(question);
        GeminiResponse response = geminiClient.generateResponse(request);
        return response.getText();
    }
}

第4步:创建一个服务层以使用AI客户端

现在我们有了一个灵活的客户端接口,我们可以创建一个服务,使用这个AIClient来获取答案。

package com.example.demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.client.AIClient;

@Service
public class AIService {

    private final AIClient aiClient;

    @Autowired
    public AIService(AIClient aiClient) {
        this.aiClient = aiClient;
    }

    public String getAnswer(String question) {
        return aiClient.getAnswer(question);
    }
}

第5步:创建用户交互的REST控制器

在此步骤中,我们将创建一个REST控制器,允许用户通过发送HTTP请求与AI服务进行交互。我们将设置一个GET端点,用户可以将他们的问题作为查询参数传递。控制器将使用AIService来处理请求并返回AI生成的答案。

这种方法使得使用网页浏览器或Postman等工具测试服务变得简单。

package com.example.demo.controller;

import com.example.demo.service.GeminiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class QuestionController {

    @Autowired
    private GeminiService aiService;

    @GetMapping("/ask")
    public String askQuestion(@RequestParam String question) {
        return geminiService.getAnswer(question);
    }
}

第6步:运行Spring Boot应用程序

现在一切都已设置好,是时候运行Spring Boot应用程序了。您可以通过运行DemoApplication类(带有@SpringBootApplication注解的类)来完成此操作。

一旦应用程序运行,您可以通过在浏览器中访问以下URL,使用像Postman这样的工具,或使用curl命令来访问API:

使用 curl 的示例

curl "http://localhost:8080/ask?question=What is generative AI?"

第7步:测试和完善服务

尝试提出各种问题,以查看AI的响应效果。您可能需要添加日志记录和错误处理,以完善响应并在API失败时提供有意义的消息。

增强安全性和性能

  • 速率限制:为了防止滥用您的 AI 驱动的端点,可以使用速率限制工具,如 Spring Boot Rate Limiter,限制用户在给定时间内可以发出的请求数量。
  • 身份验证和授权:实施 Spring Security 来验证用户身份并授权访问 AI 服务。这有助于保护端点免受未经授权的使用,并确保只有合法用户可以与您的服务交互。
  • 缓存:使用缓存机制,如 Spring Cache,存储经常请求的答案,从而减少 API 调用并提高响应时间。
  • 输入验证:确保验证用户输入,以避免格式错误或潜在的有害请求。

奖励步骤:集成语音转文本和文本转语音,构建您自己的 Jarvis

为了进一步推进这个项目,您可以集成语音转文本和文本转语音的功能,创建您自己的基于语音的助手,类似于《钢铁侠》中的 Jarvis。这将允许用户使用语音命令与 AI 进行互动,并接收语音回复。

你可以使用的工具:

  • Google Cloud Speech-to-Text: 将口语转换为文本。这可以用于通过语音输入捕捉用户的问题。
  • Google Cloud Text-to-Speech: 将AI的文本响应转换为语音,使AI能够“回复”用户。
  • Vosk API: 一种开源的语音识别替代方案,可以离线工作,适合更简单或离线的应用程序。

集成步骤:

  1. 添加依赖:在您的 pom.xml 中添加 Google Cloud Speech 和 Text-to-Speech 所需的依赖。|
<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-speech</artifactId>
    <version>1.28.0</version>
</dependency>
<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-texttospeech</artifactId>
    <version>1.3.0</version>
</dependency>

2. 设置服务:创建使用 Google Cloud SDK 与 Speech-to-Text 和 Text-to-Speech API 交互的服务。

3. 与 AI 控制器集成:修改您的控制器以接受音频输入,使用 Speech-to-Text 将其转换为文本,将文本发送给 Gemini 进行处理,然后使用 Text-to-Speech 将 AI 响应转换回语音。

通过这些附加功能,您的 AI 驱动的 Spring Boot 应用程序成为一个完全互动的语音助手,可以回答问题、提供信息,甚至帮助自动化任务。

结论

将 Spring Boot 与 Spring AI 和 Google Gemini 集成,可以创建一个强大的网络服务,利用生成式 AI 来回答用户问题。这种集成展示了传统网络框架如何与现代 AI 技术结合,以构建智能和响应迅速的应用程序。

该项目可以通过添加更高级的 NLP 技术、整合其他 AI 模型或创建更强大的用户界面以改善用户互动来进一步扩展。随着生成式 AI 能力的不断增强,可能性是无穷无尽的。

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多