Heim >Java >javaLernprogramm >JAVA mit GeminiAI kommunizieren

JAVA mit GeminiAI kommunizieren

Linda Hamilton
Linda HamiltonOriginal
2025-01-09 06:45:41364Durchsuche

Wenn Sie in Java programmieren und noch nie mit GeminiAI „gespielt“ haben, ist dieser Artikel eine großartige Einführung. Hier werde ich auf sehr einfache Weise vorstellen, wie Sie Anfragen an Gemini senden und JSON zurückgeben, wie eine Rest-API. ?‍?

Was verwende ich? ?

  • Java 17
  • Intelligence Community 2024.1.1
  • Postbotenkarte
  • GeminiAI-Zugriffsschlüssel

Fangen wir an?

Starten Sie ein einfaches Projekt mit dem Spring Launcher und fügen Sie die folgenden Abhängigkeiten in Ihr POM ein

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.36</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.18.2</version>
</dependency>

Diese Abhängigkeiten ermöglichen die Verwendung von Lombok, RestTemplate und ObjectMapper.

Lombok: um sich wiederholende Codes (berühmte Boilerplates) zu vermeiden und die Lesbarkeit unseres Codes zu verbessern

RestTemplate: um die http-Anfrage an die GeminiAI-API zu stellen

ObjectMapper: zum Konvertieren der Gemini-API-Rückgabe in JSON

 

RESTTEMPLATE KONFIGURIEREN

Lassen Sie uns das RestTemplate in unserem Java-Projekt konfigurieren. Dazu erstellen wir eine Klasse mit der @Configuration-Annotation und dem Bean, um es zu definieren:

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

 

DEN DIENST ERSTELLEN

Lassen Sie uns eine Serviceklasse für die Kommunikation mit GeminiAI erstellen. Diese Klasse ist für die gesamte Kommunikation und Verarbeitung der Antwort von Gemini verantwortlich und sollte wie folgt aussehen:

@Service
public class TalkService {
    private final RestTemplate restTemplate;
    private final ObjectMapper objectMapper;

    @Value("${gemini.ai.api.url}")
    private String geminiApiUrl;

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

    public TalkService(RestTemplate restTemplate, ObjectMapper objectMapper) {
        this.restTemplate = restTemplate;
        this.objectMapper = objectMapper;
    }

    public String callGeminiAI(TalkRequest input) {
        String url = geminiApiUrl + geminiApiKey;

        GeminiRequest request = new GeminiRequest();
        GeminiRequest.Content content = new GeminiRequest.Content();
        GeminiRequest.Part part = new GeminiRequest.Part();

        part.setText(input.getChat());
        content.setParts(Collections.singletonList(part));
        request.setContents(Collections.singletonList(content));

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<GeminiRequest> entity = new HttpEntity<>(request, headers);

        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);

        try {
            GeminiResponse geminiAIResponse = objectMapper.readValue(response.getBody(), GeminiResponse.class);

            if (geminiAIResponse.getCandidates() != null && !geminiAIResponse.getCandidates().isEmpty()) {
                GeminiResponse.Candidate candidate = geminiAIResponse.getCandidates().get(0);
                if (candidate.getContent() != null && candidate.getContent().getParts() != null && !candidate.getContent().getParts().isEmpty()) {
                    return candidate.getContent().getParts().get(0).getText();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "Falha ao processar resposta da API";
    }
}

Beachten Sie, dass wir in dieser Klasse die POJOs GeminiRequest und GeminiResponse verwenden. Unten finden Sie den Code, um sie zu erstellen

GeminiRequest

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class GeminiRequest {
    private List<Content> contents;

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Content {
        private List<Part> parts;
    }

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Part {
        private String text;
    }
}

GeminiResponse

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class GeminiResponse {
    private List<Candidate> candidates;
    private UsageMetadata usageMetadata;
    private String modelVersion;

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Candidate {
        private Content content;
        private String finishReason;
        private double avgLogprobs;
    }

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Content {
        private List<Part> parts;
    }

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Part {
        private String text;
    }

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class UsageMetadata {
        private int promptTokenCount;
        private int candidatesTokenCount;
        private int totalTokenCount;
    }
}

 

EINEN CONTROLLER ERSTELLEN

Jetzt erstellen wir einen Controller, der eine Rest-Anfrage abhört und sie über unseren Service verarbeitet

@RestController
@RequestMapping("v1")
public class TalkController {
    private final TalkService talkService;

    @Autowired
    public TalkController(final TalkService talkService) {
        this.talkService = talkService;
    }

    @PostMapping("/chat-gemini")
    public TalkResponse talk(@RequestBody TalkRequest talkRequest) {
        TalkResponse response = new TalkResponse();
        response.setResponse(talkService.callGeminiAI(talkRequest));
        return response;
    }
}

Unser Controller verfügt auch über POJOs, sehen Sie sich den Code unten an

TalkRequest

@Getter
@Setter
@AllArgsConstructor
public class TalkRequest {
    private String chat;
}

TalkResponse

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class TalkResponse {
    private String response;
}

 

VARIABLEN IN EIGENSCHAFTEN KONFIGURIEREN

Sie müssen den GeminiAI-Zugriffsendpunkt und auch Ihren Zugriffsschlüssel informieren. Ich habe diese Informationen in der Eigenschaftendatei gespeichert, da es sich um einen einfachen Test handelt. Überprüfen Sie die Eigenschaftendatei mit den erforderlichen Variablen

spring.application.name=NOME_DA_SUA_APLICACAO

gemini.ai.api.url=https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=
gemini.ai.api.key=SUA_CHAVE_DE_ACESSO

 

LASST ES ES TESTEN?‍?

Wir haben bereits Kommunikation mit GeminiAI, jetzt können wir unsere Anwendung mit Postman testen. Starten Sie dazu Ihre Anwendung in Intellij und führen Sie die Anfrage in Postman aus, wie im Bild unten gezeigt:

Comunicando JAVA com o GeminiAI


SCHLUSSFOLGERUNG
Der Zweck dieses Artikels bestand darin, Java-Programmierern die Verbindung von GeminiAI mit einer Java-Anwendung näher zu bringen und so unendlich viele neue Einsatzmöglichkeiten zu schaffen. Ich hoffe es hat euch gefallen, bis zum nächsten Mal! ?

Das obige ist der detaillierte Inhalt vonJAVA mit GeminiAI kommunizieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn