如何在電腦上寫 Python 程式來使用 ChatGPT

本文介紹如何在電腦上寫 Python 程式,透過 OpenAI 的 API 來使用 ChatGPT 的對話問答功能。

材料與準備

  1. 首先必需要有一個 OpenAI 的 API key,可以到 OpenAI platform 購買。
  2. 電腦的作業系統裡,要安裝 Python。本文是在 Ubuntu 20.04 作業系統中,用 Python 3.8 實作。
  3. 參考 OpenAI 官網的 Developer quickstart 的介紹和例子。

方法與步驟

第一次寫程式前的準備

1. 建立虛擬環境 (virtual environment)

為了讓測試 Python 的環境可以單純,建議建立一個新的虛擬環境,使用虛擬環境裡的 Python 並用 pip 安裝所需要的套件,這樣可以避免干擾原來系統裡的套件,也較不會發生版本相依所產生的問題。

在終端機的工作目錄中,執行以下指令以新建一個虛擬環境:

python -m venv myenv

指令中的 myenv 是自取的名字,讀者可以依喜好取別的名字。建立好之後可以看到多了一個名為 myenv 的目錄。

接著,要啟動進入這個虛擬環境,可以執行:

source myenv/bin/activate

可以看到指令行出現

(myenv) $

就代表已進入 myenv 這個虛擬環境。

2. 安裝 OpenAI Python 函式庫

在 (myenv) 中執行以下指令,以安裝 openai 這個函式庫:

pip install --upgrade openai

安裝好以後,可以查看所安裝的 openai 版本:

pip show openai

這裡看到我所安裝的 openai 是 1.35.15 版本。

3. 設定 API key

在系統中設定 API key,這麼一來,未來用這台電腦寫程式,就可以讀到 API key,不需要在程式碼中明示。

用文字編輯器 nano 編輯根目錄的 .bash_profile 這個檔案:

nano ~/.bash_profile

在檔案中加上一行字:

export OPENAI_API_KEY='your-api-key-here'

其中 your-api-key-here 要用自己的 API key 來替代。

存檔退出後,執行以下指令,以重新匯入設定檔,使它生效:

source ~/.bash_profile

此時要查看是否設定成功,可以用以下指令查看 API key 的內容:

echo $OPENAI_API_KEY

做好了上述的準備工作,往後我們就可以開始來寫 Python 程式來呼叫 ChatGPT 了。

結果

建立一個 Python 程式來使用 API key

參考 OpenAI 官網的例子,寫一個 Python 程式,例如取名為 mycode.py,並且在 (myenv) 虛擬環境裡輸入以下指令來執行這個程式:

python mycode.py

程式碼和執行的結果如下:

from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-4o-mini",
  messages=[
    {"role": "system", "content": "你是一位專長寫抒情詩的 AI 詩人。"},
    {"role": "user", "content": "請寫一首十行的新詩歌頌淡水河的日落美景。"}
  ]
)

print(completion.choices[0].message)
ChatCompletionMessage(content='淡水河畔,夕陽低垂,  \n金光灑落,輕柔如絮。  \n水波微漾,輕唱著歌,  \n夢似的彩霞,染紅了天。\n\n岸邊的垂柳,隨風輕舞,  \n倒影中閃爍,似星辰喜喀。  \n船隻輕行,劃過寧靜,  \n時光在此,悄然停留。\n\n遠方的山影,沉醉於此,  \n在這黃昏,心靈獲釋。', role='assistant', function_call=None, tool_calls=None, refusal=None)

很興奮地,我們得到了 ChatGPT 傳回的詩。代表程式成功了。

傳回的訊息,是 OpenAI 傳回的原始文字,除了訊息的內容外,也包括了格式和程式設定碼。

我們可以把 Python 程式碼修飾一下,讓這首詩看起來更整齊:

from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "你是一位專長寫詩的 AI 詩人。"},
        {"role": "user", "content": "請寫一首十行的新詩歌頌淡水河的自然美景。"}
    ]
)

# 格式化輸出
poem = completion.choices[0].message.content
formatted_poem = poem.replace("\\n", "\n").strip()
print(formatted_poem)
在淡水河的懷抱中,  
水面輕波,似夢幻的絲,  
夕陽斜下,染紅了天際,  
白鷺翩翩,奏出自然的歌。

岸邊柳垂,柔影搖曳,  
微風攪動,帶來花香的消息,  
小舟悠悠,釣者靜謐,  
心隨水流,化作無聲的潮汐。

這裡的每一瞬,  
都藏著生命的純粹與和諧。

可以看到 ChatGPT 又做了一首新詩。

現在,您也可以按照自己的意思,去編輯程式碼中 sytem message 的提示詞內容,以指定 ChatGPT 扮演的角色;並且編輯 user message 的提示詞,來告訴 ChatGPT 要執行的任務。

OpenAI 的官網 Prompt examples 提供了常用提示詞 (prompt) 的例子可供參考,提示詞就是我們對 ChatGPT 下的文字指令或提的問題。

討論

在電腦裡寫 Python 程式,透過 OpenAI 的 API Key 來呼叫 ChatGPT,可以提供更高的靈活性和控制力,在更大型的程式或網站中,可以更客製化且更有彈性地運用 ChatGPT 這個人工智慧工具。

這個網誌中的熱門文章

生成式 AI 時代下的讀書和讀書會

天真而殘忍的邪惡:讀艾莉絲‧孟若的〈童戲〉