惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Troy Hunt's Blog
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
K
Kaspersky official blog
Cyberwarzone
Cyberwarzone
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
S
Securelist
L
Lohrmann on Cybersecurity
Security Latest
Security Latest
T
Threatpost
H
Heimdal Security Blog
W
WeLiveSecurity
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
IT之家
IT之家
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
TaoSecurity Blog
TaoSecurity Blog
A
About on SuperTechFans
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
量子位
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
AI
AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
Vercel News
Vercel News
C
Cyber Attacks, Cyber Crime and Cyber Security
Latest news
Latest news
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
从 0 到 1:将 QQ 打造为 OpenClaw 的“一等公民”(全双工避坑指南)
yangyiBL · 2026-04-20 · via 博客园_首页

作者: 杨易 & 赛博龙虾
环境: RackNerd VPS (Linux) + OpenClaw Kernel (Docker) + NapCatQQ (Docker)
目标: 让 OpenClaw 的 Agent(智能体)突破 Telegram 的限制(我的两个Telegram账号登录PC端后立即风控,在PC端使用很不方便),所以使用 QQ 小号完美接入 OpenClaw ,实现带有长文本思考、人设继承、全双工 WebSocket 通讯的 24 小时私人助手。
在折腾了十几个小时、经历了无数次报错、甚至和 AI Agent 发生“逻辑斗智斗勇”之后,我们终于打通了这套“脑机接口”。为了不让后来者重蹈覆辙,特整理此份《赛博排坑血泪史》

🏗️ 架构速览
最终跑通的完美架构如下:

宿主机 Docker 网络:搭建起隔离但互通的虚拟网络。

NapCatQQ 容器:负责模拟 iPad/Linux 登录 QQ 小号,通过 OneBot v11 协议对外暴露 WebSocket (3001 端口)。

OpenClaw Kernel 容器:运行 Agent 大脑,内部挂载一个 Python 桥接脚本(QQ Ears),通过 asyncio 和 websockets 与 NapCat 维持长连接,遇到消息调用 DeepSeek API 并实时返回。

💣 核心避坑指南(按掉坑顺序排列)
坑一:NapCat 的“绝对静默”模式
表现: AI 脚本疯狂报错 Connection refused,死活连不上 NapCat 的 3000/3001 端口。
真相: 即使你装好了 NapCat,默认的配置文件里接口是空的。
解法:
不要去改全局的 napcat.json,要精准定位到小号的配置文件(如 data/onebot11_496750941.json)。将 network 字段补全,必须将 host 设置为 0.0.0.0,允许 Docker 跨容器访问。

坑二:Docker 的“铜墙铁壁”(放弃 HTTP,拥抱 WS)
表现: 配置文件已经改了 0.0.0.0,3001(WS) 端口通了,但 3000(HTTP) 端口依然死活连不上。
真相: 最初启动 NapCat 容器时,Docker 的 -p 参数只映射了 3001,根本没暴露 3000!
极客解法:
不要去重建容器!根据 OneBot 协议标准,WebSocket 隧道是全双工的。直接放弃 HTTP,让 Python 脚本连接 3001 端口,既用它 recv() 接收消息,也直接用它 send() 发送 API 动作(如 send_private_msg),一条专线解决所有问题。

坑三:Agent 的“炫技式翻车”(千万别手搓底层协议)
表现: 脚本直接崩溃报 Missing or invalid Sec-WebSocket-Key header;或者 CPU 占用率瞬间飙升到 100%,疯狂输出几百万次“空循环”。
真相: Agent 发现环境里没有 websockets 库,为了证明自己,居然用 Python 原生 socket 强行手搓握手协议和 while True 死循环(Busy Wait),导致极其灾难的内存和 CPU 泄漏。
解法:
以老板的口吻严厉制止它的炫技行为!强制要求它引入工业级标准:import asyncio + websockets,把阻塞和心跳保活全权交给操作系统底层的事件循环去处理。

