大象笔记

知者行之始,行者知之成

tr069 CPE 模拟器 genieacs-sim 默认通信流程解读

cpe 端模拟器 genieacs sim 的日志 > ./genieacs-sim --acs-url=http://127.0.0.1:2999 Simulator 000000 started Simulator 000000 listening for connection requests on http://127.0.0.1:53849/ acs 端日志 增加了部分 debug 日志: message 类型是 Inform Inform 消息的 Event 类型是 PERIODIC 第一次请求的 body 长度是 2066, 第二次请求的 body 长度是 0 Con ...

阅读全文...

swaggo 通过 tag 限制生成接口文档的范围

这个周都在写 swaggo 接口文档,起因是要迁移一个旧的 golang gin 后台接口服务,新的系统只需要用到部分原有系统的接口。 但是,为了预防未来可能功能扩展,还是想继续保留原有系统的接口文档,不做删除处理。 那么,在用 swaggo 生成接口文档的时候,就出现了问题。如何屏蔽掉不需要的接口文档? 看起来很简单,直接用 exclude 参数不就行了?实际测试,这个 exclude 参数只支持目录,不支持具体文件,虽然 帮助文档里写是支持具体文件,但是即便更新了最新版本的 swaggo,也是不生效。 后来发现新版本支持了 tags 来指定生成文档。这就满足需求了,而且 tag 控制精度比 ...

阅读全文...

tr069 事件类型 (event type)

Inform 类型的消息中,包含 Event 信息。 All communications and operations are performed in the scope of the provisioning session. The session is always started by the device (CPE) and begins with the transmission of an Inform message. 触发 provisioning session 的事件列表: Event List Bootstrap – when device contacts ...

阅读全文...

tr069 消息类型 (message type)

