大象笔记

知者行之始,行者知之成

对话机器人 Rasa(十四):Botfront 自带的 MongoDB 端口问题

漏洞现象 在部署好 botfront,并创建了管理员账号之后,第二天发现账号消失了。 我本以为是本地目录权限问题,导致 mongodb 没有将数据写入磁盘。 但是,修改了本地目录权限之后,这个问题又出现了。 感觉出大问题了。 查看 mongodb 日志 通过 docker logs 查看了 mongodb 镜像的日志。 {"t":{"$date":"2023-07-10T12:33:33.424+00:00"},"s":"I", "c":"-", ...

阅读全文...

对话机器人 Rasa(十三):GUI 管理系统 Botfront 部署

Botfront 是一个非常方便的 Rasa GUI 图形化管理后台。可以在网页里: 编辑所有的 Rasa 配置文件 执行训练 使用 web 聊天组件 非常适合没有 linux 服务器操作经验的用户。 整个安装配置过程参考 https://botfront.io/docs/installation/server-cluster 即可。 这里只是记录一下文档中没有提及的细节。 版本 botfront@1.0.5 目录结构 $ tree -a . ├── .botfront │   ├── botfront.yml │   └── docker-compose-template.yml ├── ...

阅读全文...

Android BLE 蓝牙监听 STM32WB 上的自定义特性

要给 Android 平板蓝牙语音对讲 APP 上增加一个报警推送功能,即监听蓝牙控制板上的一个信号,来显示报警信息。实际上就是监听一个自定义的特性即可。 STM32 芯片的 Android SDK 封装的太猛了,捋一遍代码脑子爆炸。 所以记录一下看 SDK 源码的过程。 特性扫描 BlueSTSDK/BlueSTSDK/src/main/java/com/st/BlueSTSDK/Node.java 增加了调试日志,方便查看新增特性的 UUID mCharFeatureMap.clear(); for(BluetoothGattService service : nodeServices){ ...

阅读全文...

Android BLE 蓝牙控制硬件设备(二)调大 MTU,一次读取所有配置数据

继续 Android 平板 App 控制设备运行的项目。 MTU 是什么 英文全称是,Maximum Transmission Unit。即一次最大可以传输多少字节。 默认情况下是 20 个字节。即,Android App 一次只能从蓝牙控制板那里最多读取 20 个字节的数据。微信小程序中也是同样的状况。 什么情况下需要调大 MTU 例如,一个设备的运行参数多达 50 个,每个运行参数用两个字节表示。 那么即便不使用 CRC 校验码,不使用协议头,要完整读取所有参数都需要 100 个字节。 即需要 5 个 20 字节的数据包才能读完。这样效率太低。 另外一个典型的场景就是 BLE 蓝牙语音对讲 ...

阅读全文...

对话机器人 Rasa(十二):用户会话 Session 管理

Rasa 可以管理用户 session,每个 session 由 conversation_id 唯一标识。 当你从 web 聊天组件或者 telegram app, fackbook messager 等不同的 channel 向 rasa webhook 发送一条消息时, 你所指定的 sender_id 即被转换为 conversation_id, 然后传递给 Rasa Core。 注意,默认情况下,Rasa session 是存储在内存中,即一旦你关闭 rasa 服务,session 就会丢失。 可以通过将对话信息存储到数据库来解决这个问题,例如,MongoTrackerStore, R ...

阅读全文...

Android BLE 蓝牙控制硬件设备(一)代码结构

没想到这个月的开发工作全部是 Android 平板相关,而且都要用到 BLE 蓝牙,一个是控制设备运行,一个是蓝牙对讲。 看来之前练手写的那个 Android BLE 调试工具真是派上用场了,大部分代码可以复用上。 需求 用 Android 平板通过 BLE 低功耗蓝牙控制硬件设备,例如,开始、暂停、显示运行状态等。 功能非常简单,时间就两个 fragment 界面就能搞定: 蓝牙设备列表页 (List Fragment)。用于显示扫描出来的附件蓝牙设备 具体设备的控制界面 (Home Fragment)。用于显示实时运行数据,及控件按钮 交互逻辑 打开 Android 平板 App 时, ...

阅读全文...

低碳水午餐食谱

最近,几位注重健康的好友,纷纷推荐了低碳水饮食。 而我,近几年放任体重增长,身材已经到了再不控制就会爆炸的地步。加之公司订的午餐过于油腻,是时候换换口味了。 低碳水饮食减肥的原理 低碳水饮食减肥的原理是通过限制食物中的碳水化合物的摄入量,使身体进入酮症状态,从而促进脂肪的代谢和减脂。 在传统的饮食模式下,身体主要从碳水化合物中获取能量,而碳水化合物的摄入量过高会导致血糖水平升高,身体释放胰岛素来降低血糖水平。但是,当摄入的碳水化合物过多时,身体会将其转化为脂肪储存起来,导致体重增加。 低碳水饮食的原理是通过限制碳水化合物的摄入量,迫使身体从脂肪中获取能量,从而促进脂肪的代谢和减脂。当身体摄入的 ...

阅读全文...

对话机器人 Rasa(十一):custom actions 中使用 python 设置 slot 值

例如,我想在 Rasa 对话过程中,缓存当前用户选择的服务 ID。 方便在调用其他业务接口时使用该 slot 的值。 custom actions 代码示例 actions.py 中,假设要将 my_slot 设置为 some_value: from typing import Any, Text, Dict, List from rasa_sdk import Action, Tracker from rasa_sdk.events import SlotSet class MyCustomAction(Action): def name(self) -> Text: ...

阅读全文...

golang gin graceful shutdown

在做一个微信支付的流程,担心经常更新程序导致服务中断,影响退款等逻辑,所以想加上 graceful shutdown 功能。 参考 Golang Gin 官方文档: https://gin-gonic.com/docs/examples/graceful-restart-or-stop/ 使用 Go 1.8 之后内置的 http.Server Shutdown() 方法,以实现 graceful shutdowns。 测试 // 测试 graceful shutdown // /api/testSleep?duration=20s func TestSleep(c *gin.Context) ...

阅读全文...

对话机器人 Rasa(十八):使用 docker compose 及 dockerfile 部署 python flask 图片服务

使用 Flask 的原因 因为我觉得用 Rasa 处理图片 base64 编码是不合理的,不适合 intent 识别,再者影响 rasa 接口的性能。 所以,独立出一个 flask 服务来处理图片上传的使用场景。 使用 docker 的原因 原本想在服务器上直接用自带的 python 3.8 部署一个 flask 服务,用来模拟一套接口, 方便 Rasa Actions 服务来调用测试数据。 其中 Rasa Actions 服务部署在 docker 容器中,但是其无法直接访问宿主机中的 flask 服务。 尝试了几种方式都不行,所以想干脆也把 flask 采用 docker 的部署方式。 ho ...

阅读全文...

微信支付商户后台设置自动提现规则

为了方便测试微信小程序的多商户分账功能,最好设置一下商户后台的自动提现规则。 否则会出现分账的订单,隔日在退款时没有足够的余额。默认规则会将所有余额在次日凌晨提现到对公账号。 进入微信商户后台 - 产品中心 - 自动提现 设置一个基础余额,比如,上面截图里的 200,超过这个值才会被自动提现到对公账号。 ...

阅读全文...

对话机器人 Rasa(十): 回复消息格式化,加粗换行等

例如,我想在 Rasa actions.py 中,对 dispatcher.utter_message 返回的消息进行格式化。 加粗 这里类似 Markdown 的语法,需要加粗的文本前后加双星号即可。 换行 使用 \n Rasa 会自动 trim 掉前后的空格。 示例: dispatcher.utter_message( text=f"**Reservation No.{index+1}** \n Name: {item['name']}" ) 效果: 注意 如果换了其他前端方案,例如 ChatUI,就不支持 markdown 语法了。需要自己去兼容。 ...

阅读全文...