Download the PHP package baidu-chelianwang/dm-kit without Composer

On this page you can find all versions of the php package baidu-chelianwang/dm-kit. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package dm-kit

DM Kit 快速上手

简介

参考c++版本的unit-dmkit,完全兼容c++版本的policies配置文件,但是不能反向兼容。

在任务型对话系统(Task-Oriented Dialogue System)中,一般包括了以下几个模块:

DM Kit关注其中的对话管理模块(Dialog Manager),解决对话系统中状态管理、对话逻辑处理等问题。在实际应用中,单个垂类下对话逻辑一般都是根据NLU结果中意图与槽位值,结合当前对话状态,确定需要进行处理的子流程。子流程或者返回固定话术结果,或者根据NLU中槽位值与对话状态访问内部或外部知识库获取资源数据并生成话术结果返回,在返回结果的同时也对对话状态进行更新。我们将这部分对话处理逻辑进行抽象,提供一个通过配置快速构建对话流程,可复用的对话管理模块,即Reusable Dialog Manager。

如何使用

安装

使用composer安装

使用

测试

  1. 运行composer update,安装依赖库
  2. 在百度unit平台上创建bot,具体参考UNIT配置指南
  3. 讲bot_id和access_token填入app/config/bots.json文件中,cellular_data为流量查询bot,quota_adjust为额度调整bot,access_token获取参考http://ai.baidu.com/docs#/Auth/top
  4. 运行php src/Tests/speak.php,查看bot效果

详细配置说明

本节详细介绍实现垂类功能的配置语法。所有垂类的配置均位于模块源码app/conf目录下。

垂类注册

字段 含义
bot bot类名,所有需要调用的函数都应该在这个类中
retry_limit 未召回时重试次数,不设置则不重试
parser 语义解析结果parser
+parser.type 类型,可选unit,custom
+parser.class 若type为custom时必填,需实现ParserInterface
logger 使用monolog
+logger.handler handler类型,
+logger.args handler构造函数中所需参数
session 用于保存对话上下文信息
+session.type session类型,可选normal,custom
+session.class 若type为custom时必填,需继承AbstractSession
+session.expire 可配置session过期时间
policies policy配置,如下

bot类

如果需要调用自定义函数,则需要定义bot类,并继承Baidu\Iov\DmKit\Bot\Bot。

在bot子类中,可以使用函数:

垂类配置

单个垂类配置文件包括了一系列policy,每个policy字段说明如下:

字段 类型 说明
trigger object 触发节点,如果一个query满足多个policy的触发条件,则优先取status匹配的policy,再根据slot取覆盖个数最多的
+intent string 触发所需NLU意图
+slots array 触发所需槽位值列表
+state string or array 触发所需状态值,即上一轮对话session中保存的state字段值,初始状态为dm_init,为空表示任意状态
+changed_slots array 触发所需的当前改变的词槽
params array 变量列表
+params[].name string 变量名,后定义的变量可以使用已定义的变量进行模板填充,result节点中的值也可以使用变量进行模板填充。变量的使用格式为{%name%}
+params[].type string 变量类型,可能的类型为slot_val,request_param,session_obj,func_val
+params[].value string 变量定义值
+params[].required bool 是否必须,如果必须的变量为空值时,该policy将不会返回结果
output array 返回结果节点,可定义多个output,最终输出会按顺序选择第一个满足assertion条件的output
+output[].assertion array 使用该output的前提条件列表
+output[].assertion[].type string 条件类型
+output[].assertion[].value string 条件值
+output[].session object 需要保存的session数据,用于更新对话状态及记录上下文
+output[].session.state string 更新的对话状态值
+output[].session.context object 写入session的变量节点,该节点下的key+value数据会存入session,再下一轮中可以在变量定义中使用
+output[].result array 返回结果中result节点,多个result作为数组元素一起返回
+output[].result[].type string result类型
+output[].result[].value string,object result值,如果type等于json,value可以为object

Trigger

每个policy有且仅有一个trigger,trigger定义了policy的触发条件,有4种条件,intent,slots,changed_slots和state,四种条件中间是且的关系,必须所有条件都符合,才会进入当前policy

intent

intent为NLU解析结果中返回的intent,配置的intent需要等于NLU返回的intent。如果配置的intent为空,则匹配NLU结果无召回情况。

假设有一个音乐bot,当前正在询问用户:"你想听什么歌?",NLU可能无法解析某些歌曲名称,为了保证召回率,可以在dm模块中查询第三方资源接口,如果能找到资源,则也可以认为用户说的query是一首歌,并召回正确结果。

  • 需慎重使用,避免过召。
