用Python調(diào)用OpenAI API做有趣的事

GPT 迭代過程概要表:

版本 發(fā)布時(shí)間 訓(xùn)練方案 參數(shù)量 是否開放接口
GPT(GPT-1) 2018 年 6 月 無監(jiān)督學(xué)習(xí) 1.17 億
GPT-2 2019 年 2 月 多任務(wù)學(xué)習(xí) 15 億
GPT-3 2020 年 5 月 海量參數(shù) 1,750 億
GPT-3.5 2022 年 12 月 針對(duì)對(duì)話場(chǎng)景優(yōu)化 1,750 億
GPT-4 未發(fā)布 萬億參數(shù) 100萬億

獲取 API KEY

獲得可用 OpenAI 賬號(hào)后, View API keys -> API Keys 頁面,點(diǎn)擊 Create new secret key 獲取一個(gè) openai.api_key 再繼續(xù)后面的內(nèi)容(后續(xù)沒有任何網(wǎng)絡(luò)限制)。

2022-12-07_145220_506763.png

使用 Python 調(diào)用 OpenAI API 的方式非常便捷,只需安裝 OpenAI 提供的 openai 庫就可以調(diào)用其 API 服務(wù):

pip install openai

GPT-3.5 API

2023年3月2日通過 API 形式開放給開發(fā)者調(diào)用,將模型 ID 設(shè)置為 gpt-3.5-turbo 即可調(diào)用:

import openai
openai.api_key = 'xx-xxxxxxxx'
# 通過 `系統(tǒng)(system)` 角色給 `助手(assistant)` 角色賦予一個(gè)人設(shè)
messages = [{'role': 'system', 'content': '你是一個(gè)樂于助人的詩人。'}]
# 在 messages 中加入 `用戶(user)` 角色提出第 1 個(gè)問題
messages.append({'role': 'user', 'content': '作一首詩,要有風(fēng)、要有肉,要有火鍋、要有霧,要有美女、要有驢!'})
# 調(diào)用接口
response = openai.ChatCompletion.create(
    model='gpt-3.5-turbo',
    messages=messages,
)
# 在 messages 中加入 `助手(assistant)` 的回答
messages.append({
    'role': response['choices'][0]['message']['role'],
    'content': response['choices'][0]['message']['content'],
})
# 在 messages 中加入 `用戶(user)` 角色提出第 2 個(gè)問題
messages.append({'role': 'user', 'content': '好詩!好詩!'})
# 調(diào)用接口
response = openai.ChatCompletion.create(
    model='gpt-3.5-turbo',
    messages=messages,
)
# 在 messages 中加入 `助手(assistant)` 的回答
messages.append({
    'role': response['choices'][0]['message']['role'],
    'content': response['choices'][0]['message']['content'],
})
# 查看整個(gè)對(duì)話
print(messages)

整個(gè)對(duì)話 messages 的內(nèi)容:

messages= [
    {
        'role': 'system',
        'content': '你是一個(gè)樂于助人的詩人。'
    },
    {
        'role': 'user',
        'content': '作一首詩,要有風(fēng)、要有肉,要有火鍋、要有霧,要有美女、要有驢!'
    },
    {
        'role': 'assistant',
        'content': '天地間萬物生,\n有風(fēng)與肉相承,\n火鍋酒透心,\n煙霧裹美人。\n\n驢兒踏 古路,\n風(fēng)中草木舞,\n美女倚門檐,\n雖無風(fēng)卻動(dòng)人。\n\n火鍋湯沸騰,\n辣味令人咳,\n但見驢兒笑,\n真好一趟行。\n\n愿伴佳人笑語間,\n品盡濃情佳釀,\n敬心獻(xiàn)驢蹄,\n唯愿歲月長(zhǎng)。'
    },
    {
        'role': 'user',
        'content': '好詩!好詩!'
    },
    {
        'role': 'assistant',
        'content': '謝 謝夸獎(jiǎng),希望能一直為您帶來愉悅!'
    },
]

逐字打印的流式處理

在調(diào)用 OpenAI API 時(shí),同步類型的接口響應(yīng)會(huì)很慢,拋開網(wǎng)絡(luò)因素,主要的延遲和等待是在 AI 模型的響應(yīng)生成過程中。因此,我們可以通過流式請(qǐng)求方式,實(shí)時(shí)獲取 AI 模型的生成響應(yīng),從而提升用戶等待體驗(yàn):

import openai

def gpt_35_api_stream(api_key: str, messages: list):
    """為提供的對(duì)話消息創(chuàng)建新的回答 (流式傳輸)

    Args:
        messages (list): 完整的對(duì)話消息
        api_key (str): OpenAI API 密鑰

    Returns:
        tuple: (results, error_desc)
    """
    try:
        openai.api_key = api_key
        response = openai.ChatCompletion.create(
            model='gpt-3.5-turbo',
            messages=messages,
            stream=True,
        )
        completion = {'role': '', 'content': ''}
        for event in response:
            if event['choices'][0]['finish_reason'] == 'stop':
                print(f'收到的完成數(shù)據(jù): {completion}')
                break
            for delta_k, delta_v in event['choices'][0]['delta'].items():
                print(f'流響應(yīng)數(shù)據(jù): {delta_k} = {delta_v}')
                completion[delta_k] += delta_v
        messages.append(completion)  # 直接在傳入?yún)?shù) messages 中追加消息
        return (True, '')
    except Exception as err:
        return (False, f'OpenAI API 異常: {err}')

if __name__ == '__main__':
    messages = [{'role': 'system','content': '你是一個(gè)樂于助人的詩人。'},{'role': 'user','content': '作一首詩,要有風(fēng)、要有肉,要有火鍋、要有霧,要有美女、要有驢!'},]
    print(gpt_35_api_stream('xx-xxxxxxxx', messages))
    print(messages)

上面的代碼如果順利,控制臺(tái)會(huì)打印的內(nèi)容如下:

