在使用 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 的整个过程中都会很有用,能让您更轻松地构建可以在多次交流中保持有意义对话的应用程序。