state

state为对话的当前状态,如果是第一轮对话,则当前状态为dm_init,配置的state可以为string或者array

slots

槽位名称数组。slots为NLU结果中返回的slots,配置的所有slots都需要出现在NLU解析结果中,只验证词槽是否存在,不验证词槽的值。 如果需要验证词槽的值,需要在param中增加一个slot_val并在output中的assertion中判断。

changed_slots

发生变化的槽位名称数组。changed_slots为当前轮次中,词槽值发生了改变的词槽,配置的changed_slots中的所有槽位都需要发生改变,否则不触发policy。

当满足多个policy时,会按优先级取出一个匹配度最高的policy,具体规则如下:

  • 如果一个policy中匹配规则含有intent,另一个不含有,则取含有intent的policy
  • 如果一个policy钟匹配规则含有state,另一个不含有,则取含有state的policy
  • 如果两个policy的slots条件分别含有m和n个slot(m >= 0, n >= 0),如果m > n,则取含有m个slot的policy
  • 如果两个policy的slots条件分别含有m和n个changed_slot(m >= 0, n >= 0),如果m > n,则取含有m个changed_slot的policy

Param

param为参数列表,每个policy中可以定义一系列参数,在output中使用,可用于assertion,session.context及result.value,param可以为string或者object。单个policy中的参数名称不能重复。

使用方法

一个policy中可以有多个param,在param中定义的参数,可以使用{%param_name%}在output中表示,会自动替换为真实值

params中变量类型列表及其说明:
type 说明
slot_val 从qu结果中取对应的slot值,有归一化值优先取归一化值。当对应tag值存在多个slot时,value值支持tag后按分隔符","添加下标i取对应tag的第i个值(索引从0开始)
ori_slot_val 从qu结果中取对应的slot的原始值
request_param 取请求参数对应的字段
session_obj 上一轮对话session结果中objects结构体中对应的字段
func_val 调用用户定义的函数。用户定义函数需要位于前面设置的bot类中。value值为","连接的参数,其中第一个元素为函数名,第二个元素开始为函数参数
qu_intent NLU结果中的intent值
session_state 当前对话session中的state值
http_request 发送http请求,返回http_code和body
json_extractor 解析数组

http_request使用示例:

json_extractor使用示例:

用户可以自定义param handler,需要继承Baidu\Iov\DmKit\Policy\ParamHandler\AbstractHandler。

output

在一个policy中可以有多个output,每个output有零至多个assertion,每个assertion之间是且的关系,所有assertion都满足的时候,会输出定义的result。

output按顺序判断,当一个output中的一个assertion满足后,不会继续判断之后的assertion

assertion类型说明:
type 说明
empty value值非空
not_empty value值为空
in value值以","切分,第一个元素在从第二个元素开始的列表中
not_in value值以","切分,第一个元素不在从第二个元素开始的列表中
eq value值以","切分,第一个元素等于第二个元素
not_eq value值以","切分,第一个元素不等于第二个元素
gt value值以","切分,第一个数字大于第二个数字
ge value值以","切分,第一个数字大于等于第二个数字

逗号前后不能添加空格

用户可以自定义assertion类,需要实现Baidu\Iov\DmKit\Policy\Output\Assertion\AssertionInterface接口,并实现assert函数。type中传递assertion类名即可。

result

result定于了dm-kit返回的数据,可以为object或者string

高级用法

dm-kit包含ConfLoader,Logger,Parser,Session几个组件,每种组件都做出了简单实现,可以直接使用,如果有个性化需求,可以自定义组件

ConfLoader

配置文件载入组件,用来载入配置文件,目前支持json和yaml格式文件。 可配置cache模块,需要实现CacheInterface接口,可以将配置文件读入缓存,避免大量磁盘I/O

Logger

使用monolog,详情见https://github.com/Seldaek/monolog

Parser

将语义解析结果转为QuResult对象,目前支持Unit bot api和unit hub api, 可以实现ParserInterface接口自定义Parser

Session

储存state和context,仅支持文件方式存储,只能用于单台构架系统, 可以实现AbstractSession自定义Session。


All versions of dm-kit with dependencies

PHP Build Version
Package Version
Requires php Version >=7.0
symfony/yaml Version 2.8.45
monolog/monolog Version 1.23.0
guzzlehttp/guzzle Version 6.3.3
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package baidu-chelianwang/dm-kit contains the following files

Loading the files please wait ....