Java实现OpenAI 模型训练(fine-tune)

news2024/9/20 10:34:53

本文章介绍如何用java实现OpenAI模型训练,仅供参考

提前准备工作

  1. OpenAI KEY,获取方式可自行百度
  2. 需要自备VPN 或 使用国外服务器转发
  3. 需要训练的数据集,文章格式要求为JSONL,格式内容详见下图(尽量不要低于500个问答)
    在这里插入图片描述
    话不多说,上代码

一、导入pom依赖

        <dependency>
            <groupId>cn.gjsm</groupId>
            <artifactId>openai</artifactId>
            <version>0.1.4</version>
        </dependency>

二、初始化OpenAiClient对象

private OpenAiClient initOpenAiClient() {
        return OpenAiClientFactory.createClient("OpenAI KEY");
    }

三、上传数据集并创建模型

数据集可以自己解析成特定格式,务必为JSONL格式

 @SneakyThrows
    public String modelTraining() {


        // 发送文件到ChatGPT 文件进行存储
        OpenAiClient openAiClient = initOpenAiClient();

        // 文件内容格式 {"prompt":"What 'S the main idea of the text ? ->","completion":" The lack of career -- based courses in US high schools END"}
        RequestBody requestBody = FileUploadRequest.builder()
                .file(new File("C:\\Users\\17600\\Desktop\\res2.jsonl"))
                .purpose("fine-tune")  // fine-tune代表训练
                .build()
                .toRequestBody();

        Call<FileObject> fileObjectCall = openAiClient.uploadFile(requestBody);
        Response<FileObject> execute = fileObjectCall.execute();
        if (!execute.isSuccessful()){
            log.info("code={}",execute.code());
            log.info("errBody={}",execute.errorBody());
            return null;
        }

        log.info("body={}",execute.body());

        //FileObject(id=file-nHX070z0XRvokTNi84YHAYzC, object=file, bytes=181, createdAt=1680488594,filename=ajson,purpose=fine-tune)
        String id = execute.body().getId();

        // 创建模型
        FineTunesRequest body = FineTunesRequest.builder()
                .trainingFile(id)
                .model("davinci") // 基于训练模型的名称
                .suffix("zze-en") // 自定义训练好模型的名称
                .build();

        Call<FineTuneResult> fineTuneResultCall = openAiClient.callFineTunes(body);
        Response<FineTuneResult> tuneExecute = fineTuneResultCall.execute();

        if (tuneExecute.isSuccessful()) {
            log.info("body={}",tuneExecute.body());
        }else {
            log.info("code={}",tuneExecute.code());
            log.info("errBody={}",tuneExecute.errorBody());
        }

        return null;
    }

注意:上传文件时可能会失败,请多次尝试

四、查询当前账号下所有已训练好名称

创建模型需要花费几分钟甚至几小时,可多次调用此方法查询训练好的模型,查询接口是免费的,可放心调用

    @SneakyThrows
    private void selectModel() {
        OpenAiClient openAiClient = initOpenAiClient();
        Response<BaseResponse<Model>> modelExecute = openAiClient.listModels().execute();

        if (modelExecute.isSuccessful()) {
            for (Model datum : modelExecute.body().getData()) {
                log.info("id={}",datum.getId());
            }
        }else {
            log.info("code={}",modelExecute.code());
            log.info("errBody={}",modelExecute.errorBody());
        }
    }

五、使用模型聊天

  @SneakyThrows
    private void chat(String model,String msg) {
        OpenAiClient openAiClient = initOpenAiClient();

        CompletionRequest completionRequest = CompletionRequest.builder()
                .model(model) // 指定模型名称(自己训练好的模型名称)
                .stop(Arrays.asList("END")) // 指定停止标识
                .prompt(Arrays.asList(String.format("%s->",msg)))
                .build();

        Response<CompletionResponse> completionExecute = openAiClient.callCompletion(completionRequest).execute();
        if (completionExecute.isSuccessful()) {
            log.info("body={}",completionExecute.body());
        }else {
            log.info("code={}",completionExecute.code());
            log.info("errBody={}",completionExecute.errorBody());
        }
    }

