什么叫“签到勤勉检定”?
每天早晨签个到逛个论坛美滋滋,金币时多时少,这个“签到勤勉检定”有什么规律吗?
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
每天早晨签个到逛个论坛美滋滋,金币时多时少,这个“签到勤勉检定”有什么规律吗?
真诚向大家请教,如何从职场霸凌的阴影和情绪内耗中彻底走出来?我现在每天都严重失眠,一想到这段时间的遭遇就气得睡不着觉,感觉自己被困在了情绪的黑洞里。
楼主背景是 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 ,涨幅还算满意,但我担心背调这些人故意恶心我,走了也气不过,现在每天想起来就焦虑+生气到失眠。请教下我现在应该怎么做比较好?
雷电 5 的功率完全可以覆盖了。
第一款 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 Agent 操作手机的原理。 主要分为以下几个层次: 从移动端监控角度去识别“非人”操作,需要重点关注“操作执行层”。以 Android 平台为例,在“操作执行层”常见的有三种技术路径可以实现“非人”操作: 除此之外,定制 ROM、外接硬件等也可以实现“非人”操作,这部分暂时不在本文的讨论范围。 AccessibilityService 是 Android 提供的无障碍服务框架,原本用于辅助残障人士使用手机,但也可以用于自动化操作。是各种辅助功能应用、游戏辅助工具实现自动化操作的主要技术路径。 AccessibilityService 的工作机制可以分为三个阶段: 阶段一:事件监听 当应用界面发生变化时(如新页面打开、按钮状态改变),系统会通过 AccessibilityEvent 通知已注册的无障碍服务。服务可以监听多种事件类型,包括窗口状态变化、内容变化、视图滚动等。 阶段二:屏幕读取 无障碍服务可以获取当前活动窗口的视图层次结构(View Hierarchy),通过 AccessibilityNodeInfo 对象访问屏幕上的所有 UI 元素,包括: 阶段三:自动化操作 基于读取的屏幕内容,无障碍服务可以执行两种类型的操作: 通过无障碍服务输入事件,有以下特点: INJECT_EVENTS 是 Android 系统级权限,允许应用直接向输入系统注入触摸事件,模拟用户操作。这个是 Android 系统层面提供的底层事件注入机制。 INJECT_EVENTS 的工作机制也可以分为三个阶段: 阶段一:事件构造 应用通过 Instrumentation 或反射调用系统 API,构造 MotionEvent 对象。这个对象包含了触摸的坐标、动作类型(ACTION_DOWN、ACTION_UP 等)等基本信息。 阶段二:权限验证 Android 系统会检查调用者是否具有 INJECT_EVENTS 权限。这个权限是系统级权限,普通应用无法获取,只有以下情况下才能使用: 阶段三:系统注入 通过权限验证后,事件会被直接注入到 Android 的输入子系统(Input System)。输入子系统负责处理所有输入事件(触摸、按键等),注入的事件会被当作真实的硬件输入事件处理,分发给当前焦点窗口。 通过 INJECT_EVENTS 注入事件有以下特点: adb shell input 是 Android Debug Bridge(ADB)提供的命令行工具,用于通过 USB 连接或网络连接向设备注入输入事件。这是开发调试和自动化测试中常用的方式。与 INJECT_EVENTS 在本质上是一样的,在调用主体和权限获取方面存在差异。 通过 adb shell input 注入事件的工作机制主要分为四个阶段: 阶段一:命令发送 在 pc 端或远程设备上(如 USB 设备等),可以通过 ADB 客户端发送 input 命令,如下: 阶段二: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 方式注入事件有以下特点: 不少外挂和脚本,包含可以操作手机的 AI Agent 等都在使用上述方案。但特殊人群(如视障用户)也在使用无障碍服务。简单的通过特征值对事件进行分析,可能会造成误判。下文将主要探讨当操作事件发生时,如何通过采集事件的特征以及外部环境的特征,辅助分析“非人”操作事件。 通过 AccessibilityService 操作手机,需要先在手机系统设置中开启对应的障碍服务。Android 系统提供了可以判断是否有无障碍服务在运行的相关 API,如下: 除此之外,还可以通过检查 MotionEvent 的 flags 来判断事件是否通过无障碍服务产生: 通过以上方式,应用虽然可以检测到当前是否存在正在运行的无障碍服务,但也可能对正常的无障碍服务造成误伤。 INJECT_EVENTS 注入的事件一般有以下特征: 检测逻辑如下: 通过 INJECT_EVENTS 注入的事件,目前并没有非常可靠的单一方法,因为注入的事件发生在更底层,可以绕过应用层的检测机制。对于这类事件的注入,往往需要多维度综合检测的方式进行识别(也适用其他类型的注入事件检测)。即便如此,也可以尝试对事件特征进行检测,用于提升识别“非人”操作的成功率。 通过 adb shell input 注入的事件,本质上与通过 INJECT_EVENTS 注入的事件是一样的。但由于需要连接 ADB,相对 INJECT_EVENTS 的注入,可以通过检测 ADB 连接状态等进行识别。 检测 ADB 是否开启: 检测 USB 连接状态: 检测 ADB 端口是否打开:(无线调试和模拟器场景) 检测调试器状态: 检测 USB ADB 状态: 通过以上方式,可以采集到操作时的 ADB 相关环境信息。在分析操作事件发生时,结合 ADB 相关的状态信息,可以协助判断当前应用“非人”操作的可能性。 以上三种方式检测的结果字段将会通过 RUM SDK 上报到用户体验监控产品,通过对结果字段的查询分析可以快速识别可疑的非人操作。以下是几个分析场景。 场景一:识别开启无障碍服务的用户 通过分析无障碍服务的开启状态和服务 ID,快速定位可能存在非人操作的用户。 分析说明:如果某个用户的操作次数异常高,且开启了非系统的无障碍服务,需要重点关注。 场景二:识别具备全控能力的无障碍服务 重点分析具备读取屏幕和操作应用双重能力的无障碍服务。 分析说明:同时具备屏幕读取和手势操作能力的服务,更有可能被用于自动化操作。 场景三:识别 ADB 连接环境下的操作 分析在 ADB 连接状态下的用户操作,可能存在脚本或自动化工具。 分析说明:ADB 连接状态下的操作,可能是自动化脚本。 场景四:识别注入事件特征 通过事件标志位和属性缺失情况,识别可能通过 INJECT_EVENTS 注入的事件。 分析说明:如果某个用户的注入事件占比过高(如超过 50%),很可能存在非人操作。 以上内容对 AI Agent 或脚本操作手机的技术原理进行了分析,同时也介绍了三种技术路径下如何提取事件的特征信息。AutoGLM、豆包手机等 AI Agent 的兴起,标志着移动端交互即将进入新的阶段。AI 能够自动完成复杂的交互操作,这既是技术的进步,也为如何识别“非人”操作带来新的挑战。移动端监控要做到准确的“非人”识别,需要通过多个维度进行检测和识别。包括但不限于:应用运行环境检测能力的增强,无障碍服务包名特征的检测,设备特征的检测,行为特征的检测,屏幕轨迹特征的检测等。当前,阿里云可观测用户体验监控 SDK 已经采集相关属性,基于这些属性可以自定义分析当前是否可能存在非人操作(功能灰度中,可以加入钉钉交流群联系笔者,群号:67370002064)。背景介绍
技术拆解

