2024年10月27日 星期日

如何在 Colab 中隱藏與取用密鑰

在測試 OpenAI 或 Line Notify 等 API 功能時都需要註冊申請金鑰 (API key) 或權杖 (token), 通常在測試時為了方便會直接賦值給一個字串變數例如 OPENAI_API_KEY 或 LINE_NITIFY_TOKEN 來使用, 但這種做法常常在將程式分享到 GitHub 或社群時一時忘記刪除真實金鑰或權杖而洩漏, 尤其是 GitHub 有版本控制功能, 即使刪除或更新仍會保留舊資料. 

解決辦法是使用第三方模組例如 dotenv 將金鑰或權杖儲存在系統變數裡, 利用 os 模組的 getenv() 來取得 API Key 或 token (在 Colab 中統稱為密鑰 Secret). 在 Colab 中除了這個方法外還提供了 Secrets 頁面來儲存金鑰或權杖, 在程式中則可利用 google.colab 的 userdata 模組來取得這些機敏資料. 

本系列相關文章參考 :



1. 設定密鑰 (Secret) :   

下面以設定 OpenAI API key 為例說明如何在 Colab 上設定密鑰 :

首先在 Colab 新增一個 ipynb 筆記本後按左方工具列上的鑰匙圖示開啟密鑰設定頁面 : 




按 "+ 新增密鑰" 鈕 : 




依序勾選開啟筆記本存取權, 輸入密鑰名稱 (此處為 OPENAI_API_KEY), 貼上 OpenAI API key, 然後按右上角的 X 關閉設定頁面 (隨時可按鑰匙圖示進來按眼睛圖示右邊的複製鈕將密鑰複製起來) : 




2. 取用密鑰 (Secret) :   

在上面設定密鑰頁面底下就有取用密鑰的語法, 只要呼叫 google.colab.userdata 模組的 get() 函式並傳入密鑰名稱就會傳回密鑰內容 : 

from google.colab import userdata   

由於上面密鑰設定中設定密鑰名稱為 OPENAI_API_KEY, 因此要傳入此字串 : 

openai_api_key=userdata.get("OPENAI_API_KEY")

呼叫 OpenAI API 之前要先安裝 openai 套件 : 

!pip install openai 

參考 :





接著用 userdata.get() 讀取密鑰 :

OPENAI_API_KEY=userdata.get('OPENAI_API_KEY')   

雖然很犯規 (用 Secret 儲存就是要掩藏密鑰啊) 但還是印出來確認看看 :

print(OPENAI_API_KEY)      




密鑰內容正確, 呼叫 OpenAI 類別的建構子 OpenAI() 並傳入密鑰以建立 OpenAI 物件 :

client=OpenAI(api_key=OPENAI_API_KEY)    # 建立 OpenAI 物件

呼叫 OpenAI API (chat.completion.create) : 

chat_completion=client.chat.completions.create(
    messages=[
        {"role": "user",
         "content": "請簡單說明何謂量子糾纏?",
        }],
    model="gpt-4o-mini",
    )     

取得回應內容 : 

print(chat_completion.choices[0].message.content)    

結果如下 : 

量子糾纏是一種量子力學現象,當兩個或多個粒子在某種方式上互相聯繫時,這些粒子的量子狀態將不再獨立,而是形成一種整體的狀態。即使這些粒子相隔很遠,對其中一個粒子的測量會立即影響到另一個粒子的狀態。這意味著它們之間存在著某種超越經典物理的「瞬時」聯繫。

量子糾纏的特性挑戰了我們對物質和信息傳遞的傳統理解,並且在量子通信和量子計算等領域具有重要的應用潛力。




我們可以將呼叫 OpenAI API 的程序寫成一個函式 ask_gpt() :

def ask_gpt(prompt, api_key, model='gpt-4o-mini'):
    client=OpenAI(api_key=api_key)
    chat_completion=client.chat.completions.create(
        messages=[
            {"role": "user",
             "content": prompt,
            }],
        model=model,
        )
    return chat_completion.choices[0].message.content

結果如下 : 

量子糾纏是一種量子力學現象,當兩個或多個量子系統(例如,粒子)相互作用並形成一個整體時,它們的狀態會變得互相關聯,即使這些粒子相隔很遠。這意味著對一個粒子的測量會立即影響到另一個粒子的狀態,不管它們之間的距離有多遠。

舉例來說,如果兩個糾纏的粒子被創造出來,並且其中一個被測量為某種特定的狀態,那麼另一個粒子的狀態也會瞬間變成與之相對應的狀態。這種現象挑戰了我們對距離和獨立性的直觀理解,並引發了許多關於量子力學和宇宙基本性質的討論與研究。量子糾纏在量子計算、量子通訊等技術中具有重要的應用潛力。




除了 OpenAI API key 外, 任何其他不想因為不小心洩漏的密鑰都可以放在 Secret 中, 例如要在 Colab 筆記本上發出 LINE Notify 推播訊息, 可以將其權杖 (token) 存入 Secret 中, 然後透過 userdata.get() 取用. 

沒有留言 :