Search Results for

    Show / Hide Table of Contents

    集成自定义外部对话系统

    概述

    作为用户,我想在 Chatopera 云服务内集成外部的对话系统,外部对话系统包括但不限于:

    • 大语言模型
    • 其它知识库

    一个外部的系统,可以视为:一个接受对话请求的 API。

    • API 有约定 HTTP Method
    • Request Params 或 BODY
    • Response 结果,比如 JSON 格式

    解决方案概述

    以下为不同方案,可以选择其中一种。

    多轮对话脚本 Hooks

    使用该方案,需要您了解 JavaScript,下面也提供相关示例代码,任何编程经验都可以很快入门。

    首先,了解 Chatopera 云服务的工作原理,尤其是检索的顺序,参考文档 《多轮对话的检索》。

    其次,当前面没有得到答案,对话引擎进入多轮对话脚本检索,在检索中,话题也是排序的。排在最后的话题是 __post__,检索有下图。

    利用 __post__ 可以实现集成自定义的外部的对话系统。

    使用 __post__ 脚本实现自定义外部对话系统集成

    下载安装多轮对话设计器

    参考文档《多轮对话设计器安装》。

    导入机器人

    • 打开多轮对话设计器,点击【添加】

    • 在浏览器中,进入机器人设置页面,获得 ClientID 和 secret

    • 在多轮对话设计器【添加】表单中,填入 ClientID 和 secret

    打开话题 greetings

    在多轮对话设计器中,打开新添加的机器人。在机器人话题列表页面,点击编辑。

    新建话题

    话题名称,填写 __post__,点击确认。

    此处话题名称必须是 __post__。

    编辑话题

    编辑 __post__ 话题

    + {keep} (*)
    - {CLEAR} ^getMyChatSystemReply()
    

    此处,getMyChatSystemReply 是函数名,可以自定义,比如改成 getAnyChatSystemReply。

    编辑函数

    进入函数编辑页面。

    首先,定义函数体。

    exports.getMyChatSystemReply = async function() {
        return {
            string: ""
        }
    }
    

    点击保存。

    其中,返回值中 "string" 字段就是机器人回复的文本,如果设定为空字符串,则代表没有检索到答案,多轮对话检索将进入 LLM 大语言模型(如果开启)或兜底回复。

    下面,实现和外部对话系统集成的关键环节:使用 http 库发送请求,处理回复。

    更新函数 getMyChatSystemReply ,内容如下:

    exports.getMyChatSystemReply = async function() {
        debug("[getMyChatSystemReply] %s %s", this.user.id, this.message.clean);
        // this.user.id: 当前对话访客的唯一标识
        // this.message.clean: 当前对话访客的请求文本
    
        // 使用 http 库请求 API
        let resp = await http.get("https://www.chatopera.com/files/botplt/miscs/dummy.chatsystem.json");
        debug("[getMyChatSystemReply] http response %j", resp.data);
    
        // 使用 resp 进一步的处理逻辑
        let reply = "";
        if (resp.data.reply) {
            reply = resp.data.reply;
        }
    
        return {
            string: reply
        }
    }
    

    保存,然后进行测试。

    最终,得到答案是【今天是个好日子】,是因为 http response data 的内容如下:

    {
        "req": "",
        "reply": "今天是个好日子"
    }
    

    相关链接

    • 脚本对话检索顺序,https://dwz.chatopera.com/7C91Oz
    • 脚本中 keep 的作用:让该规则永久有效
    • 脚本中 clear 的作用:清楚状态,下一轮对话依旧走全技能域的检索
    • 更多 http 库使用的例子,https://dwz.chatopera.com/0P46fh
    • 更多函数多轮对话语法,https://dwz.chatopera.com/1882VM
    In This Article
    Back to top Copyright © (2018-CopyrightYearPlaceholderDONOTCHANGEManually) 北京华夏春松科技有限公司 京ICP备20023756号-3