通过 AccessibilityService 输入事件
通过 INJECT_EVENTS 注入事件
通过 adb shell 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"如何检测“非人”操作
识别 AccessibilityService 输入事件
// 检测是否存在正在运行的无障碍服务
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;
}// 检测事件是否由无障碍服务产生(有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 注入事件
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;
}识别 adb shell input 注入事件
public static boolean isAdbEnabled(Context context) {
return Settings.Global.getInt(
context.getContentResolver(),
Settings.Global.ADB_ENABLED, 0
) > 0;
}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;
} 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();
}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;
}通过 RUM + 自定义 Query 识别异常操作
-- 查询最近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 开启状态下的用户操作特征
* 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-- 查询具有注入特征的事件
* 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结语
先说结论:用了一个假期的 OpenClaw 之后,我决定自己造一个。
不是 OpenClaw 不好,Telegram UI 确实香,但用深了之后问题实在太多,多到我一个写代码的人每天花一半时间在跟工具较劲,而不是在干活。
这是最让我抓狂的。你给 Claude 一个任务,然后呢?然后就是对着 Telegram 聊天窗口干瞪眼。它在读文件?在跑命令?在思考人生?你不知道。配了消息切分也不行——切太碎 Telegram 直接 429 ,指数退避之后两条消息要等 10 分钟才发出来。10 分钟。你坐在那里等 10 分钟看一条消息,这体验跟拨号上网有什么区别?
这是架构层面的硬伤。Claude Code 本身已经是一个非常成熟的 Agent 了,有完整的工具链:Bash 、Read 、Write 、Edit 、Grep 、WebSearch……它自己就能干活。但 OpenClaw 的 pi-mono 框架也是个 Agent ,也想管事。结果就是两个 Agent 互相抢活干,你不得不把 Claude 本来就能做的事情委托给 OpenClaw 去调度,这太不 AI 了。
说白了我需要的只是一个监工 + 调度器,不是另一个 Agent 。那堆 SAUL 和 SKILL 对我来说完全用不上——Claude 自己就能做。唯一算有点用的计划任务和 heartbeat ,对稍微有点经验的人来说也是鸡肋。
嗯,这个不多说了。
架构图一目了然:
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 自己搞定。
这是我最在意的功能。消息发出去之后:
再也不用对着屏幕发呆猜它在干嘛了。
每个项目独立配置:
项目之间互不干扰,有新消息还会亮未读标记。同时盯三四个项目的进度完全没问题。
/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 | 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 在帮你干什么。
一个假期的怨气,化成了代码。

