接到某客戶的緊急客訴「後台登入變得很慢」,得手動 SSH 進主機、跑診斷指令、翻 log、寫修復腳本,整套流程做完常常要一兩個小時
OpenAI 最近推出了一個叫做 Agents API 的新東西,簡單說,它讓你的程式可以透過 API,直接指揮一個「會自己動手做事」的 AgentAI 助理本身的「人設」設定——包含要用哪個模型、給它什麼指令、能操作哪些工具。過去如果你想做一個「AI 自動幫我跑程式、讀寫檔案」的功能,你得自己張羅一堆基礎建設;現在 OpenAI 把這些通通接管過去。
整套系統圍繞四個核心概念運作:Agent(AI 的人設與能力設定)、EnvironmentAI 實際「動手做事」的地方,可以是 OpenAI 代管的沙盒,也可以是你自己指定的電腦(AI 實際做事的地方)、Session一個持續進行中的工作個體,像是幫你開一個「不會斷線」的工作視窗,AI 在裡面持續處理任務直到完成(工作進行的容器),以及 Events/Items(AI 做事過程中送出跟收到的一則則訊息)。
最實用的部分在於,OpenAI 把「長時間執行 AI 任務」最容易出包的幾件事都內建進去了:當對話紀錄太長塞不下時,系統會自動幫你做 Context compaction(上下文壓縮)AI 自動把之前做過的事摘要濃縮,讓它不會忘記前面的進度,也不會佔滿「記憶空間」;如果任務很複雜,主 agent 還能把工作拆成好幾塊,分別交給 Subagent(子代理)由主要 AI 助理另外派出去處理特定小任務的「小幫手」,做完後把結果彙整回來 分頭處理;而你也不用一直傳訊息問「做完了嗎」,可以用 Webhook當事情有進展或完成時,系統主動「打電話」通知你的程式,而不是你自己一直去問 被動接收通知。
如果 AI 需要碰觸你自己的系統(像是內部資料庫、Slack、GitHub),則要透過 MCP(Model Context Protocol)一種讓 AI 助理「插上」外部工具或資料來源的標準接頭,概念上很像 USB,不同工具只要符合這個規格就能被 AI 接上 這個標準接頭串接。整套下來,你要做的事只剩下「定義任務、提供工具、選好執行環境」,其餘的協調、記憶、復原都交給 OpenAI 管理的 Harness(執行骨架)這裡指幫 AI 助理張羅好環境、規則、安全機制的一整套配套系統,讓 AI 不用「裸奔」在你的系統上工作。
| 面向 | 傳統自建方式 | Agents API |
|---|---|---|
| 環境準備 | 自己找雲端主機、裝好執行環境、設安全隔離 | OpenAI 代管沙盒,建立 Session 就自動準備好 |
| 對話記憶管理 | 自己寫程式偵測 token 超出上限、手動摘要 | 內建 context compaction 自動壓縮 |
| 失敗復原 | 自己存檔進度、寫重試邏輯 | Session 本身具備從中斷處恢復的機制 |
| 外部工具串接 | 自己刻串接程式碼 | 用 MCP 標準接頭直接接上 |
這段程式碼示範怎麼開一個 Session、丟任務進去,然後即時追蹤 AI 的工作進度。
from openai import OpenAIclient = OpenAI()session = client.beta.agents.sessions.create( agent={"model": "gpt-6-astra", "instructions": "你是會寫程式的助理"}, environment={"type": "sandbox"},)run = session.turns.create(input="幫我列出資料夾樹狀結構")for event in session.turns.stream(run.id): if event.type == "tool_call": print(f"執行工具:{event.tool_name}")這是一個真實小專案:下載(或複製)檔案,照步驟在你電腦上跑起來。
openai>=1.50.0
python-dotenv>=1.0.0
OPENAI_API_KEY=你的OpenAI_API金鑰貼在這裡
import os
import time
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
def main() -> None:
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise SystemExit("找不到 OPENAI_API_KEY,請先在 .env 檔案填入你的金鑰")
client = OpenAI(api_key=api_key)
session = client.beta.agents.sessions.create(
agent={
"model": "gpt-6-astra",
"instructions": (
"你是一個會寫 Python 小工具的助理。收到任務時,"
"先在沙盒裡寫好程式碼、執行它,再把結果整理成清楚的中文說明給使用者。"
),
},
environment={"type": "sandbox"},
)
task = (
"請寫一個 Python 腳本,列出目前工作目錄底下的資料夾樹狀結構"
"(忽略隱藏檔案與 .venv 資料夾),在沙盒裡執行它,再把輸出結果貼給我看。"
)
run = session.turns.create(input=task)
print("=== Agent 開始工作,以下是即時進度 ===")
try:
for event in session.turns.stream(run.id):
if event.type == "message":
print(f"[訊息] {event.content}")
elif event.type == "tool_call":
print(f"[執行工具] {event.tool_name}:{event.arguments}")
elif event.type == "completed":
print("=== 任務完成 ===")
break
except KeyboardInterrupt:
print("\n已中斷追蹤,Session 仍會在背景繼續執行這一輪任務。")
return
result = session.turns.retrieve(run.id)
print("\n最終結果:\n", result.output_text)
if __name__ == "__main__":
main()