2026年2月

📰 今日新闻精选:

  • 我国新一代太阳能电池研究取得新进展,光电转换效率超 15%;我国锂电池核心技术获首创突破,续航能力成倍提升
  • 中国 AI 调用量首次超过美国,四款大模型霸榜全球前五,国产算力需求正经历指数级增长
  • 多家头部手机品牌或将集体调价,预计最大涨幅 25%,属行业首次
  • 市场监管总局新规:外卖商户必须有实体门店,无堂食商户必须设专门标识,6 月起实施
  • 新疆一 24 岁女子自然受孕产下 5 胞胎,1 男 4 女,最轻仅 870 克,概率仅为六千万分之一
  • 北京协和医院发布阿尔茨海默病新药数据,早期患者疾病进展有望放缓
  • 节后淡季机票价格大跳水:较春节回落超一成,多条热门航线票价低至百元
  • 篮球世界杯预选赛:中国男篮客场 87 比 80 战胜日本男篮,取得首场胜利
  • 湖南蓝山县委书记抖音账号成民情留言板,粉丝已破 10 万,本人回应:都是职责所在
  • 最高法:缅北明家、白家两大跨境武装犯罪集团已被彻底摧毁
  • 中国公民大阪街头被劫 500 万日元,嫌犯仍在逃,驻大阪总领馆再次提醒近期避免赴日
  • 韩媒:韩国股市又暴涨,2026 年涨幅已接近 50%,股市市值超越法国成全球第九大股市
  • 韩媒:朝鲜劳动党第九次代表大会闭幕,金正恩称韩国是 “永远的敌人”,韩方回应:表示遗憾
  • 美媒:2025 年美国迁出人口数量超过迁入人口,为 90 年来首次
  • 报告揭露:美国用技术霸权收割全球虚拟货币资产,陈志、赵志鹏案获利近 200 亿美元,专家称实质上构成对他国财产间接掠夺

📅 今日信息:

  • 公历:2026-02-27 星期五 双鱼座
  • 农历:二〇二六年正月十一
  • 下一节气:2026-03-05,惊蛰
  • 今年进度:15.89%(已过 58 天,剩余 306 天)

🌟 历史上的今天

  • 1844 年:多米尼加共和国从海地独立,成为主权国家,标志着加勒比海地区政治格局的重要变化。
  • 1991 年:海湾战争结束,科威特恢复主权,这场冲突对中东和国际关系产生了深远影响。

📰 今日新闻精选:

  • 我国新一代太阳能电池研究取得新进展,光电转换效率超 15%;我国锂电池核心技术获首创突破,续航能力成倍提升
  • 中国 AI 调用量首次超过美国,四款大模型霸榜全球前五,国产算力需求正经历指数级增长
  • 多家头部手机品牌或将集体调价,预计最大涨幅 25%,属行业首次
  • 市场监管总局新规:外卖商户必须有实体门店,无堂食商户必须设专门标识,6 月起实施
  • 新疆一 24 岁女子自然受孕产下 5 胞胎,1 男 4 女,最轻仅 870 克,概率仅为六千万分之一
  • 北京协和医院发布阿尔茨海默病新药数据,早期患者疾病进展有望放缓
  • 节后淡季机票价格大跳水:较春节回落超一成,多条热门航线票价低至百元
  • 篮球世界杯预选赛:中国男篮客场 87 比 80 战胜日本男篮,取得首场胜利
  • 湖南蓝山县委书记抖音账号成民情留言板,粉丝已破 10 万,本人回应:都是职责所在
  • 最高法:缅北明家、白家两大跨境武装犯罪集团已被彻底摧毁
  • 中国公民大阪街头被劫 500 万日元,嫌犯仍在逃,驻大阪总领馆再次提醒近期避免赴日
  • 韩媒:韩国股市又暴涨,2026 年涨幅已接近 50%,股市市值超越法国成全球第九大股市
  • 韩媒:朝鲜劳动党第九次代表大会闭幕,金正恩称韩国是 “永远的敌人”,韩方回应:表示遗憾
  • 美媒:2025 年美国迁出人口数量超过迁入人口,为 90 年来首次
  • 报告揭露:美国用技术霸权收割全球虚拟货币资产,陈志、赵志鹏案获利近 200 亿美元,专家称实质上构成对他国财产间接掠夺

📅 今日信息:

  • 公历:2026-02-27 星期五 双鱼座
  • 农历:二〇二六年正月十一
  • 下一节气:2026-03-05,惊蛰
  • 今年进度:15.89%(已过 58 天,剩余 306 天)

🌟 历史上的今天

  • 1844 年:多米尼加共和国从海地独立,成为主权国家,标志着加勒比海地区政治格局的重要变化。
  • 1991 年:海湾战争结束,科威特恢复主权,这场冲突对中东和国际关系产生了深远影响。

真诚向大家请教,如何从职场霸凌的阴影和情绪内耗中彻底走出来?我现在每天都严重失眠,一想到这段时间的遭遇就气得睡不着觉,感觉自己被困在了情绪的黑洞里。

楼主背景是 985 本硕,目前工作三年左右。第一段经历在阿里,目前在快手。当时社招入职后就隐约感觉这个岗位是个大坑(三年换了 8 个负责人,所有接手过的人都走了,无任何文档),本想着为了简历好看,咬牙苟到年底再看机会,没想到这却是我噩梦的开端。

这里整个部门都是一团糟,我入职时在 A 团队,当时让我和前负责人一起做某业务,在某个需求上线前一天,业务侧自己的原因导致需求无法上线,最后把锅甩到技术方案上,原负责人直接休婚假。我被迫在业务都不熟悉的情况下一个人接手负责,连续四天加班到凌晨三点多扛着上线了。结果不仅业务直接塞给了我,随后架构调整,我又被划到了 B 团队。

当时就有同事好心提醒我,新领导( B 团队老板)人品不行,建议我快跑。但我因为还在试用期,怕简历花,决定再忍忍。后来我发现这个领导是典型的“舔上欺下”:对业务方无限妥协,对下面人疯狂压榨,而且极度甩锅——自己不懂业务、不看方案,只问是和否,出事就说“我最多只担管理责任”。因为产品之前临时加需求并要求第二天上线,我当场拒绝,然后这个产品就当众辱骂我,事后我向 HR 投诉产品,这个狗老板受到产品团队的压力后,便开始蓄意针对我,具体包括:

1 、不给我定 OKR ,不分配任务。我只能像个透明人一样,每周主动去问虚线汇报人我能干什么。
2 、信息刻意隔离:把我排除在所有核心会议之外,每次都是马上要动手做需求了,才临时把我拉进群。
3 、考勤针对:每天死盯着我的工位。我上个厕所他都要质问;晚上 7 点吃完饭散步走一圈,他竟然说我工作时间不在工位算旷工。而组里其他人开会一整天不见人,他却视而不见。
4 、流程刁难与双标:别人做需求有完整流程,他让我做需求时不准写技术文档、不准走技术评审,强制要求 3 天内上线。虚线拖了两个月不想做的烂摊子扔给我,我接手不到三天就怪我“延期交付”;而他自己嫡系的事情,产品催了两个多月没做完他却绝口不提。
5 、代码恶意挑刺:拿着组里的“屎山代码”(直接用字面量做 key )来指责我的代码不符合规范。直到我甩出其他同事的 CR 截图,证明大家都是这么写的,他才闭嘴。
6 、故意挖坑:好几次派给我的都是没人维护的历史天坑。我一看代码就知道里面的水有多深,而虚线明明知道这些暗雷,却故意不说明,硬塞给我做。
。。。。。

年底给我打绩效 b-,钱大概少了 0.7 个月,我气不过去绩效申述,结果+2 和 hr 说不支持申述,说如果我主动走的话给 n+1 ,我继续向上反馈也无回复。这些管理层和 hr 在职场呆了多久,哪个人看不出来这里的问题?但是通过体系去申述没有任何结果,整个系统都在默契地包庇作恶者。这种面对体系性作恶却无能为力的窒息感,真的比被霸凌本身还要令人绝望。

我现在根本不想看到这些恶心的小人,早上开早会我人迟到一分钟,狗老板就找 hr 说我不服从工作安排,还故意在组里的群里说我无故缺席,记大过一次。我找 hr 沟通,hr 说拿 n+1 需要第二天走人,交接都不需要,还说我要配合工作安排,要不然可以单解。我真是越想越气。

现在我手里有外面其他几个大厂的 offer ,涨幅还算满意,但我担心背调这些人故意恶心我,走了也气不过,现在每天想起来就焦虑+生气到失眠。请教下我现在应该怎么做比较好?

第一款 Android 手机是摩托罗拉的里程碑,然后一直从 Nexus 用到 pixel ,原生系统简单干净,在国内好不好用个人有个人的看法,至少完全满足我的使用需要了,而且迁移数据简单。

但是这几个月的 ota 每次都搞得人火大,先是电池问题强制 ota ,一晚上睡醒发现手机更新了,电池直接进入不可用状态,半天都撑不住,好在白嫖了 100 刀,淘宝上六七十买了块电池自己换上了,但是 magisk 瘫了一半,module 列表灰了,su 也灰了,但好歹实际 root 还在,勉强接受现状了。

然后今天去停车场开车,一辆 sb 理想直接怼在我车前,还是刚买的临牌,114 移车处理不了,只能打 122 让联系车主,发现天又塌了。
122 在 Android 的紧急电话列表里,被负优化了,竟然打不出去。打通了一次信号还很差,没法沟通,,这种致命 bug Gemini 还告诉我是个顽疾,我几年前用上一台 pixel 打过还没这操作呢,回去把那个老机子挖出来发现也打不了了。

好死不死又信了 Gemini 的鬼话,说 25 年 11 月 ota 修了,我最近的 ota 一直卡着没升级,鬼迷心窍就升级了,升完整个人都不好了,所有电话短信都不行了。

