API 開發

第一次串接 Claude API 就上手:從拿金鑰到收到回應

串接 Claude API 的流程是:先到 Anthropic Console 申請金鑰並放進 .env 保管,由自己的伺服器呼叫 client.messages.create,帶上 model、max_tokens、messages 三個必填參數,回應文字就在 message.content[0].text。金鑰絕不能放進前端程式碼,否則等於直接公開。
第一次串接 Claude API 就上手:從拿金鑰到收到回應:文章重點卡

第一次串接 Claude API 就上手:從拿金鑰到收到回應

很多人用過 Claude 的聊天介面,但要把 Claude 裝進自己的產品裡,就得走 API 這條路。好消息是,送出第一個請求比你想像的簡單;真正值得花時間搞懂的,是請求從瀏覽器出發、經過你的伺服器、抵達模型再回來的完整旅程。

「金鑰不能碰前端」這件事,值得一開始就刻進腦子裡。這篇就從申請金鑰開始,一步一步用 Python 送出第一個請求,並把「Claude 其實沒有記憶」這個最容易踩雷的觀念一次講清楚。

你將學到什麼

請求的完整旅程

從瀏覽器到模型再回來的五個階段,以及為什麼中間一定要有你的伺服器。

申請與保管 API 金鑰

在 Anthropic Console 建立金鑰,用 .env 檔案安全存放。

第一個 Python 請求

用 client.messages.create 與三個必填參數拿到回應。

多輪對話的正確做法

Claude 不記得上一句,對話歷史要自己維護並整包送出。

一個請求的完整旅程

每次與 Claude 的互動都遵循同一個模式,可以拆成五個階段:客戶端把請求送到你的伺服器、伺服器轉發給 Anthropic API、模型處理、回應回到伺服器、再回到客戶端。搞懂這條路之後,不管是設計架構還是除錯,你都知道問題可能卡在哪一段。

使用者的瀏覽器不放金鑰你的伺服器保管 API 金鑰Anthropic APIClaude 模型處理
上排箭頭是請求的去程,下排箭頭是回應的回程。金鑰只存在中間那台伺服器上。

為什麼中間一定要有你的伺服器

  • API 請求必須帶秘密金鑰做身分驗證
  • 金鑰一旦寫進前端程式碼,等於直接公開
  • 任何人都能把金鑰抽出來,拿你的額度發請求

所以正確做法是:網頁或手機 App 先把請求送到你自己的伺服器,再由伺服器帶著安全保管的金鑰去呼叫 Anthropic API。前端從頭到尾碰不到金鑰。

先把 API 金鑰拿到手

console.anthropic.com 登入你的 Anthropic 帳號,依序完成這幾步:

  1. 在主控台右上方找到「Get API Keys」按鈕
  2. 點「Create Key」建立新金鑰
  3. 選擇 workspace 並幫金鑰取個名字,方便日後辨識
  4. 彈出視窗會顯示金鑰,立刻複製保存
金鑰只顯示一次關掉視窗就再也看不到了。不小心關掉的話,把舊金鑰刪除、重新產生一把即可。

環境設定:讓金鑰遠離程式碼

先在 Jupyter notebook 裡安裝需要的套件:

%pip install anthropic python-dotenv

接著在 notebook 同一個資料夾建立 .env 檔案存放金鑰:

ANTHROPIC_API_KEY="your-api-key-here"

這樣金鑰就不會出現在程式碼裡,也不會不小心被 commit 進版本控制。記得把 .env 加進 .gitignore。最後載入環境變數、建立客戶端:

from dotenv import load_dotenv
load_dotenv()

from anthropic import Anthropic

client = Anthropic()
model = "claude-sonnet-4-0"

送出第一個請求

核心是 client.messages.create() 這個函式,它有三個關鍵參數:

  • model:要使用的 Claude 模型名稱
  • max_tokens:回應長度的安全上限,不是目標長度
  • messages:要送給 Claude 的對話歷史

特別說一下 max_tokens:設成 1000 的意思是「最多讓 Claude 生成 1000 個 token」。Claude 不會刻意寫好寫滿,它寫完該寫的就停;只有內容超過上限時,生成才會被中途切斷。

message = client.messages.create(
    model=model,
    max_tokens=1000,
    messages=[
        {
            "role": "user",
            "content": "What is quantum computing? Answer in one sentence"
        }
    ]
)

