SolonCode“重新运行”与“继续运行”功能揭秘:实现、场景及联动机制全解析

📅 2026/8/24 22:06:35
SolonCode“重新运行”与“继续运行”功能揭秘:实现、场景及联动机制全解析
SolonCode 聊天界面“重新运行”与“继续运行”功能大揭秘实现原理、场景应用及联动机制在 SolonCode Web 聊天界面底部工具栏从左到右有三个按钮1.Cop复制上一条回复内容。2.Re - run重新运行删除旧回答重新跑一轮。3.Continue继续运行保留旧回答继续追加内容。这两个按钮外观相似但行为迥异。下面深入拆解它们的实现。重新运行Re - run-行为删除旧的气泡用同样的输入重新跑一遍。-使用场景一是 AI 答错了想让它重新回答二是想换个角度重新问。-实现原理源码在 RerunCommand.java。逆向遍历消息列表找到最后一个 UserMessage。若找到获取其内容删除它之后的所有 AI 响应然后用同样的输入重新跑一遍。java// 逆向遍历消息列表找到最后一个 UserMessageListChatMessage messageList session.getMessages();String lastUserInput null;while (!messageList.isEmpty()) { ChatMessage msg messageList.get(messageList.size() - 1); if (msg instanceof UserMessage) { lastUserInput msg.getContent(); session.removeLatestMessage(1); break; } session.removeLatestMessage(1);}// 重新运行输入相同if (lastUserInput ! null) { ctx.runAgentTask(lastUserInput, null);}-核心逻辑逆向遍历找到最后一个用户消息删除它之后的所有 AI 响应然后用同样的输入重新跑一遍。-结果新回答完全替换旧回答。继续运行Continue-行为保留旧的气泡在旧回答后面继续追加新内容。-使用场景一是 AI 答到一半断了比如 token 限制二是想让 AI 继续写下去三是旧回答不完整想让它补充。-实现原理源码在 ContinueCommand.java。检查 trace 状态必须是 ID_END已完成将 route 重置为 ID_REASON回到思考阶段清空 finalAnswer让 AI 重新生成回退最后一条 AI 消息用空的输入继续运行。javaReActTrace trace session.getContext().getAs(__main);if (trace ! null) { if (Agent.ID_END.equals(trace.getRoute())) { // 说明有结束节点重新回到思考点 trace.setRoute(ReActAgent.ID_REASON); trace.setFinalAnswer(null, false); ChatMessage workMessage trace.getWorkingMemory().getLastMessage(); if (workMessage instanceof AssistantMessage) { trace.getWorkingMemory().removeLastMessage(); } // 回退一条 ai 历史消息要重新生成 ListChatMessage messageList session.getMessages(); if (Assert.isNotEmpty(messageList) messageList.get(messageList.size() - 1) instanceof AssistantMessage) { session.removeLatestMessage(1); } }}ctx.runAgentTask(null, null);-核心逻辑1. 检查 trace 状态必须是 ID_END已完成。2. 将 route 重置为 ID_REASON回到思考阶段。3. 清空 finalAnswer让 AI 重新生成。4. 回退最后一条 AI 消息。5. 用空的输入继续运行。-结果旧气泡保留新内容追加在后面。两个按钮的对照表维度Re - run重新运行Continue继续运行是否删除旧响应✅ 删除❌ 保留是否清空历史✅ 剥除后续消息❌ 保留完整历史是否重置 trace✅ 重置❌ 仅重置 route输入同一个用户输入空输入适用场景答错了想重答答到一半断了是否可链式操作可再 Re - run可再 Continue三个具体场景场景 AAI 答错了-问题1 1 ? AI 回答3。-操作点击 Re - run。-结果一是旧气泡3被删除二是新气泡2出现三是历史回到问题本身。场景 BAI 答到一半断了-问题长文本生成到一半断了。-操作点击 Continue。-结果一是旧气泡保留已生成的部分二是新气泡追加在后面三是内容无缝衔接。场景 C先 Re - run 再 Continue-问题想换个思路但保留部分内容。-操作1. 点击 Re - run - 得到新回答 A2. 点击 Continue - 在 A 后面追加 B。-结果最终有两个气泡A 和 B 都是新内容。runId 联动机制两个按钮都依赖一个关键字段runId。-作用同一轮对话的所有气泡共享同一个 runId。-联动效果一是 Re - run 时删除该 runId 下的所有气泡二是 Continue 时新气泡也使用同一个 runId。-实现在 Web UI 中每个气泡都有 data - run - id 属性。Re - run 时JS 会删除所有 data - run - id 等于指定 runId 的元素。htmldiv classmessage data - run - idabc123 !-- 内容 --/divjavascript$([data - run - id runId ]).remove();-好处一是用户看到的是一整轮对话二是不需要手动删除单个气泡三是保持了对话的原子性。三端可用这两个命令不仅存在于 Web UI还有三个入口1.CLI 命令行plaintextsoloncode /rerun # 重新运行soloncode /continue # 继续运行2.Web UI点击工具栏的 Re - run / Continue 按钮。3.IM 机器人在飞书/钉钉/微信中输入 /rerun 或 /continue。总结-Re - run删除旧回答 同输入重跑。-Continue保留旧回答 空输入续跑。两个命令底层实现完全不同但都通过 runId 联动保持对话完整性。掌握这两个“后悔药”能让 AI 对话更流畅出错也能快速修正。