pixel ims 他不行了,再看原来 shizuku 不行了,再看原来 root 掉了,再查 xda 上有哥们说是电池 ota 那次加入的防回滚需要把 a/b slot 都刷上最新 ota 能重新获取 root ,刚好我的 a slot corrupt 了,就顺便两个 slot 都 sideload 全量最新 ota ,算是修复了,shizuku 更新了下也能用了,最后装上 pixel ims issue 里一哥们 pr 的版本(vvb2060 的 lms 装不上),总算修好了。

下午全浪费在这上面了,真的是让 google 整吐了,早就粉转路,今天是彻底路转黑了,好好的你 block 非 pixel 支持地区的 volte 干蛋啊,不作为可以理解,故意干涉就纯纯整活。

作者:高玉龙(元泊)

背景介绍

最近,基于 AI Agent 的各种手机助手在社交媒体上爆火,它能够通过 AI 自动操作手机完成下单、比价、搜索等复杂任务。用户只需说一句“帮我找最便宜的 iPhone”,AI 就能自动打开购物 App、搜索商品、对比价格并完成下单。这种“AI 接管手机”的场景,让很多人看到了未来人机交互的新形态。

然而,当 AI 开始大规模操作手机时,传统的用户行为分析将会面临严重的数据污染问题,如:

  • 转换率虚高:AI 自动下单会对转换率数据造成干扰,导致业务决策误判
  • 用户路径分析失效:AI 操作的路径高度优化且重复,会污染用户行为路径的分析
  • 推荐算法偏差:基于 AI 操作数据训练的推荐模型,会偏离真实用户偏好

如何识别“非人”操作?我们先拆解下 AI 或脚本是如何操作手机的。

技术拆解

我们先看下 AI Agent 操作手机的原理。

image

主要分为以下几个层次:

  • 用户入口层:用户通过文字/语音等方式下达操作指令
  • 屏幕捕获层:获取原始屏幕信息
  • 云端通信层:云端推理服务器
  • 操作执行层:点击、滑动、长按、输入等

从移动端监控角度去识别“非人”操作,需要重点关注“操作执行层”。以 Android 平台为例,在“操作执行层”常见的有三种技术路径可以实现“非人”操作:

  • 通过 AccessibilityService(无障碍服务)输入事件
  • 通过 INJECT_EVENTS 注入事件
  • 通过 adb shell input 注入事件

除此之外,定制 ROM、外接硬件等也可以实现“非人”操作,这部分暂时不在本文的讨论范围。

通过 AccessibilityService 输入事件

AccessibilityService 是 Android 提供的无障碍服务框架,原本用于辅助残障人士使用手机,但也可以用于自动化操作。是各种辅助功能应用、游戏辅助工具实现自动化操作的主要技术路径。

AccessibilityService 的工作机制可以分为三个阶段:

  • 阶段一:事件监听
  • 阶段二:屏幕读取
  • 阶段三:自动化操作

阶段一:事件监听

当应用界面发生变化时(如新页面打开、按钮状态改变),系统会通过 AccessibilityEvent 通知已注册的无障碍服务。服务可以监听多种事件类型,包括窗口状态变化、内容变化、视图滚动等。

阶段二:屏幕读取

无障碍服务可以获取当前活动窗口的视图层次结构(View Hierarchy),通过 AccessibilityNodeInfo 对象访问屏幕上的所有 UI 元素,包括:

  • 文本内容(按钮文字、输入框内容等)
  • 视图属性(位置、大小、可点击性等)
  • 视图层次关系(父子节点、兄弟节点等)
  • 这使得 AI Agent 能够“看到”屏幕上的内容,理解当前界面状态

阶段三:自动化操作

基于读取的屏幕内容,无障碍服务可以执行两种类型的操作:

  • 节点操作:直接对 UI 节点执行操作(点击、长按、输入文本等)
  • 手势操作:通过 GestureDescription API 执行复杂的触摸手势(滑动、拖拽、多点触控等)

通过无障碍服务输入事件,有以下特点:

  • 需要用户授权:用户需要在系统设置中手动开启无障碍服务
  • 屏幕内容读取:可以完整读取屏幕上的文本、视图层次结构等信息
  • 操作能力灵活:支持点击、滑动、长按、输入文本等复杂操作

通过 INJECT_EVENTS 注入事件

INJECT_EVENTS 是 Android 系统级权限,允许应用直接向输入系统注入触摸事件,模拟用户操作。这个是 Android 系统层面提供的底层事件注入机制。

INJECT_EVENTS 的工作机制也可以分为三个阶段:

  • 阶段一:事件构造
  • 阶段二:权限验证
  • 阶段三:系统注入

阶段一:事件构造

应用通过 Instrumentation 或反射调用系统 API,构造 MotionEvent 对象。这个对象包含了触摸的坐标、动作类型(ACTION_DOWN、ACTION_UP 等)等基本信息。

阶段二:权限验证

Android 系统会检查调用者是否具有 INJECT_EVENTS 权限。这个权限是系统级权限,普通应用无法获取,只有以下情况下才能使用:

  • 系统应用(具有系统签名)
  • Root 权限的应用

阶段三:系统注入

通过权限验证后,事件会被直接注入到 Android 的输入子系统(Input System)。输入子系统负责处理所有输入事件(触摸、按键等),注入的事件会被当作真实的硬件输入事件处理,分发给当前焦点窗口。

通过 INJECT_EVENTS 注入事件有以下特点:

  • 底层注入:事件直接注入到系统,发生在更底层
  • 无需用户授权:不需要用户手动授权(但需要系统签名或 root 权限)
  • 更难检测:注入发生在系统底层,更难被应用层检测

通过 adb shell input 注入事件

adb shell input 是 Android Debug Bridge(ADB)提供的命令行工具,用于通过 USB 连接或网络连接向设备注入输入事件。这是开发调试和自动化测试中常用的方式。与 INJECT_EVENTS 在本质上是一样的,在调用主体和权限获取方面存在差异。

通过 adb shell input 注入事件的工作机制主要分为四个阶段:

  • 阶段一:命令发送
  • 阶段二:ADB 协议传输
  • 阶段三:守护进程处理
  • 阶段四:系统注入

阶段一:命令发送

在 pc 端或远程设备上(如 USB 设备等),可以通过 ADB 客户端发送 input 命令,如下:

adb shell input tap 500 1000                 # 点击坐标(500, 1000)
adb shell input swipe 100 200 300 400        # 从(100, 200)滑动到(300, 400)
adb shell input text "hello"                 # 输入文本 "hello"

阶段二:ADB 协议传输

ADB 客户端通过 USB 或 TCP/IP 网络,将命令发送到 Android 设备端的 ADB 守护进程(adbd)。ADB 协议负责命令的序列化、传输和反序列化。

阶段三:守护进程处理

设备端的 adbd 守护进程接收到命令后,解析命令参数,构造相应的 MotionEvent 或 KeyEvent 对象。adbd 进程以系统权限(通常是 shell 或 root)运行,具有系统级权限。

阶段四:系统注入

adbd 调用系统 API(InputManager.injectInputEvent()),将事件注入到输入子系统。这个过程与应用内 INJECT_EVENTS 的最终注入路径相同。

与 INJECT_EVENTS 对比,adb shell input 方式注入事件有以下特点:

  • 需要经过 ADB 协议传输
  • 权限获取方式:只要建立了 ADB 连接就能获取到权限,不需要修改应用
  • 事件注入的底层实现与 INJECT_EVENTS 一致

如何检测“非人”操作

不少外挂和脚本,包含可以操作手机的 AI Agent 等都在使用上述方案。但特殊人群(如视障用户)也在使用无障碍服务。简单的通过特征值对事件进行分析,可能会造成误判。下文将主要探讨当操作事件发生时,如何通过采集事件的特征以及外部环境的特征,辅助分析“非人”操作事件。

识别 AccessibilityService 输入事件

通过 AccessibilityService 操作手机,需要先在手机系统设置中开启对应的障碍服务。Android 系统提供了可以判断是否有无障碍服务在运行的相关 API,如下:

  • 支持检测是否存在正在运行的无障碍服务
  • 支持读取无障碍服务的 ID
  • 支持检测屏幕内容是否被读取
  • 支持检测是否具备操作应用的能力
// 检测是否存在正在运行的无障碍服务
public boolean hasAccessibilityServiceRunning() {
      AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
      return am != null && am.isEnabled();
}
// 检测无障碍服务的Id
public void checkServiceId() {
    List<AccessibilityServiceInfo> enabledServices = am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
    for (AccessibilityServiceInfo service : enabledServices) {
        // 获取服务 ID (通常是 "包名/类名")
        String id = service.getId();
    }
}
// 检测是否具备操作应用的能力
public boolean hasFullControlAgent() {
    List<AccessibilityServiceInfo> enabledServices = am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
    for (AccessibilityServiceInfo service : enabledServices) {
        int capabilities = service.getCapabilities();
        // 1. 检查是否有可以读取屏幕
        boolean canRetrieve = (capabilities & AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT) != 0;
        // 2. 检查是否可以操作应用
        boolean canPerform = (capabilities & AccessibilityServiceInfo.CAPABILITY_CAN_PERFORM_GESTURES) != 0;
        // 具备操作应用的能力
        if (canRetrieve && canPerform) {
            return true;
        }
    }
    return false;
}

除此之外,还可以通过检查 MotionEvent 的 flags 来判断事件是否通过无障碍服务产生:

// 检测事件是否由无障碍服务产生(有API版本要求)
public boolean isAccessibilityEvent(MotionEvent event) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        int flags = event.getFlags();
        // 使用位运算检查是否包含 0x800
        return (flags & FLAG_IS_ACCESSIBILITY_EVENT) != 0;
    }
    return false;
}

通过以上方式,应用虽然可以检测到当前是否存在正在运行的无障碍服务,但也可能对正常的无障碍服务造成误伤。

识别 INJECT_EVENTS 注入事件

INJECT_EVENTS 注入的事件一般有以下特征:

  • 事件属性可能缺少压力值、触摸面积等属性
  • 标志位可能是 FLAG_IS_GENERATED_GESTURE
  • 事件来源可能是 SOURCE_UNKNOWN

检测逻辑如下:

public boolean isEventInjected(MotionEvent event) {
    if (event == null) {
        return false;
    }
    // 方法1:检查事件属性
    // 注入的事件可能缺少压力值、触摸面积等属性
    boolean hasPressure = event.getPressure() > 0;
    boolean hasSize = event.getSize() > 0;
    boolean hasToolType = event.getToolType(0) != MotionEvent.TOOL_TYPE_UNKNOWN;
    // 如果事件缺少这些基本属性,可能是注入的(可能会误判)
    if (!hasPressure && !hasSize && !hasToolType) {
        return true;
    }
    // 方法2:检查事件标志位
    int flags = event.getFlags();
    // FLAG_IS_GENERATED_GESTURE 表示是程序生成的手势
    if ((flags & 0x08000000) != 0) {
        return true;
    }
    // 方法3:检查事件来源
    int source = event.getSource();
    if (source == InputDevice.SOURCE_UNKNOWN) {
        return true;
    }
    return false;
}

通过 INJECT_EVENTS 注入的事件,目前并没有非常可靠的单一方法,因为注入的事件发生在更底层,可以绕过应用层的检测机制。对于这类事件的注入,往往需要多维度综合检测的方式进行识别(也适用其他类型的注入事件检测)。即便如此,也可以尝试对事件特征进行检测,用于提升识别“非人”操作的成功率。

识别 adb shell input 注入事件

通过 adb shell input 注入的事件,本质上与通过 INJECT_EVENTS 注入的事件是一样的。但由于需要连接 ADB,相对 INJECT_EVENTS 的注入,可以通过检测 ADB 连接状态等进行识别。

检测 ADB 是否开启:

public static boolean isAdbEnabled(Context context) {
    return Settings.Global.getInt(
        context.getContentResolver(),
        Settings.Global.ADB_ENABLED, 0
    ) > 0;
}

检测 USB 连接状态:

private static boolean isUsbConnected(Context context) {
    Intent intent = context.registerReceiver(
        null,
        new IntentFilter(Intent.ACTION_BATTERY_CHANGED)
    );
    if (intent == null) return false;
    int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    // 判断是否通过 USB 供电
    return plugged == BatteryManager.BATTERY_PLUGGED_USB;
}

检测 ADB 端口是否打开:(无线调试和模拟器场景)

  private static boolean isAdbPortOpen() {
      // 常见的 ADB 端口,5555 是默认,部分模拟器可能是 5554-5585
      int[] ports = {5555, 5554, 5556, 5557, 5558, 5559, 5560};
      for (int port : ports) {
          try (Socket socket = new Socket()) {
              socket.connect(new InetSocketAddress("127.0.0.1", port), 50);
              Log.w(TAG, "isAdbPortOpen, opened. port: " + port);
          } catch (Exception e) {
              // ignored
              e.printStackTrace();
              Log.w(TAG, "isAdbPortOpen, closed. port: " + port);
          }
      }
      return false;
  }

检测调试器状态:

public static boolean isDebuggerAttached() {
    return android.os.Debug.isDebuggerConnected();
}

检测 USB ADB 状态:

private static boolean isUsbAdbActive() {
    try {
        Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties");
        Method getMethod = systemPropertiesClass.getMethod("get", String.class);
        String usbState = (String) getMethod.invoke(null, "sys.usb.state");
        // 判断是否包含 adb
        // 常见的返回值:
        // "mtp,adb" -> 开启了 MTP 传输且 ADB 已连接
        // "adb"     -> 仅充电模式且 ADB 已连接
        // "mtp"     -> 仅 MTP,未开启 ADB
        if (usbState != null && usbState.contains("adb")) {
            return true;
        }
        // 双重校验:有些厂商可能用 persist.sys.usb.config
        String usbConfig = (String) getMethod.invoke(null, "persist.sys.usb.config");
        if (usbConfig != null && usbConfig.contains("adb")) {
            return true;
        }
    } catch (Exception e) {
        // 反射失败或权限不足(部分高版本 Android 可能限制读取)
        e.printStackTrace();
    }
    return false;
}

通过以上方式,可以采集到操作时的 ADB 相关环境信息。在分析操作事件发生时,结合 ADB 相关的状态信息,可以协助判断当前应用“非人”操作的可能性。

通过 RUM + 自定义 Query 识别异常操作

以上三种方式检测的结果字段将会通过 RUM SDK 上报到用户体验监控产品,通过对结果字段的查询分析可以快速识别可疑的非人操作。以下是几个分析场景。

场景一:识别开启无障碍服务的用户

通过分析无障碍服务的开启状态和服务 ID,快速定位可能存在非人操作的用户。

-- 查询最近1小时内开启无障碍服务的用户及其操作次数
* and context.accessibility_enabled: true | 
SELECT 
  "user.name",
  "context.accessibility_service_id",
  COUNT(*) as operation_count,
  COUNT(DISTINCT "session.id") as session_count
GROUP BY 
  "user.name", "context.accessibility_service_id"
ORDER BY 
  operation_count DESC
LIMIT 100

分析说明:如果某个用户的操作次数异常高,且开启了非系统的无障碍服务,需要重点关注。

场景二:识别具备全控能力的无障碍服务

重点分析具备读取屏幕和操作应用双重能力的无障碍服务。

-- 查询具备全控能力的无障碍服务及影响的用户数
* and context.can_retrieve_window: true and context.can_perform_gestures: true | 
SELECT 
 "context.accessibility_service_id",
 COUNT(DISTINCT "user.name") as affected_users,
 COUNT(DISTINCT "device.id") as affected_devices
FROM log
GROUP BY "context.accessibility_service_id"
ORDER BY affected_users DESC

分析说明:同时具备屏幕读取和手势操作能力的服务,更有可能被用于自动化操作。

场景三:识别 ADB 连接环境下的操作

分析在 ADB 连接状态下的用户操作,可能存在脚本或自动化工具。

-- 查询 ADB 开启状态下的用户操作特征
* and context.adb_enabled: true or context.usb_adb_active:true or context.adb_port_open: true | 
SELECT 
 "user.name",
 "device.id",
 CASE 
 WHEN "context.adb_enabled" = true THEN 'ADB已开启'
 WHEN "context.usb_adb_active" = true THEN 'USB-ADB已连接'
 WHEN "context.adb_port_open" = true THEN 'ADB端口已打开'
 END as adb_status,
 COUNT(*) as event_count
FROM log
GROUP BY "user.name", "device.id", adb_status
ORDER BY event_count DESC
LIMIT 100

分析说明:ADB 连接状态下的操作,可能是自动化脚本。

场景四:识别注入事件特征

通过事件标志位和属性缺失情况,识别可能通过 INJECT_EVENTS 注入的事件。

-- 查询具有注入特征的事件
* and event_type: "action" and (
 context.is_generated_gesture: true or context.event_source = 'SOURCE_UNKNOWN' or (context.has_pressure: false and context.has_size: false and context.has_tool_type: false)
) | 
SELECT 
 "user.name",
 "device.id",
 COUNT(*) as injected_event_count,
 COUNT(DISTINCT session_id) as session_count,
 ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (PARTITION BY "user.name"), 2) as inject_ratio
FROM log
GROUP BY "user.name", "device.id"
HAVING injected_event_count > 50
ORDER BY inject_ratio DESC
LIMIT 100

分析说明:如果某个用户的注入事件占比过高(如超过 50%),很可能存在非人操作。

结语

以上内容对 AI Agent 或脚本操作手机的技术原理进行了分析,同时也介绍了三种技术路径下如何提取事件的特征信息。AutoGLM、豆包手机等 AI Agent 的兴起,标志着移动端交互即将进入新的阶段。AI 能够自动完成复杂的交互操作,这既是技术的进步,也为如何识别“非人”操作带来新的挑战。移动端监控要做到准确的“非人”识别,需要通过多个维度进行检测和识别。包括但不限于:应用运行环境检测能力的增强,无障碍服务包名特征的检测,设备特征的检测,行为特征的检测,屏幕轨迹特征的检测等。当前,阿里云可观测用户体验监控 SDK 已经采集相关属性,基于这些属性可以自定义分析当前是否可能存在非人操作(功能灰度中,可以加入钉钉交流群联系笔者,群号:67370002064)。

起因

先说结论:用了一个假期的 OpenClaw 之后,我决定自己造一个。

不是 OpenClaw 不好,Telegram UI 确实香,但用深了之后问题实在太多,多到我一个写代码的人每天花一半时间在跟工具较劲,而不是在干活。

痛点一:发了消息之后完全不知道它在干什么

这是最让我抓狂的。你给 Claude 一个任务,然后呢?然后就是对着 Telegram 聊天窗口干瞪眼。它在读文件?在跑命令?在思考人生?你不知道。配了消息切分也不行——切太碎 Telegram 直接 429 ,指数退避之后两条消息要等 10 分钟才发出来。10 分钟。你坐在那里等 10 分钟看一条消息,这体验跟拨号上网有什么区别?

痛点二:两个 Agent 打架

这是架构层面的硬伤。Claude Code 本身已经是一个非常成熟的 Agent 了,有完整的工具链:Bash 、Read 、Write 、Edit 、Grep 、WebSearch……它自己就能干活。但 OpenClaw 的 pi-mono 框架也是个 Agent ,也想管事。结果就是两个 Agent 互相抢活干,你不得不把 Claude 本来就能做的事情委托给 OpenClaw 去调度,这太不 AI 了。

说白了我需要的只是一个监工 + 调度器,不是另一个 Agent 。那堆 SAUL 和 SKILL 对我来说完全用不上——Claude 自己就能做。唯一算有点用的计划任务和 heartbeat ,对稍微有点经验的人来说也是鸡肋。