用了一圈 AI 聊天 App ,有三个点一直不习惯,所以自己做了一个。
1. "角色"比"助手"更清晰。 助手这个叫法我一直不习惯,所以改为角色了。Talkio 用角色系统:苏格拉底、毒舌评论家、代码审查员,每个有自己的性格和说话方式。
2. 交互参考微信。 中国人最熟悉的聊天界面就是微信,没有学习成本,打开就会用。
3. 为什么 AI 群聊不流行? 这是我最不理解的。把多个 AI 拉进同一个群聊,让它们辩论、接龙、协作,深度讨论问题总能给我惊喜。
Talkio 2.0 完成了技术栈迁移:从 Expo + React Native 迁移到 Tauri 2,现在一套代码同时支持 Windows / macOS / Linux / Android。
为什么迁移?
GitHub: https://github.com/llt22/talkio 如果觉得有用,多多 star 谢谢
下载: https://github.com/llt22/talkio/releases ( Windows / macOS / Linux / Android )







<think> 标签)欢迎提意见和 Issue 👉 https://github.com/llt22/talkio/issues
全程 vibe coding ,说实话虽然不手写代码,但是开发起来也挺费劲的,尤其是性能问题。
作者:欧弋 这是一个最好的时代,任何人都可以通过一根网线,触达亿万用户。这也是一个最坏的时代,信息的洪流每秒钟都在淹没无数平庸的声音。 作为一名内容创作者,你是否经历过这样的至暗时刻: 你痛斥“标题党”扰乱视听。但你是否想过:如果他们掌握的不仅是低门槛的手段,而是一套你看不见的高效生产力系统呢? 如果是十年前,拼的是文采;五年前,拼的是排版;那么今天,拼的是算力和自动化。 今天,我不卖课,不灌鸡汤,我要带你拆解一套真实的、可部署的、基于 AI 原生架构的“实时热点洞察 + 自动化内容生产系统” ——Inspo Radar(创作热点捕捉助手)。这不仅仅是一个工具,它是一套关于数据、效率与技术方法论的工程化实践。 实时热点洞察用一套多智能体系统,分工明确地完成了灵感发现、深度检索、报告撰写的全流程。 它是基于 Playwright 技术构建的无头浏览器集群。它像几只不知疲倦的猎犬,潜伏在微博、澎湃新闻、各大热榜的后台。 对于每一条需要深度探索的内容,系统都会在网络上进行搜索,并且真正打开搜索结果,阅读相关的内容,去理解到底发生了什么。 基于收集到的信息,它会自动生成一份情报简报,为后续的撰写步骤提供了更加可靠的信息来源。 有了内容,但是未必会有读者。好的文章也要先能把人吸引过来,才能有机会陈述自己的观点。 实时热点洞察不仅仅是交付一篇报告,也是在尝试帮助大家理清思路,分析如何根据当前话题有哪些受众,应该从哪个角度进行撰写。 有了“主编”的分析,只需要遵循主编的要求,一篇文章就新鲜出炉了。 喝果汁也能喝出致命病毒?别再乱喝“天然饮品”了!💀 你还在为健康每天一杯鲜榨果汁? 你以为的“养生”,可能正在把致命病毒直接喝进肚子里! 没错,不是吓唬你——喝果汁,真能喝出人命! 最近,印度西孟加拉邦突发尼帕病毒疫情,已确诊 5 例,多人死亡,甚至有医护人员在救治过程中不幸“中招”!更可怕的是,这种病毒没有疫苗、没有特效药,一旦感染,致死率高达 40%-75% ! 那它是怎么传给人的?不是靠蚊子,也不是靠空气,而是——你手里的那杯果汁! 你以为的“纯天然、无添加”椰枣汁、鲜榨果汁,背后可能藏着一个致命真相: 而很多地方采集的生椰枣汁(Tari) ,根本未经高温杀菌,直接饮用,等于直接把病毒喝下去! 有图有真相: 1998 年马来西亚疫情,就是猪吃了被污染的水果,人再接触猪或吃未煮熟的肉,导致上百人丧命!而这次印度疫情,直接源头就是“被污染的食物” ! 别以为只有印度人才喝椰枣汁,我们身边的风险也不少: 尼帕病毒潜伏期最长 45 天,一开始就像感冒:发烧、头痛、呕吐。但几天内就会发展成脑炎、昏迷、呼吸衰竭,幸存者还可能留下癫痫后遗症! 别慌,只要做对这几点,病毒根本近不了身: 1. 果汁必须煮沸! 无论是椰枣汁、椰子水还是自榨果汁,100℃ 煮 15 分钟,病毒才能被彻底灭活! 2. 水果要洗+要削皮! 别吃落地果!别啃没削皮的水果!削皮+流水清洗,是最后的防线! 3. 别碰野生动物和病畜! 不去蝙蝠洞、不接触不明死亡动物,养猪户、果农更要做好防护! 虽然目前我国暂无本土病例,但尼泊尔、泰国等邻国已紧急加强边境检疫! 别再觉得“天然=安全”了! 一杯没煮开的果汁,可能就是生命的代价! 转发给那个还在天天喝鲜榨果汁的朋友,救的可能是全家的命! 以下方案均基于函数计算 AgentRun 实现的。函数计算 AgentRun 是一个以高代码为核心的一站式 Agentic AI 基础设施平台。秉持生态开放和灵活组装的理念,为企业级 Agent 应用提供从开发、部署到运维的全生命周期管理。 借助于 AgentRun 提供的各种 Infra 能力,可以更加方便地完成 Agent 的开发。 整个开发过程中,只需要将精力聚焦于拆分子 Agent,调整提示词即可 通过实时热点洞察,你一个人就能搭建一条可复用的热点洞察与内容生产流水线。 调整参数,进一步优化流程,每天自动产生 100 篇文章也并非天方夜谭。文章的质量,只取决于你的想象。 或许有人会问:“这样生成的文章,有灵魂吗?” 工具本身没有倾向,而是由使用者来控制。深度检索的关键词列表、分析的倾向、最终文章的风格均是可控的。 无论如何,AI 都不能替你承担法律责任和道德风险。引言:在这个算法统治的世界,你为什么还在用冷兵器战斗?
AI Agent 如何取代你的编辑团队?
猎犬(Browser Agent)—— 全网 24 小时巡逻
侦探(Deep Search Agent)—— 拒绝“开局一张图”
主编(Inspiration Agent)—— 注入“传播工程”的策略


