Rumah >Java >javaTutorial >Berkomunikasi JAVA dengan GeminiAI

Berkomunikasi JAVA dengan GeminiAI

Linda Hamilton
Linda Hamiltonasal
2025-01-09 06:45:41365semak imbas

Jika anda memprogram dalam Java dan tidak pernah 'bermain' dengan GeminiAI, artikel ini akan menjadi panduan pengenalan yang hebat, di sini saya akan membentangkan dengan cara yang sangat mudah cara menghantar permintaan kepada Gemini dan mengembalikan JSON, seperti API Rehat. ?

Apa yang saya gunakan? ?

  • Jawa 17
  • Komuniti Perisikan 2024.1.1
  • Kad Posmen
  • Kunci akses GeminiAI

JOM MULA?

Mulakan projek mudah menggunakan pelancar musim bunga, dan masukkan kebergantungan berikut dalam POM anda

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

Kebergantungan ini akan membolehkan penggunaan Lombok, RestTemplate dan ObjectMapper.

Lombok: untuk mengelakkan kod berulang (boilerplates terkenal) dan untuk meningkatkan kebolehbacaan kod kami

RestTemplate: untuk membuat permintaan http kepada API GeminiAI

ObjectMapper: untuk menukar Gemini api return kepada JSON

 

KONFIGURASI TEMPLAT SEMULA

Mari konfigurasikan RestTemplate dalam projek Java kami, untuk ini kami mencipta kelas dengan anotasi @Configuration dan Bean untuk mentakrifkannya:

@Configuration
public class RestTemplateConfig {

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

 

MENCIPTA PERKHIDMATAN

Mari buat kelas perkhidmatan untuk berkomunikasi dengan GeminiAI, kelas ini akan bertanggungjawab untuk semua komunikasi dan pemprosesan respons Gemini, dan sepatutnya kelihatan seperti ini:

@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";
    }
}

Perhatikan bahawa dalam kelas ini kita menggunakan GeminiRequest dan GeminiResponse POJO, di bawah ialah kod untuk menciptanya

Permintaan Gemini

@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;
    }
}

 

MENCIPTA PENGAWAL

Sekarang mari buat pengawal untuk mendengar permintaan Rehat dan memprosesnya melalui Perkhidmatan kami

@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;
    }
}

Pengawal kami juga mempunyai POJO, lihat kod mereka di bawah

TalkRequest

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

TalkResponse

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

 

KONFIGURASI PEMBOLEH UBAH DALAM HARTA

Anda perlu memaklumkan titik akhir akses GeminiAI dan juga kunci akses anda. Saya menyimpan maklumat ini dalam fail sifat, kerana kita bercakap tentang ujian mudah. Semak fail sifat dengan pembolehubah yang diperlukan

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

 

JOM UJI??‍?

Kami sudah mempunyai komunikasi dengan GeminiAI, kini kami boleh menguji aplikasi kami menggunakan posmen, untuk melakukan ini mulakan permohonan anda dalam Intellij dan laksanakan permintaan dalam posmen seperti yang ditunjukkan dalam imej di bawah:

Comunicando JAVA com o GeminiAI


KESIMPULAN
Tujuan artikel ini adalah untuk memperkenalkan pengaturcara Java untuk menyambungkan GeminiAI dengan aplikasi Java, mewujudkan kemungkinan baharu yang tidak terhingga untuk digunakan. Saya harap anda menikmatinya, jumpa lagi pada masa akan datang! ?

Atas ialah kandungan terperinci Berkomunikasi JAVA dengan GeminiAI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn