涉及场景的结构

1.业务背景

开发了一个App,用户可以和App对话:

用户:我要买手机
App:荣耀V9 4G手机 双卡双待 铂光金 全网通(4GB RAM+64GB ROM) 标配 仅售2888,购买还是换一个?
用户:换一个
App:Apple iphone19 plus 128G 贵族金 移动联通电信 仅售6888元,购买还是换一个?
用户:这个好,来一个
App:已下单。还有其他事吗?
用户:我要退货
App:已找到两个订单,手机iphone19 plus和图书上下五千年,选择哪一个呢?
用户:手机
App:为啥退货啊
用户:太你妹贵了
App:已退货,还有其他事吗?
用户:好无聊
App:逛逛我们的电商,里面有很多你想不到的
... ...

2.时序图

3.分析

2.1分解:
场景(Scene)和事件(Event)。
2.2定义:
这里有两个场景:购物和退货,每个场景里面有N个事件,定义如下:
scene_shopping={evnt_buy, evnt_next, evnt_submit, evnt_invalid}
scene_retreat={evnt_retreat, evnt_chose, evnt_reason, evnt_invalid}
2.3代码结构
2.3.1服务service层

/**
 * 购物服务
 */
interface ShoppingService {
    // 查询商品
    void searchProd();
    // 提交
    void submit();
}
/**
 * 退货服务
 */
interface RetreatService {
    // 查询订单
    void searchOrder();
    // 提交
    void submit();
}

2.3.2NLU层

/**
 * 分析服务<br>
 */
interface AnalysisService {
    /*
     * 分析,返回场景和事件;<br>
     * 需要存储场景信息,分析信息。<br>
     */
    void analyse();
}

2.3.3Controller层

/**
 * 理解控制器
 */
interface UnderstandController {
    /*
     * 处理输入;<br>
     * 根据NLU返回的信息,自己判断调用哪个服务service,也就是把场景的事件和服务service的方法对应起来;<br>
     * 拿到服务service数据也需要存储起来。<br>
     */
    void handle(String txt);
}

2.3.4DB/Redis层

 存储或缓存用户在App交流过程的中信息。

posted @ 2017-04-01 19:11  wbinbin  阅读(134)  评论(0)    收藏  举报