try ChatGPT

OpenAI_Logo.svg

ChatGPT 橫空出世,幾乎所有周遭認識的朋友都拿來試試能做哪些事情,官方也開放了 API 可以透過程式去串接,現在立刻動手來試試看吧。首先要申請一個 API key,然後安裝 Python 函數庫,指令如下:

pip install openai

除了官方直接支援的 Python 與 Node.js 函數庫外,還有社群提供的其他語言函數庫,這些可以在官網文件中找到。

然後複製貼上官網提供的這一段程式碼,申請的 API_KEY 可以放到環境變數 OPENAI_API_KEY 中,或是將程式碼中的 os.getenv(“OPENAI_API_KEY”) 這部分整個換掉。

import os
import openai

openai.organization = "org-EtCChBJWpIfm76AaP6fe7gPJ"
openai.api_key = os.getenv("OPENAI_API_KEY")

接下來就可以問 ChatGPT 一些問題了。

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": "給一份智慧城市的計畫書"}
  ]
)

print(completion.choices[0].message["content"])

或是讓他來幫你產生圖片,這段程式碼最後會開啟瀏覽器顯示產生的圖片。另外,目前支援的解析度有 1024×1024、512×512 與 256×256 這三種,並且一次可以產生 1-10 張圖片,下面的範例為 2 張。

import webbrowser

completion = openai.Image.create(
  prompt="一群外星人",
  n=2,
  size="1024x1024"
)

for p in completion["data"]:
    webbrowser.open(p["url"])

一來一往的聊天

ChatGPT 是可以根據前文來產生回應,所以想要跟 ChatGPT 不斷的聊天,只要將前面的問題以及回應都儲存成 chat format 即可,也就是一個字典陣列,官網範例如下。

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  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?"}
    ]
)

陣列中的第一筆資料由 system 這個角色開頭,代表聊天開始,內容隨意。角色 user 代表使用者提出的問題,而角色 assistant 則是 ChatGPT 的回應,所以我們只要把每次的問題與回應都記錄起來後送出,這樣 ChatGPT 就可以根據前文來回應新的問題。因為 ChatGPT 並沒有在 server 端記錄整個對話過程,所以這個工作就落到了 client 端頭上,變成我們要自己記錄,否則 ChatGPT 哪會知道之前的對話情境。

現在我們只要將程式碼寫成下面這個樣子,就可以不斷的跟 ChatGPT 聊天啦。

import os
import openai

openai.organization = "org-EtCChBJWpIfm76AaP6fe7gPJ"
openai.api_key = os.getenv("OPENAI_API_KEY")

messages = [{"role": "system", "content": "hello"}]
while True:
    messages.append({"role": "user", "content": input()})

    completion = openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=messages
    )   

    response = completion.choices[0].message["content"]
    messages.append({"role": "assistant", "content": response})

    print(f"> {response}\n")

找不到朋友時,ChatGPT 永遠是您的好伙伴,範例如下:

$ python chat.py
我要問一些台灣的問題
> 好的,請問您想問哪些問題呢?

哪個山最高
> 台灣最高的山是玉山,海拔3952公尺。

哪個縣市不靠海
> 台灣的縣市共有22個,其中唯一一個不靠海的縣市是南投縣。南投縣位於台灣中央偏東的位置,雖然附近有一些湖泊,但是沒有直接面對海岸線。

最南端是哪個縣市
> 台灣最南端是屏東縣恆春半島的鵝鑾鼻。鵝鑾鼻位於屏東縣恆春鎮南方約14公里的海岬上,是台灣的地理標誌。

好啦,別老是聽人家講 ChatGPT 多神奇,自己動手試過才能接地氣~~

發表迴響