OpenAI API (Python) 開發環境安裝教學:在 VPS 上實現全自動 AI 工作流

完整 OpenAI Python SDK 開發教學:Responses API 用法、tool use 工具呼叫、streaming 串流回應、structured outputs 結構化輸出,從環境建置到正式應用一次搞定。

OpenAIChatGPTGPT-4PythonVPS安裝教學APIResponses APItool usestreamingstructured outputs自動化開發環境AI 工具

OpenAI API 最容易寫錯的地方,不是帳號申請,而是教學版本過時。很多文章還停在舊的 chat.completions.create 寫法,或直接把 API key 寫死在程式裡。這篇我直接對照 OpenAI 官方 quickstart,所以會以目前官方主推的 Responses API 流程為主。

除了基本環境建置,這篇會深入 Responses API 的進階用法,包含 tool use(讓 AI 呼叫你的工具)、streaming(串流回應)、structured outputs(結構化輸出),以及在 VPS 上長期運行 AI 工作流的實務建議。

你會學到什麼

  • 用 OpenAI 官方 Python SDK 建立最小可用環境
  • 正確設定 OPENAI_API_KEY,避免把金鑰硬寫死在程式裡
  • 使用官方目前主推的 Responses API 跑出第一個請求
  • 掌握 tool use、streaming 和 structured outputs 的實際用法
  • 在 VPS 上建立穩定的 AI 自動化工作流

什麼情況最適合先看這篇

  • 想在 VPS 上建立 AI 開發環境、工具鏈或自動化流程的開發者
  • 想先用 Python 把 OpenAI API 串起來,再慢慢擴成正式服務的人
  • 不想再被舊版 SDK 寫法和過時模型名稱誤導的人
  • 想用 tool use 讓 AI 呼叫自己的 API 和工具的人

開始前先確認

  • 你已有一組 OpenAI API key
  • VPS 或本機已有 Python 3 與 python3-venv / pip 可用環境
  • 你準備把金鑰放進環境變數,而不是直接寫進測試檔

先提醒你一件事

OpenAI 官方 quickstart 現在強調的是先把 OPENAI_API_KEY 匯出成環境變數,再讓 SDK 自動讀取,而且示範 API 是 client.responses.create(...)。如果你看到教學還在把 key 直接塞進 OpenAI(api_key="..."),那多半已經不是官方現在最推薦的寫法。

詳細教學與操作步驟

根據 OpenAI 官方 quickstart,Python 環境的標準起手式是:先建立 API key,匯出成環境變數,再安裝官方 SDK,最後用 Responses API 跑一個最小可用請求。

為什麼在 VPS 上開發 OpenAI 應用?

在 VPS 上運行 AI 工作流,能讓你的應用程式 24/7 不間斷運作。無論是自動分析伺服器日誌、建構智能機器人還是處理大規模資料,結合 侃瑞科技的高性能 VPS 與 OpenAI API 都是當前的最佳開發配置。

步驟一:確認 Python 環境

大多數 Ubuntu 系統已內建 Python 3。請執行指令確認版本:

python3 --version

接著,安裝 Python 套件管理工具 pip 與虛擬環境工具:

sudo apt update
sudo apt install python3-pip python3-venv -y

步驟二:建立虛擬環境

為了避免不同專案之間的套件衝突,建議建立虛擬環境:

mkdir my-ai-app && cd my-ai-app
python3 -m venv venv
source venv/bin/activate

步驟三:安裝 OpenAI SDK

在虛擬環境中安裝 openai 套件:

pip install openai

步驟四:匯出 API Key 環境變數

OpenAI 官方 quickstart 建議先把金鑰匯出成環境變數,SDK 會自動讀取:

export OPENAI_API_KEY="your_api_key_here"

如果你要長期使用,請把這行放進你的 shell 設定檔,而不是每次手動輸入:

# ~/.bashrc 或 ~/.zshrc
export OPENAI_API_KEY="your_api_key_here"