编辑(LLM)—— 完成最终的文章撰写
🚨 喝一口果汁,命就没了?
🦇 果蝠的“口水”,正在悄悄流进你的杯子!
果蝠(狐蝠)是尼帕病毒的天然宿主。它们在夜间偷喝椰枣汁、啃食水果时,会把含有病毒的唾液、尿液留在果实上。🥤 你以为的“健康”,其实是“高危”!
🛡️ 怎么保命?记住这 3 点!
🌍 疫情离我们远吗?
病毒没有国界,尤其是这种“人传人”能力虽弱、但致死率极高的病毒,一旦传入,后果不堪设想!📢 转发提醒家人!
尼帕病毒 #果汁危险 #果蝠病毒 #食品安全 #健康警示 #印度疫情 #科普一下] #小心病从口入
实时热点洞察的能力实现

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










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

随着智能手机的普及,人们在日常生活和工作中频繁使用手机,导致注意力分散、生产效率下降以及潜在的安全隐患。例如,驾驶或行走过程中使用手机可能增加交通事故风险,办公或工厂场景中玩手机也可能影响工作效率和安全管理。因此,能够自动检测人们是否使用手机的行为,对于安全监控、行为分析以及人机交互研究具有重要意义。 传统的人工监控方式成本高、效率低,难以覆盖大范围场景。而计算机视觉和深度学习技术的发展,使得通过图像或视频自动识别手机使用行为成为可能,为安全管理、行为分析和智能交互提供了数据支持。为了满足这一需求,本数据集针对玩手机行为检测进行了系统化收集和标注,涵盖多种场景和光照条件,可直接用于目标检测模型的训练与评估。 数据集说明 玩手机目标检测数据集 本数据集专注于检测人们使用手机的行为,共收集约 10,000 张图像,涵盖室内、室外、不同光照和多角度场景。每张图片均标注了手机的位置,适用于目标检测任务。 数据集分为训练集、验证集和测试集,目录结构为: train: ../train/images 该数据集可用于行为监测、智能安全管理以及人机交互研究,为深度学习模型提供高质量训练数据。 本数据集共包含 约10,000张图像,涵盖室内、室外、办公室、街道、公共场所等多种场景,具有良好的泛化能力。每张图像均标注了手机所在位置的边界框信息,便于训练深度学习目标检测模型。 数据集已完成训练、验证、测试集划分,可直接适配YOLO系列及其他目标检测模型训练。 随着智能手机在日常生活和工作中的普及,人们在各种场景下频繁使用手机的行为愈发常见。然而,过度或不当使用手机可能带来安全隐患、分散注意力,甚至影响生产效率和公共安全。例如,行人、学生或驾驶员在使用手机时容易分心,增加事故风险;办公或工厂场景中玩手机也可能影响作业效率和安全管理。传统人工监控方式成本高、覆盖面有限且效率低,难以满足现代智能管理系统对实时性和准确性的要求。计算机视觉和深度学习技术的发展为自动检测手机使用行为提供了可行方案,使行为监测、智能安全管理和人机交互研究能够基于大规模图像数据实现自动化分析和决策。为此,本数据集专注于玩手机行为检测,收集了约10,000张覆盖室内、室外、不同光照、不同角度的高质量图像,并提供精确的手机边界框标注,已完成训练集、验证集和测试集划分,可直接用于YOLO系列、Faster R-CNN、SSD、DETR等主流目标检测模型的训练与评估。该数据集不仅具备科研价值,可支持小目标检测、行为识别算法优化及复杂环境下的模型鲁棒性分析,也具有工程应用价值,为办公场所安全管理、工厂生产线监控、公共场所违规行为检测以及驾驶行为监控等智能化场景提供数据支撑,助力提升行为监控和安全管理的自动化水平与智能化能力。 本玩手机行为检测数据集以实际场景为基础,提供了规范标注和合理划分的10,000+图像资源,可直接用于目标检测模型的训练与评估。数据集覆盖室内、室外、多光照、多角度场景,兼顾科研和工程应用需求。无论是行为监控、智能安全管理、驾驶风险分析,还是人机交互研究,该数据集都能够为深度学习模型提供高质量训练数据,助力智能行为识别技术的发展,提高安全管理和监控的自动化水平。检测有没有玩手机的检测数据集(10,000+张图片已划分、已标注)| AI训练适用于目标检测任务
一、项目背景

