在使用 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 的 API 呼叫都是獨立的。如果您想要對話上下文,您必須:
- 在您的應用程式中本地儲存所有訊息
- 在每個請求中傳送完整的訊息歷史記錄
- 使用「user」和「assistant」角色正確格式化訊息
這些輔助函式在您使用 Claude 的整個過程中都將是必不可少的,它們能讓您更輕鬆地建立感覺像是自然對話,而非孤立問答交流的應用程式。