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

10.Controling model output

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

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

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

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

预填充助手消息

消息预填充允许您提供Claude响应的开头部分,然后Claude会从该起始点继续生成内容。这种技术对于引导Claude朝特定方向发展非常有用。

image1.png

工作原理如下:您不仅仅发送用户消息,还要在消息列表的末尾添加一个助手消息。Claude看到这个助手消息后会想"我已经开始回答这个问题了,所以我应该从我停下的地方继续"。

image2.png

例如,如果您问"早餐时茶还是咖啡更好?"而不使用预填充,Claude通常会给出提及两种选择的平衡回答。但如果您添加一个助手消息说"咖啡更好,因为",Claude就会从那里继续并为咖啡建立论据。

需要理解的关键点是,Claude会从您预填充文本结束的确切位置继续。如果您写"咖啡更好,因为",Claude不会重复这段文本——它会从"因为"之后直接接续并完成这个想法。

代码结构如下:

messages = []

add_user_message(messages, "Is tea or coffee better at breakfast?")

add_assistant_message(messages, "Coffee is better because")

answer = chat(messages)

你可以使用这种技术将Claude引导到任何方向:

  • 偏向咖啡:"咖啡更好,因为"
  • 偏向茶:"茶更好,因为"
  • 采取反对立场:"两者都不太好,因为"

Stop Sequences

停止序列会强制Claude在生成特定字符串时立即结束响应。这非常适合控制响应的长度或结束点。

image3.png

这个概念很简单:你提供一个字符串列表,一旦Claude生成其中任何一个字符串,它就会立即停止响应。停止序列本身不会包含在最终响应中。

例如,如果你要求Claude"从1数到10",并设置停止序列为"5",你会得到:

1, 2, 3, 4,

生成会在"5"之前停止,因为那是你的停止序列。

要实现停止序列,你需要修改聊天函数以接受一个 stop_sequences 参数:

def chat(messages, stop_sequences=[]):

# 将 stop_sequences 添加到你的 API 调用参数中

然后像这样使用它:

messages = []

add_user_message(messages, "Count from 1 to 10")

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

你可以精确调整停止发生的位置。如果你想避免尾随标点符号,可以使用更具体的停止序列,比如 ", 5" 而不是仅仅 "5"。

实际应用

这些技术特别适用于:

  • 一致的格式:使用预填充确保响应始终以特定结构开始
  • 控制长度:使用停止序列在自然断点处限制响应长度
  • 有倾向性的响应:当你需要Claude采取特定立场而不是保持中立时
  • 结构化输出:结合两种技术来生成符合特定模板的响应

预填充消息和停止序列都为你提供了对Claude行为的精细控制,使它们成为构建可靠AI应用程序的重要工具。

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



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