Flutter中chat_gpt_sdk无法延续对话,如何获取历史交互记录?
解决Flutter中chat_gpt_sdk无法维持多轮对话的问题
问题根源
你当前使用的CompleteText属于文本补全接口,本身是无状态的,每次请求都是独立调用,不会自动保留历史对话上下文,因此无法直接实现连续对话。
解决方案
方法1:手动维护历史上下文(适配现有CompleteText接口)
- 创建列表存储历史对话记录:
List<Map<String, String>> chatHistory = [];
- 编写方法拼接历史对话到新请求的prompt中:
String buildPrompt(String newUserMessage) { String prompt = ""; for (var chat in chatHistory) { prompt += "用户: ${chat['user']}\nAI: ${chat['ai']}\n"; } prompt += "用户: $newUserMessage"; return prompt; }
- 发起请求并保存本次对话到历史:
// 构建包含历史的请求 final request = CompleteText( prompt: buildPrompt("My new input message"), maxTokens: 100, model: kTranslateModelV3 ); final response = await chatGPT!.onCompleteText(request: request); // 保存对话记录 if (response?.text.isNotEmpty == true) { chatHistory.add({ 'user': "My new input message", 'ai': response!.text }); }
方法2:使用ChatCompletion接口(更推荐,原生支持对话)
chat_gpt_sdk提供了专为多轮对话设计的ChatCompleteText类,无需手动拼接上下文:
- 初始化对话消息列表,每条消息需指定角色:
List<Map<String, String>> chatMessages = [ {"role": "user", "content": "你的初始问题"}, ];
- 发起对话请求:
final request = ChatCompleteText( messages: chatMessages, maxTokens: 100, model: GptTurbo0301Model(), // 选择对话专用模型,不要用翻译模型 ); final response = await chatGPT!.onChatCompletion(request: request);
- 将AI的响应添加到消息列表,用于下一轮对话:
if (response?.choices.isNotEmpty == true) { chatMessages.add({ "role": "assistant", "content": response!.choices[0].message.content }); }
后续发起新请求时,直接复用chatMessages列表即可,接口会自动处理上下文逻辑。
注意事项
- 使用对话接口时,需选择适配的模型(如
GptTurbo0301Model),翻译模型(kTranslateModelV3)不适合多轮对话场景。 - 所有请求的总token数不能超过模型上限,历史对话过长时需做截断处理,保留最近的核心对话内容。
内容的提问来源于stack exchange,提问作者Graven
相关产品推荐
相关产品推荐