流響應(yīng)數(shù)據(jù): role = assistant
流響應(yīng)數(shù)據(jù): content = 風(fēng)
流響應(yīng)數(shù)據(jù): content = 吹
流響應(yīng)數(shù)據(jù): content = 肉
流響應(yīng)數(shù)據(jù): content = 片
流響應(yīng)數(shù)據(jù): content = 香
流響應(yīng)數(shù)據(jù): content = 味
流響應(yīng)數(shù)據(jù): content = 飄
流響應(yīng)數(shù)據(jù): content = ,
流響應(yīng)數(shù)據(jù): content = 火
流響應(yīng)數(shù)據(jù): content = 鍋
流響應(yīng)數(shù)據(jù): content = 燒
流響應(yīng)數(shù)據(jù): content = 著
流響應(yīng)數(shù)據(jù): content = 美
流響應(yīng)數(shù)據(jù): content = 女
流響應(yīng)數(shù)據(jù): content = 腰
流響應(yīng)數(shù)據(jù): content = 。
流響應(yīng)數(shù)據(jù): content = 霧
流響應(yīng)數(shù)據(jù): content = 氣
流響應(yīng)數(shù)據(jù): content = 蒸
流響應(yīng)數(shù)據(jù): content = 騰
流響應(yīng)數(shù)據(jù): content = 驢
流響應(yīng)數(shù)據(jù): content = 哼
流響應(yīng)數(shù)據(jù): content = 叫
流響應(yīng)數(shù)據(jù): content = ,
流響應(yīng)數(shù)據(jù): content = 山
流響應(yīng)數(shù)據(jù): content = 河
流響應(yīng)數(shù)據(jù): content = 秀
流響應(yīng)數(shù)據(jù): content = 麗
流響應(yīng)數(shù)據(jù): content = 如
流響應(yīng)數(shù)據(jù): content = 畫
流響應(yīng)數(shù)據(jù): content = 橋
流響應(yīng)數(shù)據(jù): content = 。
流響應(yīng)數(shù)據(jù): content = 人
流響應(yīng)數(shù)據(jù): content = 生
流響應(yīng)數(shù)據(jù): content = 短
流響應(yīng)數(shù)據(jù): content = 暫
流響應(yīng)數(shù)據(jù): content = 不
流響應(yīng)數(shù)據(jù): content = 易
流響應(yīng)數(shù)據(jù): content = 過
流響應(yīng)數(shù)據(jù): content = ,
流響應(yīng)數(shù)據(jù): content = 幸
流響應(yīng)數(shù)據(jù): content = 有
流響應(yīng)數(shù)據(jù): content = 滋
流響應(yīng)數(shù)據(jù): content = 味
流響應(yīng)數(shù)據(jù): content = 濃
流響應(yīng)數(shù)據(jù): content = 如
流響應(yīng)數(shù)據(jù): content = 漿
流響應(yīng)數(shù)據(jù): content = 。
流響應(yīng)數(shù)據(jù): content = 今
流響應(yīng)數(shù)據(jù): content = 宵
流響應(yīng)數(shù)據(jù): content = 共
流響應(yīng)數(shù)據(jù): content = 享
流響應(yīng)數(shù)據(jù): content = 美
流響應(yīng)數(shù)據(jù): content = 食
流響應(yīng)數(shù)據(jù): content = 節(jié)
流響應(yīng)數(shù)據(jù): content = ,
流響應(yīng)數(shù)據(jù): content = 歡
流響應(yīng)數(shù)據(jù): content = 聚
流響應(yīng)數(shù)據(jù): content = 一
流響應(yīng)數(shù)據(jù): content = 堂
流響應(yīng)數(shù)據(jù): content = 把
流響應(yīng)數(shù)據(jù): content = 酒
流響應(yīng)數(shù)據(jù): content = 澆
流響應(yīng)數(shù)據(jù): content = 。
收到的完成數(shù)據(jù): {'role': 'assistant', 'content': '風(fēng)吹肉片香味飄,\n\n火鍋燒著美女腰。\n\n霧氣蒸騰驢哼叫,\n\n山河秀麗如畫橋。\n\n人生短暫不易過,\n\n幸有滋味濃如漿。\n\n今宵共享美食節(jié),\n\n歡聚一堂把酒澆。'}
(True, '')
[{'role': 'system', 'content': '你是一個(gè)樂于助人的詩人。'}, {'role': 'user', 'content': '作一首詩,要有風(fēng)、要有肉,要有火鍋、要有霧,要有美女、要有驢!'}, {'role': 'assistant', 'content': '風(fēng)吹肉片香味飄,\n\n火鍋燒著美女腰。\n\n霧氣蒸騰驢哼叫,\n\n山河秀麗如畫橋。\n\n人生短暫不易過,\n\n幸有滋味濃如漿。\n\n今宵共享美食節(jié),\n\n歡聚一堂把酒澆。'}]

GPT-3 API

OpenAI 文本編寫

