完全懂!核心就是先跑通「线性循环」的基础逻辑,把DFS/栈/递归这些复杂的算法逻辑彻底后置——现在的重点是让模型先学会“按上下文记忆自主完成循环填表”这个基础能力,这是一切的前提,至于后续的DFS栈式探索,本质只是在这个基础循环上,把「待查询列表」换成「栈式结构」,逻辑底层是相通的,现在不用急。
- 当前的线性循环是“地基”:模型现在学会的「提取命令→逐个查询→更新记忆→下一个」,本质是顺序遍历的线性循环,这个逻辑跑通了,后续不管是改DFS(栈)、BFS(队列),只是把「待查询命令」的读取顺序改了(栈是“后进先出”,队列是“先进先出”),核心的「循环+记忆更新」逻辑完全复用,不用重写;
- “教模型栈/递归”不是现在的事:DFS的call stack本质是“把新发现的子命令压到待查询列表头部,优先执行”,这个逻辑现在讲,模型容易乱,不如等线性循环跑通后,只需要在Prompt里改1句话:
待查询命令按“后进先出”执行,新发现的子命令插入待查询列表头部,再给1个极简栈示例,模型就能适配,远比现在硬讲递归/栈容易;
- “预先写格式到Prompt”是权宜之计,也是Prompt Engineering的常态:现阶段为了跑通,针对Evennia的
-- 分类 --格式加1句引导,不是“硬编码”,只是给模型一个“识别特征”,后续换其他游戏,只需要把这个特征换成新游戏的(比如[分类]/分类:),Prompt的核心逻辑不变,这就是灵活性,不是过拟合——毕竟模型的“理解”需要一个“锚点”,我们给的特征就是这个锚点,而非替它做所有判断。
DFS的call stack,本质是把“当前探索的节点/未完成的任务”存在栈里,优先处理最新的任务,对应到我们的逻辑里,就是:
- 原来的线性循环:
待查询命令 = [A,B,C,D](先进先出,查完A查B)
- DFS栈式循环:
待查询命令 = [D,C,B,A](后进先出,新发现的子命令插头部,比如查A发现子命令A1,待查询变成[A1,D,C,B],优先查A1)
而这一切的核心,还是模型自己在updated_context里维护这个“待查询列表”,代码完全不干预——我们现在让模型学会维护“线性列表”,后续只需要微调「列表的读写规则」,就能让它学会维护“栈”,这是一个循序渐进的过程,远比现在直接教“栈/递归/函数调用栈”要容易得多,也不容易出错。
- 第一步(当下):适配Evennia真实help格式,在Prompt里加1句分类识别的轻量引导,跑通线性循环的命令全量学习——核心目标:让模型能自主完成「全局help→逐个查子命令→补全所有命令信息」,无人工干预;
- 第二步(线性循环跑通后):微调Prompt,把「待查询命令的先进先出」改成「后进先出」,给1个极简的栈示例(比如查A发现A1,待查询列表插头部),升级为DFS栈式循环——核心目标:让模型学会优先探索新发现的子命令/新区域,实现深度优先;
- 第三步(DFS跑通后):再加入「重复规避/危险避险」等规则,逐步完善探索逻辑——核心目标:让模型从“只会学命令”变成“会智能探索”。
整个过程,代码一行不改,只靠微调Prompt的规则描述+示例,就能实现从“线性循环”到“DFS栈式探索”的升级——这正是Prompt Engineering的魅力:把算法逻辑的调整,变成对自然语言规则的微调,而不是重写代码。
现在不用想太多复杂的,就专注第一步:把Evennia的真实格式抓来,微调Prompt,跑通线性循环就好!遇到格式识别的问题,我们再针对性调1句引导,稳得很。