简而言之
训练属于你的猫娘(雾)
ChatGPT API是啥?
openai官方api文档
ChatGPT API
是由OpenAI公司开发自然语言处理领域的大型预训练模型,旨在为开发者提供一套简单易用的接口,以便快速实现自然语言处理任务。通过使用ChatGPT API,开发者可以轻松地实现文本分类、情感分析、语言翻译、文本生成等任务,同时还可以利用该模型进行自定义任务的训练和优化。
界面
我们先看左列从上往下介绍最主要的三大功能
1.playground :调试界面,在这里可以对自己训练的模型进行调试,调节temperature,Top_P之类的
2.assistant :助手(更加类似于知识库),Assistants API 目前支持三种类型的工具:代码解释器、文件搜索和函数调用。在这里可以上传自己的代码或者论文文档,喂给gpt后,可以向gpt发起提问,如:这份代码是怎么写的,逻辑是什么?这份论文的纲要是什么,主要讲了什么?
3.Fine-tuning :微调,允许开发者和企业定制,微调训练得到一个自己的专属大模型,以满足特定应用场景的需求。在界面中上传规定格式的jsonl文件,就能让数据进入gpt中进行微调
微调
接下来我们来看看怎么利用gpt-3.5-turbo
来训练猫娘(大雾)
申请API KEY
事前需绑定visa银行卡
准备数据集
gpt官方给出两种主要格式
json
{"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-002
和davinci-002
,可以遵循提示完成对格式,如下所示。
json
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
我们以第一种
方式做模板,先来对内容解释下:
1.内容 (content):在这里写入每个role的训练语句
2.系统 (System):定义了模型(在这里叫"Marv")的特点。像官方的content定义"Marv是一个真实的,说话带有讽刺色彩的聊天机器人"
3.用户 (User):这是用户向模型提出的问题。像官方的content为"法国的首都是哪里?"
4.助手(Assistant):这是我们希望模型对用户问题的回答。像官方的content为"巴黎,但好像大家还不知道似的。"
那么我们来举一反三下
json
{"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官网训练
在这里你还可以调整BatchSize,epochs
方法二:代码训练
1.下载openai官方的sdk
python
pip install openai
2.上传.jsonl训练集(model处也可以切换已经训练好的模型id进行加训)
python
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.查看训练过程
当然也可以代码里面操作
python
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页面
方法二:代码调用
python
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微调模型便应运而生,为了满足更多客制化的企业要求,不过这么好用的东西,收费多少呢?