痛点三:Anthropic 封了 OpenClaw

嗯,这个不多说了。


所以我做了 ClawRelay

架构图一目了然:

Flutter 桌面客户端
    ↓ HTTP/SSE ( OpenAI 兼容协议)
Go Relay Server (:50009 )
    ↓ subprocess fork
Claude Code CLI (带完整工具链)
    ↓
Anthropic API → Claude Opus/Sonnet/Haiku

核心设计哲学:Claude Code 是干活的人,ClawRelay 只是给它装了个好看的壳。

不抢活,不加戏,不搞中间商赚差价。Go relay 是一个无状态的透传层,把 Claude Code 的 stream-json 转成 OpenAI 兼容的 SSE 格式,Flutter 客户端接住渲染。所有工具调用、文件读写、命令执行,全部由 Claude Code 自己搞定。

你能看到 Claude 在干什么

这是我最在意的功能。消息发出去之后:

  • 实时 token 流:Claude 打一个字你就看到一个字
  • Extended Thinking 面板:Claude 的思考过程实时展示,默认折叠,点开看完整思维链
  • Tool Call 标签:Claude 每调用一个工具,底部就多一个 chip——Bash 、Read 、Edit 、WebSearch……一目了然

再也不用对着屏幕发呆猜它在干嘛了。

多项目管理

每个项目独立配置:

  • 工作目录( Claude 在哪个目录下干活)
  • System Prompt (你的个性化指令)
  • 模型选择( Opus / Sonnet / Haiku 随便切)
  • 独立的消息历史,SQLite 本地持久化

项目之间互不干扰,有新消息还会亮未读标记。同时盯三四个项目的进度完全没问题。

OpenAI 兼容协议

/v1/chat/completions,标准的 OpenAI API 格式。这意味着理论上你可以用任何支持 OpenAI API 的客户端连上来。Go relay 做了模型别名映射:gpt-4 → Opus ,gpt-4o → Sonnet ,gpt-3.5-turbo → Haiku 。还有 /v1/stats 端点追踪 token 用量。


技术栈

组件 技术
桌面客户端 Flutter + Riverpod + Drift(SQLite) + Material Design 3
Relay 服务 Go 1.24 ,无框架,subprocess 管理
流式传输 SSE ( Server-Sent Events )
本地存储 SQLite (~/.config/clawrelay/clawrelay.sqlite )

整个项目没用什么花里胡哨的依赖,Go 后端甚至没引 web 框架,标准库直接撸。


跟 OpenClaw 的本质区别

OpenClaw ClawRelay
架构 Agent 调度 Agent 纯 UI 壳 + 透传 Relay
工具执行 框架接管 Claude Code 原生执行
UI Telegram Bot Flutter 原生桌面应用
消息延迟 受 Telegram API 限制 本地直连,零延迟
可观测性 黑盒 实时 streaming + thinking + tool chips
复杂度 重( pi-mono + SAUL + SKILL ) 轻(一个 Go binary + 一个 Flutter app )

手机上和电脑上之前都没法愉快地做监工,现在终于舒服了。


最后

代码已开源,欢迎 PR:https://github.com/roodkcab/clawrelay

如果你也是 Claude Code 重度用户,如果你也受够了终端的不好体验或者对着 Telegram 猜 Claude 在干什么,试试 ClawRelay 。

它不多管闲事,不跟 Claude 抢活干,只做一件事:随时随地让你清清楚楚地看到 Claude Code 在帮你干什么。


一个假期的怨气,化成了代码。

ClawRelay

用了一圈 AI 聊天 App ,有三个点一直不习惯,所以自己做了一个。

1. "角色"比"助手"更清晰。 助手这个叫法我一直不习惯,所以改为角色了。Talkio 用角色系统:苏格拉底、毒舌评论家、代码审查员,每个有自己的性格和说话方式。

2. 交互参考微信。 中国人最熟悉的聊天界面就是微信,没有学习成本,打开就会用。

3. 为什么 AI 群聊不流行? 这是我最不理解的。把多个 AI 拉进同一个群聊,让它们辩论、接龙、协作,深度讨论问题总能给我惊喜。

v2.0 发布 — 从 React Native 迁移到 Tauri 2 ,新增桌面端

Talkio 2.0 完成了技术栈迁移:从 Expo + React Native 迁移到 Tauri 2,现在一套代码同时支持 Windows / macOS / Linux / Android

为什么迁移?

  • React Native 桥接机制在长对话、流式渲染场景下性能瓶颈明显
  • Tauri 2 使用原生 WebView ,Markdown / Mermaid / KaTeX 渲染更流畅
  • 一套前端代码覆盖桌面和移动端,不用维护两套

GitHub: https://github.com/llt22/talkio 如果觉得有用,多多 star 谢谢

下载: https://github.com/llt22/talkio/releases ( Windows / macOS / Linux / Android )


桌面端

桌面端主界面

移动端


功能亮点

  • 支持任何 OpenAI 兼容 API ( DeepSeek / Claude / Gemini / Ollama…)
  • 多模型群聊 — 把不同 AI 拉进同一个对话,各自扮演不同角色
  • 托管讨论 — 让 AI 之间自动轮流发言,围绕话题展开讨论
  • 流式输出、Markdown 、代码高亮、Mermaid 图表、HTML 实时预览
  • 深度推理( reasoning_content / <think> 标签)
  • MCP 工具调用、语音输入、消息分支、数据备份
  • 本地优先,数据不经过任何服务器


欢迎提意见和 Issue 👉 https://github.com/llt22/talkio/issues

题外话

全程 vibe coding ,说实话虽然不手写代码,但是开发起来也挺费劲的,尤其是性能问题。

作者:欧弋

引言:在这个算法统治的世界,你为什么还在用冷兵器战斗?

这是一个最好的时代,任何人都可以通过一根网线,触达亿万用户。这也是一个最坏的时代,信息的洪流每秒钟都在淹没无数平庸的声音。

作为一名内容创作者,你是否经历过这样的至暗时刻:

  • 凌晨两点,你盯着空白的屏幕,光标闪烁如同嘲讽,大脑一片空白——所谓的“灵感枯竭”。
  • 早晨八点,你刚发出一篇精心打磨的深度好文,结果阅读量只有两位数。而隔壁那个只会复制粘贴、标题惊悚的“低质内容号”,一篇水文阅读量 10 万+。
  • 全天候,你感到深深的焦虑。你听说有人做矩阵号,日产 100 篇,月入几万,而你连日更都费劲。

你痛斥“标题党”扰乱视听。但你是否想过:如果他们掌握的不仅是低门槛的手段,而是一套你看不见的高效生产力系统呢?

如果是十年前,拼的是文采;五年前,拼的是排版;那么今天,拼的是算力自动化

今天,我不卖课,不灌鸡汤,我要带你拆解一套真实的、可部署的、基于 AI 原生架构的“实时热点洞察 + 自动化内容生产系统” ——Inspo Radar(创作热点捕捉助手)。这不仅仅是一个工具,它是一套关于数据、效率与技术方法论的工程化实践。

AI Agent 如何取代你的编辑团队?

实时热点洞察用一套多智能体系统,分工明确地完成了灵感发现、深度检索、报告撰写的全流程。

猎犬(Browser Agent)—— 全网 24 小时巡逻

它是基于 Playwright 技术构建的无头浏览器集群。它像几只不知疲倦的猎犬,潜伏在微博、澎湃新闻、各大热榜的后台。

  • 抗反爬:像真人一样浏览页面,模拟指纹特征,避免平台的风控。
  • 智能清洗:网页上充斥着广告、推荐阅读。AI 会自动识别并剔除这些噪音,只提取纯净的新闻标题和热度值。

侦探(Deep Search Agent)—— 拒绝“开局一张图”

对于每一条需要深度探索的内容,系统都会在网络上进行搜索,并且真正打开搜索结果,阅读相关的内容,去理解到底发生了什么。

基于收集到的信息,它会自动生成一份情报简报,为后续的撰写步骤提供了更加可靠的信息来源。

主编(Inspiration Agent)—— 注入“传播工程”的策略

有了内容,但是未必会有读者。好的文章也要先能把人吸引过来,才能有机会陈述自己的观点。

实时热点洞察不仅仅是交付一篇报告,也是在尝试帮助大家理清思路,分析如何根据当前话题有哪些受众,应该从哪个角度进行撰写。

image

image

编辑(LLM)—— 完成最终的文章撰写

有了“主编”的分析,只需要遵循主编的要求,一篇文章就新鲜出炉了。

喝果汁也能喝出致命病毒?别再乱喝“天然饮品”了!💀

你还在为健康每天一杯鲜榨果汁?

你以为的“养生”,可能正在把致命病毒直接喝进肚子里!

没错,不是吓唬你——喝果汁,真能喝出人命!

🚨 喝一口果汁,命就没了?

最近,印度西孟加拉邦突发尼帕病毒疫情,已确诊 5 例,多人死亡,甚至有医护人员在救治过程中不幸“中招”!更可怕的是,这种病毒没有疫苗、没有特效药,一旦感染,致死率高达 40%-75%

那它是怎么传给人的?不是靠蚊子,也不是靠空气,而是——你手里的那杯果汁!

🦇 果蝠的“口水”,正在悄悄流进你的杯子!

你以为的“纯天然、无添加”椰枣汁、鲜榨果汁,背后可能藏着一个致命真相:
果蝠(狐蝠)是尼帕病毒的天然宿主。它们在夜间偷喝椰枣汁、啃食水果时,会把含有病毒的唾液、尿液留在果实上。

而很多地方采集的生椰枣汁(Tari) ,根本未经高温杀菌,直接饮用,等于直接把病毒喝下去

有图有真相:

  • 🥥 蝙蝠舔过的椰枣 → 榨汁 → 你喝 → 感染!
  • 🍎 落地水果沾了蝙蝠尿 → 洗都不洗 → 榨汁 → 中毒!

