美文网首页
你好,Leon!

你好,Leon!

作者: Xpitz | 来源:发表于2020-03-28 18:18 被阅读0次

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

    随着人工智能的兴起,相信大家对智能助理不会感到陌生,比如苹果的 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

    相关文章

      网友评论

          本文标题:你好,Leon!

          本文链接:https://www.haomeiwen.com/subject/swumyhtx.html