重新載入設定:

source ~/.bashrc

步驟五:建立最小可用測試程式

建立 test_ai.py,填入官方現在較接近 quickstart 的 Responses API 寫法:

from openai import OpenAI
client = OpenAI()

response = client.responses.create(
    model="gpt-4.1",
    input="請用一句話介紹侃瑞科技 VPS 的優點。"
)
print(response.output_text)

執行測試:

python3 test_ai.py

如果成功顯示模型回應,就代表你的 Python 環境、SDK 與 API key 都已經接好了。

步驟六:Streaming — 串流回應

跟 Gemini 一樣,串流回應讓你的應用可以即時顯示 AI 正在產生的文字:

from openai import OpenAI
client = OpenAI()

stream = client.responses.create(
    model="gpt-4.1",
    input="寫一篇 300 字的 VPS 選購指南。",
    stream=True
)

for event in stream:
    if hasattr(event, "delta") and event.delta:
        print(event.delta, end="", flush=True)
print()  # 換行

串流回應特別適合:

  • 即時聊天介面 — 讓使用者看到 AI 正在「打字」
  • 長文生成 — 不用等 30 秒才看到完整結果
  • 命令列工具 — 即時顯示分析進度

步驟七:Tool Use — 讓 AI 呼叫你的工具

Tool use 是 Responses API 的核心功能之一,讓 AI 可以呼叫你定義的函式來取得資訊或執行動作:

from openai import OpenAI
import json

client = OpenAI()

# 定義工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_server_status",
            "description": "查詢指定伺服器的目前狀態",
            "parameters": {
                "type": "object",
                "properties": {
                    "server_id": {
                        "type": "string",
                        "description": "伺服器 ID,例如 vps-001"
                    }
                },
                "required": ["server_id"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_pricing",
            "description": "查詢 VPS 方案的價格",
            "parameters": {
                "type": "object",
                "properties": {
                    "plan": {
                        "type": "string",
                        "enum": ["nano", "xs", "s", "m", "l", "xl"],
                        "description": "VPS 方案名稱"
                    }
                },
                "required": ["plan"]
            }
        }
    }
]

# 實際的函式實作
def get_server_status(server_id):
    return {"status": "running", "uptime": "99.9%", "cpu": "12%"}

def get_pricing(plan):
    prices = {"nano": 900, "xs": 1500, "s": 2200,
              "m": 4500, "l": 9000, "xl": 18000}
    return {"plan": plan, "monthly": prices.get(plan), "currency": "TWD"}

response = client.responses.create(
    model="gpt-4.1",
    input="我想知道 M 方案的價格,還有 vps-001 的狀態",
    tools=tools
)

# 處理 tool calls
for output in response.output:
    if output.type == "function_call":
        name = output.name
        args = json.loads(output.arguments)

        if name == "get_server_status":
            result = get_server_status(args["server_id"])
        elif name == "get_pricing":
            result = get_pricing(args["plan"])

        print(f"Tool {name}: {result}")

Tool use 的實際應用場景:

  • 客服機器人 — 查訂單狀態、帳單、方案資訊
  • DevOps 助手 — 查伺服器狀態、重啟服務、檢查日誌
  • 資料分析 — 讓 AI 查詢資料庫、呼叫分析 API

步驟八:Structured Outputs — 讓 AI 輸出結構化資料

如果你需要 AI 輸出固定格式的 JSON,structured outputs 會比「請你輸出 JSON 格式」這種 prompt 更可靠:

from openai import OpenAI
from pydantic import BaseModel

client = OpenAI()

class ServerAnalysis(BaseModel):
    server_id: str
    health_score: int
    issues: list[str]
    recommendations: list[str]

response = client.responses.parse(
    model="gpt-4.1",
    input="分析伺服器 vps-001 的健康狀態:CPU 95%、記憶體 80%、磁碟 60%",
    text_format=ServerAnalysis,
)