tr069 是基于 SOAP 的 RPC 协议。 message type 可以理解为每个 RPC 的方法名。 这里有趣的地方是,既然是远程调用,那么就存在两种情况: ACS 调用 CPE 的方法 CPE 调用 ACS 的方法 ACS 调用 CPE 的方法列表 GetPRCMethods: 获取 CPE 所支持的方法集合 GetParameterNames: Retrieve list of supported parameters from the device. GetParameterValues: Retrieve current value of the parameter(s ...

阅读全文...

TeamsACS 代码目录结构

粗略浏览一遍,大概了解每个模块的每个文件是实现什么功能的。可以 tree 一下结构,把每个文件的注释加上。 查看目录 排除 assets 子目录,因为下面的 js 文件太多。 tree -I assets 目录结构 . ├── Dockerfile ├── Dockerfile.local ├── License ├── Makefile // 里面的生成证书和部署方式可以借鉴 ├── README.md ├── assets // 前端代码 ├── app │   ├── app.go │   ├── constant.go │   ├── cwmp.go │   ├── cwmp_p ...

阅读全文...

tr069 协议中,acs 与 cpe 的完整通信过程

TR-069协议是一种用于远程管理设备、进行配置和故障排除的协议。它使用客户端/服务器模型,其中ACS(自动配置服务器)充当服务器,CPE(客户端设备)作为客户端。 之前刚接触 tr069 协议的时候,简单了解过 TR-069 协议中 CPE 与 ACS 的会话过程 。但是整体流程还是不够清晰,网上也没有完整的逻辑流程图。 向 ChatGPT 请教 tr069 协议中,acs 与 cpe 的完整通信过程 还是 AI 解释的更通俗易懂一些。 以下是TR-069协议中ACS与CPE之间的完整通信过程: 0. 前置条件 在 CPE 配置 ACS 的 URL 地址 设置连接周期 In ord ...

阅读全文...

一个简单问题快速区分 ChatGPT 4 与 3.5

今天在 V2EX 论坛上学到了一个有趣的技巧:如何一句话区分 ChatGPT 3.5 与 4。 目前我用到的大部分免费的 ChatGPT 套壳网站都是基于 ChatGPT 3.5 的,偶有标榜使用了 ChatGPT 4 接口的网站。即便是申明使用了 4 的接口,很多也是挂着羊头卖狗肉。比较 4 的接口成本太高了。 回归正题,直接看截图: 这个我一直在用的一个套壳站,果然一句话就露馅了,这就是典型的 ChatGPT 3.5 的回复。 对于 4 则是有逻辑性的分析过程: 问:小明 8 岁,他妹妹年龄是他的一半。小明 56 岁时,妹妹几岁 答:小明现在 8 岁,他的妹妹年龄是他的一半,因此妹 ...

阅读全文...

Rasa 中 JiebaTokenizer, LanguageModelFeaturizer 与 DIETClassifier 各自的作用及区别

虽然我已经 用 Rasa 实现了中文自动问答机器人功能,但是里面 pipeline 的配置,其实我完全没看明白各个组件起到的作用。我已经很认真地读了几遍官方文档关于各个组件的描述,英文/中文文档都看了不少,对我来说太晦涩了,无法理解。 但是这个项目除了要实现功能,还要做成 PPT 给合作方讲解,对方有深度学习的专家教授,这就更尴尬了。只能临时抱佛脚求助 ChatGPT,没想到 AI 给出的解释通俗易懂,真大哥也。 除了口头禅 “总之”,其他都挺好的。 rasa 中 DIETClassifier 的作用 在 Rasa 中,DIETClassifier 是一种用于意图分类和实体提取的深度学习模型。 ...

阅读全文...

对话机器人 rasa(六): 基于 websocket 的网页组件

由于要现场演示 Rasa 对话机器人的实际效果,感觉用 Rasa Shell 命令来演示不太正式。 还是用网页版 Rasa 组件来演示更直观一些,也容易理解。 再就是我想把对话场景制作成一段小视频,或 gif,放到 PPT 里给客户演示。这种情况,也是网页端更简单直观。 页面效果 但是官方组件在手机端体验不太好,底部发送按钮有遮拦,在 iphone 上按钮超出右侧屏幕,原因是宽度都是用的 px 写死。 rasa websocket 配置 打开配置文件 credentials.yml: 增加 socketio: user_message_evt: user_uttered bot_me ...

阅读全文...

对话机器人 Rasa(五):自动化测试

自动化的必要性 手动跑一遍覆盖各种问题的对话,太耗费时间了。例如,即便最简单的有十几个意图识别的对话场景,手动测试一遍都需要很长时间。 而且记不住有哪些 rule ... 需要对照着 nlu.yml 文件才能记起来。 比较高效的方式是,跑一遍自动化测试,然后将失败的 case 摘出来,手动跑一遍交互式训练。 还有另外一个好处,就是之后现场演示的时候,可以照着自动化测试的 test case 来演示,以保证万无一失。避免像百度文心一言一样,发布会上连现场演示的勇气都没有。 测试文件 > ls tests/ test_stories.yml 似乎没有 test_rules.yml 这样的文 ...

阅读全文...

对话机器人 Rasa 何时使用 rule,何时使用 story

在配置 Rasa 对话规则的时候,我一直有一个疑问。 Rasa 中 story 的意义是什么? 我在跟 Rasa 对话的时候,似乎也没发现按照 story 的流程走。 查了一下: Rasa 包含了两种方式来定义对话流程:规则(Rules)和故事(Stories)。 规则是一种简单而有限制的方式来定义对话流程。它们通常用于处理简单的用户请求,例如回答一个固定的问题或者执行某些操作。规则只能捕获单个意图(intent)并且不能处理槽位填充或多轮对话。该方法适用于简单的场景下。 相比之下,故事可用于更复杂的对话流程。故事中可以包含多个意图、槽位填充以及多轮对话。在故事中,您可以定义特定的对话场景,并 ...

阅读全文...

PostgreSQL 常用命令

PostgreSQL 的命令相对 MySQL 还是有点难记。单词缩写不太直观。 列出所有数据库 postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+---------+---------+----------------------- postgres | postgres | UTF8 | C. ...

阅读全文...