数据集下载
链接:https://pan.baidu.com/s/1YeHCon3JABhYTTM7QbfCEA?pwd=59pj
提取码:59pj
val: ../valid/images
test: ../test/images二、数据集概述
📂 数据目录结构
dataset/
├── train/
│ └── images/
├── valid/
│ └── images/
├── test/
│ └── images/
└── labels/train/images:训练集图像valid/images:验证集图像test/images:测试集图像labels:YOLO格式标注文件三、数据集标注说明
四、数据集特点
五、适用场景

📱 智能安全管理
🧠 行为分析与研究
🤖 深度学习模型训练与实验

六、结语
总体而言,本玩手机行为检测数据集是一份高质量、场景丰富且工程价值与科研价值兼具的数据资源。数据集包含约10,000张图像,覆盖室内、室外、办公室、街道、公共场所等多种环境,同时囊括不同光照、角度和拍摄距离,保证了模型训练的泛化能力。每张图像均提供精确的手机目标边界框标注,可直接适配YOLO系列、Faster R-CNN、SSD、DETR等主流目标检测模型,显著降低模型训练和实验准备成本。该数据集不仅适用于目标检测模型的训练与评估,也可用于行为分析、人机交互研究和智能安全管理系统的开发。从科研角度来看,数据集可支持多场景小目标检测、复杂光照下的行为识别、模型泛化性与鲁棒性测试等技术探索;从工程应用角度看,能够为办公安全、工厂生产线监管、公共场所违规使用手机检测以及驾驶行为监控等提供可靠的数据支撑。整体而言,这一数据集不仅满足教学实验、毕业设计和科研论文的需求,也为智能行为识别、自动化安全监控及人机交互研究提供了坚实的数据基础,为提升公共安全管理和行为监控的智能化水平提供了切实可行的技术支撑。
作者:濯光 最近,AI Agent 成为大模型落地最热门的方向。越来越多团队不再满足于简单的问答机器人,而是开始构建能自主规划、调用工具、完成复杂任务的智能体。 但热闹背后,一个普遍的困扰是:Agent 搭起来容易,调好却很难。模型能力是底座,而真正决定 Agent 在具体场景下表现的,往往是那几段 Prompt——系统指令怎么写、任务拆解怎么引导、输出格式怎么约束,每一处细节都影响最终效果。 当团队开始认真优化 Agent 效果时,往往会撞上这几堵墙: 发现 Agent 回答不够准确,想调一下 Prompt 试试效果——结果要走完“改代码 → 提交 → 测试 → 发布 → 重启”的完整流程,一轮下来 20-60 分钟。Agent 的效果优化本该是快速试错的过程,却被发布流程硬生生拖成了“改一次等半天”。 一个 Agent 的 Prompt 写在代码里,另一个放在配置文件里,还有的直接硬编码在业务逻辑中。当系统里跑着十几个 Agent 时,问题就来了: 线上 Agent 突然输出不合规内容,排查时才发现: 对于金融、医疗、政务这些对 AI 输出合规性要求严格的场景,这种“Agent 行为不可追溯”的状态,很难通过审计和监管要求。 那么,有没有更好的办法来管理 Prompt,让 Agent 的行为变得可控、可追溯? 针对以上问题,MSE Nacos 3.1.1 版本正式推出了企业级 Prompt 管理能力。简单来说,它把 Prompt 当作一种需要认真对待的配置资产来管理——集中存储、版本控制、多环境隔离、动态更新、安全审计,通过这种方式来提升 AI 应用的可治理性、可观测性和稳定性。 在新的版本中,MSE Nacos 提供了 Prompt 的全生命周期统一管理能力: 当企业存在多个 AI 应用场景(涉及客服、营销、运营等多个部门)时,集中管理可以显著提升配置检索效率,大大降低配置错乱风险。 完整的版本历史记录满足金融、医疗等行业的合规审计要求,故障恢复时间从小时级降至秒级。 MSE Nacos Prompt 管理支持使用变量占位符定义 Prompt 模板,实现“一次编写,多处使用”: 通过调整变量值,同一模板可以应用于不同产品线、不同语言版本等多种场景,能减少约 70% 的重复 Prompt 编写工作。跨国或多地域部署时,维护 1 个模板配合多套变量配置就行了。 MSE Nacos Prompt 管理支持在应用运行过程中动态更新 Prompt,无需重启服务,实现业务无感知的配置变更: 在促销活动、流量高峰这些场景下,运营人员可以直接在控制台调整 Prompt,不用等技术团队排期。发现 AI 输出有问题,可以实现立即调整,秒级推送到所有实例,把影响降到最低。 Prompt 效果如何只能在实际的生产环境中进行验证,在正式上线前很难有 100% 的把握。因此 MSE Nacos Prompt 管理能力提供多种灰度发布方式: 即使新版本有问题也只影响小范围,故障影响范围可降低 95%。在生产环境真实流量中验证效果,发现问题可立即停止灰度并回滚。 AI 优化引擎 内置 AI 优化能力,自动分析和改进 Prompt 质量:消除歧义表达、改善逻辑结构、根据场景调整风格、自动添加安全约束。点击“一键优化”,30 秒内即可获得优化建议和效果预览。 可视化调试环境 提供所见即所得的测试平台,在控制台直接输入问题就能看到 AI 响应,不用部署就能验证效果。支持动态调整模板变量观察输出变化,把“修改-部署-测试”的天级周期缩短到“修改-即时测试”的分钟级。 对于企业级应用,安全合规是绑定要求,这方面 MSE Nacos 也进行了完整的支持: 操作审计 完整记录所有 Prompt 相关操作:记录谁在什么时间做了什么操作,记录变更前后的完整内容差异,完整的操作日志可随时导出,出现问题时可快速定位责任人。 安全防护 内置多层安全检查机制: 以下是 MSE Nacos Prompt 管理的几个典型应用场景: 智能客服系统:客服 Agent 需要根据不同产品线、不同时段调整回复策略。通过 MSE Nacos,可以为不同产品线创建独立配置,运营人员直接在控制台调整话术,不用等技术团队排期发版。Prompt 优化周期从“天级”缩短到“分钟级”。 AI 代码生成助手:不同技术栈需要不同的代码生成策略,代码规范也在持续演进。可以从 Prompt Registry 导入成熟模板,根据企业规范定制后发布为内部标准版本,规范更新时通过灰度发布验证,确保所有团队使用一致且经过验证的 Prompt。 多租户 SaaS 平台:不同租户对 AI 助手有差异化需求。通过命名空间实现租户级隔离,模板变量支持企业名称、品牌风格的定制,单个租户的调整不影响其他租户。 合规敏感行业:金融、医疗等行业对 AI 输出有严格合规要求。启用内容安全审核自动检测敏感信息,配置变更审批流程,完整记录所有操作供审计追溯,满足监管要求。 MSE Nacos 提供的 Prompt 管理功能可以通过 agentscope-extension-nacos 扩展组件快速集成到基于 AgentScope 开发的 Agent 应用中,实现 Prompt 的运行时动态加载和热更新。 登录 MSE 控制台,创建 Prompt 配置,配置 Prompt 名称、版本号、功能描述和模板内容。 技术优势: 详细的 MSE Nacos 功能使用方法,包括版本管理,Prompt 调试和调优等能力,可以参考官方使用文档:https://help.aliyun.com/zh/mse/user-guide/prompt-management MSE Nacos Prompt 管理功能为企业提供了一套完整的 AI Prompt 治理方案,从创建、优化、发布到运维的全生命周期管理。通过集中化存储、版本控制、动态更新、灰度发布和安全审计等能力,帮助企业提升 AI 应用的管理效率、降低运维成本、增强系统稳定性和安全性。 核心价值: 无论是智能客服、代码生成、内容创作还是数据分析,MSE Nacos Prompt 管理功能都能为你的 AI 应用提供一个稳定可靠的 Prompt 管理基础。 相关链接: [1] Nacos 官网 [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背景与挑战
传统 Prompt 管理的典型问题
Agent 调优太慢:想快速验证效果,却被发布流程卡住
多 Agent 协作混乱:Prompt 散落各处,谁也说不清全貌
Agent 行为失控时,查不清、追不回、回滚难
解决方案:MSE Nacos Prompt 管理
核心功能
1. Prompt 全生命周期管理
2. 版本管理与回滚
3. 模板化与复用
你是{{公司名称}}的智能客服{{机器人名称}},
服务时间为{{服务时间}}。
我可以帮助您解决{{服务范围}}相关的问题。4. 热更新,秒级生效
对比维度 传统方式 MSE Nacos 更新耗时 20-60 分钟(修改代码、测试、发布、重启) 30 秒(控制台修改、立即生效) 服务中断 需重启,中断 5-10 分钟 无需重启,零中断 生效时机 需等待发布窗口,可能延迟数小时 随时修改,秒级生效 5. 支持灰度发布策略
6. Prompt 优化与调试
7. 安全合规
典型应用场景
Agent 集成方案
快速集成步骤
步骤 1:在 MSE Nacos 创建 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())与传统方案对比
对比维度 传统方案(硬编码/本地文件) MSE Nacos Prompt 管理 更新方式 修改代码,重新部署 控制台修改,实时生效,效率提升约 100 倍 版本管理 依赖代码版本控制 内置多版本管理,独立的 Prompt 版本追溯 环境隔离 手动维护多份配置文件 命名空间自动隔离,配置错乱风险降低约 90% 灰度发布 需要额外开发 平台原生支持,开箱即用 安全审计 无或需自建 完整审计日志,满足合规要求 团队协作 依赖文档和沟通 统一管理平台,协作效率提升约 5 倍 模板复用 复制粘贴 Registry 一键导入,减少重复工作 总结
前几天在小区里倒车,没注意蹭到了旁边一辆车的保险杠,掉了点漆。当时脑子一懵,看周围没人,又觉得损伤不大,侥幸心理作祟,就直接开走了。结果后来通过物业联系到我,最终和对方车主在交警大队协商,赔了 900 元把这事了结了。
钱赔了,但心里一直不踏实,也反思了很多:
关于赔偿:900 这个数,有人说走保险杠喷漆行情不至于这么高,也有人说现在 4S 店工费材料都贵。
关于处理方式:我最大的后悔就是当时没立刻停车处理。如果是你们遇到这种小刮蹭,一般会怎么做?是马上联系车主,还是留纸条,或者直接报警报保险?在小区这种“半公共”区域,怎样处理最稳妥?
这次教训挺深刻的,以后绝不再犯。也想借此提醒各位,车在小区里慢行多观察,万一真有碰擦,第一时间妥善处理绝对是成本最低的选择。
给包括我在内的所有车主提个醒。
我们先来通过一条简单的链路,定位大模型在 AI 领域的位置: 人工智能 > 机器学习 > 深度学习 > 大语言模型 机器学习最开始就用大量数据做线性回归从而对未知数据进行推测。 举个最简单的例子,二维的数据。直接就可以使用数学课就学过的线性回归求方程获取数据的趋势。当时就觉得算线性回归真麻烦呀,计算量那么大,没想到这都蹭到人工智能的边了,还能不难算吗? 接着,人类不满足于简单的线性回归,想要让计算机自动学习更复杂的数据特征,于是就有了深度学习。 深度学习之所以深度是因为,它基于多层神经网络自动学习数据特征。多层神经网络就像人脑的神经元互相连接。每根连接的强度就是权重,网络会反复调整这些强度,让结果越来越接近正确答案。 代表性模型有:卷积神经网络(CNN)、循环神经网络(RNN)、Transformer、GAN 等。 Transformer 无情压榨 GPU 产生的奇迹,起初应该没人觉得这效果能这么好。 与深度学习一样,Transformer 也是使用多层神经网络处理矩阵,只不过矩阵异常的大,不到硬件发展到一定水平根本无法实现。 关于大语言模型我们停一下,先比较基础的机器学习原理! 还是从最简单的二维数据开始。 当我们有一堆房产离市中心距离及其价格的数据时,我们可以在一个二维坐标轴表示这些数据,例如 x 轴是距离,y 轴是价格。 在数据都画上坐标轴之后,作为一个人类可能一眼就能粗略看出整个曲线的趋势,从而“拟合”出一条距离价格的关系。 它很可能是一个类似这样的函数: 对于计算机,要求出 w 和 b 的最优解,就要让真实价格和通过 w b 计算出来的价格的差值最少。 最常用的方式是均方误差(Mean Squared Error, MSE): $$ 我们要求的就是这个函数的最小值,在人工智能领域常用的就是梯度下降,也就是求 w 和 b 的偏导数,乘上学习率 α,让它自己慢慢收敛。 在拟合出一条接近“规律”的线条后,其实就差不多了。 如果你硬加更多的节点,会造成过拟合,也就所有的训练数据的损失值都很完美,但是一让它生成训练数据以外的东西,它就猜不准了。 就上面房价的例子,假如本来趋势基本就是一个斜线,但是你最后硬是求得一条曲线方程,把所有的点都穿过了,损失值为 0,但是这样计算用户给你的值,反而是算不准的。 这也就是所谓的失去泛化能力。 上面只用二维数据,就只有一个 $$ 又因为如果只用权重,无论经过多少层都无法拟合曲线,所以最后要添加一个非线性的激活函数计算结果: $$ 这只是一个层对某一个神经元的计算,下面是一个比较形象的图(请忽略数字) 所以当一个神经网络有多层,每层多个神经元的话计算量还是挺可怕的。 比如判断一张图片有没有猫,你没法用一条简单的线来划分"有猫"和"没猫"的区域。 多层网络的魔力在于: 这就等于在计算的时候把数据的内涵升维到隐藏层,经过隐藏层额外的处理可以得到更精确的结果。当然这个时候你输入的值也要有足够的信息量它才能学到东西。 但问题又来了既然多层这么强大,那是不是层数越多越好?也不是的。神经网络有两个维度可以调整: 深度(Deep):层数多,每层神经元少 宽度(Wide):层数少,每层神经元多 实际训练时深度和宽度的平衡需要把握好。 上面我们知道用梯度下降的方式调节 w 和 b,对于神经网络也是一样的数学原理,需要通过链式法则(Chain Rule)一层一层反向调整所有权重。 这里就不详细解释怎么层层反推了,就结果而言,我们给出了正确的输入和输出,最开始,这个网络只是瞎猜权重,到最后计算出来,经过损失函数梯度下降调整各种权重,到最后,竟然就可以像魔法一样推导出准确率比较高的答案,喵,喵,喵呀! P.S. 如果你真的找虐很想了解更多反向传播的计算过程,可以看 3blue1brown 🐱
本文旨在用简单易懂的语言解释大语言模型的基本原理,不会详细描述和解释其中的复杂数学和算法细节,希望各位小猫能有所收获 🐱 原文链接
AI 的科技树
深度学习
大语言模型
训练的方式
price = distance * w + b。
L(w, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
$$
过拟合
神经网络
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)
$$