六、注意事项

  • 模型训练好之后可能达不到预想的效果,这和数据集的大小有关,所以数据集尽量保持在500条以上。数量约多,效果约好
  • 选择模型时可选择 Ada、Babbage、Curie和Davinci这四种模型为基础进行训练,每个模型训练的价格也是不同,价格详见下图
  • 在这里插入图片描述

OK,齐活~,文章仅供参考,不对的地方望指出,谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openai

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;人工智能。 目录 1、简介2、如何实现3、api文档 1、简介 OpenAI 提供了一个名为 OpenAI API 的库&#xff0c;用…

npm构建vite项目

基础环境 npm init vitelatest 依次输入项目名称、使用框架、使用语言。 生成的项目 进入目录&#xff0c;安装依赖&#xff0c;启动项目。 cd 0702_demo01npm installnpm run dev

网络安全进阶学习第四课——SSRF服务器请求伪造

文章目录 一、什么是SSRF&#xff1f;二、SSRF成因三、SSRF简析四、PHP存在SSRF的风险函数五、后台源码获取方式六、SSRF危害七、SSRF漏洞挖掘从WEB功能上寻找&#xff0c;从URL关键字中寻找 八、SSRF具体利用ssrf常利用的相关协议PHP伪协议读取文件端口扫描 九、SSRF存在的必要…

架构分层方法指导

在《不过时的经典层架构》里讲了经典的四层架构怎样对易变性做封装。咱们实际项目中&#xff0c;如果没有足够的实践和关键性思考&#xff0c;还是很可能使用名义上科学的分类理论&#xff0c;却在按照功能进行架构分层。今天咱们就通过一些简单的指导来尽量减少这种风险。 四问…

LeetCode 75 —— 70. 爬楼梯

LeetCode 75 —— 70. 爬楼梯 一、题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法…

机器学习笔记 - 基于OpenCV和Vantage-point tree构建图像哈希搜索引擎

一、关于图像哈希 上一篇文章中,了解到了图像哈希是使用算法为图像分配唯一哈希值的过程。在深度学习普及之前,一些搜索引擎使用散列技术来索引图像。 言外之意目前的图像搜索引擎主要都是基于深度学习的技术,不过思路都是一样的,我们这里基于OpenCV提供的图像哈希技术构建…

python实现削苹果小游戏

也不用998只有199源码发你。 支付完发我邮箱发你源代码。

RISC-V处理器的设计与实现(三)—— 上板验证(基于野火征途Pro开发板)

文章目录 RISC-V处理器的设计与实现&#xff08;一&#xff09;—— 基本指令集_Patarw_Li的博客-CSDN博客 RISC-V处理器的设计与实现&#xff08;二&#xff09;—— CPU框架设计_Patarw_Li的博客-CSDN博客 RISC-V处理器的设计与实现&#xff08;三&#xff09;—— 上板验…

Gradle安装与配置(8.2)

一、下载地址 https://gradle.org/releases/ https://downloads.gradle.org/distributions/gradle-8.2-bin.zip 解压后放到合适的位置 二、配置环境变量并测试 D:\ProgramFiles\gradle-8.2\bin gradle -v 三、配置镜像 D:\ProgramFiles\gradle-8.2\init.d init.gradle&…

算法第36天:数组中出现次数超过一半的数字【摩尔投票法】

算法介绍 摩尔投票法&#xff1a;求众数的方法。 就是维护一个集合&#xff0c;然后我们遍历我们的数组&#xff0c;假如现在我们遍历到的数为x&#xff0c;当集合中都是x的话我们就将x放入集合中&#xff0c;如果我们遍历到的数为x&#xff0c;但是集合中有y&#xff0c;那么…

【VulnHub系列】West-Wlid1.1

