You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jason Agent信念中数值计数器无法更新的问题求助

Jason 3.1 ASL代码数值递增失败的问题修复

我编写了一个用于统计动作执行次数的Jason智能体,ASL代码如下:

last_time(0).
!start.
/* Plans */
+!start : true <-
    ?last_time(X);
    new_t = X + 1;
    .print("take train " , X);
    -+last_time(new_t);
    !start.

运行时出现错误,错误信息:

[test] No failure event was generated for +!start[code((new_t = 1)),code_line(5),code_src("file:src/asl/test.asl"),error(constraint_failed),error_msg("Constraint (new_t = (X+1)); .print("take train ",X); -+last_time(new_t); !start was not satisfied (file:src/asl/test.asl:5) un={X=0}"),source(self)]
intention 1: 
    +!start[source(self)] <- ... (new_t = (X+1)); .print("take train ",X); -+last_time(new_t); !start / {X=0}

注释掉第5行new_t = X + 1;后代码可正常运行,但无法实现数值递增,使用的是Jason 3.1版本。


问题原因

Jason的ASL语言中,直接写new_t = X + 1会被当作统一化约束,而非赋值操作。统一化要求两侧的项完全匹配,new_t是变量,X+1是算术表达式,无法完成匹配,因此触发constraint_failed错误。要完成数值计算并赋值给变量,必须使用Jason内置的.assign内部动作。

修正后的代码

last_time(0).
!start.
/* Plans */
+!start : true <-
    ?last_time(X);
    .assign(new_t, X + 1);  // 用.assign完成数值计算与赋值
    .print("take train ", X);
    -+last_time(new_t);
    !start.

修改说明

  1. 将原来的new_t = X + 1;替换为.assign(new_t, X + 1);,该内部动作会计算右侧算术表达式X+1的结果,并将值赋值给变量new_t。
  2. 其余逻辑保持不变,现在智能体可以正确更新last_time的数值,实现动作执行次数的统计。

内容的提问来源于stack exchange,提问作者Bryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:42:08