# 簡介
生成式AI正在快速改變軟體開發的樣貌。過去我們需要花時間設計複雜的規則、資料庫查詢才能完成自然語言相關的任務 而現在透過OpenAI API,只要幾行程式碼,就能讓應用程式具備「理解文字、回答問題、甚至維持對話」的能力。
#### 優點
---
簡單易用:幾行程式碼即可呼叫模型
多種功能:文字生成、對話、程式碼輔助
彈性模型選擇:可依需求選擇
快速整合:容易嵌入現有專案
---
### 注意事項
需申請 API Key,並注意金鑰保護
OPEN API 會依照所用到的功能收費
隱私保護:API 輸入資料不會用來訓練模型
## OpenAI API 種類簡介
目前 OpenAI 提供五大主要 API,下面來說明他們的功能:
### Chat:
可以把它想像成 ChatGPT 的引擎。
你丟一句話 例如:「跟我說個笑話」,它就會回你一句話。
和 ChatGPT 網頁版不同的是,這裡是用程式呼叫,沒有網頁介面。
要注意:它不會自己「記住」你之前講過什麼。如果要聊天有連續感,你要把之前的對話內容也一併送給它。
### Image:
讓 AI 幫你「畫圖」或「改圖」。
三種玩法:
第一種:根據給的敘述(prompt)產生出圖片。
第二種:給一段敘述(prompt)加上想被修改的圖片,AI會根據給的敘述去加工給的圖片。
第三種:只給圖片讓AI自己亂改。
### Audio:
1.把聲音變文字。
2.將一段任意語言的語音翻譯成英文,目前就只支援翻譯成英文,沒有其他語言。
### Embeddings:
把文字變成一組「數字代碼」,讓電腦懂文字的意思。
常用在搜尋或比對文字相似度
### Fine-tuning:
讓 AI 照你的資料去學習。
例如你給它一堆範例,它就學會用你想要的風格回答。
## 申請openAI的API key
1.先到openAI的[官網](https://openai.com/zh-Hant/index/openai-api/)登入,沒有帳號要先註冊,選擇API平台選項

2.登入成功之後選擇右上角的Dashboard

3.先創建一個project

4.進來後點左邊選單的API keys
之後選點選Create new secret key 取個名字之後按Create secret key


這樣就完成了

## 建立環境
```python
# 建議 Python 3.9以上,並啟動虛擬環境
python -m venv venv
.\venv\Scripts\activate # window
source venv/bin/activate # macOS
```
#### 安裝openai
```
pip install openai
```
安裝好後我們建立一個python檔案連接API
```python
import openai
client = OpenAI(api_key="你的_API_KEY")
# 在YOUR_API_KEY裡面放入你申請到的那串密鑰
```
連接好後我們試著先獲得到簡單的回應,來測試看看是不是可以使用。
```python
from openai import OpenAI
import os
client = OpenAI(api_key="YOUR_API_KEY")
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "請跟我說一個笑話"}
],
temperature=0.8,
max_tokens=200
)
print(response.choices[0].message.content)
```
執行程式之後 來看看他說了些甚麼吧

再來是上下文的部分
上下文就是AI記不記得你之前說的話。
OpenAI的Chat API本身不會自動記住對話。
你要它記住,就必須 手動把過去的訊息一起丟回去
第一個範例是沒有上下文的版本:
```python
from openai import OpenAI
client = OpenAI(api_key="你的_API_KEY")
prompt1 = "誰是美國總統?"
response1 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt1}]
)
print("Q1:", prompt1)
print("A1:", response1.choices[0].message.content)
prompt2 = "他的老婆是誰?"
response2 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt2}]
)
print("\nQ2:", prompt2)
print("A2:", response2.choices[0].message.content)
```

因為沒有帶入前面的對話,AI會搞不懂問題中的「他」是誰。
再來是有上下文的版本
```python
from openai import OpenAI
client = OpenAI(api_key="你的_API_KEY")
prompt1 = "誰是美國總統?"
prompt2 = "他的老婆是誰?"
messages = [
{"role": "user", "content": prompt1}
]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages
)
answer1 = response.choices[0].message.content
messages.append({"role": "assistant", "content": answer1})
messages.append({"role": "user", "content": prompt2})
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages
)
answer2 = response.choices[0].message.content
print("Q1:", prompt1)
print("A1:", answer1)
print("\nQ2:", prompt2)
print("A2:", answer2)
```
