
goose 中如何用 Edit in Place 与 Fork Session 修正走偏的对话方向【免费下载链接】goosean open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM项目地址: https://gitcode.com/GitHub_Trending/goose3/goose在 goose 中持续迭代一个任务时对话经常会在某条消息上走偏要么你发出的 prompt 不清楚、缺少关键信息要么 goose 误解了意图往错误方向执行之后的多轮消息和工具调用都建立在这个错误起点上。继续发消息纠正往往收效有限因为错误起点仍然留在上下文里。goose 提供了两种会话内操作来解决这个问题Edit in Place直接改写历史、从编辑点重新开始Fork Session则在保留原会话的前提下基于编辑后的消息开一条新分支去探索。两者都适用于 goose Desktop 和 goose CLI且会话存储在同一个数据库中Desktop 创建的会话可以在 CLI 中恢复反之亦然。先判断走偏的会话该覆盖还是保留两种操作的后果完全不同选错会导致上下文丢失动手前先按文档给出的适用条件做判断操作对原会话的影响适合的场景Edit in Place当前会话中编辑点之后的所有消息和响应上下文被删除会话从该点继续确认后面的内容不再需要想从某一点彻底重开例如修正最后一条消息里的一个路径Fork Session原会话保持不变新建一个包含编辑点及之前历史的新会话已有不错的进展但想换一种做法希望保留原会话作为参照例如对比两种不同 prompt 的效果文档用一个消息流示例说明 Edit in Place 的截断效果一段有五轮消息的对话编辑第 3 条消息后第 4、5 条的消息与响应上下文全部被删除会话从第 3 条继续。文档还给出两条选择建议可以直接对照自己的情况Preserving Progress当你已经取得良好进展但想尝试不同方向时用 Fork Session。这样如果新方向行不通随时可以回到原会话。When to Edit vs. Interrupt当对话已经走偏时编辑早期消息比用新消息或中断来纠偏更有效——编辑消息是重写历史而中断只影响当前消息之后的对话。在 goose Desktop 中操作两条路径的第一步相同把鼠标悬停在会话中任何一条历史消息上点击出现的Edit按钮在行内编辑器中修改内容再决定保存方式。Edit in Place覆盖当前会话悬停在要修改的历史消息上点击Edit按钮在行内编辑器中修改内容点击Edit in Place保存修改并重新向 goose 提问保存后goose 会删除该消息之后的全部会话历史并基于编辑后的上下文从该点继续响应。需要注意文档中的明确警告Edit in Place 会把编辑点之后的会话历史永久从会话中删除同时移出 goose 的上下文。只有在你不需要 goose 记住编辑点之后的内容时才选这个方式。Fork Session保留原会话开新分支悬停在要修改的历史消息上点击Edit按钮在行内编辑器中修改内容点击Fork Session保存修改并开启新会话也可以使用快捷键CmdEntermacOS或CtrlEnterWindows/Linuxgoose 会创建一个新会话其中包含直到并包括你编辑后的那条消息的对话历史。新会话的显示名带 (edited) 后缀原会话保持原样。这里容易和另一个功能混淆文档专门做了区分Fork Session消息上的 Edit 按钮创建只包含某个编辑点及之前历史的新会话用于从对话的某个特定位置探索不同做法。Duplicate Session会话列表中的 Copy 按钮完整复制整个会话用于保存一个可用的会话或复用其配置。在 goose CLI 中操作CLI 通过goose session的--edit和--fork参数实现同样两个操作。--edit打开的是把整段会话序列化为 YAML 的编辑器优先使用$VISUAL其次$EDITOR都没有时用vi--edit必须与--resume一起使用可以与--fork组合。先找到目标会话的 ID。会话 ID 格式为YYYYMMDD_COUNT可用goose session list查看也可用--name按名称定位会话。CLI 版 Edit in Placegoose session --resume session-id --editsession-id替换为要编辑的会话 ID例如20251108_2。文档给出的完整写法是goose session --resume --session-id 20251108_2 --edit编辑器中 YAML 的编辑方式与 UI 版语义略有差别需要留意编辑并保存后goose 从编辑后的会话继续YAML 中你保留的其后的消息会留在会话和 goose 的上下文中想让 goose忘记后面的消息就从 YAML 中删除对应消息。也就是说CLI 下截断到哪里由你删除哪些 YAML 内容决定而不是自动删除编辑点之后的所有消息。CLI 版 Fork Session--edit与--fork组合使用从编辑结果创建新会话goose session --resume session-id --fork --edit也可以附加--history在恢复时显示此前的消息文档示例goose session --resume --session-id 20251108_2 --fork --edit --history保存编辑后goose 创建包含编辑后对话的新会话并从中恢复原会话保持不变。另外只使用--fork而不加--edit则是不经过编辑的整会话复制相当于 UI 的 Duplicate# Fork 最近的会话 goose session --resume --fork # 按名称 fork 指定会话 goose session --resume --fork --name my-project验证操作是否生效文档给出了两种操作生效后可观察的结果可据此核对Edit in Place编辑点之后的历史不再出现在会话中goose 从编辑后的消息处按新上下文响应UI 版会直接删除后续历史CLI 版以你在 YAML 中留下的消息为准。Fork Session会话列表中出现一个新会话。UI 中新会话名为原会话名加 (edited) 后缀原会话内容不变CLI 中可以用goose session list确认新会话已创建。文档中一个goose session list -l 1的示例输出文档示例实际会话名与 ID 因人而异Available sessions: 20260213_9 - react-migration - 2026-02-13 16:20:37 UTC其中20260213_9就是可用于--session-id的会话 ID。限制与边界删除不可逆UI 版 Edit in Place 对编辑点之后历史的删除是永久性的且移出 goose 上下文操作前确认后面的内容确实不需要。CLI 编辑的截断语义不同CLI 下--edit不会自动删除编辑点之后的消息留在 YAML 里的消息会保留在会话和上下文中需要手动从 YAML 删除。Fork 与 Duplicate 的边界Fork Session 只带编辑点及之前的历史需要完整复制含元数据、provider 与模型配置、扩展配置、recipe 信息时用 Duplicate Session /--fork无--edit。迭代式纠偏文档建议的日常工作方式是先用基础 prompt 起步再根据 goose 的响应边编辑边细化而不是一开始就追求一条完美 prompt结合 Fork Session 可以同时保留验证过的方向。完整操作细节见 In-Session Actions 文档--edit与--fork参数定义见 goose CLI 命令文档会话的恢复与复制操作见 Session Management 文档。【免费下载链接】goosean open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM项目地址: https://gitcode.com/GitHub_Trending/goose3/goose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考