Rumah > Java > javaTutorial > teks badan

Bagaimanakah Java SpringBoot mengintegrasikan ChatGPT untuk melaksanakan sembang AI?

王林
Lepaskan: 2023-05-23 13:46:13
ke hadapan
1954 orang telah melayarinya

一、依赖引入

这个基本上没啥依赖引入哦,我这里就是一个干干净净的SpringBoot项目,引入Hutool的工具包就行了。看看我的整体依赖吧,直接上pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.0.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.xiaotian</groupId>
	<artifactId>superapi</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>superapi</name>
	<description>superapi</description>
	<properties>
		<java.version>17</java.version>
		<skipTests>true</skipTests>
	</properties>
	<dependencies>

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

		<!-- Fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.83</version>
		</dependency>

		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.7.21</version>
		</dependency>


		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>io.projectreactor</groupId>
			<artifactId>reactor-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>
Salin selepas log masuk

二、接口开发

1.项目结构

Bagaimanakah Java SpringBoot mengintegrasikan ChatGPT untuk melaksanakan sembang AI?

2.配置文件

ChatGPT:
  connect-timeout: 60000      # HTTP请求连接超时时间
  read-timeout: 60000         # HTTP请求读取超时时间
  variables:                  # 自定义变量:
    apiKey: youApiKey     # 你的 OpenAI 的 API KEY
    model: text-davinci-003   # ChartGPT 的模型
    maxTokens: 50             # 最大 Token 数
    temperature: 0.5          # 该值越大每次返回的结果越随机,即相似度越小
Salin selepas log masuk

3.接口实现代码

GPTRequest

package com.xiaotian.superapi.chatgpt.entity;

import lombok.Data;

@Data
public class GPTRequest {
    /**
     * 问题
     */
    private String askStr;

    /**
     * 回答
     */
    private String replyStr;
}
Salin selepas log masuk

GPTResponse

package com.xiaotian.superapi.chatgpt.entity;

import lombok.Data;

import java.util.List;

/**
 * GPT-3 返回对象
 * @author zhengwen
 */
@Data
public class GPTResponse {

    private String id;

    private String object;

    private String created;

    private String model;

    private List<GPTChoice> choices;
}
Salin selepas log masuk

GPTChoice

package com.xiaotian.superapi.chatgpt.entity;

import lombok.Data;

/**
 * GPT-3 返回choice对象
 * @author zhengwen
 */
@Data
public class GPTChoice {

    private String text;

    private Integer index;
}
Salin selepas log masuk

ChatGPTController

package com.xiaotian.superapi.chatgpt.controller;

import cn.hutool.json.JSONUtil;
import com.xiaotian.superapi.chatgpt.entity.GPTRequest;
import com.xiaotian.superapi.chatgpt.service.ChartGPTService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * GPT-3接口
 *
 * @author zhengwen
 */

@Slf4j
@RestController
@RequestMapping("/chatGpt")
public class ChatGPTController {

    @Resource
    private ChartGPTService chartGPTService;

    /**
     * openAI GPT-3
     *
     * @param gptRequest 条件对象
     * @return 出参对象
     */
    @PostMapping("/askAi")
    public String askAi(@RequestBody GPTRequest gptRequest) {

        String replyStr = chartGPTService.send(gptRequest.getAskStr());

        gptRequest.setReplyStr(replyStr);

        return JSONUtil.toJsonStr(gptRequest);
    }
}
Salin selepas log masuk

ChartGPTService

package com.xiaotian.superapi.chatgpt.service;

public interface ChartGPTService {

    String send(String prompt);
}
Salin selepas log masuk

ChartGPTServiceImpl

package com.xiaotian.superapi.chatgpt.service.impl;

import cn.hutool.http.Header;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.xiaotian.superapi.chatgpt.entity.GPTResponse;
import com.xiaotian.superapi.chatgpt.service.ChartGPTService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Slf4j
@Service
public class ChartGPTServiceImpl implements ChartGPTService {

    @Value("${ChatGPT.variables.apiKey}")
    private String apiKey;

    @Value("${ChatGPT.variables.maxTokens}")
    private String maxTokens;

    @Value("${ChatGPT.variables.model}")
    private String model;

    @Value("${ChatGPT.variables.temperature}")
    private String temperature;
    @Override
    public String send(String prompt) {
        JSONObject bodyJson = new JSONObject();
        bodyJson.put("prompt", prompt);
        bodyJson.put("max_tokens", Integer.parseInt(maxTokens));
        bodyJson.put("temperature", Double.parseDouble(temperature));
        Map<String,Object> headMap = new HashMap<>();
        headMap.put("Authorization", "Bearer " + apiKey);

        HttpResponse httpResponse = HttpUtil.createPost("https://api.openai.com/v1/engines/" + model + "/completions")
                .header(Header.AUTHORIZATION, "Bearer " + apiKey)
                .body(JSONUtil.toJsonStr(bodyJson))
                .execute();
        String resStr = httpResponse.body();
        log.info("resStr: {}", resStr);

        GPTResponse gptResponse = JSONUtil.toBean(resStr, GPTResponse.class);

        return gptResponse.getChoices().get(0).getText().replaceAll("\\n","");
    }
}
Salin selepas log masuk

三、使用

接口信息

url:/chatGpt/askAi
type:post
入参:
{
“askStr”:“今天你吃饭了吗”
}

我的几个示例

下面是几个问的示例:

Bagaimanakah Java SpringBoot mengintegrasikan ChatGPT untuk melaksanakan sembang AI?

Bagaimanakah Java SpringBoot mengintegrasikan ChatGPT untuk melaksanakan sembang AI?

Bagaimanakah Java SpringBoot mengintegrasikan ChatGPT untuk melaksanakan sembang AI?

Bagaimanakah Java SpringBoot mengintegrasikan ChatGPT untuk melaksanakan sembang AI?

Atas ialah kandungan terperinci Bagaimanakah Java SpringBoot mengintegrasikan ChatGPT untuk melaksanakan sembang AI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!