所有入門單元免費開放 · 課程內容持續更新中

送出第一個請求

用十幾行 Python 程式呼叫大型語言模型,看懂請求要帶哪些參數、回應裡又裝了什麼。

第 10.2 堂約 13 分鐘

上一堂課你已經把金鑰安全地放進 .env,那是最需要小心的一步,現在可以輕鬆一點了。這堂課要做一件很單純的事:用程式問模型一個問題,把答案印出來。

聽起來和在聊天視窗打字差不多,但用程式呼叫有個很大的好處:你可以把它接到任何地方。讀一百封信件做摘要、幫表單自動分類、在你自己的網站加上問答功能,起點都是這一個請求。

先理解:請求與回應

API 呼叫就像寄一封信給模型,再收到一封回信。信裡要寫清楚三件事:

  • model:要請哪個模型回答。
  • max_tokens:回答最多能有多長。token 是模型計算文字的單位,大約可以想成「一小段字」。
  • messages:對話內容,是一個清單,每一則訊息都標明是誰說的。

左邊是請求,包含 model、max_tokens、messages;中間是模型;右邊是回應,包含 content、stop_reason、usage

每次呼叫都是一來一回。回應裡除了答案,還有停止原因與用量。

安裝與第一支程式

如果還沒安裝,先在虛擬環境裡執行:

pip install anthropic python-dotenv

建立 first_call.py:

from dotenv import load_dotenv
import anthropic

load_dotenv()  # 從 .env 載入 ANTHROPIC_API_KEY

MODEL = "claude-sonnet-5-5"  # 可以換成其他模型 ID

client = anthropic.Anthropic()  # 自動讀取環境變數裡的金鑰

response = client.messages.create(
    model=MODEL,
    max_tokens=16000,
    messages=[
        {"role": "user", "content": "用三句話向國中生解釋什麼是 API。"}
    ],
)

for block in response.content:
    if block.type == "text":
        print(block.text)

執行:

python first_call.py

幾秒後,終端機就會出現模型的回答。恭喜,你完成了第一次 API 呼叫。

看懂回應物件

把回應印出來看看,會更清楚它的結構:

print(response.stop_reason)          # 例如 end_turn
print(response.usage.input_tokens)   # 你送進去的 token 數
print(response.usage.output_tokens)  # 模型產生的 token 數

幾個重點:

content 是清單,不是字串。 回應可能包含好幾種區塊,例如文字、模型的思考過程、或之後會學到的工具呼叫。所以範例程式用迴圈逐一檢查,只印出 type 為 text 的區塊。直接寫 response.content[0].text 有時會出錯,因為第一個區塊不一定是文字。

stop_reason 說明為什麼停下來。 最常見的值:

值 意思
end_turn 模型自然說完了
max_tokens 撞到長度上限被切斷,考慮調高 max_tokens
refusal 模型基於安全理由拒絕回答

usage 是你的帳單依據。 費用就是依照輸入與輸出的 token 數計算,第六堂課會詳細教你怎麼估算。

模型不會記得上一次

這是新手最容易誤會的地方:每次呼叫都是獨立的。你再執行一次程式,問「我剛剛問了什麼?」,模型不會知道。想要多輪對話,必須自己把歷史訊息一起送回去,這就是下一堂課的主題。

換成其他供應商

OpenAI、Google 的 API 長相很接近:同樣是建立用戶端、指定模型、送出一個訊息清單、從回應裡取出文字。參數名稱略有不同,但「請求帶什麼、回應有什麼」的觀念完全一樣。

可以這樣問 AI

這是我的 first_call.py。請幫我改成可以從命令列輸入問題,例如 python first_call.py "什麼是 token?",並在答案後面印出這次用了多少輸入與輸出 token。

行動練習
  1. 執行 first_call.py,確認拿到回答。
  2. 把問題改成你工作上真的會問的問題,例如「幫我把這段會議紀錄整理成三個重點」,並把一段文字貼進 content。
  3. 印出 stop_reason 與 usage,記下輸入與輸出各用了多少 token。
  4. 把 max_tokens 改成 50 再執行一次,觀察 stop_reason 變成什麼、回答是否被切斷。

讀完了嗎?

標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。

卡住了?讓 AI 當你的家教複製這段提問範本,貼到 Claude 或其他 AI 工具,再補上你卡住的地方。

留言與討論

卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。

留言區即將開放。現在可以先到 GitHub 討論區 發問,或看看 交流頁 的其他管道。