You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中chat_gpt_sdk无法延续对话,如何获取历史交互记录?

解决Flutter中chat_gpt_sdk无法维持多轮对话的问题

问题根源

你当前使用的CompleteText属于文本补全接口,本身是无状态的,每次请求都是独立调用,不会自动保留历史对话上下文,因此无法直接实现连续对话。

解决方案

方法1:手动维护历史上下文(适配现有CompleteText接口)

  1. 创建列表存储历史对话记录:
List<Map<String, String>> chatHistory = [];
  1. 编写方法拼接历史对话到新请求的prompt中:
String buildPrompt(String newUserMessage) {
  String prompt = "";
  for (var chat in chatHistory) {
    prompt += "用户: ${chat['user']}\nAI: ${chat['ai']}\n";
  }
  prompt += "用户: $newUserMessage";
  return prompt;
}
  1. 发起请求并保存本次对话到历史:
// 构建包含历史的请求
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类,无需手动拼接上下文:

  1. 初始化对话消息列表,每条消息需指定角色:
List<Map<String, String>> chatMessages = [
  {"role": "user", "content": "你的初始问题"},
];
  1. 发起对话请求:
final request = ChatCompleteText(
  messages: chatMessages,
  maxTokens: 100,
  model: GptTurbo0301Model(), // 选择对话专用模型,不要用翻译模型
);

final response = await chatGPT!.onChatCompletion(request: request);
  1. 将AI的响应添加到消息列表,用于下一轮对话:
if (response?.choices.isNotEmpty == true) {
  chatMessages.add({
    "role": "assistant",
    "content": response!.choices[0].message.content
  });
}

后续发起新请求时,直接复用chatMessages列表即可,接口会自动处理上下文逻辑。

注意事项

  • 使用对话接口时,需选择适配的模型(如GptTurbo0301Model),翻译模型(kTranslateModelV3)不适合多轮对话场景。
  • 所有请求的总token数不能超过模型上限,历史对话过长时需做截断处理,保留最近的核心对话内容。

内容的提问来源于stack exchange,提问作者Graven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:48:25