大模型多轮对话配置:从零搭建带上下文记忆的接口

多轮对话配置的本质,是在每次请求时把历史对话按顺序重新发给模型,让模型根据完整上下文生成回复。
大模型 API 本身通常不保存会话状态,所谓“记忆”需要你在客户端或服务端维护一个消息列表。
本文以 OpenAI 兼容接口为例,讲清楚从零配置多轮对话的步骤、代码和排错方法,适用于刚接触大模型 API 的开发者。

先确认接口格式和运行环境

大多数大模型服务商提供 OpenAI 兼容的 /v1/chat/completions 接口。
开始前需要准备三样东西:

  • 一个可用的 API Key,以及服务商提供的 Base URL(例如 https://api.example.com/v1,请替换为你实际使用的地址)
  • 支持 HTTP 请求的运行环境,本文用 Python 3.8 及以上版本演示
  • 安装 requests 库:pip install requests

关键概念先理清:多轮对话请求体中的 messages 是一个数组,每个元素包含 role 和 content。role 通常取 system(系统设定)、user(用户输入)、assistant(模型回复)。
模型只根据你本次传入的 messages 生成下一条回复,不会自动记住上一轮。

配置多轮对话的核心步骤

维护消息历史列表

每次用户输入后,把用户消息追加到列表,再连同历史一起发送。
收到回复后,把助手回复也追加进去,供下一轮使用。
下面是一个最小可运行示例:

import requests

API_KEY = "你的API Key"
BASE_URL = "https://api.example.com/v1/chat/completions"

messages = [
    {"role": "system", "content": "你是一个简洁的技术助手。"}
]

def chat(user_input):
    messages.append({"role": "user", "content": user_input})
    resp = requests.post(
        BASE_URL,
        headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
        json={"model": "你的模型名称", "messages": messages},
        timeout=60
    )
    resp.raise_for_status()
    reply = resp.json()["choices"][0]["message"]["content"]
    messages.append({"role": "assistant", "content": reply})
    return reply

print(chat("你好,我叫小明"))
print(chat("我叫什么名字?"))

预期结果:第二次调用时模型能回答出“小明”,说明历史消息被正确携带。
如果回答不知道,优先检查 messages 是否在两次调用之间被重置。

控制上下文长度

历史越长,请求 token 越多,成本和延迟都会上升,还可能超出模型上下文上限。
建议在追加消息前做简单裁剪:保留 system 消息,从最早的非系统消息开始丢弃,直到总长度低于你设定的阈值。
不要直接按条数一刀切,因为单条消息长度差异可能很大。

把配置放到服务端

如果面向网页或 App 用户,API Key 不能放在前端。
应在服务端维护会话,例如用会话 ID 对应一个 messages 列表,存到内存或 Redis 中。
每次请求带上会话 ID,服务端取出历史、追加新消息、调用模型、再写回。
注意设置会话过期时间,避免历史无限增长。

容易踩坑的地方

  • 角色顺序错误:messages 中 user 和 assistant 应交替出现,不要把两条 user 消息连续发送,部分服务商会返回 400。
  • 忘记追加助手回复:只追加用户消息,模型会丢失自己上一轮说过什么,表现为前后矛盾。
  • system 消息位置:通常放在数组第一条,部分模型对位置敏感,不要随意插到中间。
  • 超时设置过短:多轮长上下文响应可能较慢,建议客户端超时不低于 30 秒,并根据实际响应调整。
  • 密钥泄露:不要把 API Key 写进前端代码或公开仓库,使用环境变量或服务端配置文件。

验证多轮配置是否生效

配置完成后,按以下顺序检查:

  • 连续发送两轮相关提问,例如先自我介绍再问“我刚才说了什么”,确认模型能引用前文。
  • 打印每次请求的 messages 长度和内容,确认历史在增长且角色交替正确。
  • 用 resp.status_code 和返回体检查是否出现 400、401、429。401 多为密钥问题,429 多为频率或额度限制,400 常见于消息格式或上下文超限。
  • 观察 token 用量是否随轮次合理上升,若异常暴涨,检查是否重复追加了相同历史。

多轮对话配置并不复杂,核心就是“保存历史、按序发送、控制长度、服务端保管密钥”。
先把最小示例跑通,再逐步加入会话存储和裁剪逻辑,遇到报错时优先核对 messages 的结构和角色顺序。

分享到:
上一篇
大模型知识库更新配置:从数据导入到检索验证的完整操作流程
下一篇
大模型Function Calling 入门:从配置到调用验证的实操流程
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意