print(message.content[0].text)

回應物件裡有很多資訊,但你通常只需要生成的文字,用 message.content[0].text 就能取出。除了文字,回應還包含 usage(輸入與輸出的 token 數)和 stop reason(生成為什麼結束:碰到 max_tokens 上限、自然收尾,或撞到預先設定的 stop sequence)。

模型內部的四個階段

請求送進 Anthropic 之後,Claude 對它的處理可以拆成四個階段:斷詞(tokenization)、嵌入(embedding)、脈絡化(contextualization)、生成(generation)。了解這條產線,很多參數的意義會突然清晰起來。

  1. 斷詞:先把你的輸入切成一小塊一小塊的 token,可能是完整的字詞、字詞的一部分、空格或符號。入門階段,可以先粗略把一個詞當成一個 token 來想像。
  2. 嵌入:每個 token 轉換成一長串數字,代表這個詞所有可能的意思。像 quantum 這個詞,可能指物理量的最小單位、量子力學的概念、極微小的東西,也可能指量子計算。
  3. 脈絡化:Claude 依據前後文調整每個嵌入,把「在這句話裡最可能的意思」凸顯出來。
  4. 生成:脈絡化後的結果經過輸出層,算出每個候選詞的機率。Claude 不會永遠選機率最高的那個,而是混合機率與受控的隨機性,讓回應自然又有變化。每選出一個詞,就把它接上序列,整個流程再跑一次。

每生成一個 token,Claude 都會檢查要不要停下來:達到 max_tokens 上限了嗎?生成了代表自然結束的 token 嗎?撞到預先定義的 stop sequence 了嗎?任何一個成立,生成就結束,而結束的原因會寫在回應的 stop reason 裡。這些細節不用背,先熟悉術語與整體流程,之後除錯時你會很感謝現在的自己。

Claude 沒有記憶:多輪對話自己管

這是新手最常踩的雷:Claude 不會儲存任何對話歷史,每個請求完全獨立。你先問「什麼是量子計算」,再追問「再寫一句」,Claude 根本不知道你在指什麼,只會隨機寫一句不相干的話。

想讓對話有上下文,要做兩件事:在程式裡自己維護一份訊息清單,而且每次請求都把完整的對話歷史整包送出,包含 Claude 先前的回覆。這裡示範三個小幫手函式:

def add_user_message(messages, text):
    messages.append({"role": "user", "content": text})

def add_assistant_message(messages, text):
    messages.append({"role": "assistant", "content": text})

def chat(messages):
    message = client.messages.create(
        model=model,
        max_tokens=1000,
        messages=messages,
    )
    return message.content[0].text

實際使用時,流程長這樣:

messages = []

add_user_message(messages, "Define quantum computing in one sentence")
answer = chat(messages)

add_assistant_message(messages, answer)
add_user_message(messages, "Write another sentence")
final_answer = chat(messages)

因為第二次請求帶上了完整脈絡,Claude 就知道「再寫一句」指的是延伸量子計算的定義。這三個小幫手函式之後會一直用到,值得收進你的工具箱。也順帶留意:這種「整包重送」的設計代表對話越長,每次請求的輸入就越大,回應裡的 usage 欄位正好可以幫你追蹤 token 的用量。

參考出處本文取材自 Anthropic 官方 Claude Academy 免費課程「Building with the Claude API」,由酒Ann 消化後以自己的視角重新編寫。想看英文原版課程,可到 Claude Academy 修習。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

可以直接在網頁前端呼叫 Claude API 嗎?
不行。API 請求需要秘密金鑰做身分驗證,金鑰寫進前端程式碼等於直接公開,任何人都能取出並冒用你的額度。一律由自己的伺服器代為呼叫。
max_tokens 是要 Claude 寫到這個長度嗎?
不是。它是安全上限而不是目標長度,Claude 寫完想寫的內容就會自然停下,只有超過上限時生成才會被截斷。
Claude 會記得我上一個請求說過什麼嗎?
不會。每個請求都是獨立的,想維持上下文就要自己維護訊息清單,把完整對話歷史(包含 Claude 先前的回覆)隨每次請求一起送出。
官方 SDK 支援哪些語言?
課程提到 Anthropic 提供 Python、TypeScript、JavaScript、Go 與 Ruby 的官方 SDK,也可以不用 SDK、直接發 HTTP 請求。