java利用jdk11和jdk15新特性零依赖优雅调用GPT-4o,附golang实现对比

这里是小奏 ,觉得文章不错可以关注公众号小奏技术

背景

目前GPT-4o官方不支持所有使用,所以各路大神各显神通

因为只对前端进行了限制。

所以有利用油猴脚本跳过

有自己调用接口的

如果要使用java来实现http调用,放在低版本的jdk

实现起来非常麻烦,主要有几点

  1. 原生的http api非常难用
  2. 不支持模板字符串,所以写json会非常丑陋

所以java 0依赖如何优雅实现GPT-4o的调用呢?还是挺有意思的

jdk17来帮忙

本次我们使用的jdk版本是17

主要用到的特性有两个

  1. jdk15的模板字符串
  2. jdk11的新HttpClient api

话不多说,直接看代码

整体来看是不是很简单优雅

源码如下

java 复制代码
public static void main(String[] args) {
        String openaiApiKey = System.getenv("OPENAI_API_KEY");
        //文本块 需要jdk15+才支持
        String body = """
            {
                "model": "gpt-4o",
                "messages":
                 [
                    {
                        "role": "user",
                        "content": "hello world"
                    }
                ]
            }
            """;
        // jdk11+
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.openai.com/v1/chat/completions"))
            .header("Content-Type", "application/json")
            .header("Authorization", "Bearer " + openaiApiKey)
            .POST(HttpRequest.BodyPublishers.ofString(body)).build();

        HttpClient client = HttpClient.newHttpClient();
        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println(response.body());
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

goalng实现

golang 复制代码
func main() {
	openaiApiKey := os.Getenv("OPENAI_API_KEY")

	body := map[string]interface{}{
		"model": "gpt-4o",
		"messages": []map[string]string{
			{
				"role":    "user",
				"content": "hello world",
			},
		},
	}

	bodyBytes, err := json.Marshal(body)
	if err != nil {
		fmt.Println("Error marshalling JSON:", err)
		return
	}

	req, err := http.NewRequest("POST", "https://api.openai.com/v1/chat/completions", bytes.NewBuffer(bodyBytes))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Authorization", "Bearer "+openaiApiKey)

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer func(Body io.ReadCloser) {
		err := Body.Close()
		if err != nil {

		}
	}(resp.Body)

	respBody, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error reading response body:", err)
		return
	}
	fmt.Println(string(respBody))
}

这么看java也挺优雅的哈哈,golang我比较菜,不确定是否有更优雅的实现哈哈

相关推荐
我会冲击波16 分钟前
vibe coding 一个多月,我把 Claude Code + Pi 做成了桌面 IDE,还给它移植了 VS Code 的编辑体验
前端·javascript·后端
我是谁的程序员20 分钟前
Windows / Linux / Mac 上不用 Xcode 把 IPA 上传到 App Store,upload 命令详解
后端·ios
凌涘30 分钟前
JWT 登录鉴权 Demo 拆解
后端
JimmtButler36 分钟前
从 Java 到 JS:我终于把闭包想明白了
javascript·后端
掘金者阿豪1 小时前
Codex 怎么突然变慢了?一个需求跑几十分钟,我才发现它的工作方式已经变了
前端·后端
Zadig1 小时前
Zadig 全面支持 CRD,至此所有 K8s 资源类型均可一键发布!
后端·devops
得物技术1 小时前
EP-Harness:从个人 AI Coding 到团队级 Agent 工作流|得物技术
后端·程序员·架构
用户125758524361 小时前
对象存储 URL 为什么别到处拼:后台附件预览要验这一层
后端·go·ai编程
步行cgn2 小时前
MyBatis 一对多关联映射详解
java·后端
阿弱2 小时前
pi 扩展机制:加载、执行与能力
后端·llm·agent