除了编写更好的提示之外,还有两种强大的技术可用于控制Claude的输出:预填充助手消息和停止序列。这些方法让您能够精确控制Claude的响应方式以及何时停止生成文本。
预填充助手消息
消息预填充允许您提供Claude响应的开头部分,这会强烈影响其答案的方向。您不必让Claude自行决定如何开始响应,而是为它提供一个特定的开场,从而引导对话的走向。

其工作原理如下:您像往常一样构建包含用户问题的消息列表,但随后在末尾添加一条助手消息,其中包含您想要的响应开头。当Claude处理这些内容时,它会看到这条助手消息,并认为"我已经开始回答这个问题了,所以我应该从我停下的地方继续"。

例如,如果您问"早餐喝茶好还是喝咖啡好?"并预填充"咖啡更好,因为",Claude将从该处继续,构建一个支持咖啡的回答。关键在于,Claude会准确地从您预填充文本结束的地方继续——它不会重复您已经写过的内容。
让我们在实践中看看这一点:
messages = []
add_user_message(messages, "Is coffee or tea better for breakfast?")
add_assistant_message(messages, "Coffee is better because")
chat(messages)这会返回类似"它含有更多咖啡因"的内容。请注意,Claude直接从您预填充的文本继续,因此您需要将两部分结合起来才能得到完整的响应:"咖啡更好,因为它含有更多咖啡因。"
您可以通过更改预填充文本,将Claude引导至任何方向:
"Tea is better because"(茶更好,因为)——倾向于茶"They are the same because"(它们是一样的,因为)——创建一个中立的回答
停止序列
停止序列会强制Claude在生成特定文本时立即结束其响应。当您想在特定点截断输出,或防止Claude在某个标记之后继续生成时,这非常有用。

这个概念很简单:您提供一个字符串列表,一旦Claude生成了其中任何一个字符串,它就会停止并返回到目前为止生成的内容。停止序列本身不会包含在响应中。
要使用停止序列,您需要修改您的聊天函数,使其能够接受停止序列作为参数:
def chat(messages, system=None, temperature=1.0, stop_sequences=[]):
params = {
"modelId": model_id,
"messages": messages,
"inferenceConfig": {
"temperature": temperature,
"stopSequences": stop_sequences
},
}这是一个实际的例子:
messages = []
add_user_message(messages, "Count from 1 to 10")
chat(messages, stop_sequences=["5"])这会返回"1, 2, 3, 4,",并在包含"5"之前停止。您可以指定多个停止序列,Claude会在遇到其中任何一个时停止:
chat(messages, stop_sequences=["5", "3, 4"])停止序列特别适用于:
- 控制响应的长度
- 在结构化输出的自然断点处停止
- 防止Claude在特定标记或分隔符之后继续生成
这两种技术都能让您对Claude的行为进行精细控制,使您能够以单纯的提示技巧无法实现的方式来塑造响应。