多轮对话
多轮对话是大模型最常见的使用场景之一。本文介绍如何构建多轮上下文、消息格式规范以及生产环境中的历史管理策略。
工作原理
大模型 API 是无状态的——服务端不保存任何对话历史。每次请求都是独立的,模型不会"记住"之前的对话内容。
要实现多轮对话,需要在每次请求时将完整的历史消息作为输入传给模型:
第 1 轮:messages = [用户消息1]
第 2 轮:messages = [用户消息1, 助手回复1, 用户消息2]
第 3 轮:messages = [用户消息1, 助手回复1, 用户消息2, 助手回复2, 用户消息3]
每 一轮的 messages 数组都包含了之前所有的对话记录,模型根据完整上下文生成回复。
备注
这意味着随着对话轮次增加,输入的 Token 数量会持续增长,直接影响调用成本和响应速度。后文的历史管理策略会介绍如何解决这个问题。
消息格式
消息列表 messages 是一个数组,每条消息包含 role(角色)和 content(内容)两个核心字段:
[
{ "role": "system", "content": "你是一个专业的翻译助手" },
{ "role": "user", "content": "把「你好」翻译成英文" },
{ "role": "assistant", "content": "Hello" },
{ "role": "user", "content": "再翻译成日文" }
]