書寫時間:2025/4/27
事前預備
- 本篇將以 Python 呼叫 OpenAI 模型為例
- 需先註冊 OpenAI 開發者帳號、密碼後,申請 API KEY 。不會花很多錢,也可以設定上限,大可放心!
- 本篇將以「判斷新聞文章分類」書寫以下案例參考!
- 以下將介紹數種寫法,包含較舊、陽春的寫法,最後一方法也將介紹目前OpenAI 推出全新的 Agent SDK 寫法。
第一種寫法(較舊的寫法):純粹使用 Requests 套件
import requests
import json
system_message = '''你是一名台灣的新聞編輯,使用者會給你一篇新聞文章,
請定義新聞的類別(僅給出一個選項:["政治", "國際", "兩岸", "產經", "證券", "科技", "生活", "社會", "地方", "運動", "娛樂"])。
你需要注意:氣象屬於「生活」,「國際」包含各種國際新聞,除了台灣和中國為主體以外的新聞敘述,「地方」包含各種台灣地方新聞等,其餘請依照你的新聞專業判斷,請用中文(繁體)回覆。'''
role_message = "加拿大28日舉行聯邦大選,總理卡尼(Mark Carney)今天在激戰區多倫多附近最後造勢時,痛批保守黨對手缺乏在貿易戰中發揮領導作用的經驗和經濟頭腦。"
# Define the API endpoint and headers
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": "Bearer YOUR_API_KEY", # 改成自己的 API KEY
"Content-Type": "application/json"
}
# Prepare the data payload
data = {
"model": "gpt-4.1-nano",
"messages": [
{"role": "system", "content": system_message},
{"role": "user", "content": role_message}
]
}
response = requests.post(url, headers=headers, data=json.dumps(data))
# Print the response content
print(response.json()['choices'][0]['message']['content'])
第二種寫法:Chat Completions API
較舊的寫法:from openai import OpenAI
system_message = '''你是一名台灣的新聞編輯,使用者會給你一篇新聞文章,
請定義新聞的類別(僅給出一個選項:["政治", "國際", "兩岸", "產經", "證券", "科技", "生活", "社會", "地方", "運動", "娛樂"])。
你需要注意:氣象屬於「生活」,「國際」包含各種國際新聞,除了台灣和中國為主體以外的新聞敘述,「地方」包含各種台灣地方新聞等,其餘請依照你的新聞專業判斷,請用中文(繁體)回覆。'''
role_message = "加拿大28日舉行聯邦大選,總理卡尼(Mark Carney)今天在激戰區多倫多附近最後造勢時,痛批保守黨對手缺乏在貿易戰中發揮領導作用的經驗和經濟頭腦。"
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4.1-nano",
messages=[
{"role": "system", "content": system_message},
{"role": "user", "content": role_message}
]
)
print(completion.choices[0].message.content)
上述中的系統提示(system prompt),目前官方寫法改寫成「developer
」,舊寫法為「system
」
{"role": "developer", "content": system_message},
{"role": "user", "content": role_message}
第三種寫法:Response API
from openai import OpenAI
system_message = '''你是一名台灣的新聞編輯,使用者會給你一篇新聞文章,
請定義新聞的類別(僅給出一個選項:["政治", "國際", "兩岸", "產經", "證券", "科技", "生活", "社會", "地方", "運動", "娛樂"])。
你需要注意:氣象屬於「生活」,「國際」包含各種國際新聞,除了台灣和中國為主體以外的新聞敘述,「地方」包含各種台灣地方新聞等,其餘請依照你的新聞專業判斷,請用中文(繁體)回覆。'''
role_message = "加拿大28日舉行聯邦大選,總理卡尼(Mark Carney)今天在激戰區多倫多附近最後造勢時,痛批保守黨對手缺乏在貿易戰中發揮領導作用的經驗和經濟頭腦。"
client = OpenAI()
response = client.responses.create(
model="gpt-4.1-nano",
instructions=system_message,
input=role_message
)
print(response.output_text)
第四種寫法:Agent SDK
from agents import Agent, Runner
import asyncio
system_message = '''你是一名台灣的新聞編輯,使用者會給你一篇新聞文章,
請定義新聞的類別(僅給出一個選項:["政治", "國際", "兩岸", "產經", "證券", "科技", "生活", "社會", "地方", "運動", "娛樂"])。
你需要注意:氣象屬於「生活」,「國際」包含各種國際新聞,除了台灣和中國為主體以外的新聞敘述,「地方」包含各種台灣地方新聞等,其餘請依照你的新聞專業判斷,請用中文(繁體)回覆。'''
role_message = "加拿大28日舉行聯邦大選,總理卡尼(Mark Carney)今天在激戰區多倫多附近最後造勢時,痛批保守黨對手缺乏在貿易戰中發揮領導作用的經驗和經濟頭腦。"
async def main():
NewsCategoryDefinerAgent = Agent(
name="News Category Definer",
model="gpt-4.1-nano",
instructions=system_message
)
result = await Runner.run(NewsCategoryDefinerAgent, role_message)
print(result.final_output)
if __name__ == "__main__":
asyncio.run(main())
OpenAI 推出的 Agents SDK 的概念很像是把各個任務都封包成一個一個工作區塊的概念,較好管理與互相呼叫、調控!
官方文件如下: