在使用 Anthropic API 和 Claude 時,有一個您需要理解的關鍵概念:Claude 不會儲存您的任何對話歷史記錄。您發出的每個請求都是完全獨立的,不會記得先前的交流內容。

這意味著,如果您想要進行一個多輪對話,讓 Claude 記住先前訊息中的上下文,您需要自行處理對話狀態。
無狀態對話的問題
假設您問 Claude「什麼是量子計算?」並得到了一個不錯的回應。接著您追問「再寫一句話」——Claude 完全不知道您指的是什麼。它會寫出一句完全隨機的句子,因為它對先前的量子計算討論沒有任何記憶。

多輪對話的運作方式
為了維持對話上下文,您需要做兩件事:
- 在您的程式碼中手動維護一份所有訊息的清單
- 在每個請求中傳送完整的訊息歷史記錄

以下是實際可行的流程:
- 將您的初始使用者訊息傳送給 Claude
- 取得 Claude 的回應,並將其作為助手訊息加入您的訊息清單
- 將您的後續問題作為另一則使用者訊息加入
- 將整個對話歷史記錄傳送給 Claude

建立輔助函式
為了讓對話管理更輕鬆,您可以建立三個輔助函式:
python
def add_user_message(messages, text):
user_message = {"role": "user", "content": text}
messages.append(user_message)
def add_assistant_message(messages, text):
assistant_message = {"role": "assistant", "content": text}
messages.append(assistant_message)
def chat(messages):
message = client.messages.create(
model=model,
max_tokens=1000,
messages=messages,
)
return message.content[0].text整合所有內容
以下是如何使用這些函式來維持對話:
python
# 從空的訊息列表開始
messages = []
# 加入初始使用者問題
add_user_message(messages, "Define quantum computing in one sentence")
# 取得 Claude 的回應
answer = chat(messages)
# 將 Claude 的回應加入對話歷史記錄
add_assistant_message(messages, answer)
# 加入後續問題
add_user_message(messages, "Write another sentence")
# 取得具完整上下文的後續回應
final_answer = chat(messages)現在 Claude 會理解「再寫一句話」指的是擴展量子計算的定義,因為您已經提供了完整的對話上下文。
這些輔助函式在您與 Claude 合作的過程中將非常有用,能讓您更輕鬆地建構出可以在多次交流中維持有意義對話的應用程式。