第 10 页 / 共 100 页 / 飞书修订版 7

4.Multi-Turn conversation

此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)

邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org

==================================================

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

image1.png

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

无状态对话的问题

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

image2.png

多轮对话的工作原理

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

  • 在你的代码中手动维护所有消息的列表
  • 在每次请求时发送完整的消息历史记录
image3.png

以下是实际有效的流程:

  1. 向Claude发送你的初始用户消息
  2. 获取Claude的回复并将其作为assistant消息添加到你的消息列表中
  3. 将你的后续问题作为另一条user消息添加
  4. 将整个对话历史发送给Claude
image4.png

构建辅助函数

为了让对话管理更加简便,你可以创建三个辅助函数:

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

整合所有功能

以下是如何使用这些函数来维持对话的方法:

# 从空消息列表开始

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的工作中将非常有用,让构建能够在多轮交互中维持有意义对话的应用程序变得更加容易。

==================================================



此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org