你好,Leon!

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

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

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

Leon 简介

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

环境准备

  • Node.js >= 10

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

  • npm >= 5

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

  • Python >= 3

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

  • Pipenv

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值