chatgpt_初尝试

背景

Chatgpt火了这么久,最近没什么事,所以尝试体验下。
本篇文章 包含:apikey申请过程,腾讯云函数实现代理,python代码接口调试,Java接口调试

apikey申请

VPN环境(我是mac)

推荐使用:PigchaVPN,免费使用的300M可以完成注册工作
(长期使用下来稳定,客服响应很及时,可换邮箱重复注册体验,付费首推。)
服务稳定,速度快,客服支持响应速度快,支持各种手机端和操作系统,兼容性很不错,MAC上体验很不错,换邮箱可以重复注册获得体验时长。
来自香港,全球互联,8k视频随你看,注册及送永久流量,地址:http://run.weaksharedptr.com/register?share_id=c1969443-a92c-4b3f-ba35-52b31cfaab80
缺点:试用账号只有300m流量,观看视频使用的慎用。

海外电话验证

SMS海外虚拟电话短信平台
我租的是美国的号码(花了12块),可能会openai平台识别为虚拟号码,刷新几次号码就可以成功。

具体申请过程

可以参照这个如何获取Openai api key

腾讯云函数实现openai的代理

前提是需要有腾讯云轻量级服务器:这个比较便宜(相比阿里云)。
具体操作可以参照(注意执行超时时间不要设置900,太久了,60就可以):
通过云函数搭建内地可用的OpenAI代理(腾讯云centos系统)

python实现ai接口调用

运行结果

在这里插入图片描述

代码块

import openai
import requests
import json


openai.api_key = "sk-****" #你自己的api_key
messages = [
    {"role": "system", "content": "You are a helpful and kind AI Assistant."}
]

def send_request(prompt):
    url = '腾讯云函数获取的地址("要去掉/release/")/v1/chat/completions'
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {openai.api_key}'
    }
    data = {
    	'model':'gpt-3.5-turbo',
        'messages': prompt,
        'max_tokens': 4000,
        'temperature': 0

    }
    response = requests.post(url, headers=headers, json=data ,stream=True) 
    return response.json()

while True:
    answer = ''
    prompt = input("我: ")
    messages.append(
        {'role': 'user', 'content': prompt})
    response = send_request(messages)
    print('ChatGPT: ', response['choices'][0]['message']['content'])  

java集成openAI接口

参照这个博主的项目

pom依赖

<dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.14.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

        <dependency>
            <groupId>io.github.asleepyfish</groupId>
            <artifactId>chatgpt</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.theokanning.openai-gpt3-java</groupId>
            <artifactId>client</artifactId>
            <version>0.8.1</version>
</dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5 -->
        <dependency>
            <groupId>org.apache.httpcomponents.client5</groupId>
            <artifactId>httpclient5</artifactId>
            <version>5.2.1</version>
        </dependency>

代码结构

在这里插入图片描述

ChatGptMessage.java

package com.example.chat.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatGptMessage {
    String role;
    String content;
}

ChatGptRequestParameter.java

package com.example.chat.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatGptRequestParameter {

    String model = "gpt-3.5-turbo";

    List<ChatGptMessage> messages = new ArrayList<>();

    public void addMessages(ChatGptMessage message) {
        this.messages.add(message);
    }

}

ChatGptResponseParameter.java

package com.example.chat.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatGptResponseParameter {

    String id;
    String object;
    String created;
    String model;
    Usage usage;
    List<Choices> choices;
    String system_fingerprint;
}

Choices.java

package com.example.chat.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Choices {

    ChatGptMessage message;
    String finish_reason;
    Integer index;
}

CustomChatGpt.java

package com.example.chat.pojo;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.HttpHeaders;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.io.entity.StringEntity;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit;

public class CustomChatGpt {
    /**
     * 自己chatGpt的ApiKey
     */
    private String apiKey;
    /**
     * 使用的模型
     */
    private String model = "gpt-3.5-turbo-0301";
    /**
     * 对应的请求接口
     */
    private String url = "腾讯云函数代理的数据/v1/chat/completions";
    /**
     * 默认编码
     */
    private Charset charset = StandardCharsets.UTF_8;
    /**
     * 创建一个ChatGptRequestParameter,用于携带请求参数
     */
    private ChatGptRequestParameter chatGptRequestParameter = new ChatGptRequestParameter();
    /**
     * 相应超时时间,毫秒
     */
    private int responseTimeout = 5000;

    public void setResponseTimeout(int responseTimeout) {
        this.responseTimeout = responseTimeout;
    }

    public CustomChatGpt(String apiKey) {
        this.apiKey = apiKey;
    }