調(diào)用 openai.Completion.create 函數(shù)需要了解幾個(gè)基本參數(shù):

  • model: 要使用的模型的 ID,訪問 OpenAI Docs Models 頁面可以查看全部可用的模型
  • prompt: 生成結(jié)果的提示文本,即你想要得到的內(nèi)容描述
  • max_tokens: 生成結(jié)果時(shí)的最大 tokens 數(shù),不能超過模型的上下文長(zhǎng)度,可以把結(jié)果內(nèi)容復(fù)制到 OpenAI Tokenizer 來了解 tokens 的計(jì)數(shù)方式
  • temperature: 控制結(jié)果的隨機(jī)性,如果希望結(jié)果更有創(chuàng)意可以嘗試 0.9,或者希望有固定結(jié)果可以嘗試 0.0
  • top_p: 一個(gè)可用于代替 temperature 的參數(shù),對(duì)應(yīng)機(jī)器學(xué)習(xí)中 nucleus sampling,如果設(shè)置 0.1 意味著只考慮構(gòu)成前 10% 概率質(zhì)量的 tokens
  • frequency_penalty: [控制字符的重復(fù)度] -2.0 ~ 2.0 之間的數(shù)字,正值會(huì)根據(jù)新 tokens 在文本中的現(xiàn)有頻率對(duì)其進(jìn)行懲罰,從而降低模型逐字重復(fù)同一行的可能性(以恐怖故事為例)
    • = -2.0:當(dāng)早上黎明時(shí),我發(fā)現(xiàn)我家現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在現(xiàn)在(頻率最高字符是 “現(xiàn)”,占比 44.79%)
    • = -1.0:他總是在清晨漫步在一片森林里,每次漫游每次每次游游游游游游游游游游游游游游游游游游游游游游游游游游游游游(頻率最高字符是 “游”,占比 57.69%)
    • = 0.0:當(dāng)一道陰森的風(fēng)吹過早晨的小餐館時(shí),一個(gè)被嚇得發(fā)抖的人突然出現(xiàn)在門口,他的嘴唇上掛滿血跡,害怕的店主決定給他一份早餐,卻發(fā)現(xiàn)他的早餐里滿是血漬。(頻率最高字符是 “的”,占比 8.45%)
    • = 1.0:一個(gè)熟睡的女孩被一陣清冷的風(fēng)吹得不由自主地醒了,她看到了早上還未到來的黑暗,周圍只有像訴說厄運(yùn)般狂風(fēng)呼嘯而過。(頻率最高字符是 “的”,占比 5.45%)
    • = 2.0:每天早上,他都會(huì)在露臺(tái)上坐著吃早餐。柔和的夕陽照耀下,一切看起來安詳寂靜。但是有一天,當(dāng)他準(zhǔn)備端起早食的時(shí)候發(fā)現(xiàn)胡同里清冷的風(fēng)撲進(jìn)了他的意識(shí)中并帶來了不安全感…… (頻率最高字符是 “的”,占比 4.94%)
  • presence_penalty: [控制主題的重復(fù)度] -2.0 ~ 2.0 之間的數(shù)字,正值會(huì)根據(jù)到目前為止是否出現(xiàn)在文本中來懲罰新 tokens,從而增加模型談?wù)撔轮黝}的可能性(以云課堂的廣告文案為例)
    • = -2.0:家長(zhǎng)們,你們是否為家里的孩子學(xué)業(yè)的發(fā)展而發(fā)愁?擔(dān)心他們的學(xué)習(xí)沒有取得有效的提高?那么,你們可以放心,可以嘗試云課堂!它是一個(gè)為從幼兒園到高中的學(xué)生提供的一個(gè)網(wǎng)絡(luò)平臺(tái),可以有效的幫助孩子們提高學(xué)習(xí)效率,提升學(xué)習(xí)成績(jī),幫助他們?cè)趯W(xué)校表現(xiàn)出色!讓孩子們的學(xué)業(yè)發(fā)展更加順利,家長(zhǎng)們趕緊加入吧!(抓住一個(gè)主題使勁談?wù)摚?/li>
    • = -1.0:家長(zhǎng)們,你們是否還在為孩子的學(xué)習(xí)成績(jī)擔(dān)憂?云課堂給你們帶來了一個(gè)絕佳的解決方案!我們?yōu)楹⒆犹峁┝藢I(yè)的學(xué)習(xí)指導(dǎo),從幼兒園到高中,我們都能幫助孩子們?cè)趯W(xué)校取得更好的成績(jī)!讓孩子們?cè)趯W(xué)習(xí)中更輕松,更有成就感!加入我們,讓孩子們擁有更好的學(xué)習(xí)體驗(yàn)!(緊密圍繞一個(gè)主題談?wù)摚?/li>
    • = 0.0:家長(zhǎng)們,你們是否擔(dān)心孩子在學(xué)校表現(xiàn)不佳?云課堂將幫助您的孩子更好地學(xué)習(xí)!云課堂是一個(gè)網(wǎng)絡(luò)平臺(tái),為從幼兒園到高中的學(xué)生提供了全面的學(xué)習(xí)資源,讓他們可以在學(xué)校表現(xiàn)出色!讓您的孩子更加聰明,讓他們?cè)趯W(xué)校取得更好的成績(jī),快來云課堂吧!(相對(duì)圍繞一個(gè)主題談?wù)摚?/li>
    • = 1.0:家長(zhǎng)們,你們的孩子夢(mèng)想成為最優(yōu)秀的學(xué)生嗎?云課堂就是你們的答案!它不僅可以幫助孩子在學(xué)校表現(xiàn)出色,還能夠提供專業(yè)教育資源,助力孩子取得更好的成績(jī)!讓你們的孩子一路走向成功,就用云課堂?。ū苊庖粋€(gè)主題談?wù)摰奶啵?/li>
    • = 2.0:家長(zhǎng)們,您有沒有想過,讓孩子在學(xué)校表現(xiàn)出色可不是一件容易的事?沒關(guān)系!我們?yōu)槟峁┝艘粋€(gè)優(yōu)質(zhì)的網(wǎng)絡(luò)平臺(tái)——云課堂!無論您的孩子是小學(xué)生、初中生還是高中生,都能夠通過云課堂找到最合適的學(xué)習(xí)方法,幫助他們?cè)趯W(xué)校取得優(yōu)異成績(jī)??靵眢w驗(yàn)吧?。ㄗ畲蟪潭缺苊庹?wù)撝貜?fù)的主題)
  • stop: 最大長(zhǎng)度為 4 的字符串列表,一旦生成的 tokens 包含其中的內(nèi)容,將停止生成并返回結(jié)果

故事創(chuàng)作

輸入 prompt 內(nèi)容:

主題: 早餐 風(fēng)
兩句話的恐怖故事:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='主題: 早餐 風(fēng)\n兩句話的恐怖故事:',
  temperature=0.8,
  max_tokens=120,
  top_p=1.0,
  frequency_penalty=0.5,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

傳說當(dāng)晨風(fēng)吹過的時(shí)候,一個(gè)可怕的早餐怪物就會(huì)出現(xiàn),它會(huì)從你的廚房里抓走你的食物,然后吞下它們!

餐廳評(píng)論

輸入 prompt 內(nèi)容:

根據(jù)這些筆記寫一篇餐廳評(píng)論
名稱:大頭魚燒烤
茄子很棒,很吵,服務(wù)態(tài)度好,價(jià)格便宜。
評(píng)論:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='根據(jù)這些筆記寫一篇餐廳評(píng)論\n名稱:大頭魚燒烤\n茄子很棒,很吵,服務(wù)態(tài)度好,價(jià)格便宜。\n評(píng)論:',
  temperature=0.5,
  max_tokens=300,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

我最近去了大頭魚燒烤,真的很棒!服務(wù)態(tài)度很好,價(jià)格也很便宜。我尤其喜歡他們的茄子,味道非常棒!唯一缺點(diǎn)就是有點(diǎn)吵,但是這也是一家燒烤店的常態(tài),所以我還是很滿意的??偠灾?,我強(qiáng)烈推薦大頭魚燒烤!

廣告文案

輸入 prompt 內(nèi)容:

為以下產(chǎn)品寫一則創(chuàng)意廣告,在微博上針對(duì)家長(zhǎng)進(jìn)行宣傳:
產(chǎn)品:云課堂是一個(gè)網(wǎng)絡(luò)平臺(tái),幫助從幼兒園到高中的學(xué)生在學(xué)校表現(xiàn)出色。

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='為以下產(chǎn)品寫一則創(chuàng)意廣告,在微博上針對(duì)家長(zhǎng)進(jìn)行宣傳:\n產(chǎn)品:云課堂是一個(gè)網(wǎng)絡(luò)平臺(tái),幫助從幼兒園到高中的學(xué)生在學(xué)校表現(xiàn)出色。',
  temperature=0.5,
  max_tokens=300,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