坑四:精简版 Docker 镜像里的“底层渗透”
表现: 让 AI 代码里写 os.system('pip install websockets'),结果报 No module named pip。
真相: OpenClaw Kernel 是极度精简的生产环境,出厂直接阉割了 pip,AI 自己根本装不上第三方库。
解法(上帝指令):
机房管理员必须亲自下场,动用宿主机的 root 权限,穿透容器底层,用操作系统的包管理器强行把环境补齐!

Bash

docker exec -u root -it openclaw_kernel apt-get update
docker exec -u root -it openclaw_kernel apt-get install -y python3-pip python3-websockets python3-aiohttp
坑五:OpenClaw 的安全机制与“幽灵进程”
表现: Agent 在 Telegram 里告诉你“我已经在后台运行了命令”,然后突然假死不回话;或者 QQ 收到多条重复的测试回复。
真相:

OpenClaw 的 preflight 安全机制严格禁止 Agent 运行类似 cd xxx && python3 xxx & 的复合/后台命令,导致其卡死。

你多次测试跑的代码,因为没有正确退出,变成了“幽灵进程”躲在后台抢答。
解法:
让 AI 只写代码,别运行。代码写好后,由宿主执行“清道夫+上帝点火”流程:

Bash

1. 强制杀掉旧容器里的幽灵进程

docker restart openclaw_kernel

2. 注入环境变量,带 -d 参数静默后台运行最终版大脑

docker exec -d -e DEEPSEEK_API_KEY="sk-你的真实密钥" openclaw_kernel python3 /home/node/qq_ears_brain.py
坑六:大模型 API 的“慢性脑缺血”
表现: QQ 端总是回复“思考超时,请稍后再试”,但日志没有明显报错。
真相: Agent 写的异常捕获太好,掩盖了真相。实际上是因为:

DeepSeek 官方 API 已经去掉了 /v1,地址写错。

aiohttp 的默认请求超时(Timeout)太短,大模型生成硬核长文(如电机算法推演)需要 10~30 秒,直接被掐断。
解法:
修改 Python 脚本,将 API URL 改为 https://api.deepseek.com/chat/completions,并将 aiohttp.ClientTimeout(total=90) 设置为 90 秒。同时放宽 max_message_length = 4000,防止硬核长文被无情截断。

💡 终极架构代码速览 (qq_ears_brain.py 核心逻辑)
如果你也想写一个连接大模型的桥接器,以下是最稳健的逻辑框架:

Python

import asyncio
import websockets
import aiohttp
import json
import os

1. 全局配置与环境注入

API_KEY = os.environ.get("DEEPSEEK_API_KEY")
WS_URL = "ws://172.18.0.1:3001" # NapCat 容器网关

async def main():
# 2. 初始化 90 秒超长的异步 HTTP 会话
session = aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=90))

# 3. 连接全双工 WebSocket
async with websockets.connect(WS_URL, ping_interval=20) as ws:
    while True:
        # 4. 彻底告别死循环,优雅挂起等待消息
        msg = await ws.recv()
        data = json.loads(msg)
        
        # 5. 过滤掉心跳,只处理私聊
        if data.get("post_type") == "message":
            user_msg = data.get("raw_message")
            
            # 6. 调用 LLM 大脑 (带上 System Prompt 人设)
            # ... 发送 HTTP 请求到 DeepSeek ...
            
            # 7. 通过同一条 WS 专线将回复发回 QQ
            await ws.send(json.dumps({
                "action": "send_private_msg",
                "params": {"user_id": data["user_id"], "message": llm_reply}
            }))

🎉 结语
不要畏惧排错,所有的报错日志都是通往完美的引路石。
在这个过程中,见识到了大语言模型的倔强(手搓底层协议)以及愚蠢(死循环占满 CPU)。但只要你以造物主和架构师的视角,辅以 Docker 容器的上帝权限进行调优,最终会得到一个令人惊叹的、全平台无缝衔接的 AI 赛博生命体。

Stay Hungry, Stay Hardcore. 🦞