    public String getAnswer(CloseableHttpClient client, String question) {

        // 创建一个HttpPost
        HttpPost httpPost = new HttpPost(url);
        // 创建一个ObjectMapper,用于解析和创建json
        ObjectMapper objectMapper = new ObjectMapper();

        // 设置请求参数
        chatGptRequestParameter.addMessages(new ChatGptMessage("user", question));
        HttpEntity httpEntity = null;
        try {
            // 对象转换为json字符串
            httpEntity = new StringEntity(objectMapper.writeValueAsString(chatGptRequestParameter), charset);
        } catch (JsonProcessingException e) {
            System.out.println(question + "->json转换异常");
            return null;
        }
        httpPost.setEntity(httpEntity);


        // 设置请求头
        httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
        // 设置登录凭证
        httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + apiKey);

        // 用于设置超时时间
        RequestConfig config = RequestConfig
                .custom()
                .setResponseTimeout(responseTimeout, TimeUnit.MILLISECONDS)
                .build();
        httpPost.setConfig(config);
        try {
            // 提交请求
            return client.execute(httpPost, response -> {
                // 得到返回的内容
                String resStr = EntityUtils.toString(response.getEntity(), charset);
                // 转换为对象
                ChatGptResponseParameter responseParameter = objectMapper.readValue(resStr, ChatGptResponseParameter.class);

                String ans = "";
                // 遍历所有的Choices(一般都只有一个)
                for (Choices choice : responseParameter.getChoices()) {
                    ChatGptMessage message = choice.getMessage();
                    chatGptRequestParameter.addMessages(new ChatGptMessage(message.getRole(), message.getContent()));
                    String s = message.getContent().replaceAll("\n+", "\n");
                    ans += s;
                }
                // 返回信息
                return ans;
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 发生异常,移除刚刚添加的ChatGptMessage
        chatGptRequestParameter.getMessages().remove(chatGptRequestParameter.getMessages().size()-1);
        return "您当前的网络无法访问";
    }

}

Usage.java

package com.example.chat.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Usage {

    String prompt_tokens;
    String completion_tokens;
    String total_tokens;
}

Demo2.java 画图的模型

package com.example.chat;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.chat.utils.Constants;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        String json = "{" +
                "\"prompt\":\"可爱猫咪\"," +
                "\"n\":1," +
                "\"size\":\"1024x1024\"," +
                "\"response_format\":\"url\"" +
                "}";
        show(json);
    }


    public static String show(String json) throws IOException {
        Document document =
                (Document) Jsoup.connect("腾讯云函数代理/v1/images/generations")
                        .header("Authorization", "Bearer " + Constants.OPENAPI_TOKEN)
                        .header("Content-Type", "application/json")
                        .ignoreHttpErrors(true)
                        .ignoreContentType(true)
                        .requestBody(json)
                        .post();
        JSONObject jsonObject = JSON.parseObject(document.body().text());
        JSONArray data = jsonObject.getJSONArray("data");
        for (int i = 0; i < data.size(); i++) {
            JSONObject temp = data.getJSONObject(i);
            System.out.println(temp.get("url"));
        }
        return "";
    }
}

Demo1.java 对话模型

package com.example.chat;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.chat.pojo.CustomChatGpt;
import com.example.chat.utils.Constants;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Demo1 {

        public static void main(String[] args) throws IOException {
            CloseableHttpClient httpClient = HttpClients.createDefault();
            String apiKey = Constants.OPENAPI_TOKEN;
            CustomChatGpt customChatGpt = new CustomChatGpt(apiKey);
            // 根据自己的网络设置吧
            customChatGpt.setResponseTimeout(20000);
            while (true) {
                System.out.print("\n请输入问题(q退出):");
                String question = new Scanner(System.in).nextLine();
                if ("q".equals(question)) break;
                long start = System.currentTimeMillis();
                String answer = customChatGpt.getAnswer(httpClient, question);
                long end = System.currentTimeMillis();
                System.out.println("该回答花费时间为:" + (end - start) / 1000.0 + "秒");
                System.out.println(answer);
            }
            httpClient.close();
        }


}

Constants.java

package com.example.chat.utils; 
public class Constants {
    //大家填写自己的key,这个是瞎写的,没有用的
    public static final String OPENAPI_TOKEN = "sk-**";
}

对话模型的运行截图

在这里插入图片描述

csdn其他可以部署的项目

我尝试了潘多拉,现在用不了,其他的没有找到合适的项目,但是有两个直接可用的项目:
1.可以直接通过apikey访问
2.这个博主的项目比较牛逼(我技术不太行哈哈哈)

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值