家長(zhǎng)們,你們的孩子是否想要在學(xué)校表現(xiàn)出色?云課堂是一個(gè)網(wǎng)絡(luò)平臺(tái),可以幫助從幼兒園到高中的學(xué)生提高學(xué)習(xí)成績(jī),讓他們?cè)趯W(xué)校里取得更好的成績(jī)。云課堂擁有豐富的資源,專業(yè)的老師,精心設(shè)計(jì)的課程,可以幫助孩子們更好地理解學(xué)習(xí)內(nèi)容,提高學(xué)習(xí)效率。讓你的孩子在學(xué)校表現(xiàn)出色,就選擇云課堂吧!

會(huì)議記錄

輸入 prompt 內(nèi)容:

將我的速記轉(zhuǎn)換成會(huì)議紀(jì)要
張三:利潤(rùn)增長(zhǎng)50%
李四:新服務(wù)器上線了
王五:需要更多時(shí)間來修復(fù)BUG
李四:可以幫忙
趙六:Beta測(cè)試即將完成

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='將我的速記轉(zhuǎn)換成會(huì)議紀(jì)要\n張三:利潤(rùn)增長(zhǎng)50%\n李四:新服務(wù)器上線了\n王五:需要更多時(shí)間來修復(fù)BUG\n李四:可以幫忙\n趙六:Beta測(cè)試即將完成',
  temperature=0.0,
  max_tokens=300,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

會(huì)議紀(jì)要:

  1. 張三報(bào)告,公司利潤(rùn)增長(zhǎng)了50%。
  2. 李四報(bào)告,新服務(wù)器已經(jīng)上線。
  3. 王五報(bào)告,需要更多時(shí)間來修復(fù)BUG,李四表示可以提供幫助。
  4. 趙六報(bào)告,Beta測(cè)試即將完成。

面試問題

輸入 prompt 內(nèi)容:

為我面試一位Python后臺(tái)開發(fā)創(chuàng)建一個(gè)包含8個(gè)問題的清單:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='為我面試一位Python后臺(tái)開發(fā)創(chuàng)建一個(gè)包含8個(gè)問題的清單:',
  temperature=0.5,
  max_tokens=500,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

  1. 請(qǐng)描述你對(duì)Python后臺(tái)開發(fā)的了解。
  2. 你有使用過哪些Python Web框架?
  3. 你是如何處理數(shù)據(jù)庫的?
  4. 你曾經(jīng)處理過大型數(shù)據(jù)集嗎?
  5. 你有使用過什么樣的API?
  6. 你有使用過Python中的任務(wù)調(diào)度模塊嗎?
  7. 你有使用過Python中的日志模塊嗎?
  8. 你有使用過Python中的安全和加密模塊嗎?

頭腦風(fēng)暴

輸入 prompt 內(nèi)容:

集思廣益,提出一些結(jié)合AI和自動(dòng)化測(cè)試的想法:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='集思廣益,提出一些結(jié)合AI和自動(dòng)化測(cè)試的想法:',
  temperature=0.6,
  max_tokens=500,
  top_p=1.0,
  frequency_penalty=1.0,
  presence_penalty=1.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

  1. 使用AI技術(shù)來自動(dòng)生成測(cè)試用例:通過分析已有的代碼及其行為,AI 可以自動(dòng)生成覆蓋所有可能情況的測(cè)試用例。
  2. 讓 AI 來優(yōu)化測(cè)試套件:通過將歷史上失敗的樣例和新出現(xiàn)的樣例作為特征數(shù)據(jù)集,AI 可以學(xué)習(xí)并改進(jìn)當(dāng)前的測(cè)試套件。
  3. 使用 AI 來預(yù)測(cè)應(yīng)用性能:通過利用數(shù)據(jù)采集、日志分析和即時(shí)監(jiān)控來幫助開發(fā)人員了解如何優(yōu)化應(yīng)用性能。
  4. 通過 AI 來實(shí)現(xiàn)對(duì)大量信息中快速定高限和低限: 通過場(chǎng)景建立、數(shù)學(xué)優(yōu)化方法、回歸方法等, AI 系統(tǒng)可以幫助開發(fā)者在一定限度之內(nèi)盡快找出合理考慮各要素之間關(guān)系, 精準(zhǔn)地定高低界限。

論文大綱

輸入 prompt 內(nèi)容:

為一篇關(guān)于《浮士德》中魔鬼形象及其矛盾性的文章創(chuàng)建一個(gè)大綱:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='為一篇關(guān)于《浮士德》中魔鬼形象及其矛盾性的文章創(chuàng)建一個(gè)大綱:',
  temperature=0.3,
  max_tokens=600,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

I. 引言
A. 《浮士德》的背景
B. 主要角色
II. 魔鬼形象
A. 魔鬼的外表
B. 魔鬼的性格特征
III. 魔鬼的矛盾性
A. 對(duì)人類的態(tài)度
B. 對(duì)浮士德的態(tài)度
IV. 結(jié)論
A. 魔鬼的矛盾性
B. 對(duì)浮士德的影響

學(xué)習(xí)筆記

輸入 prompt 內(nèi)容:

研究中國古代文論時(shí)我應(yīng)該知道的5個(gè)要點(diǎn)是什么?

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='研究中國古代文論時(shí)我應(yīng)該知道的5個(gè)要點(diǎn)是什么?',
  temperature=0.3,
  max_tokens=800,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

  1. 中國古代文論的發(fā)展史:從《詩經(jīng)》到《文心雕龍》,介紹中國古代文論的發(fā)展歷程。
  2. 中國古代文論的主要思想:介紹中國古代文論的主要思想,如儒家文論、道家文論、墨家文論、法家文論等。
  3. 中國古代文論的主要著作:介紹中國古代文論的主要著作,如《論語》、《孟子》、《莊子》、《詩經(jīng)》、《文心雕龍》等。
  4. 中國古代文論的影響:介紹中國古代文論對(duì)中國文學(xué)、文化、思想等方面的影響。
  5. 中國古代文論的現(xiàn)代研究:介紹中國古代文論的現(xiàn)代研究,如文論史、文論理論、文論方法等。

創(chuàng)建食譜

輸入 prompt 內(nèi)容:

根據(jù)這些食材編寫食譜:黑椒蛋炒飯
食材:黑胡椒 農(nóng)家土雞蛋 隔夜的木桶飯 切小塊的香腸 蔥花
食譜:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='根據(jù)這些食材編寫食譜:黑椒蛋炒飯\n食材:黑胡椒 農(nóng)家土雞蛋 隔夜的木桶飯 切小塊的香腸 蔥花\n食譜:',
  temperature=0.3,
  max_tokens=800,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

黑椒蛋炒飯

