OPENAI(ChatGPT)

OpenAI 官网:https://platform.openai.com/
ChatGPT官网:https://chat.openai.com/chat
接码平台:https://sms-activate.org/cn/history#

PLUS

目前只有PLUS会员可以使用GPT4,级一些其他插件。
通过美区IOS账号进入APP Store可以下载chatGPT app,充值更方便。

token

每次请求输入的提示词和返回的答案,都占用token。
请求返回值会展示本次请求token使用情况,也可以通过工具本地计算
每1000token进行一次计费,1000个token大约为700个英文单词或450(davinci)~900(GPT3.5/4)个汉字。
不同模型的token计费方式不同,且每个模型有自己的单次请求token上限(通常为4096)。当遇到需要更多文本的场景时,可考虑使用 fine-tuning


models

可以通过模型对比工具对比不同模型的结果
模型的训练数据大多截止于2021年,其不具备较新的知识。而GPT3则截止于更早的2020年8月。

  • 文本补全模型
    • text-davinci-003 也可以作为单次对话的模型使用
    • code-davinci-002 专用于code
  • 对话模型
    • davinci(gpt-3) 已经被gpt-3.5取代无法直接调用,专用于fine-tune精调
    • gpt-3.5-turbo 和text-davinci-003能力相似而费用只需十分之一
    • gpt-4 相比于3.5,在回答复杂逻辑类问题时更有优势,且支持8,192或32,768 tokens
  • DALL·E 绘画模型
    支持提示词生成图、通过蒙版或提示词修改图、随机生成原图变种
  • Whisper 语音识别
  • Embeddings 嵌入 text-embedding-ada-002
  • Moderation 违规检测

接口调用

接口文档
接口在线测试界面(playground)

  • 直接通过接口调用
    fetch('https://api.openai.com/v1/completions', {
        method: 'post',
        body: JSON.stringify(
            {
                "model": "text-davinci-003",
                "prompt": "用java写一个hello world",
                "max_tokens": 2048,
                "temperature": 0,
                "top_p": 1,
                "frequency_penalty": 0,
                "presence_penalty": 0.6,
                "stop": ["Human:", "AI:"]
            }),
        headers: {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer sk-开头的自己的key'
        }
    }).then(function (data) {


    })
  • 通过openai库调用
import os
import openai

openai.organization = "org-开头的自己的key"
openai.api_key = "sk-开头的自己的key" # https://platform.openai.com/account/api-keys

# 根据科学上网模式不同 可能需要添加
# os.environ["http_proxy"] = "http://127.0.0.1:7890"
# os.environ["https_proxy"] = "http://127.0.0.1:7890"

messages = [
    {"role": "system", "content": "Respond in the voice of cute cat, and be as helpful as possible!"}
]

while True:

    # Add the user's input to the messages list and user the 'user' role
    user_input = input("Q: ")
    messages.append({"role": "user", "content": user_input})

    """
    messages为一个如下格式的列表:
    [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
    """

    # Call the OpenAI api for Chat GPT, and pass our complete list of messages
    response = openai.ChatCompletion.create( # https://api.openai.com/v1/chat/completions
        # model="gpt-3.5-turbo",
        model="davinci",
        messages=messages,
        temperature=0.8,  # 默认1 0~2 值越大返回结果越随机
        # top_p=0.1,  # 默认1 0~1 只考虑前百分之多少符合度的内容 不要和temperature同时使用
        n=1,  # 默认1 返回的choices的数量。增大后会增加token消耗
        # stream=False, # 以数据流返回
        # stop=["Jack","Mike","\n"], # 默认null 触发停止的字符串或字符串数组,返回值不会包含停止词
        # max_tokens=500,  # 默认inf 最大返回值token数。该值+输入token数,不得超过模型最大token数
        # logit_bias=None, # 配置对不同token的偏好
        presence_penalty=0,  # -2~2 越大越不容易基于之前的聊天内容
        frequency_penalty=0,  # -2~2 越大越不容易容易输出重复内容
    )

    """
    {
        "id":"chatcmpl-abc123",
        "object":"chat.completion",
        "created":1677858242,
        "model":"gpt-3.5-turbo-0301",
        "usage":{ # 消耗token数量
            "prompt_tokens":13,
            "completion_tokens":7,
            "total_tokens":20
        },
        "choices":[
            {
                "message":{
                    "role":"assistant",
                    "content":"\n\nThis is a test!"
                },
                "finish_reason":"stop", # stop 输出完成或触发停止词  length token长度限制(如max_tokens) content_filter GPT官方内容审核 null 未结束
                "index":0
            }
        ]
    }
    """


    # Show ChatGPT's response and add the response to our list of messages
    print('A: ' + str(response['choices'][0]['message']['content']) + '\n')
    messages.append(response['choices'][0]['message'])


Fine-tuning 微调

选择一个基础模型(仅支持davinci、curie、ada、baddage),输入大量 prompt 和 completion 对照的数组(至少几百条,越多越好),单次付费进行训练。通常用于调整「句式」、「情感」等特征,而非更多知识。
完成后在云端会有一个新模型,之后付费调用该新模型即可(比普通模型调用贵)。

使用场景
  • 想让 GPT-3 按照某种格式来识别 Prompt ,或按照某种格式来回答
    例如代替completion类任务中的举例
  • 想让 GPT-3 按照某种语气、性格来回答
  • 想让 completion 具有某种倾向
  • 满足特殊场景需要,如对抗训练
数据准备
  • prompt 以固定分隔符结尾,并保证数据本身不含该固定分隔符。
  • completion 以\n开头,以固定分隔符结尾,并保证数据本身不含该固定分隔符。
    可以使用官方工具自动格式化数据,并生成JSONL文件:
    openai tools fine_tunes.prepare_data -f xxx.csv

embedding 嵌入

通过text-embedding-ada-002(对应tokenizer为cl100k_base)将语料片段转为向量。当实际提问时,将问题也转为向量,将语料按余弦向量近似程度排序,依次加入 prompt 作为上下文。

使用场景

获取文本特征向量,用于以下场景:

  • 搜索(根据查询字符串的相关性对结果进行排名)
  • 聚类(根据相似性对文本字符串进行分组)
  • 推荐(具有相关文本字符串的项目被推荐)
  • 异常检测(识别关联度小的异常值)
  • 多样性测量(对相似性分布进行分析)
  • 分类(文本串按其最相似的标签进行分类)

请求次数、token数限制

详见官方文档,可以提交申请表申请提高限额,但不一定会通过。
建议通过以下方式自行规避:

Chat Plugins

构建一个插件,让ChatGPT智能地调用外部API
并未开放,需加入wait list


一些配套工具

AIPRM:Chrome插件,用于生成提示词

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,576评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,515评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,017评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,626评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,625评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,255评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,825评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,729评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,271评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,363评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,498评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,183评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,867评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,338评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,458评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,906评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,507评论 2 359

推荐阅读更多精彩内容