DeepSeek 流式对话平台上下文记忆功能实现报告

改造目标

在原有“单轮对话”基础上,实现“多轮上下文记忆”功能,即每次提问时携带前文对话历史。

改造内容一览

模块原有逻辑改造后逻辑
前端发送逻辑每次仅发送用户当前提问每次发送所有历史对话(包括 AI 回复)
后端接口接收只接收 String message(一轮内容)接收 String messagesJson,反序列化为对话列表
请求构造messages=[{role: user, content: xxx}]messages=[{role: system}, {role: user}, {role: assistant}, ...]

前端改造(sendMessage 方法)

 改造点

将当前所有对话内容打包为 JSON,作为参数发送给后端

 修改代码片段

const sendMessage = (message) => {
  // 1. 推入用户输入
  chats.value.push({
    role: 'user',
    content: message,
    ...
  });

  // 2. 推入占位 assistant 回复
  chats.value.push({
    role: 'assistant',
    content: '',
    status: 'loading',
    ...
  });

  // 3. 组装上下文消息:user + assistant 组成的 messages 数组
  const messagesPayload = chats.value.map(({ role, content }) => ({ role, content }));

  // 4. 序列化为 JSON 传给后端
  const eventSource = new EventSource(`/api/stream?message=${encodeURIComponent(JSON.stringify(messagesPayload))}`);

  eventSource.onmessage = (event) => {
    ...
  };
};

后端改造(getAiResult() 方法)

改造点

接收完整的历史消息 JSON,解析为 List,传给 DeepSeek

 修改后完整代码片段:

private void getAiResult(PrintWriter pw, String messagesJson) throws InterruptedException {
    // 1. 解析前端传来的 JSON 字符串为 List<Map<String, String>>
    List<Map<String, String>> messages = JsonUtils.parseJsonList(messagesJson);

    // 2. 构造请求参数,添加预设 system 消息
    Map<String, Object> params = new HashMap<>();
    params.put("model", "deepseek-chat");
    params.put("stream", true);

    // 预设角色:经验丰富的小学学习辅导 AI
    Map<String, String> systemMessage = new HashMap<>();
    systemMessage.put("role", "system");
    systemMessage.put("content", "你是一名经验丰富的小学学习辅导AI助手,擅长用浅显易懂的语言解答学生问题。");

    messages.add(0, systemMessage); // 插入到最前
    params.put("messages", messages);

    // 发起 SSE 请求
    String jsonParams = JsonUtils.convertObj2Json(params);
    ...
}

工具类 JsonUtils 补充方法

 解析前端传来 JSON 数组的工具方法

public static List<Map<String, String>> parseJsonList(String json) {
    try {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.readValue(json, new TypeReference<List<Map<String, String>>>() {});
    } catch (Exception e) {
        throw new RuntimeException("JSON 解析失败", e);
    }
}

实现效果

  • AI 每轮对话都基于完整上下文进行理解与生成。

  • 支持预设角色影响全局行为风格。

  • 可灵活扩展为带历史记录管理的对话系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值