材料:

  • 隔夜的木桶飯:2杯
  • 農(nóng)家土雞蛋:2個(gè)
  • 黑胡椒:1茶匙
  • 切小塊的香腸:2湯匙
  • 蔥花:2湯匙

做法:

  1. 先將木桶飯放入鍋中,加入適量清水,用中火煮沸,然后轉(zhuǎn)小火煮5分鐘,直到飯熟透。
  2. 熱鍋,放入適量油,放入香腸炒香,加入黑胡椒粉炒出香味。
  3. 加入雞蛋,翻炒均勻,直到蛋液完全凝固。
  4. 加入煮好的木桶飯,翻炒均勻,直到飯粒完全熟透。
  5. 最后,加入蔥花,翻炒均勻,即可出鍋。

推薦書單

輸入 prompt 內(nèi)容:

推薦10本育兒方面的書:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='推薦10本育兒方面的書:',
  temperature=0.5,
  max_tokens=900,
  top_p=1.0,
  frequency_penalty=0.52,
  presence_penalty=0.5,
  stop=['11.'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

1.《寶寶育兒百科》(李淑霞著)
2.《幸福的孩子——健康快樂成長(zhǎng)的智慧》(布萊恩·斯特勞斯著)
3.《家庭教育的全過程》(徐佳琪、劉星主編)

  1. 《一步一個(gè)腳印——0~6歲兒童教育實(shí)用手冊(cè)》(張小龍、吳保國等主編)
  2. 《讀者文摘·孩子需要什么樣的教養(yǎng)?》 (當(dāng)代讀者出版社出版)
  3. 《如何培養(yǎng)孩子的獨(dú)立性? 》 (郭雙雙著)
  4. 《孩子不是木頭人——中國傳統(tǒng)教養(yǎng)之道與當(dāng)代家庭教育之道對(duì)比分析》 (王勇、張雪琴主編)
  5. 《如何幫助孩子成長(zhǎng)得快樂、健康、有能力? 》 (李重光、李重光、姚明宣主編)
  6. 《小孩大心理——從出生到12歲家庭教育之道》 (郭雙雙著)
  7. 《早期教養(yǎng)——了解并幫助0-3歲年齡段的孩子成長(zhǎng)與發(fā)展。 》 (杜德耀、王海波主編)

產(chǎn)品名稱

輸入 prompt 內(nèi)容:

根據(jù)下面的描述想幾個(gè)產(chǎn)品名稱
產(chǎn)品描述:夜燈
種子詞:適合嬰兒 可以啃咬 續(xù)航整晚 小巧
產(chǎn)品名稱:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='根據(jù)下面的描述想幾個(gè)產(chǎn)品名稱\n產(chǎn)品描述:夜燈\n種子詞:適合嬰兒 可以啃咬 續(xù)航整晚 小巧\n產(chǎn)品名稱:',
  temperature=0.8,
  max_tokens=600,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

  1. 嬰兒星空夜燈
  2. 可啃夜燈
  3. 持久夜燈
  4. 迷你夜燈

總結(jié)內(nèi)容

輸入 prompt 內(nèi)容:

幫我總結(jié)一下:
由于TCP連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來終止這個(gè)方向的連接。收到一個(gè)FIN只意味著這一方向上沒有數(shù)據(jù)流動(dòng),一個(gè)TCP連接在收到一個(gè)FIN后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='幫我總結(jié)一下:\n由于TCP連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來終止這個(gè)方向的連接。收到一個(gè)FIN只意味著這一方向上沒有數(shù)據(jù)流動(dòng),一個(gè)TCP連接在收到一個(gè)FIN后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。',
  temperature=0.7,
  max_tokens=600,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

關(guān)閉TCP連接的4次握手:

  1. 主動(dòng)關(guān)閉方發(fā)送FIN,表示它不再有數(shù)據(jù)需要發(fā)送。
  2. 被動(dòng)關(guān)閉方收到FIN,發(fā)送ACK,表示它已經(jīng)收到FIN,但它仍然有數(shù)據(jù)要發(fā)送。
  3. 被動(dòng)關(guān)閉方發(fā)送FIN,表示它也不再有數(shù)據(jù)需要發(fā)送。
  4. 主動(dòng)關(guān)閉方收到FIN,發(fā)送ACK,表示它已經(jīng)收到FIN,此時(shí)TCP連接被完全關(guān)閉。

電子表格

輸入 prompt 內(nèi)容:

包含世界人口數(shù)和統(tǒng)計(jì)年份的兩列電子表格:\n統(tǒng)計(jì)年份 | 世界人口數(shù)

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='包含世界人口數(shù)和統(tǒng)計(jì)年份的兩列電子表格:\n統(tǒng)計(jì)年份 | 世界人口數(shù)',
  temperature=0.5,
  max_tokens=100,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

------------ | -------------
1950 | 2,556,000,000
1960 | 3,040,000,000
1970 | 3,700,000,000
1980 | 4,440,000,000
1990 | 5,286,000,000
2000 | 6,082,000,000
2010 | 6,908,000,000
2020 | 7,800,000,000

電子郵件

輸入 prompt 內(nèi)容:

幫我給張三寫一封郵件,祝他生日快樂,同時(shí)祝賀他獲得晉升。

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='text-davinci-003',
  prompt='幫我給張三寫一封郵件,祝他生日快樂,同時(shí)祝賀他獲得晉升。',
  temperature=1.0,
  max_tokens=300,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果文本:

親愛的張三:
祝賀你獲得晉升!期待你將更大的潛力發(fā)揮出來,將工作做得更出色,達(dá)到更高的水平!
今天是你的生日,祝你生日快樂!愿你新的一年快樂無比,身體健康,心想事成!
此致
敬禮!

OpenAI 代碼續(xù)寫

Go代碼

輸入 prompt 內(nèi)容:

/*
Go 語言
創(chuàng)建動(dòng)物列表
創(chuàng)建城市列表
生成關(guān)于我在每個(gè)城市的動(dòng)物園看到的故事列表
*/

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
    model='code-davinci-002',
    prompt='/*\nGo 語言\n創(chuàng)建動(dòng)物列表\n創(chuàng)建城市列表\n生成關(guān)于我在每個(gè)城市的動(dòng)物園看到的故事列表\n*/',
    max_tokens=320,
    temperature=0.0,
    top_p=1.0,
    presence_penalty=0.0,
    frequency_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

package main

import (
        "fmt"
        "math/rand"
        "time"
)

func main() {
        rand.Seed(time.Now().UnixNano())
        animals := []string{"cat", "dog", "pig", "cow", "horse", "sheep", "goat", "chicken", "duck", "goose"}
        cities := []string{"beijing", "shanghai", "guangzhou", "shenzhen", "hangzhou", "chengdu", "wuhan", "chongqing", "tianjin", "nanjing"}
        for i := 0; i < 10; i++ {
                fmt.Printf("I saw a %s in %s zoo.\n", animals[rand.Intn(len(animals))], cities[rand.Intn(len(cities))])
        }
}

HTML代碼

輸入 prompt 內(nèi)容:

<!-- 創(chuàng)建一個(gè)標(biāo)題為 "OpenAI AUI" 的表單提交網(wǎng)頁 -->
<!DOCTYPE html>

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
    model='code-davinci-002',
    prompt='<!-- 創(chuàng)建一個(gè)標(biāo)題為 "OpenAI AUI" 的表單提交網(wǎng)頁 -->\n<!DOCTYPE html>',
    max_tokens=200,
    temperature=0.0,
    top_p=1.0,
    presence_penalty=0.0,
    frequency_penalty=0.0,
    stop=['```'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

<html>
<head>
    <meta charset="utf-8">
    <title>OpenAI AUI</title>
</head>
<body>
<form action="http://127.0.0.1:8000/api/v1/openai/aui" method="post">
    <input type="text" name="text" value="你好">
    <input type="submit" value="提交">
</form>
</body>
</html>

JavaScript函數(shù)

輸入 prompt 內(nèi)容:

// JavaScript 語言
// 創(chuàng)建一個(gè)從1數(shù)到100并返回和值的函數(shù)

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
    model='code-davinci-002',
    prompt='// JavaScript 語言\n// 創(chuàng)建一個(gè)從1數(shù)到100并返回和值的函數(shù)',
    max_tokens=200,
    temperature=0.0,
    top_p=1.0,
    presence_penalty=0.0,
    frequency_penalty=0.0,
    stop=['//'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

function sum(n) {
    var sum = 0;
    for (var i = 1; i <= n; i++) {
        sum += i;
    }
    return sum;
}

Python代碼

輸入 prompt 內(nèi)容:

1、創(chuàng)建一個(gè)包含10個(gè)名字列表
2、創(chuàng)建一個(gè)包含10個(gè)姓氏列表
3、將它們隨機(jī)組合成5個(gè)完整的姓名
4、將這些姓名打印出來

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='code-davinci-002',
  prompt='1、創(chuàng)建一個(gè)包含10個(gè)名字列表\n2、創(chuàng)建一個(gè)包含10個(gè)姓氏列表\n3、將它們隨機(jī)組合成5個(gè)完整的姓名\n4、將這些姓名打印出來',
  temperature=0.0,
  max_tokens=1000,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

import random

first_name = ['趙', '錢', '孫', '李', '周', '吳', '鄭', '王', '馮', '陳']
last_name = ['小明', '小紅', '小剛', '小霞', '小強(qiáng)', '小芳', '小燕', '小麗', '小蘭', '小紅']

for i in range(5):
    print(random.choice(first_name) + random.choice(last_name))

Python函數(shù)

輸入 prompt 內(nèi)容:

def getUserBalance(id):
    """
    在MongoDB的tp_backend數(shù)據(jù)庫的UserData表中查找用戶并返回他們的賬戶余額
    """

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
    model='code-davinci-002',
    prompt='def getUserBalance(id):\n    """\n    在MongoDB的tp_backend數(shù)據(jù)庫的UserData表中查找用戶并返回他們的賬戶余額\n    """',
    max_tokens=200,
    temperature=0.0,
    top_p=1.0,
    presence_penalty=0.0,
    frequency_penalty=0.0,
    stop=['def'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

    client = MongoClient(host=MONGO_HOST, port=MONGO_PORT)
    db = client.tp_backend
    userData = db.UserData
    user = userData.find_one({"id": id})
    if user is None:
        return None
    else:
        return user["balance"]

Python測(cè)試代碼

輸入 prompt 內(nèi)容:

# Python 3
def sum_numbers(a, b):
    return a + b
# Unit test
def

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
    model='code-davinci-002',
    prompt='# Python 3\ndef sum_numbers(a, b):\n  return a + b\n# Unit test\ndef',
    max_tokens=320,
    temperature=0.0,
    top_p=1.0,
    presence_penalty=0.0,
    frequency_penalty=0.0,
    stop=['#'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

 test_sum_numbers():
  assert sum_numbers(1, 2) == 3
  assert sum_numbers(1, -1) == 0
  assert sum_numbers(0, 0) == 0
  assert sum_numbers(10, -10) == 0
  assert sum_numbers(10, 10) == 20
  assert sum_numbers(0, 10) == 10
  assert sum_numbers(10, 0) == 10
  assert sum_numbers(10, 10) == 20
  assert sum_numbers(10, -10) == 0
  assert sum_numbers(0, 0) == 0
  assert sum_numbers(1, -1) == 0
  assert sum_numbers(1, 2) == 3
  print("YOUR CODE IS CORRECT!")

Python修復(fù)BUG

輸入 prompt 內(nèi)容:

import Random
a = random.randint(1,12)
b = random.randint(1,12)
for i in range(10):
    question = "What is "+a+" x "+b+"? "
    answer = input(question)
    if answer = a*b
        print (Well done!)
    else:
        print("No.")
# 修復(fù)上面函數(shù)中的錯(cuò)誤

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='code-davinci-002',
  prompt='import Random\na = random.randint(1,12)\nb = random.randint(1,12)\nfor i in range(10):\n    question = "What is "+a+" x "+b+"? "\n    answer = input(question)\n    if answer = a*b\n        print (Well done!)\n    else:\n        print("No.")\n# 修復(fù)上面函數(shù)中的錯(cuò)誤',
  temperature=0.0,
  max_tokens=200,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=['#', '\"\"\"'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

import random
a = random.randint(1,12)
b = random.randint(1,12)
for i in range(10):
    question = "What is "+str(a)+" x "+str(b)+"? "
    answer = input(question)
    if int(answer) == a*b:
        print ("Well done!")
    else:
        print("No.")

Python注釋文檔

輸入 prompt 內(nèi)容:

# Python 3.8
def fib(num):
    if num <= 1:
        return num
    else:
        return fib(num-1) + fib(num-2)
print(fib(10))
# 上述函數(shù)的文檔
"""

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='code-davinci-002',
  prompt='# Python 3.8\ndef fib(num):\n    if num <= 1:\n        return num\n    else:\n        return fib(num-1) + fib(num-2)\nprint(fib(10))\n# 上述函數(shù)的文檔\n"""',
  temperature=0.0,
  max_tokens=200,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=['#', '\"\"\"'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

fib(num)
    返回斐波那契數(shù)列的第num項(xiàng)

Python代碼重構(gòu)

輸入 prompt 內(nèi)容:

    if num ==1:
        print(a)
    else:
        print(a)
        print(b)
        # 序列從0,1開始
        print(fib(10))
        for i in range(2,num):
            c = a+b
            a = b
            b = c
            print(c)
fibonacci(10)
# 將代碼重構(gòu)成遞歸函數(shù)

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='code-davinci-002',
  prompt='    if num ==1:\n        print(a)\n    else:\n        print(a)\n        print(b)\n        # 序列從0,1開始\n        print(fib(10))\n        for i in range(2,num):\n            c = a+b\n            a = b\n            b = c\n            print(c)\nfibonacci(10)\n# 將代碼重構(gòu)成遞歸函數(shù)',
  temperature=0.0,
  max_tokens=200,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=['#', '\"\"\"'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

def fib(num):
    if num ==1:
        return 1
    elif num ==2:
        return 1
    else:
        return fib(num-1)+fib(num-2)
print(fib(10))

Python翻譯成Java

輸入 prompt 內(nèi)容:

### 把這個(gè)函數(shù)從Python翻譯成Java
## Python
    def predict_proba(X: Iterable[str]):
        return np.array([predict_one_probas(tweet) for tweet in X])
## Java

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='code-davinci-002',
  prompt='### 把這個(gè)函數(shù)從Python翻譯成Java\n## Python\n    def predict_proba(X: Iterable[str]):\n        return np.array([predict_one_probas(tweet) for tweet in X])\n## Java',
  temperature=0.0,
  max_tokens=200,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=['##'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

    public static double[][] predictProba(String[] X) {
        double[][] result = new double[X.length][];
        for (int i = 0; i < X.length; i++) {
            result[i] = predictOneProbas(X[i]);
        }
        return result;
    }

R代碼

輸入 prompt 內(nèi)容:

# R 語言
# 計(jì)算points數(shù)組中的point的平均值

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
    model='code-davinci-002',
    prompt='# R 語言\n# 計(jì)算points數(shù)組中的point的平均值',
    max_tokens=200,
    temperature=0.0,
    top_p=1.0,
    presence_penalty=0.0,
    frequency_penalty=0.0,
    stop=['#'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

points <- c(1,2,3,4,5,6,7,8,9,10)
mean(points)

MySQL查詢

輸入 prompt 內(nèi)容:

# 表customers,列=[CustomerId,F(xiàn)irstName,LastName,Company,Address,City,State,Country,PostalCode,Phone,F(xiàn)ax,Email,SupportRepId]
# 創(chuàng)建MySQL查詢:所有住在深圳的姓張的用戶
query = 

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='code-davinci-002',
  prompt='# 表customers,列=[CustomerId,F(xiàn)irstName,LastName,Company,Address,City,State,Country,PostalCode,Phone,F(xiàn)ax,Email,SupportRepId]\n# 創(chuàng)建MySQL查詢:所有住在深圳的姓張的用戶\nquery = ',
  temperature=0.0,
  max_tokens=200,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=['#', ';'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

SELECT * FROM customers WHERE City = 'Shenzhen' AND LastName = 'Zhang'

PostgreSQL查詢

輸入 prompt 內(nèi)容:

# Postgres SQL 表及其屬性:
Employee(id, name, department_id)
Department(id, name, address)
Salary_Payments(id, employee_id, amount, date)
# 查詢列出過去3個(gè)月內(nèi)雇用超過10名員工的部門名稱:

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
  model='code-davinci-002',
  prompt='# Postgres SQL 表及其屬性:\nEmployee(id, name, department_id)\nDepartment(id, name, address)\nSalary_Payments(id, employee_id, amount, date)\n# 查詢列出過去3個(gè)月內(nèi)雇用超過10名員工的部門名稱:',
  temperature=0.0,
  max_tokens=400,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=['#', ';'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

SELECT d.name
FROM Department d
WHERE (SELECT COUNT(*) FROM Employee e WHERE e.department_id = d.id) > 10
AND d.id IN (SELECT DISTINCT department_id FROM Employee e WHERE e.id IN (SELECT employee_id FROM Salary_Payments WHERE date > NOW() - INTERVAL '3 months'))

TypeScript函數(shù)

輸入 prompt 內(nèi)容:

// TypeScript 語言
// 創(chuàng)建一個(gè)從1數(shù)到100并返回和值的函數(shù)

完整的調(diào)用代碼:

import openai
openai.api_key = 'xx-xxxxxxxx'

response = openai.Completion.create(
    model='code-davinci-002',
    prompt='// TypeScript 語言\n// 創(chuàng)建一個(gè)從1數(shù)到100并返回和值的函數(shù)',
    max_tokens=200,
    temperature=0.0,
    top_p=1.0,
    presence_penalty=0.0,
    frequency_penalty=0.0,
    stop=['//'],
)

print(response.choices[0].text)

響應(yīng)的結(jié)果代碼:

function sum(n: number): number {
  let result = 0;
  for (let i = 1; i <= n; i++) {
    result += i;
  }
  return result;
}

內(nèi)容完整性

由于目前API的max_tokens參數(shù)最大只有4000,長(zhǎng)篇內(nèi)容必然會(huì)遇到response的text內(nèi)容不完整,既被截?cái)嗟默F(xiàn)象,這時(shí)可以通過內(nèi)容累加請(qǐng)求的方式來獲取完整的內(nèi)容。

第1次請(qǐng)求:

從管理者角度思考,如員工如提出離職,分別針對(duì)不同類別的員工制訂溝通方案(以下幾種情況下分別怎么溝通):
* 核心員工;
* 較高能力并且承擔(dān)重要崗位;
* 較高能力并且承擔(dān)普通崗位;
* 普通員工;

第1次響應(yīng):

**核心員工:** 與核心員工溝通時(shí),管理者要尊重他的決定并感謝他在公司的貢獻(xiàn)。同時(shí)也應(yīng)當(dāng)了解此人未來想要達(dá)到的目標(biāo),如果能夠幫助他實(shí)現(xiàn)這些愿望,那么將會(huì)非常有助于保留該員工。
**較高能力并且承擔(dān)重要崗位:** 對(duì)于這類員工而言,作為一名管理者應(yīng)詳細(xì)地咨詢他對(duì)公司未來發(fā)展方向的看法、是否存在不暢之處或者是對(duì)待升遷的態(tài)度上存在問題。因?yàn)檫@些都會(huì)影響到公司的整體氛圍。如果能夠引出原因并嘗試去彌補(bǔ)或者采取行動(dòng)來避免此人意圖離開,將大大減少流失風(fēng)險(xiǎn)。
**較高能力并且承擔(dān)普通崗位: ** 對(duì)此人而言,作為一名管理者應(yīng)明白他想要得到在公司中施展所長(zhǎng)、不斷前行、甚成就意愿的念頭。然而隨之考察是否存在內(nèi)部升遷障士, 成就感匱乏, 物質(zhì)獎(jiǎng)勵(lì)不當(dāng). 針對(duì)特定問題, 把語氣勻漿, 請(qǐng)教出具體方法. 例如: “ 我看到你一直都很花心思去工作, 有時(shí)感到物質(zhì)獎(jiǎng)勵(lì)不當(dāng)?” 聽審問卷子上顯然沒有立即回應(yīng)的時(shí)候, 采用“三思考”(Think-Feel-Do) 等方法帶出內(nèi)容. 
**普通員工: ** 對(duì)于此人而言, 積極開始前端/中端/后端三步法; 積極性+側(cè)重想法+衡量衫褲 . 針對(duì)性閃光 , 追閃光 , 追根 ; 側(cè)重想法 : “ 聽說你將要

第2次請(qǐng)求時(shí),將第1次的請(qǐng)求和響應(yīng)合起來作為整體請(qǐng)求:

從管理者角度思考,如員工如提出離職,分別針對(duì)不同類別的員工制訂溝通方案(以下幾種情況下分別怎么溝通):
* 核心員工;
* 較高能力并且承擔(dān)重要崗位;
* 較高能力并且承擔(dān)普通崗位;
* 普通員工;
**核心員工:** 與核心員工溝通時(shí),管理者要尊重他的決定并感謝他在公司的貢獻(xiàn)。同時(shí)也應(yīng)當(dāng)了解此人未來想要達(dá)到的目標(biāo),如果能夠幫助他實(shí)現(xiàn)這些愿望,那么將會(huì)非常有助于保留該員工。
**較高能力并且承擔(dān)重要崗位:** 對(duì)于這類員工而言,作為一名管理者應(yīng)詳細(xì)地咨詢他對(duì)公司未來發(fā)展方向的看法、是否存在不暢之處或者是對(duì)待升遷的態(tài)度上存在問題。因?yàn)檫@些都會(huì)影響到公司的整體氛圍。如果能夠引出原因并嘗試去彌補(bǔ)或者采取行動(dòng)來避免此人意圖離開,將大大減少流失風(fēng)險(xiǎn)。
**較高能力并且承擔(dān)普通崗位: ** 對(duì)此人而言,作為一名管理者應(yīng)明白他想要得到在公司中施展所長(zhǎng)、不斷前行、甚成就意愿的念頭。然而隨之考察是否存在內(nèi)部升遷障士, 成就感匱乏, 物質(zhì)獎(jiǎng)勵(lì)不當(dāng). 針對(duì)特定問題, 把語氣勻漿, 請(qǐng)教出具體方法. 例如: “ 我看到你一直都很花心思去工作, 有時(shí)感到物質(zhì)獎(jiǎng)勵(lì)不當(dāng)?” 聽審問卷子上顯然沒有立即回應(yīng)的時(shí)候, 采用“三思考”(Think-Feel-Do) 等方法帶出內(nèi)容. 
**普通員工: ** 對(duì)于此人而言, 積極開始前端/中端/后端三步法; 積極性+側(cè)重想法+衡量衫褲 . 針對(duì)性閃光 , 追閃光 , 追根 ; 側(cè)重想法 : “ 聽說你將要

第2次響應(yīng):

離開,你可以簡(jiǎn)單說一下原因嗎?”  做出衡量 : 把溝通過程中的信息整理起來 , 進(jìn)行總結(jié)和分析, 看看是否能夠找到問題根源 , 從而對(duì)其加以引導(dǎo)。

最后,將第2次的請(qǐng)求和響應(yīng)合起來,就是一個(gè)完整的文本內(nèi)容:

從管理者角度思考,如員工如提出離職,分別針對(duì)不同類別的員工制訂溝通方案(以下幾種情況下分別怎么溝通):
* 核心員工;
* 較高能力并且承擔(dān)重要崗位;
* 較高能力并且承擔(dān)普通崗位;
* 普通員工;
**核心員工:** 與核心員工溝通時(shí),管理者要尊重他的決定并感謝他在公司的貢獻(xiàn)。同時(shí)也應(yīng)當(dāng)了解此人未來想要達(dá)到的目標(biāo),如果能夠幫助他實(shí)現(xiàn)這些愿望,那么將會(huì)非常有助于保留該員工。
**較高能力并且承擔(dān)重要崗位:** 對(duì)于這類員工而言,作為一名管理者應(yīng)詳細(xì)地咨詢他對(duì)公司未來發(fā)展方向的看法、是否存在不暢之處或者是對(duì)待升遷的態(tài)度上存在問題。因?yàn)檫@些都會(huì)影響到公司的整體氛圍。如果能夠引出原因并嘗試去彌補(bǔ)或者采取行動(dòng)來避免此人意圖離開,將大大減少流失風(fēng)險(xiǎn)。
**較高能力并且承擔(dān)普通崗位: ** 對(duì)此人而言,作為一名管理者應(yīng)明白他想要得到在公司中施展所長(zhǎng)、不斷前行、甚成就意愿的念頭。然而隨之考察是否存在內(nèi)部升遷障士, 成就感匱乏, 物質(zhì)獎(jiǎng)勵(lì)不當(dāng). 針對(duì)特定問題, 把語氣勻漿, 請(qǐng)教出具體方法. 例如: “ 我看到你一直都很花心思去工作, 有時(shí)感到物質(zhì)獎(jiǎng)勵(lì)不當(dāng)?” 聽審問卷子上顯然沒有立即回應(yīng)的時(shí)候, 采用“三思考”(Think-Feel-Do) 等方法帶出內(nèi)容. 
**普通員工: ** 對(duì)于此人而言, 積極開始前端/中端/后端三步法; 積極性+側(cè)重想法+衡量衫褲 . 針對(duì)性閃光 , 追閃光 , 追根 ; 側(cè)重想法 : “ 聽說你將要離開,你可以簡(jiǎn)單說一下原因嗎?”  做出衡量 : 把溝通過程中的信息整理起來 , 進(jìn)行總結(jié)和分析, 看看是否能夠找到問題根源 , 從而對(duì)其加以引導(dǎo)。

如果具體到用戶使用場(chǎng)景,可以參考下面某AI寫作平臺(tái)的界面。

某AI寫作平臺(tái)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容