10.Controling model output
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
除了编写更好的提示词之外,还有两种强大的技术可以控制Claude的输出:预填充助手消息和停止序列。这些方法让您能够精确控制Claude如何响应以及何时停止生成文本。
预填充助手消息
消息预填充允许您提供Claude响应的开头部分,然后Claude会从该起始点继续生成内容。这种技术对于引导Claude朝特定方向发展非常有用。

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

例如,如果您问"早餐时茶还是咖啡更好?"而不使用预填充,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在生成特定字符串时立即结束响应。这非常适合控制响应的长度或结束点。

这个概念很简单:你提供一个字符串列表,一旦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