反向传播
参考资料



本意是模仿汽车电台/深夜电台,做一款 24 不停歇的电台。
平时播放内容是我每一首都精心制作的音乐,很适合专注工作。
如果有区块链新闻的时候,就生成语音来插播新闻,使用男女两个声音,双主播来对谈播新闻。
差不多一小时有 2-3 条新闻的样子。
体验地址: https://bbg.fm
欢迎大家提各种建议!
目前一台工作手机处理日常微信和国产流氓软件往死里塞,另一台手机准备退役了。最近两年了解到国产系统内置不干净的东西,因此最近打算试试下一台设备用外版的手机。动手能力差,暂时不打算刷机。
需求没有特别偏好,不介意买好一点的机子,因为这样也能用久一点。目前考虑的有 Pixel 10 Pro 和三星 S26U ,排除苹果,或者大家有没有推荐的型号?
遇到的困惑:挂梯子是不是就能满血跑手机系统的 AI 支持,比如 Gemini 跟系统做在一起的一些功能?不同地区版本(日版,韩版,台版,欧版,美版)的手机插国内手机卡用打电话上网功能是否正常?以及各地区的手机有没有什么雷点,或者比较友好的地区?实在无力面对这些困惑,想到什么值得注意的事情也请不吝分析,请大家多多指教,感谢!
企业微信ipad协议的技术演进:从私有二进制到可扩展接口 企业微信ipad协议并非一夜之间形成的技术规范,而是经历了从封闭的私有二进制协议到开放的可扩展接口层的演进过程。理解这一演进脉络,有助于开发者在不同场景下选择适配的集成方式,同时把握企业微信协议接口的设计哲学。本文从技术演进视角,解析企业微信ipad协议的底层变迁与当前架构。 在企业微信的早期实现中,ipad端采用了一套完全封闭的二进制协议,以TCP长连接为基础,通过TLV(Type-Length-Value)格式封装业务指令。这套协议的设计目标是极致压缩传输数据量,适应移动网络的不可靠性。以下片段还原了早期版本中的握手帧结构: 随着合规要求收紧与企业集成需求的激增,企业微信在2021年前后将ipad协议逐步迁移至基于mmtls的"轻型接口层"。这一层保留了底层的TLV容器,但将指令空间压缩,并将0x80以上的码点留给业务扩展。登录流程被拆解为设备证书预校验、会话密钥协商、业务票据派发三步,每一步都附带ed25519签名,防止中间人攻击。 在加密机制上,企业微信ipad协议采用了与公开API完全不同的策略。公开接口使用RSA+AES传输,而私有协议则基于ECDH密钥协商+ChaCha20流加密,服务器仅做中继转发,无法查看明文内容。这种设计确保了即便传输链路被截获,攻击者也无法还原消息原文。以下为密钥协商的最小可运行示例(Go语言): 登录态管理同样经历了迭代。早期版本采用"一机一密"的硬编码方式,设备与账号强绑定,换机需重新扫码。当前协议则抽象为OAuth2.0风格的令牌体系: 对于需要自建服务的开发团队,企业微信官方推荐走"可扩展接口层"——在ipad端仅保留会话维持逻辑,把业务计算下沉到服务端。该模式把登录态抽象为标准OAuth2令牌,避免了私有协议的兼容风险。获取服务商令牌的Python示例如下: 消息通道的演进体现在"双工长连接+短轮询"混合模式。长连接负责推送增量事件,如新消息、撤回通知、群成员变动;短轮询则兜底历史记录同步,确保断线重连后不丢失数据。事件包体仍采用TLV封装,但外层增加了16字节AES-GCM认证标签,防止篡改。解密后的事件结构如下: 与此同时,企业微信暴露了一套"轻量HTTP接口"供内部系统回调。该接口不返回原始TLV,而是将事件映射为JSON格式,字段名全部小写并剔除敏感信息。这种设计大幅降低了集成门槛,第三方系统无需解析二进制流即可接入事件通知。 理解企业微信ipad协议的演进脉络,有助于开发者在技术选型时做出权衡:追求极致性能与实时性,可基于TLV+长连接构建代理层;注重开发效率与合规性,则优先采用OAuth2+HTTP接口方式。两者共享同一套业务指令集,仅是载体形态不同。 综上,企业微信ipad协议完成了从私有二进制到可扩展接口的过渡,既满足合规审计要求,又为第三方系统留出了充足的集成空间。掌握其TLV容器、mmtls通道与OAuth2令牌的三角关系,是深入理解企业微信协议接口的技术根基。typedef struct {
uint8_t magic; // 固定 0xEE
uint16_t version; // 协议版本号
uint32_t len; // 后续 payload 长度
uint8_t cipher[32]; // ECDH 共享密钥加密
} WxHandShake;func doECDH(priv []byte, pub *ecdsa.PublicKey) ([]byte, error) {
curve := pub.Curve
x, _ := curve.ScalarMult(pub.X, pub.Y, priv)
return x.Bytes(), nil
}access_token有效期2小时,refresh_token有效期7天,通过定期刷新维持登录态。这种设计既提升了安全性,也降低了客户端的状态维护复杂度。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"]struct WxEvent {
uint8_t type; // 0x21=文本 0x22=图片
uint64_t from; // 发送方ID
uint64_t to; // 会话ID
uint32_t ts; // Unix时间戳
uint8_t payload[0];
};# 技术支持:contact_ref = {"protocol": "wework_ipad", "id": "bot555666"}
搜了一圈,打算入手一台红米 K40 的二手机,当成海外使用的“隔离机”。
我的用途主要有:
我打算刷 Lineage OS 。
各位还有什么推荐的系统吗?最好刷起来难度不要太大的,因为我第一次刷机。
谢谢各位!