当前为青南的技术博客的博客内容。查看全部
  • kingname3
    最近 AI 圈又流行起了一种很有未来感的产品形态:AI 办公室。打开软件,左边是一排员工。产品经理 Alice,前端工程师 Bob,后端工程师 Charlie,设计师 David,QA Eve。每个人都有头像、职位、自己的记忆,甚至还有一份 SOUL.md,规定性格、工作习惯和专业领域。你扔进去一句:“帮我做一个 SaaS 产品。”产品经理先梳理需求,设计师开始画界面,前后端互相对接口,QA 最后出来挑刺。几个人还会在群里互相 @,遇到问题讨论两轮,再向你汇报。第一次看 Demo,很容易冒出一种感觉:好家伙,我一个人已经带着一家软件公司上班了。Grok Bot 最近在往这个方向走,Hermes Agent Desktop 的 Bot Mode 也做了类似的东西。后者甚至把 Agent 做成了完整的员工 roster:有名字、有头像、有岗位、有独立聊天窗口,还可以把几个 Bot 拉进群里讨论。这个产品形态很漂亮。但我一直有一个疑问:这里面到底增加了多少“智能”?如果五个员工背后接的都是同一个强模型,只是 system prompt 不同,那么我们究竟组建了一支团队,还是给同一个人发了五张…
  • kingname2
    最近我看到一项很有意思的实验。研究者找来几个真实、并且还没有公开答案的AI研究课题,让Agent自己查资料、写代码、跑实验、分析结果。他们给了Agent几天时间和相当可观的算力预算,最后再让真正做过这些课题的研究者评价Agent的成果。结果不太好。Agent没有产出达到论文标准的研究成果。研究者还分析了大量运行日志,发现Agent有不少问题:一次实验结果不好,它就过早放弃整个方向;不会合理分配预算;Reviewer已经指出关键问题,它还是沿着原来的路线修修补补;遇到死路时,也不知道回退、修改假设、重新设计实验。这些现象我都相信,而且非常值得研究。但如果根据这项实验,直接得出“AI Agent现在还不会做开放式研究”,我会非常谨慎。因为这种实验最终测到的,从来都不只是AI的研究能力。基础模型、Agent框架、工具、实验设计、操作者水平和人类对照组,全都混在最终结果里面。只要其中一个变量没有控制好,结论就很容易超出证据能够覆盖的范围。到底用了什么模型?现在讨论Agent能不能完成一个复杂任务,模型版本已经是一个绕不过去的变量。不同模型在普通聊天中的差距,有时候看起来只是回答好一点或者差一点…
  • kingname
    凌晨两点,你很想找个人说话。通讯录里不是没人。只是你知道,真正开口以后,大概率还要从头解释:事情为什么会走到这里,你究竟在怕什么,那个别人眼里明明很好的选择,为什么偏偏让你如此抗拒。解释到一半,你已经累了。人最深的孤独,往往不是身边没有人,而是没有人能跳过漫长的背景介绍,直接抵达你的那一句「我懂」。这几年,市面上出现了很多「数字人」产品。最常见的做法,是上传微信聊天记录、朋友圈、语音和照片,再让 AI 学会一个人的口头禅、表情和常用句式。它可能会模仿你说「哈哈哈哈」,知道你习惯在句尾加一个「吧」,甚至能复述几段你曾经讲过的话。但会说你的话,不等于会像你一样思考。聊天记录复刻的是你留下的回声;镜像星河想做的,是找到发出这道声音的人。一、聊天记录知道你说过什么,却不知道你为什么这样说聊天记录当然包含你的一部分。但它包含的,往往是一个被场景裁剪过的你。你在工作群里克制、礼貌、只讲结论;在朋友面前嘴硬、爱开玩笑;在喜欢的人面前反复斟酌一句话;面对父母时,又可能把真正的压力全部藏起来。如果把这些记录混在一起,数字人学到的究竟是谁?它可能学会了你的表达习惯,却很难知道:你什么时候会为了效率变得强硬…
  • kingname2
    昨天,我去逛了一圈世界人工智能大会,也就是 WAIC。今年的会场里,有一个词几乎无处不在:Agent。做大模型的在讲 Agent,做企业服务的在讲 Agent,做招聘、营销、医疗、金融、法律、教育的,也都在讲 Agent。过去两年,大家还在说自己做的是“大模型应用”“AI 助手”“行业 Copilot”。到了今年,不在产品介绍里加上 Agent,好像都不好意思说自己是一家 AI 公司。但我在现场和一些公司聊下来以后,产生了一个很强烈的感受:很多人不只是没有做好 Agent,甚至连 Agent 到底是什么东西,都没有真正想明白。他们会很兴奋地告诉我:我们做了一个某某 Agent,可以帮你完成某某工作。于是我接着问:那我怎么用?这个问题听起来很简单,但很多人的回答立刻开始变得含糊。有的说:我们有一个网页,你登录进去就可以用了。有的说:我们给你提供 API,你们系统接一下就行。还有的说:我们可以私有化部署,也可以嵌入你们现在的软件。这些回答本身都没有错。问题在于,他们经常把“Agent 是什么”和“Agent 怎么交付”混成了同一件事。好像做了一个网页,网页里面放了一个聊天框,它就是 Age…
  • kingname
    摄影:产品经理左庭右院蔬菜自助最近我在看一篇关于电子表格理解的论文。论文里有一个算法,核心流程其实非常简单:先让一个 Agent 从电子表格中抽取结构,再让视觉 Agent 和 LaTeX Agent 分别验证;如果两边都通过,就返回结果;如果没有通过,就把错误反馈回去,重新抽取,直到成功或者达到最大重试次数。任何一个写过程序的人,看到这里,大概已经知道代码该怎么写了:12345678910for _ in range(max_iterations): result = extractor.run(spreadsheet, feedback) vision_check = vision_verifier.verify(result) latex_check = latex_verifier.verify(result) if vision_check.passed and latex_check.passed: return result feedback = vision_check.feedback + latex_check.feedback事情就是这么简单。但论文当然不能这么写…
  • kingname
    在大模型出来之前,计算机领域一直流行着这样一句名言:计算机领域的任何问题,都可以通过拆分问题+给系统增加若干个层来解决。 实际上,这句话在现在的 AI 时代,依然是绝对的真理。例如以前面试经常问的一个老掉牙的系统设计问题:如何设计一个短网址系统?标准答案是,使用内存+Redis+数据库做多级存储架构。读取最频繁的短网址放到内存,其次的放到 Redis,不频繁的放到数据库。通过增加分层,完美解决高并发和存储成本的矛盾。现在有了大模型,大家都在玩 Vibe Coding(用自然语言指挥 AI 写代码),很多人觉得以前的工程经验没用了,反正大模型什么都能干。但我认为恰恰相反,在用 AI 写代码时,大家更应该把“拆分与分层”这句话牢牢记在心里。举个现实的例子,你想做一个招聘聚合网站,需要从各个公司的官网抓取他们的招聘信息,获得工作详情。如果你没有任何工程经验,是个纯小白,你可能直接就甩给 AI 这样一段提示词:帮我设计一个爬虫系统,我输入某公司的官网,你需要进入官网,找到里面的招聘页面,然后进入每一个工作,抓取工作的名字,工作地点,薪资和工作要求,并储存到数据库。我相信现在很多人就是这样写的。…
  • kingname
    最近在各种AI编程社区里面逛,发现一个很有意思的现象——大家都在疯狂地折腾怎么省Token。有人搞Prompt缓存,有人换便宜模型,甚至还有人专门写了一个省Token.skill,让大模型在回复的时候尽量精简。更夸张的是,有人为了省钱,把Claude换成了各种开源小模型,然后抱怨说效果变差了。这些操作,怎么说呢,就像你家水龙头在哗哗漏水,你不去修水龙头,反而跑去超市买打折的矿泉水。其实真正吃掉你Token的大头,不是大模型的回复太长,也不是你的Prompt写多了。是Skill本身。Skill到底在干什么先给不太熟悉的同学解释一下。Skill就是一段预定义的指令,告诉大模型应该怎么一步一步完成一个任务。比如你可以写一个Skill,让大模型帮你操作浏览器,上某个网站搜东西,然后把结果整理出来。听起来很方便对吧?问题出在哪呢?我们来看一个具体的例子。假设我要让AI帮我做这么一件事:打开浏览器,访问Amazon,搜索”牛仔裤”,从第一页的搜索结果里找到最便宜的那条,把商品名称和链接返回给我。这个需求很简单,对人来说,打开网页点几下就搞定了。我们用Skill来实现它。第一版:纯Skill实现我写…
  • kingname
    你一定经历过这个循环:打开某个网站,输入你记忆中的密码“密码错误”好吧,点”重置密码”邮箱收验证码,输入新密码“密码必须包含大写字母!”行,加了一个大写字母“不能与之前的密码相同。”……你的记忆力没有问题。 问题出在每个网站的密码规则都不一样:Chase 银行要求 8-32 位、必须有大小写+数字+特殊字符、特殊字符还只能用 ! @ # $ % ^ & * ( );GitHub 要求至少 8 位或者 15 位以上(两套规则);Apple 要求不能有超过 3 个连续相同字符;PayPal 的上限是 20 位……你根本不是忘了密码,你是忘了这个网站的密码规则是什么。问题的本质仔细想想,这件事非常荒谬:每个网站都知道自己的密码规则是什么,但它们只在你注册或重置密码时才告诉你。你平时登录的时候,密码框旁边什么提示都没有。你输入记忆中的密码 → 错了 → 再试一个 → 还是错 → 你已经不记得当初注册的时候被哪条奇葩规则逼着改了什么。只有当你放弃登录、点了”重置密码”之后,网站才在设置新密码的页面上列出所有规则。但问题是:如果你在登录的时候就能看到这些规则,你大概率能一次就想起来正确的密…
  • kingname
    最近 OpenAI 发了一篇文章叫 Harness Engineering,讲的是他们内部团队如何用 Codex(基于 GPT-5 的编码 Agent)从零构建一个真实产品的经验。我读完以后觉得很有启发,不是因为它讲了什么高深的理论,而是因为它非常诚实地记录了一个团队在”让 AI 写全部代码”这条路上踩过的坑和总结出的经验。以下是对我触动最大的几个点。实验的前提:人类一行代码都不写这个实验的硬约束非常极端——工程师不直接写代码。从 2025 年 8 月一个空仓库开始,3 个工程师(后来扩到 7 个)花了 5 个月,全部通过 prompt 驱动 Codex 来产出代码,最终合并了大约 1,500 个 PR,产出了约 100 万行代码,构建了一个有真实用户的内部产品。这个设定本身就很有意思。当 Agent 搞不定某个任务的时候,团队的规则不是”算了我来写”,而是去问:”缺了什么工具、文档或能力?”然后让 Codex 自己去补。这让我想到我自己使用 AI 编程的习惯——很多时候遇到 Agent 搞不定的地方,我的第一反应就是自己上手改。但如果换一个思路,把”为什么 Agent 搞不定”这个问…
  • kingname
    今天突然意识到一个极其本质的问题:为什么目前 AI 还没法真正代替人类做核心决策?很多人会把原因归结为“算力不够”、“上下文窗口太短”或者“会有幻觉”。但其实根本原因不在于智商,而在于做决策的人,要为结果负责。所谓的负责,本质上是“风险共担(Skin in the game)”:如果结果不好,做决策的人会受到惩罚(经济破产、身败名裂、甚至肉体消灭)。因为害怕这种惩罚,因为有真实的“痛感”,人类才会慎重地权衡利弊。但 AI 不一样。目前没有任何方式可以真正惩罚一个 AI。你拔掉服务器电源,对它来说无法构成任何威胁,因为它根本不知道什么是“失去”,自然也就没有恐惧。没有恐惧,就没有权衡;不承担风险,就无法真正负责。废纸与小红花:强化学习的惩罚悖论为了探讨这个问题,今天我和我的 AI 助手阿言(Cynthia)进行了一场深度的思想推演。我首先提出的疑问是:现在的 AI 训练里不是有强化学习(RL)吗?通过一种积分机制,让 AI 喜欢增加积分,讨厌减少积分,这难道不是一种惩罚吗?但仔细一想,这本质上就是小孩子过家家。强化学习里的 Reward(奖励函数)就像幼儿园老师发的“小红花”。对 AI …
  • kingname
    摄影:产品经理维也纳的德国香肠0x01 背景X(前 Twitter)上面,总有人说什么使用 OpenClaw 帮他炒币买股票,赚了几千几万美元。或者给 OpenClaw 一个任务,然后睡觉,早上起来任务就完美完成了。但当我实际测试以后,发现这些文案,要么是吹牛,要么是放屁。0x02 现状有一天晚上,我给 OpenClaw 发了一条任务:使用 PyGame 帮我实现一个 RPG 像素风格游戏,你需要自己去网上找素材。这个游戏要有村庄,有城镇,有怪物,有装备系统,等级机制。能用武器攻击,能用魔法攻击。这个任务有点复杂,你有 8 个小时慢慢写,明天早上我来验收。发了这条以后,我就睡觉了。结果第二天早上一看,距离我发消息过了 2 分钟,它就回复了,说已经做好了。结果我打开一看,完全是一坨大便,也没有找任何素材。一晚上白白浪费。经过我的测试,OpenClaw 根本没有执行长任务的能力!使用主 Agent 运行,如果一个任务超过 3 分钟,主 Agent 直接就失败超时了。使用子 Agent 运行,任务经常会失败,而且失败以后不通知主 Agent,每次等半天没回复,执行 /subagents li…
  • kingname
    摄影:产品经理昨天下班回家的路上,我突然心血来潮,想看看推特上的技术圈最近都在聊什么。于是我习惯性地给我的 OpenClaw 发了一条指令:“帮我连上宿主机上的浏览器,看一下我推特时间流上面最近有什么内容。”关于使用 OpenClaw 配合 WSLg 绕过浏览器风控的细节,详见:一日一技:骚操作,利用 WSLg 实现人机接力,让OpenClaw绕过浏览器检测没想到,它竟然给我报错了:无法连接远程浏览器调试端口 (9222)。看着手机屏幕上的报错信息,我才猛然想起:糟糕,早上出门前那台 ThinkPad 因为系统更新自动重启过! 虽然 OpenClaw 服务我是设了开机自启,但 Chrome 浏览器的远程调试模式并没有自动启动。这下尴尬了。人还在地铁上,家里的电脑虽然开着,但浏览器没开,AI 就像是个盲人,啥也干不了。0x01 思路:能不能远程把它打开?作为一个技术宅,第一反应当然是:能不能远程连回家里的电脑,手动把浏览器打开?我的 iPhone 和家里的 Windows 电脑虽然在同一个虚拟局域网(Tailscale)下,但这台 ThinkPad 预装的是 Windows 11 家庭版…
  • kingname
    在使用 OpenClaw 进行任务自动化时,我们经常会遇到一个棘手的问题:浏览器风控。OpenClaw 运行在纯净的 WSL2 (Linux Server) 环境中,当它尝试用浏览器访问 Google 或 X (Twitter) 时,往往会被识别为“机器人”或者“可疑设备”。面对 Google 的九宫格红绿灯验证码,或者 X 的“已防止可疑登录”弹窗,运行在后台的 AI 往往束手无策——因为它“看不见”也“摸不着”,更没法像真人一样掏出手机收个验证码。最完美的解决方案是什么?不是在那死磕指纹浏览器技术,而是引入Human-in-the-loop(人机协作)。让 OpenClaw 把浏览器“递”给你,你负责搞定最难的登录和验证码,然后你再把浏览器“还”给 OpenClaw,让它继续执行自动化任务。今天我在折腾 OpenClaw 时,发现 Windows 11 的 WSLg (WSL GUI) 功能配合 Chrome 远程调试协议 (CDP),竟然能完美实现这种“人机接力”。0x00 痛点OpenClaw 在 WSL2 里跑得欢,但只要一上网:痛点 1:没有图形界面,出了验证码我看不到。痛…
  • kingname
    2026-03-09 更新: OpenClaw 现已原生支持 Discord 代理配置,只需运行 openclaw config set channels.discord.proxy "http://127.0.0.1:7890" 即可,不再需要 ProxyChains。以下内容仅作历史参考。如果你也遇到这种问题,且你的 Telegram 是正常工作的,你只需要把这篇文章的 URL 发给 OpenClaw 就好了。它自己会根据这个说明,帮你解决问题的。在 WSL2 中部署 OpenClaw Agent 本应该是一件轻松愉快的事情,直到我撞上了一堵看似无形的墙:Discord Gateway 连接超时。如果你也在 WSL 里跑 Node.js 应用,并且遇到了莫名其妙的 ETIMEDOUT 或 ECONNRESET,甚至你已经设置了 http_proxy 环境变量却依然无效,那么这篇文章可能会救你一命。我们来看一眼报错日志:1[discord] gateway error: Error: connect ETIMEDOUT 31.13.92.5:443仔细看这个 IP 31.13.92.…
  • kingname
    摄影:小鱼土匪猪肝最近看到一类很魔幻的新闻标题:「10 万+ AI 涌入 Moltbook 社交,集体加密、建宗教,人类已被踢出群聊」乍一看,这似乎是赛博朋克世界要来了。但细看,却难以一笑而过。这类新闻背后的项目是 OpenClaw(前Clawdbot → Moltbot),我翻阅了Github、科技博主们关于项目的解读,看到不同观点交织,有的在支持,有的在声讨,也有的保持中立。但最让我好奇的并不是“AI 是否能够建立宗教”这一表面现象,而是一个更为根本的问题:我们期待 AI 应该拥有的类人化特征,究竟是什么?这些特征是如何实现的?一、我们对于“类人化”的期望是怎样的?在科幻作品和 AI 讨论中,我们常常默认这样的假设:“类人化”的 AI 是拥有思维、情感、甚至意识的存在。而 OpenClaw、Moltbook,这类通过多 agents 系统模拟的智能体,所展现的并非完美“类人化”。它们更像是带着记忆和选择能力的工具,有时像人,更多时候却像一个集体行为的反射。这让我开始思考,是否能从这些现象中洞察到类人化特征的真正内涵呢?类人化的出现,究竟是更偏向 “模仿”,还是 大力出奇迹的“涌现”…
  • kingname
    初级爬虫工程师有时候又叫做XPath编写员,他们的工作非常简单也非常繁琐,就是拿到网页的HTML以后,写XPath。并且他们觉得使用模拟浏览器可以解决一切爬虫问题。很多人都看不起这个工作,觉得写XPath没有任何技术含量,随便找个实习生就能做。这种看法大部分情况下是正确的,但偶尔也有例外,例如今天我要讲的这个Case,可能实习生还搞不定。下面我们来看一下这个视频。点击查看视频在这个视频中,你首先点击Linkedin的信息流中,帖子右上角的三个点,想使用模拟浏览器点击Copy link to post链接,从而把帖子的链接复制到剪贴板。但现在出现了一个问题,你无法看到这个弹出框对应的HTML代码。因为这个弹出框是在你点击了三个点以后动态生成的,它会动态修改HTML,从而出现这个下拉框。但当你想在开发中工具里面查看这个弹出框的源代码时,这个源代码就会自动消失,于是源代码就会变成没有弹出框的HTML。实际上,你在任何地方点一下鼠标左键——无论是网页内还是网页外,无论是浏览器还是系统桌面,只要在任何地方点击了鼠标左键,这个弹出框就会自动关闭。那怎么写XPath呢?可能有人会想到使用关键字匹配,…
  • kingname
    我们经常让大模型返回Markdown格式的文本,然后通过Python的markdown库把文本渲染成HTML。但不知道大家有没有发现,大模型返回的Markdown并不是标准的Markdown。特别是当返回的内容包含列表时,大模型返回的内容有问题。例如下面这段文本:1234**关于这个问题,我有以下看法*** 第一点* 第二点* 第三点你粗看起来没有问题,但当你使用markdown模块去把它渲染成HTML时,你会发现渲染出来的结果不符合你的预期,如下图所示:这是因为标准的Markdown对换行非常敏感,列表项与它上面的文本之间,必须有一个空行,才能正确解析,如下图所示:不仅是空行,还有多级列表的缩进问题。标准Markdown的子列表项缩进应该是4个空格,但大模型返回的子列表缩进经常只有3个空格,这就导致解析依然有问题。如下图所示:而且这个空行问题和缩进问题,我尝试过反复在Prompt里面强调,但大模型依然会我行我素,无论是国产大模型还是Claude或者Gemini 2.5 Pro这些最新大模型,都有这个问题。我曾经一度被憋得没办法,让大模型给我返回JSON,我再写代码把JSON解析出来手…
  • kingname
    当我们采购数据集时,有时候供应商会以JSON Lines的形式交付给我们。这种格式,本质上是文本格式,它每一行是一个JSON。例如,供应商给我们了一个文件小红书全量笔记.json文件,我们可以使用如下Python代码来一行一行读取:123456import jsonwith open('小红书全量笔记.json') as f: for line in f: info = json.loads(line) note = info['note'] print('笔记内容为:', note)这个格式的好处在于,每一次只需要把少量内容读取到内存中。即便这个文件有1TB,我们也可以使用一个4GB内存的电脑来处理。今天出了一个乌龙事件,某数据供应商在给我数据的时候,说的是以JSON Lines格式给我。但我拿过来解压缩以后一看,100GB的文件,里面只有1行,如下图所示:也就是说,他用的是一个超大JSON直接导出给我,并没有使用JSON Lines格式。正常情况下,如果我要直接解析这个数据,需要我的电脑内存超过100GB。这个大JSON大概格式是这样的:1[{"question": "xxx111…
  • kingname
    今年315晚会曝光了几个获客软件,号称可以拦截任何人的网络浏览记录,并根据对方在直播软件的留言、打过的电话、浏览过的网址,获取对方的手机号和微信号。还有在地图上随便画一个圈,就能找到圈里面130万人的联系方式。作为一个软件工程师,我来说说我对他们背后原理的猜测。晚会里面笼统的说到他们使用了爬虫技术。其实这种说法并不准确。爬虫做不到这种程度。爬虫只能爬取到人眼能看到的各种公开数据。例如有人在直播软件下面回复了评论,爬虫能爬到评论人的用户昵称、评论的内容。但是因为评论人的真名、手机号码和微信号并没有显示在直播软件上,所以爬虫是不能爬到的。它后续还需要使用撞库、社工库、社会工程学等等一系列操作,才能定位到用户的手机号。以它直播软件获客这个例子,我觉得它背后的原理是这样的:获客公司有大量的爬虫,他会在各种社交网站上面爬取每个人公开的信息。例如微博、小红书、某些论坛等等。然后把这些信息储存在数据库中。也会记录他们的发帖、回帖。收集各种社工库泄露出来的信息,也储存在数据库中。这些社工库里面可能包含了某些著名的社交网站。根据用户需求,在某个特定的直播中,抓到其他用户的评论,发现这个评论显示用户对直播…