加载中

除了编写更好的提示之外,还有两种强大的技术可用于控制Claude的输出:预填充助手消息和停止序列。这些方法让您能够精确控制Claude的响应方式以及何时停止生成文本。

预填充助手消息

消息预填充允许您提供Claude响应的开头部分,这会强烈影响其答案的方向。您不必让Claude自行决定如何开始响应,而是为它提供一个特定的开场,从而引导对话的走向。

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

例如,如果您问"早餐喝茶好还是喝咖啡好?"并预填充"咖啡更好,因为",Claude将从该处继续,构建一个支持咖啡的回答。关键在于,Claude会准确地从您预填充文本结束的地方继续——它不会重复您已经写过的内容。

让我们在实践中看看这一点:

python
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生成了其中任何一个字符串,它就会停止并返回到目前为止生成的内容。停止序列本身不会包含在响应中。

要使用停止序列,您需要修改您的聊天函数,使其能够接受停止序列作为参数:

python
def chat(messages, system=None, temperature=1.0, stop_sequences=[]):
    params = {
        "modelId": model_id,
        "messages": messages,
        "inferenceConfig": {
            "temperature": temperature,
            "stopSequences": stop_sequences
        },
    }

这是一个实际的例子:

python
messages = []
add_user_message(messages, "Count from 1 to 10")

chat(messages, stop_sequences=["5"])

这会返回"1, 2, 3, 4,",并在包含"5"之前停止。您可以指定多个停止序列,Claude会在遇到其中任何一个时停止:

python
chat(messages, stop_sequences=["5", "3, 4"])

停止序列特别适用于:

  • 控制响应的长度
  • 在结构化输出的自然断点处停止
  • 防止Claude在特定标记或分隔符之后继续生成

这两种技术都能让您对Claude的行为进行精细控制,使您能够以单纯的提示技巧无法实现的方式来塑造响应。