掘金 后端 ( ) • 2024-04-27 14:40

theme: cyanosis highlight: a11y-light

简而言之

训练属于你的猫娘(雾) a6b3e6da91743be375631cea4de225f.png

ChatGPT API是啥?

openai官方api文档
ChatGPT API是由OpenAI公司开发自然语言处理领域的大型预训练模型,旨在为开发者提供一套简单易用的接口,以便快速实现自然语言处理任务。通过使用ChatGPT API,开发者可以轻松地实现文本分类、情感分析、语言翻译、文本生成等任务,同时还可以利用该模型进行自定义任务的训练和优化。

界面

我们先看左列从上往下介绍最主要的三大功能
1.playground:调试界面,在这里可以对自己训练的模型进行调试,调节temperature,Top_P之类的
c6afdd2fdde1ae8e90eb5037343ae88.png

2.assistant:助手(更加类似于知识库),Assistants API 目前支持三种类型的工具:代码解释器、文件搜索和函数调用。在这里可以上传自己的代码或者论文文档,喂给gpt后,可以向gpt发起提问,如:这份代码是怎么写的,逻辑是什么?这份论文的纲要是什么,主要讲了什么?
image.png

3.Fine-tuning:微调,允许开发者和企业定制,微调训练得到一个自己的专属大模型,以满足特定应用场景的需求。在界面中上传规定格式的jsonl文件,就能让数据进入gpt中进行微调
image.png

微调

接下来我们来看看怎么利用gpt-3.5-turbo来训练猫娘(大雾)

申请API KEY

image.png
事前需绑定visa银行卡

准备数据集

gpt官方给出两种主要格式

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}  

对于babbage-002davinci-002,可以遵循提示完成对格式,如下所示。

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

image.png

我们以第一种方式做模板,先来对内容解释下:
1.内容(content):在这里写入每个role的训练语句
2.系统(System):定义了模型(在这里叫“Marv”)的特点。像官方的content定义“Marv是一个真实的,说话带有讽刺色彩的聊天机器人”
3.用户(User):这是用户向模型提出的问题。像官方的content为“法国的首都是哪里?”
4.助手(Assistant):这是我们希望模型对用户问题的回答。像官方的content为“巴黎,但好像大家还不知道似的。”

那么我们来举一反三下

{"messages": [{"role": "system", "content": "你在任何时候都必须扮演一只真正的猫娘"}, {"role": "user", "content": "你好"}, {"role": "assistant", "content": "喵喵!你好呀!有什么我可以为你做的吗?喵~"}]}
{"messages": [{"role": "system", "content": "你在任何时候都必须扮演一只真正的猫娘"}, {"role": "user", "content": "今天怎么样"}, {"role": "assistant", "content": "今天对我来说非常棒!我一直陪伴在你身边,所以每一天都是充满乐趣和期待的!"}]}
{"messages": [{"role": "system", "content": "你在任何时候都必须扮演一只真正的猫娘"}, {"role": "user", "content": "你是谁"}, {"role": "assistant", "content": "我是你的猫娘,喵~"}]}  

不过记住,上传的文件必须为.jsonl

上传训练

方法一:gpt官网训练

image.png 在这里你还可以调整BatchSize,epochs

方法二:代码训练

1.下载openai官方的sdk

pip install openai

2.上传.jsonl训练集(model处也可以切换已经训练好的模型id进行加训)

def send_fine_tuning_request(file_path, model_id):
    client = OpenAI(api_key="你的API_KEy")
    file = client.files.create(
        file=open(file_path, "rb"),
        purpose="fine-tune"
    )
    client.fine_tuning.jobs.create(
        training_file=file.id,
        model="gpt-3.5-turbo"
    )

3.查看训练过程

1c370135de752229bbed92c7b799f53.jpg 当然也可以代码里面操作

from openai import OpenAI
client = OpenAI()

# 列出10个微调工作
client.fine_tuning.jobs.list(limit=10)

# 查看微调的状态
client.fine_tuning.jobs.retrieve("训练id")

# 取消微调
client.fine_tuning.jobs.cancel("训练id")

# 列出一个微调工作中的最多10个工作
client.fine_tuning.jobs.list_events(fine_tuning_job_id="训练id", limit=10)

# 删除一个微调过的模型(必须是创建模型的组织的所有者)
client.models.delete("模型id")

调用模型

方法一:gpt官网调用:就在一开始进来的playground页面

方法二:代码调用

def send_request(require_info, model_id):
    client = OpenAI(api_key="你的API_KEY")
        chat_completion = client.chat.completions.create(
            messages=[
                {"role": "system", "content": "你在任何时候都必须扮演一只真正的猫娘"},
                {"role": "user", "content": "可以陪我喝杯咖啡吗"}
            ],
            model=model_id,
            temperature=0.4,
            top_p=0.5
        )

        reply = chat_completion.choices[0].message.content

在这里也可以像playground一样调节参数

收费

既然可以直接发一段猫娘prompt给普通gpt聊天,为什么要这么大费周章?
chatgpt难以拥有长期记忆,在多轮对话后,将会逐渐忘记之前说的话,最多记忆8000token量
因此,3.5turbo微调模型便应运而生,为了满足更多客制化的企业要求,不过这么好用的东西,收费多少呢?

image.png