你好,Leon!

2020-03-28  本文已影响0人  Xpitz

文章首发于个人公众号:「阿拉平平」

随着人工智能的兴起,相信大家对智能助理不会感到陌生,比如苹果的 Siri,微软的 Cortana。这些智能助理与我们形影不离,却又触不可及。那么,有没有可以由我们自己定制功能的私人助理呢?

今天和大家分享一个开源的私人助理:Leon。本文演示环境为 Windows x64。

Leon 简介

Leon 是一个开源的私人助理项目。部署后,我们可以通过文本或者语音的方式和它进行互动。

环境准备

Leon 的核心功能由 Node.js 开发,本文 Node.js 版本为 v12.16.1。

Node.js 包管理工具,本文 npm 版本为 6.13.4。

Leon 的模块由 Python 编写,本文 Python 版本为 3.6.5。

Leon 的模块会在虚拟环境中运行。建议安装的 Python 版本在 3.5 以上。

下载安装

下载 develop 分支的代码:

git clone https://github.com/leon-ai/leon.git leon

执行以下命令安装,整个过程会花费一些时间:

# 进入项目目录
cd leon

# 安装
npm install

运行检查命令确保整个安装过程无误:

npm run check

由于还未配置 Leon,所以结果中会提示 warnings,可以不用理会。

运行启动

安装正常就可以启动了:

# 构建
npm run build

# 启动
npm start

在浏览器中输入 http://localhost:1337 进行访问:

Leon

Leon 实践

接下来,我将对 Leon 进行扩展,增加一个获取诗词的功能。

需要说明的是:

  • Leon 的全局配置文件为 .env,示例中未做修改,详情可以查阅官方文档。
  • Leon 是支持多语言的,但是目前全局配置中仅支持 enfr。所以示例中 answers 和 expressions 的数据文件均以 en.json 命名。

包是一个目录,可以包含多个模块,位于 leon/packages 下。先新建一个 poem 包,目录结构如下:

poem
|-- __init__.py
|-- config
|   `-- config.json
|-- data
|   |-- answers           
|   |   `-- en.json
|   `-- expressions  
|       `-- en.json
|-- getpeom.py
`-- version.txt

说明:

poem:包名。
config.json:配置文件。
answers:应答。
expressions:表达式。
getpoem.py:模块。
version.txt:版本号。

配置

模块的配置项可以加到配置文件 config/config.json 里。示例中的接口地址和方法即配置项:

{
  "getpoem": {
    "url": "https://v1.jinrishici.com/all",
    "method": "GET",
    "options": {}
  }
}

模块

Leon 的功能是通过模块实现的,模块中可以包含多个动作。编辑 getpoem.py,代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json
import utils


def run(string, entities):
    """Leon peom action"""

    r = utils.http(utils.config('method'), utils.config('url'))
    res = json.loads(r.text)
    content = res['content']
    origin = res['origin']
    author = res['author']  
    
    return utils.output('end', 'getpoem', utils.translate('listpoem', {
              'content': content,
              'origin': origin,
              'author': author
            }
        )
    )

说明:

  • 模块中的函数 run 表示一个动作,与表达式对应。
  • utils 位于 leon/bridges/python/,具体用法可以查看源码,这里不做赘述。

表达式

表达式是用来训练 Leon 理解力的数据,位于 data/expressions 下。编辑 en.json,内容如下:

{
  "getpoem": {
    "run": {
      "expressions": [        
        "give me poem."      
      ]
    }
  }  
}

说明:

  • getpoem 是模块名。
  • run 是模块中定义的行为。
  • expressions 是一个列表,每条表达式都有自己的置信度,表达式内容越多,前端输入可以越模糊。

应答

应答是 Leon 用于提供模块输出的数据,位于 data/answers 下,在 1.0.0-beta.2 版本已支持 HTML 格式。编辑 en.json,内容如下:

{
  "getpoem": {
    "listpoem": [
      "%content%<br><br><div style='text-align:right'>——《%origin%》 %author%</div>"
    ]
  } 
}

说明:

  • 当调用 utils.translate() 时,会解析应答数据。
  • 模块传递的变量可通过 %% 进行渲染。

效果演示

运行以下命令进行检查:

npm run train expressions en

没报错的话,重新构建并启动。输入 give me poem 后可以看到:

poem

写在最后

相信能看到这里的小伙伴一定是真爱了,非常感谢你的阅读。最后我会以 Q & A 的形式对文章进行补充以及分享一下踩坑的经历,希望大家在使用 Leon 的过程中可以少踩点坑。

Q: Leon 的交互可以通过文本和语音,但是文章中为什么没有介绍语音的部分?
A:Leon 的语音功能分为 在线 和 离线 两种模式。在线模式需要三方服务的支持,如 Google Cloud 或者 Watson。而离线模式无法在 Windows 平台使用。
Q:能否在虚拟机上体验到 Leon 的离线语音功能?
A:我在 VMware 上测试的结果是:TTS 可以,STT 失败,即能够听到 Leon 应答的声音,但是无法对 Leon 说话。测试环境为 Ubuntu 16.04,且确保麦克风已和虚拟机连接。
Q:运行 npm run check 时提示 ModuleNotFoundError: No module named 'tinydb',要怎么解决?
A:运行 npm run postinstall
Q:运行 npm run check 时提示 The exported locale is "C.UTF-8" but it is not supported
A:系统没有 C.UTF-8 字符集,修改 .env 文件中 LC_ALLLANG 即可。

References

[1] GitHub: https://github.com/leon-ai/leon
[2] 官方文档:https://docs.getleon.ai/#demo

上一篇 下一篇

猜你喜欢

热点阅读