framely / community

MIT License
0 stars 2 forks source link

[Bug]: Get error when answer slot value rec #659

Closed Zeng666666 closed 2 years ago

Zeng666666 commented 2 years ago

Is there an existing issue for this?

Make sure you are using Framely on Google Chrome!

Current Behavior

在测试 UM 的 PingPong chatbot 上,定义了 buy ticket intent,但在 try it now 上测试时,当回答 value rec 时提示报错:

image
Failed to get reply: java.lang.NullPointerException
    at io.framely.core.SlotAskAction.run(action.kt:333)
    at io.framely.core.DialogManager.response(execution.kt:104)
    at io.framely.core.DialogManager.response(execution.kt:53)
    at io.framely.sessionmanager.SessionManager.getReply(SessionManager.kt:110)
    at io.framely.dispatcher.FrameController.postResponse(DispatchService.kt:117)
    at jdk.internal.reflect.GeneratedMethodAccessor77.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)

Expected Behavior

不应该报错,应该继续 confirmation 如果把 confirmation 删掉也是这样的报错,不能进入下一个 slot

Use Case

/

Steps To Reproduce

复现方式:

  1. buy ticket
  2. first 或 star wars

Label of org.project

PingPongUS_0906

Framely Link

https://build.framely.ai/org/6284c6f1d3c0469ed06d423c/agent/63171b581468c7bbd206eefa/intent/63171b581468c7bbd206eab4/slot/63171b581468c7bbd206eaaa

Test Case

No response

Additional information

No response

Zeng666666 commented 2 years ago

full log: log_PingPongUS_0906.txt

Zeng666666 commented 2 years ago

等等,我好像发现问题了,我删掉 localDateTime 这个 slot 之后是 work 的,我再试一下加上行不行

Zeng666666 commented 2 years ago

很奇怪,我一个一个测试了一下,如果 frame level confirmation condition 中不加 && localDateTime != null 就是可以 work 的,加上它就会像上面说的那样报错:

image

但是,在过去 work 的 agent 中,这样定义 localTime 是没有问题的:

image

而且新建了一个 intent 只有 localDateTime slot 这样用也是没有问题的:

image
hisunnymay commented 2 years ago

@Zeng666666 我 clone 了一份:PingPongUS_0907,能复现上述报错。尝试把 localDateTime 改为 time,就不会有报错,再把 time 改回 localDateTime 也没有报错,导出代码对比了一下,之前添加的 localDateTime 缺少了一些部分

详见:https://naturali-io.feishu.cn/docx/doxcnNElnWtBaDq3TfIEUxe0wRb

XiaoboYuan commented 2 years ago

image @jfang137 在https://build.framely.ai/org/6284c6f1d3c0469ed06d423c/agent/63171b581468c7bbd206eefa/intent/63171b581468c7bbd206eab4 里面localDateTime的prompt是没有的

jfang137 commented 2 years ago

这个slot的prompt strategy好像是因为是旧数据,展示了个默认值,实际是个空值,刚做了下兼容,再试试 @Zeng666666

Zeng666666 commented 2 years ago

@jfang137 试过了,现在可以了。不过这个 bot 虽然是原来创建的,但这个 Intent BuyTicket 是 6 号新创建的,也会有这种数据的问题吗?而且奇怪的是恰好出现在了 localDateTime 上,如果使用其他的 entity 比如 LocalTime 和 Movie 就没有出现这个问题(不过我目前也只是用过这三个在这个 intent 上)

Zeng666666 commented 2 years ago

那我先 close 了,然后再看看之后还有没有这种情况发生