实验信息 Kali&#xff1a;192.168.10.106 WestWild&#xff1a;192.168.104 实验过程 通过arp-scan查找目标主机&#xff0c;确定目标主机IP192.168.10.104 sudo arp-scan --interface eth0 192.168.10.0/24 探测靶机开放的端口 sudo nmap -sT --min-rate 10000 -p- 192.1…

Redis的持久化机制(1)

RDB&#xff0c;即Redis DataBase的简称。RDB是Redis默认的持久化机制 RDB持久化文件&#xff0c;速度比较快&#xff0c;而且存储的是一个二进制的文件&#xff0c;传输起来很方便 在指定的时间间隔内&#xff0c;将内存中的数据集的快照写入磁盘。默认保存在/usr/local/bin目…

122.【SpringBoot - 再刷 - 基础入门 - 01】

SpringBoot2 核心技术 (一)、SpringBoot核心技术入门1.Spring能做什么?1.1、Spring 的能力1.2、Spring的生态1.3、Spring5重大升级1.3.1、响应式编程1.3.2、内部源码设计 2.为什么用SpringBoot2.1、SpringBoot优点2.2、SpringBoot缺点 3.时代背景3.1、微服务3.2、分布式的困难…

github克隆代码加速

https://www.gitclone.com/gogs/ 只需要在正常的git clone后的URL里&#xff0c;嵌入gitclone.com即可快速clone 举例&#xff1a; #原地址 git clone https://github.com/SpringSource/Spring-framework #新地址 git clone https://gitclone.com/github.com/SpringSource/…

2023年出货量预计增长75%,谁在领跑规模化量产赛道?

2023年将成为一个分水岭&#xff0c;中国智能驾驶市场已经进入了下一个竞争周期&#xff0c;卷&#xff0c;难 成为了智驾赛道新的关键词&#xff0c;对各赛道的供应商来说&#xff0c;未来几年将是比拼规模化与降本。 对各级供应商来说&#xff0c;产品规模化量产&#xff0c…

【二叉树part07】| 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

目录 &#x1f388;LeetCode530.二叉搜索树的最小绝对差 &#x1f388;LeetCode501.二叉搜索树中的众数 &#x1f388;LeetCode236.二叉树的最近公共祖先 &#x1f388;LeetCode530.二叉搜索树的最小绝对差 链接&#xff1a;530.二叉树的最小绝对差 给你一个二叉搜索树的根…

主成分分析系列(二)为什么特征向量是主成分

在主成分分析系列&#xff08;一&#xff09;概览及数据为何要中心化这篇文章中介绍了PCA算法的大概想法及数据为何要中心化&#xff0c;在这篇文章具体推导PCA算法的过程。 1. 首先 PCA 最原始的想法是&#xff1a; 设 V \mathbf{V} V 为 d {d} d 维 线性空间&#xff08;即…

python项目导入导出依赖包

1. 导出所有依赖包 进入项目路径&#xff0c;执行以下命令&#xff1a; pip freeze > requirements.txt然后在当前目录是可以看到生成“requirements.txt”文件&#xff0c;可以打开看看&#xff0c;会发现有很多个包信息&#xff0c;其实这里是把你当前python环境的所有包…

如何编写一个含有抄底信号的副图指标

如果你作为通达信软件源代码的程序维护员&#xff0c;如何编写一个含有抄底提示的副图指标&#xff1f;请看下面的的示例教程。(python语言) python # 导入所需的库 import talib # 计算移动平均线 def moving_average(data, period): ma talib.SMA(data, timeperiodperio…

江苏一学霸,高考居然考了0分,老师们调取了监控后,才发现真相

学校里的学霸&#xff0c;李明&#xff0c;一直以来都是大家羡慕的对象。他聪明伶俐&#xff0c;学习优秀&#xff0c;每次考试都能轻松取得满分。而这次高考&#xff0c;他的成绩却让所有人大跌眼镜——零分&#xff01;这个让人难以置信的结果引发了全校师生的困惑和疑问。 在…