OpenAI 官網(wǎng):https://platform.openai.com/
ChatGPT官網(wǎng):https://chat.openai.com/chat
接碼平臺(tái):https://sms-activate.org/cn/history#
PLUS
目前只有PLUS會(huì)員可以使用GPT4,級(jí)一些其他插件涮瞻。
通過(guò)美區(qū)IOS賬號(hào)進(jìn)入APP Store可以下載chatGPT app搀暑,充值更方便。
token
每次請(qǐng)求輸入的提示詞和返回的答案光戈,都占用token哪痰。
請(qǐng)求返回值會(huì)展示本次請(qǐng)求token使用情況,也可以通過(guò)工具本地計(jì)算
每1000token進(jìn)行一次計(jì)費(fèi)久妆,1000個(gè)token大約為700個(gè)英文單詞或450(davinci)~900(GPT3.5/4)個(gè)漢字晌杰。
不同模型的token計(jì)費(fèi)方式不同,且每個(gè)模型有自己的單次請(qǐng)求token上限(通常為4096)筷弦。當(dāng)遇到需要更多文本的場(chǎng)景時(shí)肋演,可考慮使用 fine-tuning 。
models
可以通過(guò)模型對(duì)比工具對(duì)比不同模型的結(jié)果
模型的訓(xùn)練數(shù)據(jù)大多截止于2021年烂琴,其不具備較新的知識(shí)爹殊。而GPT3則截止于更早的2020年8月。
- 文本補(bǔ)全模型
- text-davinci-003 也可以作為單次對(duì)話的模型使用
- code-davinci-002 專用于code
- 對(duì)話模型
- davinci(gpt-3) 已經(jīng)被gpt-3.5取代無(wú)法直接調(diào)用奸绷,專用于fine-tune精調(diào)
- gpt-3.5-turbo 和text-davinci-003能力相似而費(fèi)用只需十分之一
- gpt-4 相比于3.5梗夸,在回答復(fù)雜邏輯類問(wèn)題時(shí)更有優(yōu)勢(shì),且支持8,192或32,768 tokens
- DALL·E 繪畫(huà)模型
支持提示詞生成圖号醉、通過(guò)蒙版或提示詞修改圖反症、隨機(jī)生成原圖變種 - Whisper 語(yǔ)音識(shí)別
- Embeddings 嵌入 text-embedding-ada-002
- Moderation 違規(guī)檢測(cè)
接口調(diào)用
- 直接通過(guò)接口調(diào)用
fetch('https://api.openai.com/v1/completions', {
method: 'post',
body: JSON.stringify(
{
"model": "text-davinci-003",
"prompt": "用java寫(xiě)一個(gè)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-開(kāi)頭的自己的key'
}
}).then(function (data) {
})
- 通過(guò)openai庫(kù)調(diào)用
import os
import openai
openai.organization = "org-開(kāi)頭的自己的key"
openai.api_key = "sk-開(kāi)頭的自己的key" # https://platform.openai.com/account/api-keys
# 根據(jù)科學(xué)上網(wǎng)模式不同 可能需要添加
# 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為一個(gè)如下格式的列表:
[
{"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, # 默認(rèn)1 0~2 值越大返回結(jié)果越隨機(jī)
# top_p=0.1, # 默認(rèn)1 0~1 只考慮前百分之多少符合度的內(nèi)容 不要和temperature同時(shí)使用
n=1, # 默認(rèn)1 返回的choices的數(shù)量辛块。增大后會(huì)增加token消耗
# stream=False, # 以數(shù)據(jù)流返回
# stop=["Jack","Mike","\n"], # 默認(rèn)null 觸發(fā)停止的字符串或字符串?dāng)?shù)組,返回值不會(huì)包含停止詞
# max_tokens=500, # 默認(rèn)inf 最大返回值token數(shù)铅碍。該值+輸入token數(shù)润绵,不得超過(guò)模型最大token數(shù)
# logit_bias=None, # 配置對(duì)不同token的偏好
presence_penalty=0, # -2~2 越大越不容易基于之前的聊天內(nèi)容
frequency_penalty=0, # -2~2 越大越不容易容易輸出重復(fù)內(nèi)容
)
"""
{
"id":"chatcmpl-abc123",
"object":"chat.completion",
"created":1677858242,
"model":"gpt-3.5-turbo-0301",
"usage":{ # 消耗token數(shù)量
"prompt_tokens":13,
"completion_tokens":7,
"total_tokens":20
},
"choices":[
{
"message":{
"role":"assistant",
"content":"\n\nThis is a test!"
},
"finish_reason":"stop", # stop 輸出完成或觸發(fā)停止詞 length token長(zhǎng)度限制(如max_tokens) content_filter GPT官方內(nèi)容審核 null 未結(jié)束
"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 微調(diào)
選擇一個(gè)基礎(chǔ)模型(僅支持davinci、curie胞谈、ada尘盼、baddage),輸入大量 prompt 和 completion 對(duì)照的數(shù)組(至少幾百條呜魄,越多越好)悔叽,單次付費(fèi)進(jìn)行訓(xùn)練。通常用于調(diào)整「句式」爵嗅、「情感」等特征娇澎,而非更多知識(shí)。
完成后在云端會(huì)有一個(gè)新模型睹晒,之后付費(fèi)調(diào)用該新模型即可(比普通模型調(diào)用貴)趟庄。
使用場(chǎng)景
- 想讓 GPT-3 按照某種格式來(lái)識(shí)別 Prompt ,或按照某種格式來(lái)回答
例如代替completion類任務(wù)中的舉例 - 想讓 GPT-3 按照某種語(yǔ)氣伪很、性格來(lái)回答
- 想讓 completion 具有某種傾向
- 滿足特殊場(chǎng)景需要戚啥,如對(duì)抗訓(xùn)練
數(shù)據(jù)準(zhǔn)備
- prompt 以固定分隔符結(jié)尾,并保證數(shù)據(jù)本身不含該固定分隔符锉试。
- completion 以
\n
開(kāi)頭猫十,以固定分隔符結(jié)尾,并保證數(shù)據(jù)本身不含該固定分隔符呆盖。
可以使用官方工具自動(dòng)格式化數(shù)據(jù)拖云,并生成JSONL文件:
openai tools fine_tunes.prepare_data -f xxx.csv
embedding 嵌入
通過(guò)text-embedding-ada-002
(對(duì)應(yīng)tokenizer為cl100k_base
)將語(yǔ)料片段轉(zhuǎn)為向量。當(dāng)實(shí)際提問(wèn)時(shí)应又,將問(wèn)題也轉(zhuǎn)為向量宙项,將語(yǔ)料按余弦向量近似程度排序,依次加入 prompt 作為上下文株扛。
使用場(chǎng)景
獲取文本特征向量尤筐,用于以下場(chǎng)景:
- 搜索(根據(jù)查詢字符串的相關(guān)性對(duì)結(jié)果進(jìn)行排名)
- 聚類(根據(jù)相似性對(duì)文本字符串進(jìn)行分組)
- 推薦(具有相關(guān)文本字符串的項(xiàng)目被推薦)
- 異常檢測(cè)(識(shí)別關(guān)聯(lián)度小的異常值)
- 多樣性測(cè)量(對(duì)相似性分布進(jìn)行分析)
- 分類(文本串按其最相似的標(biāo)簽進(jìn)行分類)
請(qǐng)求次數(shù)、token數(shù)限制
詳見(jiàn)官方文檔洞就,可以提交申請(qǐng)表申請(qǐng)?zhí)岣呦揞~盆繁,但不一定會(huì)通過(guò)。
建議通過(guò)以下方式自行規(guī)避:
Chat Plugins
構(gòu)建一個(gè)插件奖磁,讓ChatGPT智能地調(diào)用外部API
并未開(kāi)放改基,需加入wait list
一些配套工具
AIPRM:Chrome插件,用于生成提示詞