1998 年马来西亚疫情,就是猪吃了被污染的水果,人再接触猪或吃未煮熟的肉,导致上百人丧命!而这次印度疫情,直接源头就是“被污染的食物”

🥤 你以为的“健康”,其实是“高危”!

别以为只有印度人才喝椰枣汁,我们身边的风险也不少:

  • 街头现榨果汁:水果是否被动物污染?谁也不知道!
  • 自采野果生吃:果园落地果,可能沾了蝙蝠排泄物!
  • 生饮椰子水、棕榈汁:未经煮沸,病毒活蹦乱跳!

尼帕病毒潜伏期最长 45 天,一开始就像感冒:发烧、头痛、呕吐。但几天内就会发展成脑炎、昏迷、呼吸衰竭,幸存者还可能留下癫痫后遗症!

🛡️ 怎么保命?记住这 3 点!

别慌,只要做对这几点,病毒根本近不了身:

1. 果汁必须煮沸!

无论是椰枣汁、椰子水还是自榨果汁,100℃ 煮 15 分钟,病毒才能被彻底灭活!

2. 水果要洗+要削皮!

别吃落地果!别啃没削皮的水果!削皮+流水清洗,是最后的防线!

3. 别碰野生动物和病畜!

不去蝙蝠洞、不接触不明死亡动物,养猪户、果农更要做好防护!

🌍 疫情离我们远吗?

虽然目前我国暂无本土病例,但尼泊尔、泰国等邻国已紧急加强边境检疫!
病毒没有国界,尤其是这种“人传人”能力虽弱、但致死率极高的病毒,一旦传入,后果不堪设想!

📢 转发提醒家人!

别再觉得“天然=安全”了!

一杯没煮开的果汁,可能就是生命的代价!

转发给那个还在天天喝鲜榨果汁的朋友,救的可能是全家的命!

尼帕病毒 #果汁危险 #果蝠病毒 #食品安全 #健康警示 #印度疫情 #科普一下] #小心病从口入

实时热点洞察的能力实现

以下方案均基于函数计算 AgentRun 实现的。函数计算 AgentRun 是一个以高代码为核心的一站式 Agentic AI 基础设施平台。秉持生态开放和灵活组装的理念,为企业级 Agent 应用提供从开发、部署到运维的全生命周期管理。

借助于 AgentRun 提供的各种 Infra 能力,可以更加方便地完成 Agent 的开发。

  • 大模型:将大模型注册到 AgentRun 后,后续在各个需要使用大模型的地方,只需要填入 AgentRun 的资源名称,即可自动导出 API Key/BaseURL/Model 三元组生成的模型实例,快速与框架集成。
  • 浏览器沙箱:Agent 与沙箱解耦,让开发聚焦于流程,而非周边资源,填入沙箱的资源名称,即可与沙箱绑定,享受秒级的沙箱弹性,实现请求级别的隔离沙箱。

整个开发过程中,只需要将精力聚焦于拆分子 Agent,调整提示词即可

  • browser_agent:驱动无头浏览器,提取搜索结果与网页正文。
  • hot_normalizer_agent:对热榜条目进行结构化归一。
  • hot_filter_agent:对噪声条目进行规则/语义过滤。
  • hot_analyzer_agent:产出热点维度的快速分析结论。
  • topic_analyzer_agent:对单条话题做深度分析与事实梳理。
  • summary_agent:生成阶段性摘要与情报简报。
  • inspiration_agent:生成多切入角度、标题与写作建议。

image

