调用jaseci.walker_yield_delete删除talk walker yield时提示找不到
问题分析
报错Walker talk not found!的核心原因是调用jaseci.walker_yield_delete时使用了不完整的walker标识符。Jaseci中需要通过完整的命名空间(如walker::talk)定位walker,仅用"talk"无法匹配到正确的walker实例。
解决方案
1. 使用完整的walker限定名
将jaseci.walker_yield_delete("talk")修改为完整的walker路径:
jaseci.walker_yield_delete("walker::talk");
如果talk walker是从tesla_ai.jac模块导入且模块有自定义命名空间(比如导入时用import {*} as tesla with './tesla_ai.jac'),则需要用tesla::walker::talk作为参数。
2. 调整调用时机(优化建议)
建议在每个flow开始前执行删除操作,确保新flow的初始状态完全干净:
for flow in flows { // 先清除上一轮的yield实例 jaseci.walker_yield_delete("walker::talk"); std.log("\n==== Testing flow: " + flow["test_name"] + " ===="); // 后续step逻辑... }
3. 结合报告清除(彻底避免残留)
如果需要彻底消除旧响应的干扰,在每个flow开始时同时清除报告数据:
for flow in flows { jaseci.walker_yield_delete("walker::talk"); std.clear_report(); // 清空历史报告 std.log("\n==== Testing flow: " + flow["test_name"] + " ===="); // 后续step逻辑... }
4. 容错处理(可选)
如果不确定是否存在待删除的yield实例,可添加try-catch避免测试中断:
try { jaseci.walker_yield_delete("walker::talk"); } catch e { std.log("No existing talk walker yield to delete: ", e); }
修正后的完整测试代码
import {*} with './tesla_ai.jac'; import {*} with './graph.jac'; import {*} with './nodes.jac'; walker nothing {} test "Testing Flow" with graph::tesla_ai by walker::nothing{ flows = file.load_json("master_test.json"); for flow in flows { // 清除上一轮的yield实例和报告 try { jaseci.walker_yield_delete("walker::talk"); } catch e { std.log("No talk walker yield to clean up: ", e); } std.clear_report(); std.log("\n==== Testing flow: " + flow["test_name"] + " ===="); for step in flow['flow'] { spawn here walker::talk(question = step["query"]); res = std.get_report(); std.log("HERE >>> ", step["query"] , " ==== ", res[-1]); assert(res[-1] == step['response']); } } }
内容的提问来源于stack exchange,提问作者Shawn Jemmott
相关产品推荐
相关产品推荐

