用API实现多轮对话
入门·10 分钟·通过可运行代码讲解「用API实现多轮对话」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。
用API实现多轮对话
多轮对话不是简单地连续调用 API。模型本身不会自动记住你程序里的历史,你必须把必要的上下文组织进 messages 中。
单轮和多轮的区别
单轮调用只包含当前问题:
messages = [{'role': 'user', 'content': '什么是RAG?'}]
多轮对话需要保留历史:
messages = [
{'role': 'user', 'content': '什么是RAG?'},
{'role': 'assistant', 'content': 'RAG 是检索增强生成...'},
{'role': 'user', 'content': '它和微调有什么区别?'}
]
第二个问题里的“它”依赖上一轮上下文,所以必须传历史。
基本实现结构
messages = [
{'role': 'system', 'content': '你是一个耐心的 AI 学习助手'}
]
while True:
user_input = input('你:')
if user_input.lower() in ['exit', 'quit']:
break
messages.append({'role': 'user', 'content': user_input})
answer = call_model(messages)
print('AI:', answer)
messages.append({'role': 'assistant', 'content': answer})
其中 call_model 是你封装的 API 调用函数。
控制上下文长度
历史消息越多,token 越多,成本越高,也可能超过模型上下文窗口。常见处理方式是只保留最近 N 轮、对较早历史做摘要、只保留和当前任务相关的信息。
给对话加状态
很多业务对话需要状态,例如用户已经选择了产品、填写了地址、确认了预算。不要只依赖模型从长文本里猜状态,最好在程序中维护结构化状态。
state = {
'product': None,
'budget': None,
'confirmed': False
}
小结
多轮对话的关键是上下文管理。你要决定保存什么、丢弃什么、摘要什么,以及哪些状态必须由程序可靠保存。