加载中

在使用 Anthropic API 和 Claude 时,有一个您需要理解的关键概念:Claude 不会存储您的任何对话历史。您发出的每个请求都是完全独立的,没有对先前交流的记忆。

这意味着,如果您想进行一次多轮对话,让 Claude 记住之前消息中的上下文,您需要自己处理对话状态。

无状态对话的问题

假设您问 Claude"什么是量子计算?"并得到了一个很好的回答。然后您接着问"再写一句话"——Claude 完全不知道您指的是什么。它会写一句关于完全随机内容的句子,因为它对之前关于量子计算的讨论没有任何记忆。

多轮对话的工作原理

要维持对话上下文,您需要做两件事:

  • 在您的代码中手动维护一份包含所有消息的列表
  • 在每次请求时发送完整的消息历史

以下是实际有效的流程:

  1. 将您的初始用户消息发送给 Claude
  2. 获取 Claude 的回复,并将其作为助手消息添加到您的消息列表中
  3. 将您的后续问题作为另一条用户消息添加进去
  4. 将整个对话历史发送给 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 的整个过程中都会很有用,能让您更轻松地构建可以在多次交流中保持有意义对话的应用程序。