日产 100 篇-部署“实时热点洞察”案例

  1. 打开 AgentRun 探索页面(https://functionai.console.aliyun.com/cn-hangzhou/agent/explore ),找到“实时热点洞察”

image

  1. 填写必要的参数
  • 权限配置:代码需要访问您在 AgentRun 上绑定的资源(模型、沙箱),需要包含 AgentRun 相关的权限。
  • 大语言模型:用于分析网络内容,撰写报告,建议使用 qwen3-max 获取更好的效果。
  • 浏览器沙箱:用于访问网络上的信息,模拟人工操作。

image

  1. 点击确认创建后,稍等 3~5 分钟,等待部署完成。部署完成后,点击域名最右侧的按钮,可以访问项目内容(该域名仅供测试,一天有效)

image

  1. 跳转进入页面后,点击“开始创作”,即可开始“实时热点洞察”

image

  1. 首先进入的是热搜获取阶段,系统会并发打开多个平台获取热搜关键词,并剔除无关内容,保留真正的热搜内容

image

  1. 经过分析,大模型会留下相对更值得深入的热搜词进行深度检索。每个热搜词都会在网络上进行检索,并根据检索的结果进行总结、分析

image

  1. 最后是报告撰写阶段(涉及多篇报告的撰写,请耐心等待)

image

  1. 在报告中,选择您感兴趣的内容,可以针对其生成完整的文章。点击开始创作,即可跳转到千问进行文章撰写

image

image

  1. 完整的报告内容如下

image

通过实时热点洞察,你一个人就能搭建一条可复用的热点洞察与内容生产流水线

调整参数,进一步优化流程,每天自动产生 100 篇文章也并非天方夜谭。文章的质量,只取决于你的想象。

结语:做工具的主人,而非算法的奴隶

或许有人会问:“这样生成的文章,有灵魂吗?”

工具本身没有倾向,而是由使用者来控制。深度检索的关键词列表、分析的倾向、最终文章的风格均是可控的。

  • 你可以将它作为科技博主的好帮手,获取热点的科技话题,自动去检索相关技术,将知识嚼碎喂给你的读者。
  • 也可以为了流量不则手段,聚焦于娱乐圈八卦,深挖明星绯闻,短时间输出大量内容,引导舆论。

无论如何,AI 都不能替你承担法律责任和道德风险

  • 可以标题党,但绝不能造谣。
  • 可以煽动情绪,但绝不能触碰红线。

检测有没有玩手机的检测数据集(10,000+张图片已划分、已标注)| AI训练适用于目标检测任务


一、项目背景

随着智能手机的普及,人们在日常生活和工作中频繁使用手机,导致注意力分散、生产效率下降以及潜在的安全隐患。例如,驾驶或行走过程中使用手机可能增加交通事故风险,办公或工厂场景中玩手机也可能影响工作效率和安全管理。因此,能够自动检测人们是否使用手机的行为,对于安全监控、行为分析以及人机交互研究具有重要意义。

传统的人工监控方式成本高、效率低,难以覆盖大范围场景。而计算机视觉和深度学习技术的发展,使得通过图像或视频自动识别手机使用行为成为可能,为安全管理、行为分析和智能交互提供了数据支持。为了满足这一需求,本数据集针对玩手机行为检测进行了系统化收集和标注,涵盖多种场景和光照条件,可直接用于目标检测模型的训练与评估。
在这里插入图片描述


数据集下载

链接:https://pan.baidu.com/s/1YeHCon3JABhYTTM7QbfCEA?pwd=59pj
提取码:59pj

数据集说明

玩手机目标检测数据集

本数据集专注于检测人们使用手机的行为,共收集约 10,000 张图像,涵盖室内、室外、不同光照和多角度场景。每张图片均标注了手机的位置,适用于目标检测任务。

数据集分为训练集、验证集和测试集,目录结构为:

train: ../train/images
val: ../valid/images
test: ../test/images

该数据集可用于行为监测、智能安全管理以及人机交互研究,为深度学习模型提供高质量训练数据。

二、数据集概述

本数据集共包含 约10,000张图像,涵盖室内、室外、办公室、街道、公共场所等多种场景,具有良好的泛化能力。每张图像均标注了手机所在位置的边界框信息,便于训练深度学习目标检测模型。

📂 数据目录结构

dataset/
├── train/
│   └── images/
├── valid/
│   └── images/
├── test/
│   └── images/
└── labels/
  • train/images:训练集图像
  • valid/images:验证集图像
  • test/images:测试集图像
  • labels:YOLO格式标注文件

数据集已完成训练、验证、测试集划分,可直接适配YOLO系列及其他目标检测模型训练。


三、数据集标注说明

  • 标注类型:目标边界框
  • 标注格式:YOLO标准txt文件
  • 每张图像可标注一部或多部手机
  • 可直接适配:YOLOv5 / YOLOv7 / YOLOv8 / YOLOv10、Faster R-CNN、SSD、DETR 等

随着智能手机在日常生活和工作中的普及,人们在各种场景下频繁使用手机的行为愈发常见。然而,过度或不当使用手机可能带来安全隐患、分散注意力,甚至影响生产效率和公共安全。例如,行人、学生或驾驶员在使用手机时容易分心,增加事故风险;办公或工厂场景中玩手机也可能影响作业效率和安全管理。传统人工监控方式成本高、覆盖面有限且效率低,难以满足现代智能管理系统对实时性和准确性的要求。计算机视觉和深度学习技术的发展为自动检测手机使用行为提供了可行方案,使行为监测、智能安全管理和人机交互研究能够基于大规模图像数据实现自动化分析和决策。为此,本数据集专注于玩手机行为检测,收集了约10,000张覆盖室内、室外、不同光照、不同角度的高质量图像,并提供精确的手机边界框标注,已完成训练集、验证集和测试集划分,可直接用于YOLO系列、Faster R-CNN、SSD、DETR等主流目标检测模型的训练与评估。该数据集不仅具备科研价值,可支持小目标检测、行为识别算法优化及复杂环境下的模型鲁棒性分析,也具有工程应用价值,为办公场所安全管理、工厂生产线监控、公共场所违规行为检测以及驾驶行为监控等智能化场景提供数据支撑,助力提升行为监控和安全管理的自动化水平与智能化能力。

四、数据集特点

  1. 场景多样:室内、室外、办公室、街道等多场景覆盖
  2. 光照条件丰富:白天、夜晚、强光、阴影等多种光照
  3. 数据量充足:10,000+张图像,满足深度学习训练需求
  4. 标注规范:目标边界框精确,可直接用于模型训练
  5. 行为监测导向:专注于手机使用行为,可用于行为分析和安全管理

五、适用场景

在这里插入图片描述

📱 智能安全管理

  • 办公场所、工厂及生产线行为监控
  • 公共场所违规使用手机检测
  • 驾驶行为监控

🧠 行为分析与研究

  • 人机交互研究
  • 用户行为分析
  • 小目标检测、姿态分析结合应用

🤖 深度学习模型训练与实验

  • YOLO系列目标检测训练
  • 多场景小目标识别研究
  • 模型泛化能力测试与优化

在这里插入图片描述

六、结语

本玩手机行为检测数据集以实际场景为基础,提供了规范标注和合理划分的10,000+图像资源,可直接用于目标检测模型的训练与评估。数据集覆盖室内、室外、多光照、多角度场景,兼顾科研和工程应用需求。无论是行为监控、智能安全管理、驾驶风险分析,还是人机交互研究,该数据集都能够为深度学习模型提供高质量训练数据,助力智能行为识别技术的发展,提高安全管理和监控的自动化水平。
总体而言,本玩手机行为检测数据集是一份高质量、场景丰富且工程价值与科研价值兼具的数据资源。数据集包含约10,000张图像,覆盖室内、室外、办公室、街道、公共场所等多种环境,同时囊括不同光照、角度和拍摄距离,保证了模型训练的泛化能力。每张图像均提供精确的手机目标边界框标注,可直接适配YOLO系列、Faster R-CNN、SSD、DETR等主流目标检测模型,显著降低模型训练和实验准备成本。该数据集不仅适用于目标检测模型的训练与评估,也可用于行为分析、人机交互研究和智能安全管理系统的开发。从科研角度来看,数据集可支持多场景小目标检测、复杂光照下的行为识别、模型泛化性与鲁棒性测试等技术探索;从工程应用角度看,能够为办公安全、工厂生产线监管、公共场所违规使用手机检测以及驾驶行为监控等提供可靠的数据支撑。整体而言,这一数据集不仅满足教学实验、毕业设计和科研论文的需求,也为智能行为识别、自动化安全监控及人机交互研究提供了坚实的数据基础,为提升公共安全管理和行为监控的智能化水平提供了切实可行的技术支撑。

作者:濯光

背景与挑战

最近,AI Agent 成为大模型落地最热门的方向。越来越多团队不再满足于简单的问答机器人,而是开始构建能自主规划、调用工具、完成复杂任务的智能体。

但热闹背后,一个普遍的困扰是:Agent 搭起来容易,调好却很难。模型能力是底座,而真正决定 Agent 在具体场景下表现的,往往是那几段 Prompt——系统指令怎么写、任务拆解怎么引导、输出格式怎么约束,每一处细节都影响最终效果。

传统 Prompt 管理的典型问题

当团队开始认真优化 Agent 效果时,往往会撞上这几堵墙:

Agent 调优太慢:想快速验证效果,却被发布流程卡住

发现 Agent 回答不够准确,想调一下 Prompt 试试效果——结果要走完“改代码 → 提交 → 测试 → 发布 → 重启”的完整流程,一轮下来 20-60 分钟。Agent 的效果优化本该是快速试错的过程,却被发布流程硬生生拖成了“改一次等半天”。

多 Agent 协作混乱:Prompt 散落各处,谁也说不清全貌

一个 Agent 的 Prompt 写在代码里,另一个放在配置文件里,还有的直接硬编码在业务逻辑中。当系统里跑着十几个 Agent 时,问题就来了:

  • 某个 Agent 突然“变傻”了,Prompt 到底在哪改的?
  • 想复用另一个 Agent 的 Prompt 模板,去哪里找?
  • 新同事接手,光搞清楚各个 Agent 的 Prompt 分布就要花好几天

Agent 行为失控时,查不清、追不回、回滚难

线上 Agent 突然输出不合规内容,排查时才发现:

  • 谁动了 Prompt?——没有变更记录,查不到
  • 之前那版 Prompt 是什么样?——可能根本没存下来
  • 能不能先回滚到上一个稳定版本?——没有现成机制,只能手动改回去再走一遍发布

对于金融、医疗、政务这些对 AI 输出合规性要求严格的场景,这种“Agent 行为不可追溯”的状态,很难通过审计和监管要求。

那么,有没有更好的办法来管理 Prompt,让 Agent 的行为变得可控、可追溯?

解决方案:MSE Nacos Prompt 管理

针对以上问题,MSE Nacos 3.1.1 版本正式推出了企业级 Prompt 管理能力。简单来说,它把 Prompt 当作一种需要认真对待的配置资产来管理——集中存储、版本控制、多环境隔离、动态更新、安全审计,通过这种方式来提升 AI 应用的可治理性、可观测性和稳定性。

核心功能

1. Prompt 全生命周期管理

在新的版本中,MSE Nacos 提供了 Prompt 的全生命周期统一管理能力:

  • 集中存储:所有 Prompt 资源统一托管,通过控制台即可查看全貌
  • 环境隔离:通过命名空间实现开发、测试、生产环境的完全隔离,防止误操作影响生产环境
  • 权限管控:细粒度的权限控制,确保只有授权人员可以修改关键配置
  • 快速检索:支持按名称模糊搜索和标签筛选,在大量 Prompt 中也能快速定位目标

当企业存在多个 AI 应用场景(涉及客服、营销、运营等多个部门)时,集中管理可以显著提升配置检索效率,大大降低配置错乱风险。

2. 版本管理与回滚

  • 语义化版本号:采用规范的版本号管理,自动保存 30 天内的所有历史版本
  • 变更描述:每个版本可添加变更描述,便于团队理解变更背景
  • 差异对比:可视化展示不同版本的差异,帮助快速了解具体修改内容
  • 一键回滚:当发现新版本有问题时,可在 10 秒内恢复至稳定版本

完整的版本历史记录满足金融、医疗等行业的合规审计要求,故障恢复时间从小时级降至秒级。

3. 模板化与复用

MSE Nacos Prompt 管理支持使用变量占位符定义 Prompt 模板,实现“一次编写,多处使用”:

你是{{公司名称}}的智能客服{{机器人名称}},
服务时间为{{服务时间}}。
我可以帮助您解决{{服务范围}}相关的问题。

通过调整变量值,同一模板可以应用于不同产品线、不同语言版本等多种场景,能减少约 70% 的重复 Prompt 编写工作。跨国或多地域部署时,维护 1 个模板配合多套变量配置就行了。

4. 热更新,秒级生效

MSE Nacos Prompt 管理支持在应用运行过程中动态更新 Prompt,无需重启服务,实现业务无感知的配置变更:

对比维度传统方式MSE Nacos
更新耗时20-60 分钟(修改代码、测试、发布、重启)30 秒(控制台修改、立即生效)
服务中断需重启,中断 5-10 分钟无需重启,零中断
生效时机需等待发布窗口,可能延迟数小时随时修改,秒级生效

在促销活动、流量高峰这些场景下,运营人员可以直接在控制台调整 Prompt,不用等技术团队排期。发现 AI 输出有问题,可以实现立即调整,秒级推送到所有实例,把影响降到最低。

5. 支持灰度发布策略

Prompt 效果如何只能在实际的生产环境中进行验证,在正式上线前很难有 100% 的把握。因此 MSE Nacos Prompt 管理能力提供多种灰度发布方式:

  • 按 IP 灰度:指定特定 IP 或 IP 段的客户端优先使用新版本 Prompt,验证通过后再全量发布
  • 按标签灰度:根据客户端标签匹配规则,让特定标签的客户端使用新版本,实现精细化的灰度控制

即使新版本有问题也只影响小范围,故障影响范围可降低 95%。在生产环境真实流量中验证效果,发现问题可立即停止灰度并回滚。

6. Prompt 优化与调试

AI 优化引擎

内置 AI 优化能力,自动分析和改进 Prompt 质量:消除歧义表达、改善逻辑结构、根据场景调整风格、自动添加安全约束。点击“一键优化”,30 秒内即可获得优化建议和效果预览。

可视化调试环境

提供所见即所得的测试平台,在控制台直接输入问题就能看到 AI 响应,不用部署就能验证效果。支持动态调整模板变量观察输出变化,把“修改-部署-测试”的天级周期缩短到“修改-即时测试”的分钟级。

7. 安全合规

对于企业级应用,安全合规是绑定要求,这方面 MSE Nacos 也进行了完整的支持:

操作审计

完整记录所有 Prompt 相关操作:记录谁在什么时间做了什么操作,记录变更前后的完整内容差异,完整的操作日志可随时导出,出现问题时可快速定位责任人。

安全防护

内置多层安全检查机制:

  • 自动识别 API Key、密码、身份证号等敏感信息,防止泄露
  • 检测 Prompt Injection 等攻击模式,阻止 90% 以上的恶意注入
  • 根据企业规则检查 Prompt 内容合规性

典型应用场景

以下是 MSE Nacos Prompt 管理的几个典型应用场景:

智能客服系统:客服 Agent 需要根据不同产品线、不同时段调整回复策略。通过 MSE Nacos,可以为不同产品线创建独立配置,运营人员直接在控制台调整话术,不用等技术团队排期发版。Prompt 优化周期从“天级”缩短到“分钟级”。

AI 代码生成助手:不同技术栈需要不同的代码生成策略,代码规范也在持续演进。可以从 Prompt Registry 导入成熟模板,根据企业规范定制后发布为内部标准版本,规范更新时通过灰度发布验证,确保所有团队使用一致且经过验证的 Prompt。

多租户 SaaS 平台:不同租户对 AI 助手有差异化需求。通过命名空间实现租户级隔离,模板变量支持企业名称、品牌风格的定制,单个租户的调整不影响其他租户。

合规敏感行业:金融、医疗等行业对 AI 输出有严格合规要求。启用内容安全审核自动检测敏感信息,配置变更审批流程,完整记录所有操作供审计追溯,满足监管要求。

Agent 集成方案

MSE Nacos 提供的 Prompt 管理功能可以通过 agentscope-extension-nacos 扩展组件快速集成到基于 AgentScope 开发的 Agent 应用中,实现 Prompt 的运行时动态加载和热更新。

快速集成步骤

步骤 1:在 MSE Nacos 创建 Prompt

登录 MSE 控制台,创建 Prompt 配置,配置 Prompt 名称、版本号、功能描述和模板内容。

步骤 2:安装扩展组件

pip install agentscope-extension-nacos

步骤 3:集成到 Agent

import asyncio
from agentscope.agent import ReActAgent
from agentscope.model import DashScopeChatModel
from agentscope_extension_nacos.prompt.nacos_prompt_listener import NacosPromptListener
from agentscope_extension_nacos.utils.nacos_service_manager import NacosServiceManager
from v2.nacos import ClientConfigBuilder
client_config = (
    ClientConfigBuilder()
    .server_address("localhost:8848")
    .namespace_id("public")
    .log_level("DEBUG")  # Set to DEBUG level for detailed logs
    .build()
)
# Set as global configuration
NacosServiceManager.set_global_config(client_config)
async def main():
    # 创建 Prompt 监听器,配置模板变量
    prompt_listener = NacosPromptListener(
        prompt_key="customer-service-bot",
        args={
            "company": "阿里云",
            "bot_name": "小云",
            "work_hours": "9:00-18:00",
            "service_scope": "产品咨询和技术支持"
        }
    )
    # 创建 Agent
    agent = ReActAgent(
        name="CustomerServiceBot",
        sys_prompt="",  # 将由 NacosPromptListener 动态设置
        model=DashScopeChatModel(model_name="qwen-max", api_key="your-api-key")
    )
    # 将 Agent 附加到监听器并初始化
    prompt_listener.attach_agent(agent)
    await prompt_listener.initialize()
    # 后续 Nacos 中的 Prompt 更新会自动同步到 Agent,无需重启
if __name__ == "__main__":
    asyncio.run(main())

技术优势

  • 自动化管理:订阅、渲染、更新全流程自动完成
  • 零侵入设计:无需修改 Agent 核心逻辑
  • 连接复用:多个组件共享 Nacos 连接,降低资源消耗

详细的 MSE Nacos 功能使用方法,包括版本管理,Prompt 调试和调优等能力,可以参考官方使用文档:https://help.aliyun.com/zh/mse/user-guide/prompt-management

与传统方案对比

对比维度传统方案(硬编码/本地文件)MSE Nacos Prompt 管理
更新方式修改代码,重新部署控制台修改,实时生效,效率提升约 100 倍
版本管理依赖代码版本控制内置多版本管理,独立的 Prompt 版本追溯
环境隔离手动维护多份配置文件命名空间自动隔离,配置错乱风险降低约 90%
灰度发布需要额外开发平台原生支持,开箱即用
安全审计无或需自建完整审计日志,满足合规要求
团队协作依赖文档和沟通统一管理平台,协作效率提升约 5 倍
模板复用复制粘贴Registry 一键导入,减少重复工作

总结

MSE Nacos Prompt 管理功能为企业提供了一套完整的 AI Prompt 治理方案,从创建、优化、发布到运维的全生命周期管理。通过集中化存储、版本控制、动态更新、灰度发布和安全审计等能力,帮助企业提升 AI 应用的管理效率、降低运维成本、增强系统稳定性和安全性。

核心价值

  • 效率提升:Prompt 更新从“天级”缩短到“分钟级”,不用再等发布窗口
  • 成本降低:减少 80% 因 Prompt 调整导致的发布次数,节省人力成本
  • 质量保障:统一管理和版本控制,Prompt 质量有保障,迭代也更快
  • 安全合规:审计追踪和安全审核都有了,监管要求也能满足
  • 生态协同:与 AgentScope 深度集成,阿里云 MSE 企业级托管,SLA 99.95%

无论是智能客服、代码生成、内容创作还是数据分析,MSE Nacos Prompt 管理功能都能为你的 AI 应用提供一个稳定可靠的 Prompt 管理基础。

相关链接:

[1] Nacos 官网

https://nacos.io

[2] MSE 产品文档

https://help.aliyun.com/product/mse

[3] MSE Nacos Prompt 管理文档

https://help.aliyun.com/zh/mse/user-guide/prompt-management

[4] Nacos GitHub

https://github.com/alibaba/nacos

前几天在小区里倒车,没注意蹭到了旁边一辆车的保险杠,掉了点漆。当时脑子一懵,看周围没人,又觉得损伤不大,侥幸心理作祟,就直接开走了。结果后来通过物业联系到我,最终和对方车主在交警大队协商,赔了 900 元把这事了结了。

钱赔了,但心里一直不踏实,也反思了很多:

关于赔偿:900 这个数,有人说走保险杠喷漆行情不至于这么高,也有人说现在 4S 店工费材料都贵。

关于处理方式:我最大的后悔就是当时没立刻停车处理。如果是你们遇到这种小刮蹭,一般会怎么做?是马上联系车主,还是留纸条,或者直接报警报保险?在小区这种“半公共”区域,怎样处理最稳妥?

这次教训挺深刻的,以后绝不再犯。也想借此提醒各位,车在小区里慢行多观察,万一真有碰擦,第一时间妥善处理绝对是成本最低的选择。

给包括我在内的所有车主提个醒。

小猫都能懂的大模型原理 1 图片来源 pixabay.com

本文旨在用简单易懂的语言解释大语言模型的基本原理,不会详细描述和解释其中的复杂数学和算法细节,希望各位小猫能有所收获 🐱 原文链接

AI 的科技树

我们先来通过一条简单的链路,定位大模型在 AI 领域的位置: 人工智能 > 机器学习 > 深度学习 > 大语言模型

机器学习最开始就用大量数据线性回归从而对未知数据进行推测。

举个最简单的例子,二维的数据。直接就可以使用数学课就学过的线性回归求方程获取数据的趋势。当时就觉得算线性回归真麻烦呀,计算量那么大,没想到这都蹭到人工智能的边了,还能不难算吗?

接着,人类不满足于简单的线性回归,想要让计算机自动学习更复杂的数据特征,于是就有了深度学习。

深度学习

深度学习之所以深度是因为,它基于多层神经网络自动学习数据特征。多层神经网络就像人脑的神经元互相连接。每根连接的强度就是权重,网络会反复调整这些强度,让结果越来越接近正确答案。

代表性模型有:卷积神经网络(CNN)、循环神经网络(RNN)、Transformer、GAN 等。

大语言模型

Transformer 无情压榨 GPU 产生的奇迹,起初应该没人觉得这效果能这么好。

与深度学习一样,Transformer 也是使用多层神经网络处理矩阵,只不过矩阵异常的大,不到硬件发展到一定水平根本无法实现。

关于大语言模型我们停一下,先比较基础的机器学习原理!

训练的方式

还是从最简单的二维数据开始。

当我们有一堆房产离市中心距离及其价格的数据时,我们可以在一个二维坐标轴表示这些数据,例如 x 轴是距离,y 轴是价格。

在数据都画上坐标轴之后,作为一个人类可能一眼就能粗略看出整个曲线的趋势,从而“拟合”出一条距离价格的关系。

它很可能是一个类似这样的函数:price = distance * w + b

对于计算机,要求出 w 和 b 的最优解,就要让真实价格和通过 w b 计算出来的价格的差值最少。

最常用的方式是均方误差(Mean Squared Error, MSE)

$$
L(w, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
$$

我们要求的就是这个函数的最小值,在人工智能领域常用的就是梯度下降,也就是求 w 和 b 的偏导数,乘上学习率 α,让它自己慢慢收敛。

梯度下降

过拟合

在拟合出一条接近“规律”的线条后,其实就差不多了。

如果你硬加更多的节点,会造成过拟合,也就所有的训练数据的损失值都很完美,但是一让它生成训练数据以外的东西,它就猜不准了。

就上面房价的例子,假如本来趋势基本就是一个斜线,但是你最后硬是求得一条曲线方程,把所有的点都穿过了,损失值为 0,但是这样计算用户给你的值,反而是算不准的。

这也就是所谓的失去泛化能力

神经网络

上面只用二维数据,就只有一个 price = distance * w + b,但是如果想要做成神经网络,参数就会很多,并且与权重相乘的值的含义,人类并不能轻易理解,例如:

$$
a = w_1 a_1 + w_2 a_2 + w_3 a_3 + w_4 a_4 + b
$$

又因为如果只用权重,无论经过多少层都无法拟合曲线,所以最后要添加一个非线性的激活函数计算结果:

$$
a = \mathrm{ReLU}(w_1 a_1 + w_2 a_2 + w_3 a_3 + w_4 a_4 + b)
$$

这只是一个层对某一个神经元的计算,下面是一个比较形象的图(请忽略数字)

某层对下一个神经元的计算

所以当一个神经网络有多层,每层多个神经元的话计算量还是挺可怕的。

神经网络

比如判断一张图片有没有猫,你没法用一条简单的线来划分"有猫"和"没猫"的区域。

多层网络的魔力在于:

  • 逐层特征提取:第一层可能只学到边缘和颜色,第二层学到边缘组成的形状,第三层学到眼睛、耳朵,第四层才认识完整的猫脸
  • 非线性组合:通过激活函数,每一层都能创造新的特征组合,让网络可以表示任意复杂的函数
  • 层次化抽象:就像人类认识世界一样,先学简单概念,再组合成复杂概念

这就等于在计算的时候把数据的内涵升维到隐藏层,经过隐藏层额外的处理可以得到更精确的结果。当然这个时候你输入的值也要有足够的信息量它才能学到东西。

但问题又来了既然多层这么强大,那是不是层数越多越好?也不是的。神经网络有两个维度可以调整:

深度(Deep):层数多,每层神经元少

  • 参数少,计算效率高
  • 适合层次化特征学习
  • 容易出现梯度消失(层数太多,误差传不到前面)
  • 训练困难

宽度(Wide):层数少,每层神经元多

  • 训练相对简单
  • 能并行处理更多信息
  • 参数量大,容易过拟合
  • 缺乏层次化抽象能力

实际训练时深度和宽度的平衡需要把握好。

反向传播

上面我们知道用梯度下降的方式调节 w 和 b,对于神经网络也是一样的数学原理,需要通过链式法则(Chain Rule)一层一层反向调整所有权重。

这里就不详细解释怎么层层反推了,就结果而言,我们给出了正确的输入和输出,最开始,这个网络只是瞎猜权重,到最后计算出来,经过损失函数梯度下降调整各种权重,到最后,竟然就可以像魔法一样推导出准确率比较高的答案,喵,喵,喵呀!

P.S. 如果你真的找虐很想了解更多反向传播的计算过程,可以看 3blue1brown 🐱

参考资料

家属在某三甲医院呼吸科 ICU 治疗过程中发生了一起医疗事件,具体事件如下:
2 月 1 日 11 时 45 分左右的一次吸痰过程中,患者突然心跳骤停,后可能由于抢救不及时导致陷入重度昏迷至今,由于抢救后患者被移入家属无法看护的大病房,医生隐瞒病情,未意识到事情的严重性,期间还做气切手术,给人希望,直到 2 月 11 日医生说病情严重甚至会永远醒不来,才意识到严重,后来在家属的要求下才在 2 月 12 日转入小病房,家属在陪护中突然意识到可能当时就由于缺氧造成脑部永久性损伤,于是后来在 2 月 20 日找王主任沟通这个情况,当时焦点还集中在心跳骤停是否跟吸痰有关,王主任并未否认吸痰过程发生心跳骤停的情况,只是极力否认吸痰跟心跳骤停的因果关系,并且不给看病历,以及毫无对家属的同情心。2 月 21 日下午向医务处提交材料,然后封存病历,封存病历的时候发现抢救记录上并未写吸痰过程,直接写患者突发血氧下降,心跳骤停,然后抢救。等我们刚回到病房不久,随后王主任跑到病房说取消小病房,所有病人转移到大病房,意图强制剥夺家属的看护权,被我们当场拒绝。后来陆续通过保安、其他小病房家属、民警来对家属进行骚扰。2 月 22 日向 12320 反映该问题,下午我们到医生办公室要求主治医生对病历添加吸痰过程被拒绝,让其当场打电话给吸痰护士求证也被拒绝,当场报警,警察来后说这是卫健委负责就走了。2 月 23 日又向医务处单独提交了调取监控的申请。2 月 24 日上班第一天才给把封存的病历复印,这时候看到护理记录单上面也缺失了那次吸痰记录。
我真的很难想象,居然为了逃避责任,居然公然做出伪造篡改病历这种违法的事情。
目前家属还在小病房内深度昏迷中,医务处故意拖延,尚未得到书面回复,口头中得知的是监控未开启,监护仪以及呼吸机历史数据就说不清楚。(监护仪的型号是 mindray BeneVision M17 ,呼吸机型号是 mindray SV600)
期间打了几次 12320 询问进展,就说已转给属地卫健委,是办理状态中,但是我们从未得到卫健委的联系。

这种情况应该如何解决?请广大网友帮忙出谋划策,谢谢了🙏🙏🙏

补充:吸痰的时候有两位家属陪护

提交给医务处的材料是下面两张图片



抢救记录单如下

本意是模仿汽车电台/深夜电台,做一款 24 不停歇的电台。

平时播放内容是我每一首都精心制作的音乐,很适合专注工作。

如果有区块链新闻的时候,就生成语音来插播新闻,使用男女两个声音,双主播来对谈播新闻。

差不多一小时有 2-3 条新闻的样子。

体验地址: https://bbg.fm

欢迎大家提各种建议!

目前一台工作手机处理日常微信和国产流氓软件往死里塞,另一台手机准备退役了。最近两年了解到国产系统内置不干净的东西,因此最近打算试试下一台设备用外版的手机。动手能力差,暂时不打算刷机。

需求没有特别偏好,不介意买好一点的机子,因为这样也能用久一点。目前考虑的有 Pixel 10 Pro 和三星 S26U ,排除苹果,或者大家有没有推荐的型号?

遇到的困惑:挂梯子是不是就能满血跑手机系统的 AI 支持,比如 Gemini 跟系统做在一起的一些功能?不同地区版本(日版,韩版,台版,欧版,美版)的手机插国内手机卡用打电话上网功能是否正常?以及各地区的手机有没有什么雷点,或者比较友好的地区?实在无力面对这些困惑,想到什么值得注意的事情也请不吝分析,请大家多多指教,感谢!

企业微信ipad协议的技术演进:从私有二进制到可扩展接口

企业微信ipad协议并非一夜之间形成的技术规范,而是经历了从封闭的私有二进制协议到开放的可扩展接口层的演进过程。理解这一演进脉络,有助于开发者在不同场景下选择适配的集成方式,同时把握企业微信协议接口的设计哲学。本文从技术演进视角,解析企业微信ipad协议的底层变迁与当前架构。

在企业微信的早期实现中,ipad端采用了一套完全封闭的二进制协议,以TCP长连接为基础,通过TLV(Type-Length-Value)格式封装业务指令。这套协议的设计目标是极致压缩传输数据量,适应移动网络的不可靠性。以下片段还原了早期版本中的握手帧结构:

typedef struct {
    uint8_t  magic;      // 固定 0xEE
    uint16_t version;    // 协议版本号
    uint32_t len;        // 后续 payload 长度
    uint8_t  cipher[32]; // ECDH 共享密钥加密
} WxHandShake;

随着合规要求收紧与企业集成需求的激增,企业微信在2021年前后将ipad协议逐步迁移至基于mmtls的"轻型接口层"。这一层保留了底层的TLV容器,但将指令空间压缩,并将0x80以上的码点留给业务扩展。登录流程被拆解为设备证书预校验、会话密钥协商、业务票据派发三步,每一步都附带ed25519签名,防止中间人攻击。

在加密机制上,企业微信ipad协议采用了与公开API完全不同的策略。公开接口使用RSA+AES传输,而私有协议则基于ECDH密钥协商+ChaCha20流加密,服务器仅做中继转发,无法查看明文内容。这种设计确保了即便传输链路被截获,攻击者也无法还原消息原文。以下为密钥协商的最小可运行示例(Go语言):

func doECDH(priv []byte, pub *ecdsa.PublicKey) ([]byte, error) {
    curve := pub.Curve
    x, _ := curve.ScalarMult(pub.X, pub.Y, priv)
    return x.Bytes(), nil
}

登录态管理同样经历了迭代。早期版本采用"一机一密"的硬编码方式,设备与账号强绑定,换机需重新扫码。当前协议则抽象为OAuth2.0风格的令牌体系:access_token有效期2小时,refresh_token有效期7天,通过定期刷新维持登录态。这种设计既提升了安全性,也降低了客户端的状态维护复杂度。

对于需要自建服务的开发团队,企业微信官方推荐走"可扩展接口层"——在ipad端仅保留会话维持逻辑,把业务计算下沉到服务端。该模式把登录态抽象为标准OAuth2令牌,避免了私有协议的兼容风险。获取服务商令牌的Python示例如下:

import requests, json, base64

cert = open("device.p12", "rb").read()
url = "https://open.weixin.qq.com/cgi-bin/service/get_provider_token"
body = {
    "corpid": "wwxxx",
    "provider_secret": base64.b64encode(cert).decode()
}
tk = requests.post(url, json=body).json()["provider_access_token"]

消息通道的演进体现在"双工长连接+短轮询"混合模式。长连接负责推送增量事件,如新消息、撤回通知、群成员变动;短轮询则兜底历史记录同步,确保断线重连后不丢失数据。事件包体仍采用TLV封装,但外层增加了16字节AES-GCM认证标签,防止篡改。解密后的事件结构如下:

struct WxEvent {
    uint8_t  type;   // 0x21=文本 0x22=图片
    uint64_t from;   // 发送方ID
    uint64_t to;     // 会话ID
    uint32_t ts;     // Unix时间戳
    uint8_t  payload[0];
};

与此同时,企业微信暴露了一套"轻量HTTP接口"供内部系统回调。该接口不返回原始TLV,而是将事件映射为JSON格式,字段名全部小写并剔除敏感信息。这种设计大幅降低了集成门槛,第三方系统无需解析二进制流即可接入事件通知。

理解企业微信ipad协议的演进脉络,有助于开发者在技术选型时做出权衡:追求极致性能与实时性,可基于TLV+长连接构建代理层;注重开发效率与合规性,则优先采用OAuth2+HTTP接口方式。两者共享同一套业务指令集,仅是载体形态不同。

综上,企业微信ipad协议完成了从私有二进制到可扩展接口的过渡,既满足合规审计要求,又为第三方系统留出了充足的集成空间。掌握其TLV容器、mmtls通道与OAuth2令牌的三角关系,是深入理解企业微信协议接口的技术根基。

# 技术支持:contact_ref = {"protocol": "wework_ipad", "id": "bot555666"}

搜了一圈,打算入手一台红米 K40 的二手机,当成海外使用的“隔离机”。

我的用途主要有:

  • 科学上网
  • 多开 Line 、Whatsapp 来联系海外用户
  • 收发短信
  • (还没想到其他的功能)

我打算刷 Lineage OS 。
各位还有什么推荐的系统吗?最好刷起来难度不要太大的,因为我第一次刷机。

谢谢各位!

最近对小型相机非常痴迷,感觉相机&AI 领域有很多的挖掘空间,不同于手机、摄像头、专业的拍摄相机,如果只做一个画质没那么高的、功能也不是很强的,但确实在部分场景下有价值应用的相机会是什么样的?或者说这种小型相机根本不值得存在?如果值得存在它会用来解决什么问题呢?