analysis = response.output_parsed
print(f"健康分數: {analysis.health_score}")
print(f"問題: {analysis.issues}")
print(f"建議: {analysis.recommendations}")

Structured outputs 特別適合:

  • 資料管線 — 讓 AI 輸出的資料可以直接寫入資料庫
  • API 回應 — 保證回傳格式一致
  • 報表生成 — 產出固定欄位的分析結果

步驟九:Web Search — 讓 AI 搜尋最新資訊

Responses API 也支援內建的 web search 工具,讓 AI 可以搜尋即時資訊:

response = client.responses.create(
    model="gpt-4.1",
    input="目前台灣最新的資安事件有哪些?",
    tools=[{"type": "web_search_preview"}]
)

print(response.output_text)

步驟十:錯誤處理與重試機制

在正式環境中,API 呼叫可能因為各種原因失敗。建立良好的錯誤處理很重要:

from openai import OpenAI, APIError, RateLimitError
import time

client = OpenAI()

def safe_api_call(prompt, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = client.responses.create(
                model="gpt-4.1",
                input=prompt
            )
            return response.output_text

        except RateLimitError:
            wait = 2 ** attempt  # 指數退避
            print(f"Rate limit,等待 {wait} 秒後重試...")
            time.sleep(wait)

        except APIError as e:
            print(f"API 錯誤: {e}")
            if attempt == max_retries - 1:
                raise

    return None

result = safe_api_call("分析這台伺服器的效能")

常見問題

Q:為什麼我照舊教學寫 chat.completions.create 還是能跑? 有些舊寫法在某些場景仍可能可用,但 OpenAI 官方 quickstart 現在已經主推 Responses API。你如果是新專案,建議直接從官方目前推薦的介面開始,後面功能擴充會更一致。

Q:可以讓 AI 直接管理我的伺服器嗎? 技術上做得到,但你應該先把 shell 權限、允許操作範圍、費用上限與日誌追蹤想清楚,再把它接進正式環境。否則最先出問題的通常不是模型能力,而是權限邊界。

Q:tool use 跟 function calling 有什麼不同? 在 Responses API 中,tool use 是更廣的概念,包含 function calling、web search 等。Function calling 是 tool use 的一種。

Q:streaming 和 structured outputs 可以同時用嗎? 目前部分模型和 API 版本支援串流結構化輸出,但實作上會比較複雜。建議先分開使用,確認各自正常後再嘗試組合。

做完後怎麼確認自己真的有設對

  • 用目前 shell 執行 echo $OPENAI_API_KEY,確認環境變數真的存在
  • 實際跑一次測試程式,確認有拿到 response.output_text
  • 測試串流回應,確認可以即時收到 chunk
  • 測試 tool use,確認 AI 會正確呼叫你定義的工具
  • 如果你換 shell、換 session 或重開 VPS,記得再驗一次環境變數有沒有跟著載入

這一題最常踩的坑

  • API key 還是寫死在程式裡,後面很容易外洩
  • 一直照舊版文章寫舊 API,結果和官方新文件越差越遠
  • 測試成功一次後就不管環境變數,之後換 shell 或排程時又壞掉
  • Tool use 的工具定義 description 寫太模糊,AI 搞不清楚什麼時候該呼叫
  • 沒有做錯誤處理和重試,API 偶爾 timeout 整個服務就掛了
  • Structured outputs 的 schema 太複雜,反而增加出錯機率

如果你要往下一步走

如果你接下來要在同一台機器上用 Codex 直接協助寫程式或維護 repo,可以接著看 OpenAI Codex CLI 工具安裝教學。如果你只是要先把 Node / Python 開發底座打好,則可以搭配 VPS Node.js 安裝教學 一起整理。想同時了解其他 AI API,也可以參考 Gemini API Node.js 教學

需要主機來實作?

侃瑞科技提供 cPanel 虛擬主機與 VPS,教學裡的操作開箱即用。

查看方案 →
LINE 諮詢