ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SolonCode 的两个“后悔药“:重新运行 vs 继续运行

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