All Projects → baidu → Unit Uskit

baidu / Unit Uskit

Licence: apache-2.0
unit-uskit

Projects that are alternatives of or similar to Unit Uskit

Variational-Transformer
Variational Transformers for Diverse Response Generation
Stars: ✭ 79 (-59.9%)
Mutual labels:  dialog, dialogue-systems
Talkit
Non-Linear Game Dialogue Editor
Stars: ✭ 83 (-57.87%)
Mutual labels:  dialog, dialogue-systems
Dialogue
Node based dialogue system
Stars: ✭ 207 (+5.08%)
Mutual labels:  dialogue-systems, dialog
permuted-bAbI-dialog-tasks
Dataset for 'Learning End-to-End Goal-Oriented Dialog with Multiple Answers' EMNLP 2018
Stars: ✭ 17 (-91.37%)
Mutual labels:  dialog, dialogue-systems
Gonorth
GoNorth is a story and content planning tool for RPGs and other open world games.
Stars: ✭ 289 (+46.7%)
Mutual labels:  dialogue-systems, dialog
Deeppavlov
An open source library for deep learning end-to-end dialog systems and chatbots.
Stars: ✭ 5,525 (+2704.57%)
Mutual labels:  bot, dialogue-systems
few shot dialogue generation
Dialogue Knowledge Transfer Networks (DiKTNet)
Stars: ✭ 24 (-87.82%)
Mutual labels:  dialog, dialogue-systems
dialogue-datasets
collect the open dialog corpus and some useful data processing utils.
Stars: ✭ 24 (-87.82%)
Mutual labels:  dialog, dialogue-systems
Unit Dmkit
Stars: ✭ 279 (+41.62%)
Mutual labels:  bot, dialogue-systems
Rakugo Archive
Framework (inspired by Ren'Py) for story driven games in Godot.
Stars: ✭ 291 (+47.72%)
Mutual labels:  dialogue-systems, dialog
Eddi
Scalable Open Source Chatbot Platform. Build multiple Chatbots with NLP, Behavior Rules, API Connector, Templating. Developed in Java, provided with Docker, orchestrated with Kubernetes or Openshift.
Stars: ✭ 171 (-13.2%)
Mutual labels:  bot, dialog
Supremeaio
Supreme Bot - All in one checkout Tool
Stars: ✭ 191 (-3.05%)
Mutual labels:  bot
Red Discordbot
A multi-function Discord bot
Stars: ✭ 2,855 (+1349.24%)
Mutual labels:  bot
Icopy
fclone telegram interface.Send commands to Telegram BOT for get a convience way to control fclone resources copy missions.
Stars: ✭ 188 (-4.57%)
Mutual labels:  bot
Gh Polls Bot
Automatically create polls in GitHub issues.
Stars: ✭ 187 (-5.08%)
Mutual labels:  bot
Device Detector Js
A precise user agent parser and device detector written in TypeScript
Stars: ✭ 193 (-2.03%)
Mutual labels:  bot
Delbot
It understands your voice commands, searches news and knowledge sources, and summarizes and reads out content to you.
Stars: ✭ 191 (-3.05%)
Mutual labels:  bot
Sweetalert2
A beautiful, responsive, highly customizable and accessible (WAI-ARIA) replacement for JavaScript's popup boxes. Zero dependencies.
Stars: ✭ 13,929 (+6970.56%)
Mutual labels:  dialog
Bot Connector
Bot Connector allows you to connect your bot to multiple messaging channels.
Stars: ✭ 185 (-6.09%)
Mutual labels:  bot
Instauto
Instagram bot / automation library written in Javascript for Node.js
Stars: ✭ 184 (-6.6%)
Mutual labels:  bot

USKit

简介

在真实的对话系统中,通常会要求同时支持多种对话技能,比如育儿对话机器人中要求同时支持音乐、故事、古诗、百科等技能。这涉及到多个技能的管理、召回、排序和选择等策略,在具体的实现中,通常由一个统一调度对话中控US (Unified Scheduler) 来提供这些能力。

USKit作为UNIT的开源对话中控模块,主要负责多个对话技能的接入、调度、排序、选择、回复生成以及多轮对话session的管理,无缝对接UNIT平台能力,可以方便开发者通过配置快速搭建和定制符合自己业务场景的对话中控,将多种技能整合为统一的对话机器人为用户提供服务。

主要功能

核心概念

在开始之前,我们先定义以下两个概念:

  1. 对话技能(bot skill):指某个特定场景下的对话能力,一个对话技能对应一个具体的对话场景,比如天气技能负责提供天气场景下的对话能力。
  2. 对话机器人(bot service):由多个对话技能整合而成的统一对话服务,可以同时支持多个对话场景的人机对话,一个对话机器人对应一个具体业务的整体解决方案,比如车载对话机器人、育儿对话机器人等。USKit提供的正是快速搭建对话机器人的能力。

功能介绍

USKit作为UNIT的开源中控模块,通过配置驱动和内置表达式运算支持,提供了以下能力:

  • 支持配置表达式运算,内置常用函数,提供丰富的表达能力,通过修改配置即可轻松实现策略的定制
  • 支持定义后端服务的请求构造和接入策略(后端服务泛指各种通过网络访问的远程服务,比如UNIT技能、DMKit服务、Redis session服务等),支持的通信协议包括HTTP和Redis
  • 支持定义后端服务结果的抽取(extract)和变换(transform)策略
  • 支持定义多种对话技能的排序(ranking)和选择策略
  • 支持定义对话中控流程(chatflow)策略
  • 内置UNIT技能协议请求构造和结果解析策略的配置支持,只需配置技能id即可实现对话技能的快速接入

架构

USKit针对对话中控的能力做了抽象,抽取出不同对话场景中下中控的通用能力,避免不必要的重复开发。同时按照配置化驱动和高扩展性的思想进行整体架构的设计,方便开发者通过配置快速构建和定制适用于特定业务场景的对话中控。USKit的整体架构如下图:

USKit整体架构

系统主要由以下4个核心部分组成:

  • 表达式引擎:负责表达式的解析和执行求值,详细的运算支持可以参见配置表达式运算支持,表达式引擎为下面三个引擎提供了基础支持,基于表达式引擎,可以实现根据用户请求动态生成配置
  • 后端服务管理引擎:负责后端服务的接入、请求构造和结果解析抽取等策略的管理,通过backend.conf进行策略的配置
  • 排序策略管理引擎:负责技能的排序规则的管理,用于多技能的排序,通过rank.conf进行策略的配置
  • 对话流程管理引擎:负责对话中控流程的策略的管理,用于定义机器人中控的逻辑执行流程:包括调用后端服务引擎召回技能(recall)、调用排序引擎进行技能排序(rank)、结果选择和输出等,通过flow.conf进行策略的配置

开发者在使用USKit的时候,只需配置上述3个配置文件,即可完成对话中控的搭建,后续策略的变动和升级也通过修改配置文件即可完成,可以让开发者关注对话机器人中控本身的策略逻辑,不需要重复开发框架代码

3个配置文件的详细说明可以参考详细配置说明

安装

编译

从GitHub获取USKit的源代码:

git clone https://github.com/baidu/unit-uskit.git
cd unit-uskit

安装依赖

USKit基于以下工具包进行开发:

  • brpc
  • protobuf
  • flex >= 2.6.4
  • bison >= 3.0.4
  • cmake >= 2.8.10

目前支持macOS,Ubuntu,CentOS等系统环境,Ubuntu 推荐使用16.04或以上版本,CentOS 推荐使用7以上版本, 编译USKit前请确保对应版本的依赖已经正确安装:

macOS
sh deps.sh macos
Ubuntu
sh deps.sh ubuntu

CentOS
sh deps.sh centos

编译USKit

mkdir _build && cd _build && cmake .. && make

如果希望打印更多Debug信息,可以在生成执行cmake时指定为Debug,在运行USKit的过程中将会打出更详细的log信息,方便问题定位

mkdir _build && cd _build && cmake -DCMAKE_BUILD_TYPE=Debug .. && make

注:打开该选项会影响性能,建议只在开发环境中使用

USKit代码目录结构

.
├── CMakeLists.txt
├── README.md
├── _build             # 编译产出,在该目录下修改配置文件以及运行./uskit启动服务
│   ├── conf           # 配置目录
│   │   ├── us         # 对话机器人的配置,每个子目录对应一个具体业务场景下的对话机器人
│   │   │   └── demo   # USKit教程示例的配置及配置生成工具
│   │   │       ├── backend.conf       # demo场景后端服务策略配置,包含UNIT的请求和解析策略
│   │   │       ├── rank.conf          # demo场景技能排序策略配置
│   │   │       ├── flow.conf          # demo场景中控流程策略配置
│   │   │       ├── conf_generator.py  # 根据options.py里声明的配置,自动生成上述3个配置文件
│   │   │       └── options.py         # demo场景里需要开发者自行配置的选项,如技能id,API Key等
│   │   └── us.conf                    # USKit本身相关的配置,用于指定加载的对话机器人
│   └── uskit          # USKit主程序
├── conf               # 配置目录,编译成功后会被复制到_build/conf
├── docs               # 详细文档
├── proto              # protobuf相关
├── src                # 源代码
└── third_party        # 第三方依赖brpc和rapidjson需要被放置在该目录下

使用

USKit主要通过配置来驱动中控的搭建和定制,使用方只需要配置对应目录下的backend.confrank.conf以及flow.conf,然后重启服务即可生效。

新建对话中控

在USKit中,新建一个对话场景下的机器人中控,只需在_build/conf/us目录下新增对应的目录,例如,新增一个id为demo的对话机器人:

mkdir -p _build/conf/us/demo

在该目录下,编写对应的配置文件:

  • backend.conf:指定需要接入的资源对应的请求构造和结果解析配置
  • rank.conf:召回结果的排序配置
  • flow.conf:中控整体对话流程的配置

注册对话中控

同时修改us.conf,注册需要加载的对话机器人,新添如下一行:

load : "demo"

启动服务

进入_build目录下,运行USKit:

./uskit

命令参数说明:

--port:指定uskit服务的端口,默认为8888

--idle_timeout_s:指定client多少s没有读/写操作即关闭链接

--us_conf:指定us.conf的路径,默认为./conf/us.conf

--url_path:指定uskit服务的url路径,默认为/us

-http_verbose: 在stderr输出http网络请求和返回的数据

-http_verbose_max_body_length: 指定http_verbose输出数据的最大长度

-redis_verbose:在stderr输出redis请求和返回的数据

如果配置有错,会导致服务启动失败;

成功启动uskit服务后,可以通过<HOST>:8888/us发起HTTP POST请求,请求体使用json格式,请求参数如下:

  • usid:指定需要请求的对话机器人中控id,比如上文中创建的demo
  • logid:每个请求对应id,用于将上下游串起来的唯一id,方便问题追踪定位
  • query:用户请求的query
  • uuid:用户对应的id,用于唯一区分一个用户

样例:

{"usid":"demo","logid":"123456","query":"北京今天天气怎么样","uuid":"123"}

返回结果同样采用json格式,包含以下三个字段:

  • error_code:错误码
  • error_msg:具体错误信息
  • result:通过对话中控策略执行得到的请求响应

样例:

{"error_code": 0,"error_msg": "OK","result":"好的"}

更多文档

如何贡献

  • 欢迎提交任何问题到Github Issues,可以是使用过程中遇到的问题、bug reporting或者新需求的讨论。
  • 对于issues中的问题欢迎贡献并发起pull request。
  • 定制新的自定义函数和策略,如果足够通用,可以提交pull request合入作为内置。

讨论

  • 提issue发起问题讨论,如果是问题选择类型为问题即可。
  • 欢迎加入UNIT QQ群(584835350)交流讨论。

Copyright and License

USKit is licensed under the Apache License, Version 2.0

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].