messages是用于与模型进行对话的结构化格式。这个格式通常用于对话式接口或应用程序中,以模拟人类与模型之间的多轮对话。messages列表中的每个元素代表一条消息,并包含了角色信息。常见的角色包括system、assistant和user
system
描述: system
消息通常用来向模型提供指导或设定对话的背景和规则。它通常是对话开始时的第一条消息。
作用: 这种消息用于设定模型的行为和语气。例如,它可以告诉模型如何回答问题、使用什么样的语气(如友好、专业等),或者提供额外的上下文信息以指导生成内容。
{"role": "system", "content": "You are a helpful assistant."}
功能: 指导模型的总体行为方式,不会直接出现在对话内容中,但会影响模型的响应风格和语气。
user
描述: user
消息表示用户发给模型的输入或提问,通常包含用户希望得到的具体信息或答案。
作用: 这是对话中的用户输入部分,模型将根据这些输入生成相应的回复。
{"role": "user", "content": "What's the weather like today?"}
功能: 提供模型需要处理和响应的输入或问题。
assistant
描述: assistant
消息表示模型的响应或生成的内容。模型会根据 user
的输入和 system
的指导来生成这些回复。
作用: 这是对话中模型的输出部分,通常包含回答、解释或与用户的互动。
{"role": "assistant", "content": "The weather today is sunny with a high of 25°C."}
功能: 显示模型根据用户的输入和系统设定生成的响应内容。
多轮对话设计
messages
结构设计
messages
通常是一个列表,每个元素是一个字典对象,包含以下两个关键字段:
role
:指示消息的发送者,可以是"system"
、"user"
或"assistant"
。content
:消息的内容,即实际的文本。
role
的具体含义
system
:- 用于设定模型的行为或提供上下文指导。
- 通常在对话开始时使用,用于定义模型的角色、语气或背景信息。
user
:- 用户的输入或问题。
- 表示对话中用户发言的内容。
assistant
:- 模型的回复。
- 表示模型在对话中生成的内容。
实例:
messages = [
{"role": "system", "content": "You are a helpful assistant who answers questions in a concise and friendly manner."},
{"role": "user", "content": "Hello, how are you today?"},
{"role": "assistant", "content": "I'm an AI, so I don't have feelings, but I'm here to help you! How can I assist you today?"},
{"role": "user", "content": "Can you tell me who won the World Cup in 2018?"},
{"role": "assistant", "content": "France won the FIFA World Cup in 2018."},
{"role": "user", "content": "What is the capital of France?"},
]
设定对话上下文:
system
消息设定了模型的角色和语气,这有助于控制模型的输出风格和行为。
记录用户输入和模型响应:
- 每当用户发起新的对话或询问,都会添加一条
"user"
消息。 - 模型根据
"user"
消息生成响应,并作为"assistant"
消息保存。
保留对话历史:
- 通过将所有的对话轮次记录在
messages
列表中,模型可以“看到”之前的上下文,理解用户当前输入的语境,做出相关的回答。
注意事项
控制对话长度:
- 如果对话历史太长,超过了模型的最大输入长度(通常是 2048 或 4096 个 tokens),则需要截断旧的对话内容或省略某些上下文。
- 通常保留最近的几轮对话,以确保模型具有足够的上下文信息。
确保上下文清晰:
- 在多轮对话中,如果用户的输入与前文高度相关,确保
messages
列表保留了相关的上下文(即之前的user
和assistant
消息)。 - 这样可以防止模型误解或丢失上下文。
动态更新 messages
:
- 每次用户输入新的内容后,添加相应的
"user"
消息,然后将模型生成的回复添加为"assistant"
消息。 - 这可以在每轮对话后保持
messages
列表的更新。