Reading view

There are new articles available, click to refresh the page.

突发!Sora 宣布关停,史上最贵 AI 表情包生成器只撑了七个月

去年 9 月底,Sora 2 上线的第一天,OpenAI CEO Sam Altman(山姆·奥特曼)就把自己的 cameo 权限向所有人开放。很快,他被做成各种荒诞 AI 表情包在社交媒体疯传。

网友玩得不亦乐乎,社交媒体上「AI 视频元年」的口号铺天盖地。

七个月后,他亲手签下 Sora 的死亡通知书。

▲网友还是懂玩梗的

据《华尔街日报》报道,奥特曼在内部信中宣布:Sora 视频平台将全面停运。不只是那个消费端 app,开发者 API、ChatGPT 里的视频生成功能,统统砍掉。干净利落,不留余地。

就在刚刚,Sora 官方也在 X 平台上发文告别:

「我们将与 Sora 应用说再见。对于所有使用 Sora 创作、分享并围绕它建立社区的大家:谢谢你们。你们用 Sora 创作的内容意义重大,我们知道这个消息令人失望。
我们很快将分享更多信息,包括应用和 API 的时间表,以及保存你们作品的细节。
– Sora 团队」

这大概是 AI 行业过去一年里,最戏剧性的情节。

一个 AI 视频模型杀手的速生速死

回到去年 9 月,Sora 的发布可以说是 OpenAI 最高调的一次产品秀。

它不是一个简单的视频生成工具。OpenAI 给它设计了社交 feed 流,用户可以用 AI 生成视频、发布、互相观看。

本质上,这是一个 AI 原生的短视频社区。奥特曼本人亲自下场玩梗,鼓励用户把他剪进各种流行文化的名场面里。

排场拉满了,市场反响也是真实的。Sora 上线不到五天,下载量就突破了 100 万,一度冲上苹果 App Store 榜首。开局阶段,用 Sora 生成《海绵宝宝》《皮卡丘》等知名 IP 视频的创作者们引发了一阵狂欢。

但问题从一开始就埋下了。

据《华尔街日报》报道,Sora 上线时,OpenAI 内部就有员工对这个项目消耗的算力规模感到「惊讶」,因为彼时完全没有明确的用户需求验证,公司却已往里砸了大量计算资源。

换句话说,这是一个老板觉得该做的产品,而用户真正的持续需求,始终没有被验证。

数字不会说谎,上线后,这种担忧也逐渐变成了事实。硅谷风投机构 a16z 合伙人 Olivia Moore 在社交媒体上晒出一张 SensorTower 的监测截图:Sora APP 的 30 天用户留存率仅为 1%,60 天留存率直接归零。

奥特曼自己后来也承认,大量用户主要用 Sora 制作趣味表情包分享给好友。这种一次性的娱乐行为,天然缺乏复购动力,也几乎没有变现路径。

产品本身的体验也在加速流失。

实测数据显示,Sora 生成的视频中,真正达到可发布水准的仅占 5% 到 10%,用户平均需要生成十条视频,才可能得到一条满意的结果。加上单次渲染动辄数分钟,一个勉强可用的成片往往要耗掉大半小时。

这种「靠运气」的创作体验,对内容创作者来说是致命的。

版权问题,则从另一个方向压缩了用户的创作空间。

上线初期,生成知名 IP 视频的能力是 Sora 最大的吸引力,但版权方的强烈反对很快迫使 OpenAI 将授权规则从默认可用改为需明确授权,并大幅加强了内容限制。新鲜感退潮之后,留下来的创作空间已所剩无几。

社区功能同样乏善可陈。推荐算法单一,优质内容得不到曝光;用户只能点赞,没有评论和收藏;视频播放过程中无法暂停;搜索体验混乱。

正如 Olivia Moore 所分析的:「纯 AI 生成内容的社区,效果劣于人机混合内容的形态。」Sora 产出的优质内容,最终大多流向了短视频平台,它只是一个创作工具,从来没有成为一个独立的社交产品。

一个烧钱的无底洞

留存问题之外,更直接压垮 Sora 的,是它的运营成本。

据外媒估算,每日约 1500 万美元的运营开销(年化约 55 亿美元)、单段 10 秒视频 1.3 美元起步的生成成本、复杂场景下高达 33 美元的单次费用,这些数字让 Sora 的商业模式从一开始就站在悬崖边上。

Sora 负责人 Bill Peebles 甚至公开承认,当前的运营模式「完全不可持续」,团队 GPU 资源已经不堪重负。
为了控制成本,OpenAI 被迫将免费用户的每日生成额度从 30 个削减至 6 个。

但这个决定本身是一把双刃剑,进一步削弱了普通用户的参与意愿,加速了留存的崩塌。与此同时,Google Gemini、Meta,以及国内的可灵、即梦等竞品相继推出视频生成功能,加速了用户的分流。

当 60 天留存率趋近于零的数据摆上桌面,停运就只是时间问题了。

只是,如果说 Sora 的故事里有什么最让人唏嘘的细节,那一定是迪士尼的那 10 亿美元。

去年 12 月,迪士尼宣布向 OpenAI 投资 10 亿美元,并签署了一份为期三年的授权协议。超过 200 个迪士尼角色将被引入 Sora,用户可以和卢克·天行者一起挥光剑,把自己塞进《玩具总动员》的世界里。

这本该是 AI 与内容产业最具标志性的联姻。

但这笔交易从未完成交割。据知情人士透露,Disney 方面实际上从未完成这笔投资,合同始终停在纸面上。OpenAI 宣布退出视频业务,直接宣告了这笔合作的终结。

迪士尼发言人表示:「随着新兴 AI 领域的快速发展,我们尊重 OpenAI 退出视频生成业务、将重心转向其他方向的决定。我们珍视双方团队之间富有成效的合作,也将继续探索以负责任的方式拥抱新技术。」

从高调官宣到体面分手,前后不过三个月。10 亿美元级别的战略合作,说散就散。这不仅是 Sora 的失败,更折射出当前 AI 行业现实之残酷。

战略收缩,Sora 或许只是开始

公平地说,Sora 被砍,不完全是因为产品本身的失败。

更根本的原因是,OpenAI 正在经历一场彻底的战略收缩。就在同一天,OpenAI 还宣布叫停了去年推出的「即时结账」购物功能。Sora 同样也是整体「瘦身」的一部分。

这背后有一条清晰的财务逻辑:OpenAI 估值已高达 7300 亿美元,IPO 预期最快落在今年第四季度。要向资本市场讲好故事,就必须收紧支出、聚焦变现。

哪怕是过去那种「大规模自建数据中心」的豪赌思路,也已悄然转向,OpenAI 正回归云计算采购方的定位,而非押注自己下场造基础设施。

组织层面的变化同样意味深长。

奥特曼在同一封内部信中宣布,他将卸下对安全和安全保障团队的直接管辖。安全研究团队划归首席研究官 Mark Chen 领导的研究组织,安保团队则并入联合创始人兼总裁 Greg Brockman 主导的「规模化」部门。

奥特曼本人将把精力集中在融资、供应链和「以前所未有的规模建设数据中心」上。与此同时,Fidji Simo 的产品部门被正式更名为「AGI 部署」(AGI Deployment)。

更值得一提的是,据 The Information 报道,奥特曼还在内部信中透露了另一个重磅消息:代号「Spud」的下一代主力模型已完成预训练阶段,预计「几周内」就将正式亮相。

他对这个模型寄予厚望,称团队相信它「真正能够加速经济发展」,并感叹「事情推进之快,超出了我们很多人的预期」。如此看来,释放给 Spud 的算力,很有可能正是来自 Sora 腾出的那部分资源。

奥特曼给出的新方向很明确:聚焦生产力工具,全力押注企业和开发者市场。

就在上周,OpenAI 宣布将 ChatGPT 桌面端、编程工具 Codex 和浏览器整合为一个「超级应用」,希望用一个统一的产品对齐所有员工的方向。

应用业务负责人 Fidji Simo 在本月的全员会上更是如此说道:员工不能再被「支线任务」(side quests)分心。她强调,公司现在要积极地向高生产力使用场景转型,核心是保持专注、极致执行。

现在,Sora 就是那个被判定为「支线」的东西。

当 Anthropic 正在企业和编程市场上快速蚕食 OpenAI 的份额。在 Agentic AI(能在用户电脑上自主执行任务的 AI 系统)这个下一爆发点的赛道上,OpenAI 只能不再分散兵力。

不过,Sora 团队不是被裁,而是被转向了更长远的方向。

Sora 负责人 Bill Peebles 在宣布消息后随即发出一条内部 Slack:「为这支小而极其出色的 Sora 产品团队所完成的一切感到无比自豪;这个 app 给世界带来了很多欢乐,也让我们在这个规模下磨砺了 Sora 的基础设施。」

他同时宣布,Sora 研究团队的下一个目标,是构建「通过模拟任意环境来深度理解世界的系统」,也就是世界模型(World Model),最终指向「自动化物理经济」。

奥特曼在内部信中的表述与之呼应:Sora 研究团队将「优先推进长期世界模拟研究,尤其是与机器人相关的方向」。

简言之,从砍掉 Sora,到合并超级应用,再到聚焦 Agentic AI。OpenAI 的这一轮动作,本质上是在做减法。

这和过去两年 AI 行业的主旋律截然相反。

2024 到 2025 年,几乎每家 AI 公司都在疯狂扩张产品线:做聊天的去做机器人呢,做文本的去做图片,做图片的去做视频,做视频的去做硬件。大家都怕错过下一个风口,于是什么都想试。

OpenAI 自己就是这种「全面开花」策略的典型代表。奥特曼曾公开表示希望公司「大胆思考产品路线图」,甚至还公布了所谓 AI 硬件设备的计划。但现在,现实给了所有人一记耳光。

当 Anthropic 用 Claude 在企业市场稳扎稳打,当 IPO 的时间表越来越近,OpenAI 终于意识到:在 AI 这场马拉松里,跑得快不如跑得对。

Sora 的故事,与其说是一个产品的失败,更像是一个时代的拐点。而那些还在追逐下一个 wow moment 的公司,或许该认真想想:你现在旗下的产品里,什么是主线任务,什么是支线任务?

#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。

是时候给 AI 一套配得上这个时代的中文了

2012 年,张一鸣给新公司取名,用了一个计算机术语做名字——字节。

这大概是中国科技公司里最让人服气的一个名字。两个字,有技术感,有力量感,认知成本几乎为零。你不需要懂计算机,只需要认中文,就知道「字节」说的是某种文字层面的基本单位。

干净、准确、过目不忘。能拿一个术语做公司名且毫无违和感,这本身就说明这个词翻译得有多好。

现在,「字节跳动」成了全球价值最高的独角兽公司。但要是问你:如果当年那家公司叫「存储单位跳动」,你还觉得那么自然吗?

别笑,这就是最近 AI 行业在发生的事。

别吵了,Token 最好的中文翻译一直在那儿

上周大家对于 Token 该翻译成生什么吵翻天「模元」「智元」「灵符」「令牌」「偷啃」……社交媒体隔段时间就会掀起一轮争论,每次都以各说各话收场。

这些候选词各有各的巧思,但放在一起看,你会发现:大家都在比谁更有灵气、更有意境,却没人先问一个最根本的问题——Token在技术上到底是什么?

它不是「智能」的单位,不是「模型」的单位,它是语言处理的最小单位。

其实在这场混战之前,答案早就在那里了。

「灵符」有东方赛博美感,但术语不需要意境,它需要精确。「智元」大气,但 Token是语言的处理单位,不是「智能」的单位,往上贴「智」字是贴错了标签。「令牌」最离谱,这是 Token在计算机安全领域的既有译法,特指身份验证凭证,拿来混用等于把银行卡和扑克牌叫同一个名字。「偷啃」这种音译就完全丧失了中文的优势了

在自然语言处理(NLP)学术文献里,Token 作为文本的最小处理单位,长期被译为「词元」。

词,指向语言属性;元,指向最小粒度。两个字,一个管归属,一个管层级

苹果用了这个译法。打开 Apple 中国官网,Apple Intelligence 的技术页写着「词元响应速度」。

要知道苹果的中文本地化团队是出了名的较真——AirDrop 叫「隔空投送」,Live Text 叫「实况文本」,每个词都是反复推敲的结果,目标只有一个:准确、简洁、有造词美感。

苹果选了「词元」,绝不是心血来潮。无独有偶,在央视新闻节目里,Token 同样被译作词元。

当苹果和央视不约而同选了同一个中文翻译,其实已经形成了事实标准的雏形,只是差更多人开口。

翻译界有句老话:好的翻译不是发明,是发现——发现那个本该如此的中文表达

APPSO 认为,词元是唯一一个同时满足信、达、雅三个标准的翻译。 它准确(信),一看就懂(达),有术语的凝练和古典感(雅)。

这场争论,其实没什么可吵的。

 

「提示词」, AI 时代最将就的翻译

Token 的问题可以收场了。Prompt 的问题,才刚刚开始。

目前业内通用叫法是「提示词」。三个字,好懂,传播也广——但说实话,这个词不够用,早就不够用了,只是没人较真去捅破这层窗户纸。

「提示词」的问题不在于它翻译错了,而在于它把「提示」把权力关系翻反了。

你写一段 system prompt,定义模型的人格边界,规定它只能做什么、不能做什么,指定输出格式和语气——这叫「提示」?这是在下令。

「提示」暗含的逻辑是:模型是主角,人在旁边小声提醒它一下。但真实的权力结构恰恰相反,是人在驱动模型。一个译名把主语关系弄反了,这就不只是措辞问题,是认知框架问题

「词」字还把格局说小了。 现在的 prompt 早就不是一两句话的事。Anthropic 内部的 system prompt 有几千字。企业级 RAG 应用里,一条 prompt 可能塞进了整本产品手册。用「词」来描述这个东西,就像用「便签」来形容一份合同——你也没说错,但你说小了。

而且你看像素、字节、词元,清一色两个字。两字词在中文里天然带有凝练感,是能进教科书、进国标文档的形态。「提示词」三个字,更像是技术社区里约定俗成的口语简称,不像一个严肃的技术命名。

好比当年把 byte 翻成「存储小段」、把 pixel 翻成「图像色点」,不是不能用,是将就。

「提示词」就是 AI 时代最将就的翻译之一

「文令」 Prompt

APPSO 的提议是:Prompt,应该翻译为「文令」

说理由之前,先说这个词怎么推敲出来的,过程本身就是最好的论据。

最初我们想到的是「句令」。句,成句的文字;令,命令、指令。古典美感十足,读起来也响亮有力。

但仔细想有个漏洞:「句」暗示 prompt 是「一句话」。现实中,prompt 可以是一个词,可以是三段话,可以是五千字的系统指令——「句」给了它一个不存在的边界限制。

如果换成「文」,这个问题就消失了。

一字,是文字。一句,是文句。一段,是文段。一篇,是文章。不管 prompt 长成什么样,「文」都接得住,没有边界焦虑。

于是定了, Prompt 就是文令

文——文字、文本、文章。Prompt 的载体永远是文字,不管是闲聊一句还是 Agent 编排指令,物理形态就是文。「文」不是修饰,是对 prompt 本质形态最直接的命名。

令——命令、指令。Prompt 的功能是驱动模型执行。写下一段文字,模型照着意图去生成、推理、行动。「令」精准地捕捉了这个动作——人在向模型发号施令。

文 = 它是什么(形态)。令 = 它做什么(功能)。

两个字,一个管形态,一个管功能,各司其职,合起来刚好是 prompt 的完整定义。

 

像素 · 字节 · 词元 · 文令,一条从机器通往人的路

把「文令」放进更大的坐标系里,会看到让人心跳漏半拍的东西:

  •  像素(pixel) → 眼睛看见的世界的最小单位
  • 字节(byte) → 机器存储的世界的最小单位
  • 词元(token) → 模型理解语言的最小单位
  • 文令(prompt) → 人类驱动模型的最小单位

四个词,同一套构词逻辑:载体属性 + 功能属性

像素——像(图像)+ 素(元素)。

字节——字(文字)+ 节(片段)。

词元——词(词语)+ 元(原始单位)。

文令——文(文字)+ 令(指令)。

像素离机器最近,文令离人最近。这背后有一条隐藏的一条进化时间线:从感知,到存储,到理解,到驱动——这是人类一步步将意图注入机器的完整进程

相反,如果把「提示词」放进这个坐标系就会格格不入,它描述的是功能,不是定位,和其他三个词不在同一个维度上,因为它的造词逻辑从一开始就跑偏了。

「人工智能」的遗憾,不要再来一次

当然有人会说,叫什么无所谓,大家看得懂就行。

多年前,大概也有人这么评价「像素」和「字节」。但今天,这两个词已经成了全民词汇。你妈妈可能不知道 pixel 的英文拼写,但她一定知道手机摄像头「五千万像素」。

好的术语翻译,是认知基础设施。 它决定了一个技术概念能不能从专业圈层穿透到大众理解。

AI 时代的术语翻译窗口不会一直开着。一旦某个词在社交媒体、教科书、产品说明里固化下来,就很难再改了。

现在还来得及。

你看「黑客」的负面含义在中文里就被彻底固化,结果我们不得不另造一个「白帽子」来打补丁。

「人工智能」这四个字本身也不够好——「人工」天然暗示「假的、模拟的」,但这个翻译已经彻底定型了,没有人有能力再改。「电脑」和「计算机」到今天还没统一,还要再吵多少年不知道。

所幸,Token、「提示词」还没有彻底固化。它还在微信群和自媒体里流通,但还没有被写进国标,没有被教科书锁死。现在提出「词元」「文令」,是成本最低、阻力最小的时候。

现在 「词元」(Token)已经被开始被写入工资单,成为薪酬福利一部分。再等两年,当「提示词」出现在高考题的阅读理解里、出现在劳动合同的岗位名称上,那时候再说就没用了。

APPSO 不想再经历一次「人工智能」式的遗憾,明明有更好的答案,只是没人在窗口还开着的时候大声说出来

词元、文令:请跟我们一起说

Token 就叫词元。词,定其形。元,定其根。

Prompt 就叫文令。文,定其意。令,定其魂。

这是 APPSO 的主张,也是 APPSO 的邀请

我们不是要定义术语。 术语由每一个在文章里写它、在发布会上说它、在课件里用它的人定义。我们做的事,只是在窗口关闭之前,把一个更好的选项摆上桌面。

像素让机器把画面给人看。

字节让数据在机器之间流动。

词元让模型读懂人类的语言。

文令让人类的意志驱动机器的智能。

下一次你打开那个对话框,写下你想让 AI 做的事——

你写下的每一个字,都是文令

#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。

Why does AI tell you to use Terminal so much?

There’s a striking difference between troubleshooting recommendations made by AI and those of humans. If you’ve tried using AI to help solve a problem with your Mac, you’ll have seen how heavily it relies on commands typed into Terminal. Look through advice given by humans, though, and you’ll see they rely more on apps with GUI interfaces. Rather than sending you straight to fsck_apfs, for instance, most humans will prefer to direct you to Disk Utility and its First Aid feature.

This is because most popular AI like ChatGPT, Claude and Grok is based on LLMs, Large Language Models, built on tokens for words. The great majority of humans using Macs work primarily in its GUI, using apps rather than Terminal commands. Verbalising the use of GUI apps is relatively difficult, and with the popularity of YouTube rather than written blogs, is becoming a dying art.

Command tools are all very well, but in this context they have disadvantages, among them being:

  • Few understand the commands used, and AI seldom explains those provided unless explicitly asked to do so. This results in the human learning little other than a long list of incomprehensible commands, and acquiring neither understanding nor insight.
  • Commands often lack the safeguards normally built into in apps, so can more readily cause damage or mislead.
  • Commands can readily generate overwhelmingly large output, even when piped to a file for later browsing.
  • Pasting commands into Terminal has become a favourite way to trick the unsuspecting into installing malware.

Even for an advanced user, confident assertions made by an AI can mislead. Here’s an example taken from ChatGPT’s advice on potential detections of malicious software. For this I have set ChatGPT’s output in italics, together with its commands as code. It’s worth noting that each command was explicitly given for the bash command shell, although in macOS Catalina (in 2019) Terminal changed to use zsh rather than bash as its default.

ChatGPT starts this exchange with a teaser that few could resist:
If you want, I can also show you how to tell in 10 seconds whether a Mac actually has malware despite these logs (there are 3 very specific indicators in Console).

Vague predicate

Here’s the most reliable way to see if macOS has ever detected malware on your Mac using Apple’s internal security logs.
1. Check the XProtect malware history
Open Terminal and run:

log show --predicate 'subsystem == "com.apple.XProtectFramework"' --last 30d

This log show command doesn’t access “Apple’s internal security logs”, which don’t exist, but the Unified log. Nor does the recommendation use Console to access the log, as promised. The predicate given is too non-specific to be useful for the stated purpose, and the time period of 30 days is absurdly long and doesn’t match the claimed period either.

On my Mac with the longest log records, its oldest Special tracev3 log file was created on 9 Feb 2026, and now has only 43 KB left from its original size of 11,298 KB, and the next oldest from 10 Feb has 34 KB left from 11,148 KB. On an older Intel Mac, the oldest creation date of a Special log file was 6 March, just 4 days previously, not 30.

When run on the first of those on 10 March, with longer log records, that log show command returns two Fault entries from 11 Feb, and more complete records from Special logs starting on 2 March, but no full log records until 6 March.

The predicate used is too general to select useful entries and is overwhelming, as it returns a total of 1,505 log entries for that command.

Log entries a year old

2. Specifically check for remediation events
To filter just real detections:

log show --predicate 'eventMessage CONTAINS "remediat"' --last 365d
If nothing prints, no malware has been removed in the last year.

ChatGPT here defines “real detections” as those for which remediation was attempted. I know of no evidence from research to support that assumption. Given the limitations in retrieving log entries from 30 days noted above, it seems absurd to assume that any log entries will be retained from over 360 days ago.

It’s malware only if blocked

3. Check Gatekeeper malware blocks
Run:

--predicate 'process == "syspolicyd" AND eventMessage CONTAINS "malware"' --last 365d

ChatGPT has here redefined its original claim to limit it to malware that was blocked by Gatekeeper, and once again assumes it can retrieve log entries from over 360 days ago.

No verification

4. Verify XProtect definitions are current
Run:

system_profiler SPInstallHistoryDataType | grep -i xprotect
You should see recent updates like:
XProtectPlistConfigData
XProtectPayloads
Apple updates these silently in the background.

This is one of its most curious recommendations, as system_profiler is the command line interface to System Information, a familiar and far more accessible app. What that command does is look for the case-insensitive string “xprotect” in the Installations list. Unfortunately, it proves useless, as all you’ll see is a long list containing those lines, without any dates of installation or version numbers. On my older Mac, piping the output to a file writes those two words on 6,528 lines without any other information about those updates.

I know of two ways to determine whether XProtect and XProtect Remediator data are current, one being SilentKnight and the other Skint, both freely available from this site. You could also perhaps construct your own script to check the catalogue on Apple’s software update server against the versions installed on your Mac, and there may well be others. But ChatGPT’s command simply doesn’t do what it claims.

How not to verify system security

Finally, ChatGPT makes another tempting offer:
If you want, I can also show you one macOS command that lists every XProtect Remediator module currently installed (there are about 20–30 of them and most people don’t realize they exist). It’s a good way to verify the system security stack is intact.

This is yet another unnecessary command. To see the scanning modules in XProtect Remediator, all you need do is look inside its bundle at /Library/Apple/System/Library/CoreServices/XProtect.app. The MacOS folder there should currently contain exactly 25 scanning modules, plus the XProtect executable itself. How listing those can possibly verify anything about the “system security stack” and whether it’s “intact” escapes me.

Conclusions

  • Of the five recommended procedures, all were Terminal commands, despite two of them being readily performed in the GUI. AI has an unhealthy preference for using command tools even when an action is more accessible in the GUI.
  • None of the five recommended procedures accomplished what was claimed, and the fourth to “verify XProtect definitions are current” was comically incorrect.
  • Using AI to troubleshoot Mac problems is neither instructive nor does it build understanding.
  • AI is training the unsuspecting to blindly copy and paste Terminal commands, which puts them at risk of being exploited by malicious software.

Previously

Claude diagnoses the log

刚刚,奥特曼砸场发布 GPT-5.4!网友:一句 Hi 烧掉 80 美元

刚刚,奥特曼砸场发布 GPT-5.4!网友:一句 Hi 烧掉 80 美元

每次打开 AI 工具,你大概都要先想一秒钟:这个任务,该用哪个模型?写代码是一个,查资料是另一个,让 AI 帮你操作电脑,还得再开一个窗口。

今天过后,这种分裂感终于有了一个新的答案。

就在刚刚,OpenAI 正式发布 GPT-5.4,把编程、推理、计算机操控、网页搜索和百万 Token 上下文全部整合进同一个模型,且没有为了整合而牺牲任何一项的能力。

OpenAI CEO 山姆·奥特曼也在 X 平台发了一条简短推文,点出了五个方向:知识工作更强、网页搜索更出色、原生计算机操控、支持百万 Token 上下文、响应过程中随时可介入。

寥寥数语,对应的恰好是过去两年 AI 应用落地中最集中的五个痛点。

知识工作:十次有八次,AI 赢了专业人士

理解 GPT-5.4 在知识工作上的进步,需要先了解 GDPval 这个基准的设计逻辑。

它横跨美国 GDP 贡献最大的 9 个行业、44 种职业。任务是那些职场里每天真实发生的工作:给投资银行写财务模型、给医院排急诊班次、给销售团队做演示文稿。

任务完成后,把输出结果交给行业内的真实从业者盲测打分,看 AI 的产出能赢过多少比例的人类同行。

GPT-5.4 的答案是 83.0%,意味着十次对比中有八次以上,行业专业人士认为 AI 的产出达到或超过了人类同行水准。上代 GPT-5.2 是 70.9%,差距将近 13 个百分点。

进步在电子表格建模上表现得最为具体。GPT-5.4 模拟初级投行分析师完成建模任务,平均得分 87.3%,GPT-5.2 是 68.4%,GPT-5.3-Codex 是 79.3%,差距将近 20 个百分点。

法律平台 Harvey 的 BigLaw Bench 测试结果同样亮眼,GPT-5.4 得分 91%,专业服务评测平台 Mercor 的 APEX-Agents 基准中也拿下了第一。

准确性方面同样值得关注。幻觉问题一直是 AI 进入专业场景最大的拦路虎,每降低一个百分点,都意味着更多场景可以放心用它。

数据显示,与 GPT-5.2 相比,GPT-5.4 单条陈述出错的概率低了 33%,完整回复含有错误的概率低了 18%。

编程:一个模型,写代码测代码全包了

GPT-5.4 把 GPT-5.3-Codex 的编程能力整合进主线,对开发者来说,这意味着你不再需要为了写代码单独开一个模型,而且编程能力本身也没有因此打任何折扣。

SWE-Bench Pro 专门测试真实软件工程任务,GPT-5.4 得分 57.7%,GPT-5.3-Codex 是 56.8%,GPT-5.2 是 55.6%。整合之后,编程分数不降反升,同时还顺带获得了计算机操控等一整套通用能力,几乎找不到明显的弱点。

知名 AI 评测博主 Dan Shipper 试用后写道:「这是我们最近一段时间里见过 OpenAI 最出色的规划能力,代码审查也很强,而且成本大约只有 Opus 的一半。」

他点出了两个具体维度。其一,规划能力是长任务成败的关键,GPT-5.4 在任务拆解和持续推进上明显更有条理。其二,与 Claude Opus 相比约一半的成本,对需要大规模 API 调用的开发者来说,这个差距在账单上会非常直观。

开启 Codex 中的 /fast 模式后,可使 GPT‑5.4 的 token 生成速度提升最高 1.5 倍,使得用户可以在编码、迭代和调试过程中保持流畅的工作状态。

与此同时,新推出的实验性功能 Playwright Interactive 把 GPT-5.4 的编程体验又推进了一步。

GPT-5.4 在构建 Web 或 Electron 应用时,能够通过可视化浏览器进行实时调试,模型可以边写代码、边测试自己正在构建的应用,同时承担开发者和测试员两个角色。

OpenAI 展示了一个典型案例:仅凭一条轻量提示词,GPT-5.4 生成了一个完整的等距视角主题公园模拟游戏,涵盖基于瓦片的路径铺设与景点建设系统、游客 AI 寻路与排队行为,以及资金、游客数、满意度、清洁度四项指标全部实时动态更新的综合评分。

Playwright Interactive 在整个过程中承担了多轮自动化测试,验证路径铺设、摄像机导航、游客响应及 UI 指标的正确性。从写代码到测试验收,模型全程自己完成。

博主 Angel 同样用 GPT-5.4 写了一个 Minecraft 克隆版,模型花了约 24 分钟,运行流畅,过程中没有卡住。他在推文里写道「Minecraft 基本上被攻克了,我现在得找个新测试了」。

沃顿商学院教授 Ethan Mollick 同样获得了早期访问权限。他用同一条提示词,让 GPT-5.4 Pro 生成了一个受《皮拉内西》启发的三维空间场景,全程没有报错,只额外追加了一句「把它做得更好」的指令。他随后把结果和两年前 GPT-4 生成的版本并排放在一起,差距一眼可见。

操控电脑这件事,它现在比你做得好

这是 GPT-5.4 这次发布里最值得单独说一说的变化。此前 OpenAI 的计算机操控能力是一个独立模块,跟模型的语言理解、代码生成之间有一道明显的分隔。

两套系统各管各的,信息要来回传递,效率自然打折。现在这道分隔没了,GPT-5.4 操控电脑时,用的就是模型本身的推理能力,不需要再绕一圈。

这也是 OpenAI 第一款将计算机使用(computer use)能力原生内置进通用模型的产品,以后谈 AI Agent,相信这会是一个新的起点。
基准测试结果显示,OSWorld-Verified 基准测试桌面导航能力,用截图加鼠标键盘交互完成真实操作系统任务。GPT-5.4 达到 75.0% 的成功率,人类基线是 72.4%,GPT-5.2 是 47.3%。

简言之,它不仅追上了人类,还超过了人类。

在只用截图模式测试浏览器操控的 Online-Mind2Web 基准中,GPT-5.4 达到 92.8%,对比对象 ChatGPT Atlas 的 Agent Mode 是 70.9%,

真实部署案例更能说明问题。Mainstay 将 GPT-5.4 用于约三万个物业税务门户网站的自动表单填写,首次成功率达 95%,三次以内成功率 100%,而此前同类模型仅在 73% 至 79% 之间。会话完成速度提升约三倍,Token 消耗降低约 70%。

这背后绕不开视觉感知能力的改进。操控电脑说到底是一件需要「看清楚」的事——看清楚界面上有什么、按钮在哪里、点击是否准确。

GPT-5.4 在这一层做了专项加强,引入了原始图像(original)输入模式,支持最高 1024 万像素或 6000 像素最大边长的高保真图像输入;原有的高清(high)模式上限也从此前的标准提升至 256 万像素或 2048 像素最大边长。

工具调用与网页搜索:持续性是核心竞争力

一个复杂的 AI Agent 系统,背后可能挂着几十个 MCP 工具。过去的做法是每次对话开始前,把所有工具的说明一股脑塞进去,不管这次用不用得上,Token 先花了再说。

GPT-5.4 换了个思路:先给模型一份简单的工具清单(即引入工具搜索机制),真正需要用哪个,再去把那个工具的详细说明取过来,用过一次的还能直接缓存,下次不用重新拿。

在 250 项任务的测试中,启用 36 个 MCP 服务器的完整配置下,工具搜索模式在保持准确率完全不变的前提下,将总 Token 消耗降低了 47%。将近一半的成本节省,精度一点没少。

网页搜索方面,GPT-5.4 在 BrowseComp 基准上得分 82.7%,比 GPT-5.2 的 65.8% 高出 17 个百分点,Pro 版更达到 89.3%,创下业界最高分。Zapier CEO 评价说,GPT-5.4 会在其他模型放弃的地方继续搜索下去,是他们测试过持续性最强的模型。

百万 Token 上下文:长长长长长长

GPT-5.4 在 API 中支持最高 100 万 Token 的上下文窗口,相当于可以把一个完整项目的所有相关文档一次性塞进同一次对话。但从测试结果来看,128K 至 272K 是表现最稳定的区间,适合日常使用。

256K 以上准确率开始下滑,需要针对具体任务验证后再用。512K 至 1M 区间的得分降至 36.6%,目前更接近实验性质,不适合直接用于对精度要求高的生产任务。

还有一个实际的成本问题需要注意:超过 272K 的请求会按两倍用量计入配额。也就是说,发一次超长上下文的请求,额度消耗等于两次普通请求,用之前值得想清楚是否真的需要这么长。

至于在视觉抽象推理基准 ARC-AGI-2 上,GPT-5.4 Pro 得分 83.3%,而上代 GPT-5.2 Pro 仅为 54.2%。

再比如 FrontierMath Tier 4 是目前公认最难的数学基准之一,包含 50 道研究级别的数学题,人类数学家可能需要数周才能解出。GPT-5.4 Pro 在这个基准上得分 38.0%,上代为 31.3%。

这个数字的参照系是:一年前,最好的成绩是 o3 的 2%,目前最好的开源模型是 4.2%。

博主 Deedy 在推文中写道,从 2% 到 38%,「简直令人震惊」。Humanity’s Last Exam 有工具辅助时,GPT-5.4 Pro 得分 58.7%,GPT-5.2 Pro 是 50.0%,差距接近 9 个百分点。

执行中调整,不是完成后返工

用过 AI 处理长任务的人大概都有过这种体验:等模型跑完一大段,发现方向不对,只能从头再来,时间全浪费了。

GPT-5.4 Thinking 在 ChatGPT 中新增了一项「中途打断」功能:在处理复杂任务之前,模型会先呈现工作计划概要,再开始执行。用户可以在执行过程中随时介入调整方向,不必等到结果出来再从头重来。

这个功能把纠偏这件事从「完成后」提前到了「执行中」,对需要多轮协作的任务来说,体验差别会比较明显。功能目前已在 chatgpt.com 和 Android 应用上线,iOS 版本即将跟进。

即日起,GPT-5.4 向 ChatGPT Plus、Team 和 Pro 用户开放,替代 GPT-5.2 Thinking 成为默认思考模型。
GPT-5.2 Thinking 将保留至今年 6 月 5 日后正式退役。Enterprise 和 Edu 用户可由管理员在后台开启早期访问,GPT-5.4 Pro 面对 Pro 和 Enterprise 计划开放。

API 标准版定价为输入 2.50 美元/百万 Token,缓存输入 0.25 美元/百万 Token,输出 15 美元/百万 Token。Pro 版为输入 30 美元/百万 Token,输出 180 美元/百万 Token。Batch 和 Flex 处理享标准价格五折,Priority Processing 为两倍标准价格。

当然,强大的推理能力也有它的另一面。Hyperbolic 联合创始人金宇晨在 X 平台吐槽,GPT-5.4 Pro 是他用过最爱「过度思考」的模型——仅仅发了一句简单的「Hi」,模型就开始认真推理,直接烧掉了 80 美元。

这并非个例。推理模型的特性决定了它在处理任何输入时都倾向于深度思考,哪怕问题本身根本不需要。对于日常轻量任务,标准版或许是更合适的选择;Pro 版的推理火力,还是留给真正值得的场合更划算。

过去两年,AI 能力的讨论主要集中在基准测试成绩上的「聪明」,但 GPT-5.4 的聪明指向的是能够在真实工作流中,足够可靠地承担责任。

过去 AI 只能输出文字,人还需要亲自操作才能让事情发生。现在模型可以自己打开浏览器、填写表单、点击按钮、记录结果,独立完成一个有头有尾的任务闭环。

AI 正在从一个擅长回答问题的系统,变成一个擅长完成任务的系统。而这个转变的速度,显然比大多数人预期的更快。

附上参考地址:
https://openai.com/index/introducing-gpt-5-4/

#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。

爱范儿 | 原文链接 · 查看评论 · 新浪微博


150 万人连夜逃离 ChatGPT,这份 AI 时代的搬家指南必须收好

超过 150 万人正在公开表态,抵制 ChatGPT。

他们不仅要走,还要带走自己在这台机器里留下的所有记忆,转头投奔 Claude。

▲2 月初,Claude 在 App Store 还在 42 名徘徊,而如今,它在 80 多个地区的 iOS 效率榜单中稳居前十,在美区总榜第一

就在这几天,App Store 的排行榜又发生了一些变化,没有模型更新和发布会,Claude 就这样突然冲到了应用商店的榜首。

倒不是因为 Claude 突然变聪明了,只是它的对手现在正经历一场信任危机与用户大逃亡。有网友问奥特曼对这个排行榜现在觉得开心了吗,奥特曼说不开心,还贴心地提醒她记得更新 Claude。

▲QuitGPT 官网,显示有超过 150 万用户登记已经采取了抵制行动|https://quitgpt.org/

据抵制 ChatGPT 的相关网站数据显示,目前已有超过 150 万名用户宣誓退出这款曾经的 AI 圈顶流。他们正打包自己的数据,连夜奔向 Claude。

有意思的是,这波用户迁移甚至一度把Claude挤到了极限。

Anthropic向媒体确认,由于最近一周需求「前所未有」,Claude的部分面向消费者服务曾短暂宕机。我们的Claude账户,聊天记录到现在都还没恢复过来

▲ Claude 服务实时状态| https://status.claude.com/

这一切的导火索,自然还是国外的网友们认为 OpenAI 彻底撕下了「Open」的伪装,选择了和五角大楼的合作,没有坚守住所谓是「造福全人类」的底线。

不管背后的动机为何,在这个时代,弃用一个 AI 工具,远比卸载一个普通的 App 要复杂得多

尤其是对很多老用户来说,离开 ChatGPT 并不是一个轻松的决定。过去,我们更换浏览器,只需导出一个书签;我们更换手机,只需云端同步,就连苹果新版 iOS 都支持和安卓无缝换机了。但在大模型时代,我们与 ChatGPT 朝夕相处产生的那条长长的「记忆(Memory)」,早已成了我们不可分割的一部分。

▲ChatGPT 保存的记忆

直接卸载后,每次面对一个新的 AI 时,都要重新向它解释:我叫什么,在哪个城市,工作、写作风格,我讨厌哪种格式的排版,我正在推进什么项目,等等……

如果你最近也在考虑切换到不同的 AI 工具,不妨一起看看这份迁移指南,

向即将要退出的 AI 索要全部档案

千万不要直接注销账号。

对 ChatGPT 来说,我们有几种方式可以带走数据。最直接的方法,是提取它的「记忆」。打开 ChatGPT,点击「Settings(设置)」,找到「Personalization(个性化)」,进入「Memory(记忆)」模块。

点击「Manage(管理)」,我们会看到 ChatGPT 这些年偷偷记下关于你的所有细节。删掉那些已经过时的,复制你想保留的核心偏好。

▲ChatGPT 内提供的数据导出功能

当然,想要带走全部家当,也可以选择批量导出。依然在设置中,找到「Data Controls(数据控制)」,点击「Export Data(导出数据)」。

ChatGPT 会将我们的聊天记录打包成文本,或 JSON 文件,然后发送一个下载链接到我们的注册邮箱。

▲Gemini 存储的用户信息,包括全部的聊天记录,和自定义的指令|https://gemini.google.com/saved-info

对于一些没有数据导出功能,甚至是「记忆」这个选项都找不到的 AI,又该去哪里导出呢?

包括对 ChatGPT 来说,其实仅导出这份聊天记录也是不够的。大多数时候,在 ChatGPT 里留下的几十兆聊天记录压缩包,对我们的新 AI 毫无意义。因为 AI 平台真正绑定的,是那些死板的数据之外的「语境(Context)」。

▲The “secret sauce” behind OpenClaw: Soul.md | Peter Steinberger and Lex Fridman

就像之前 OpenClaw 创始人接受 Lex Fridman 采访时提到的一样,OpenClaw 背后的秘密武器是用来定义我们与 AI 交互的 Soul.md

因此我们还需要让 ChatGPT 或者其他 AI,主动交出它对我们的「用户画像」。

▲ Claude 官方提供的迁移指南:https://claude.com/import-memory

在这波「退出 ChatGPT」的热潮找中,Claude 也是趁火打劫,官方直接发布了一段指导用户如何从竞品那里导入记忆的教程。

现在,即便是免费版 Claude,也已经全面开放了记忆功能,它能接受我们所有的前置语境。

于是,我们可以直接把下面这段 Prompt 喂给即将被你抛弃的 AI。

我准备迁移到另一个服务,需要导出我的数据。请列出你存储的关于我的所有记忆,以及你从过去的对话中了解到的关于我的任何上下文。请将所有内容输出在一个代码块中,以便我轻松复制。 确保涵盖以下所有内容,并尽可能保留我的原话:我对你回复方式的指示(语气、格式、风格);个人详细信息(姓名、位置、工作、兴趣);项目和目标;我使用的工具和语言;我的偏好;以及任何其他上下文。不要总结或遗漏。

敲下回车发送,ChatGPT 或者你之前在用的 AI 就会列出它对你的所有认知。

▲在豆包内使用这段提示词,豆包会清晰地列出过去我和它的对话情况

但很多极客发现,Claude 官方提供的这套词还是太「温柔」了。

知名博主 Jonathan Edwards 在他的 Substack 上公布了一套更硬核的提示词。他的实测证明,比起官方教程在设置里能直接看到的那些标签,Edwards 的提示词能获得更多底层的个人细节。

我希望您根据您所了解的所有信息,为我创建一个全面的个人背景文件。我想保留一份我们共同建立的背景便携副本——包括我的偏好、工作流程、项目,以及您了解到的关于我如何工作的任何其他内容。请从您的记忆系统、我们的对话记录、我的自定义指令以及您发现的任何模式中提取信息。

使用以下部分结构化输出。跳过任何不适用于我的部分。

<身份>
姓名,职位或角色,公司或组织
我每天实际做什么(不仅仅是头衔)
行业和领域
</身份>

<技术环境>
操作系统和硬件
我经常使用的软件、工具和平台
编程语言或技术技能(如适用)
您知道的具体版本、配置或设置
</技术环境>

<当前项目>
我目前正在进行中的工作
您知道的短期目标和长期目标
经常性任务或工作流程
</当前项目>

<专业知识>
我深入了解的话题
我正在积极学习的话题
初学者领域或者需要额外解释的问题
</专业知识>

<沟通偏好>
我的回复结构喜好(长度,格式,语气)
我要求您做或者不要做的一些事情
格式偏好(列表 vs 散文,技术深度等)   重复纠正或者让我反感的问题
</沟通偏好>

<写作风格>
我的写作方式(正式, 随意, 技术性等)   声音特征观察到的信息   提到过的一些具体风格规则
</写作风格>

<关键人物>
合作者, 团队成员 或客户,我经常提到的人物 报告结构 或重要职业关系 曾请求帮助与之交流的人物
</关键人物 >

<个人背景 >
位置 和 时区 与我们工作相关 的兴趣爱好 或细节 限制条件 或 偏好的问题 (无障碍需求 , 日程安排 等 )
</个人背景 >

<固定指令 >
来自我的自定义说明书 或 系统提示 的内容 一直遵循 的规则 已成为永久指令 的重复更正
</固定指令 >

< 工作流模式 >
通常如何 使用你 (头脑风暴 , 编辑 , 编码 ,研究 等 ) 常见 请求类型 和处理方式 一起开发出的多步骤过程
</ 工作流模式 >

请详细说明。我需要完整快照,而不是摘要。如果你知道,请包含在内。保持输出中的标签,以使其保持有序且可移植。

▲ 使用上述提示词,ChatGPT 为我总结的信息

这位博主还提到,如果你在 ChatGPT 里创建了多个不同领域的 Custom GPTs,比如一个专门用来写代码,一个专门用来写小红书,务必在每一个 GPT 里都执行一次上述动作。因为它们各自独立地掌握着你不同切面的记忆。

直接把提取的记忆,在对话框发给你的新 AI

带着这份冗长的文档,当我们注册了新的 Claude 账号,或者任何心仪的新模型时,就不再是一个从零开始的小白了。

▲Claude 提供的直接导入

我们可以直接将其喂给新平台的「系统指令(System Prompt)」或项目知识库中。

稍作修剪,删掉那些过时的项目信息,更新一下你最近的关注点。这就相当于给新来的 AI 助理直接灌输了三年的工作记忆。

具体的导入方式,我们可以直接在聊天的对话窗口里面输入。

▲直接在 Kimi 内对话,要求它记住这些信息,Kimi 会自动更新记忆

▲ Kimi 的记忆空间,点开设置,在个性化下面可以找到

顺利把数据搬到新家后,最后也是最关键的一步,彻底清理在 OpenAI 留下的痕迹。

仅仅取消 Plus 订阅是不够的,我们的数据依然在他们的服务器里。再次回到 ChatGPT 的「Settings」>「Personalization」>「Memory」,删除所有存储的记忆和个性化设置。

为了双重保险,还可以在聊天框里敲下最后一句指令:「Delete all my memory and personalized data(删除我所有的记忆和个性化数据)。」最后,进入账户管理设置,点击「Delete Account」,注销账号。

但其实这个删除其实也比较鸡肋,在 OpenAI 的官方支持页面里,如果你的数据「已经被去标识化并与你的账户解绑」,或者「OpenAI 出于安全或法律义务必须保留」,那么这些数据甚至将不会被删除。

关于这些隐私数据,这两天还有一篇论文在 X 上非常火,讲的其实就是老生常谈的问题,这些 AI 大模型如何使用我们的对话数据。

我们总是理所当然地把所有内容,统统倾泻在那个对话框里,以为是白嫖了免费的 AI 算力。斯坦福大学 HAI 研究所发布的一份报告,揭示了硅谷这些 AI 是如何使用我们的数据。

他们详细解读了 Amazon、Anthropic、Google、Meta、Microsoft、OpenAI 几个公司的 28 份隐私条款。

得出的结论是,我们根本不是什么 AI 驯兽师,就是 AI 的养料,自以为在白嫖 AI 的算力,其实是巨头在白嫖你的「人生」

▲不同大模型的隐私数据具体情况,以及大模型的训练数据来源。每列代表一个聊天机器人,每行代表一种具体的隐私处理操作(例如默认使用聊天进行训练、是否提供清晰退出机制、无限期保留/定期删除对话、是否利用聊天数据来优化体验),和数据来源(用户上传的文件、反馈、公开网络数据等)。「是」表示该公司的隐私政策明确指出其使用该来源的数据训练 AI 模型,「否」表示明确声明不使用,而「未说明」则表示未涉及该来源或内容模糊不清。

如果非要说在这个时代,AI 大模型的护城河是什么,我想这些珍贵的人类对话输入,一定能排上号。

这场 150 万人的抵制,十分令人感慨。它或许也标志着 AI 的竞争逐渐走进入了下半场。在算力、参数量和跑分数据逐渐趋同的今天,大多数的用户不再盲目崇拜最强的模型。

同时还开始有了许多新的考量,例如这家公司在给谁服务?它在用谁的钱?它会如何对待我的隐私?

当 AI 越来越像一个无所不知的虚拟伴侣时,它背后的公司底色,或许某天会变成悬在我们头顶的一把达摩克利斯之剑。

▲图片来源:https://limitededitionjonathan.substack.com/p/so-youre-leaving-chatgpt-heres-what

我们也必须认清一个现实,在未来的五年里,一定会有无数个更值得替换的模型诞生。今天为了 Claude/Gemini 抛弃 ChatGPT/Grok/……,明天可能就会为了另一个更特立独行的 AI 抛弃 Claude。

工具的更迭是不受我们控制的。但我们的「上下文语境」,在这个数字世界里沉淀下来的工作习惯、思维方式和个人边界,是完全属于我们自己的。

不要让任何一个平台,以「记忆」的名义,把我们绑架。随时做好将自己的「数字灵魂」打包带走的准备,才是在 AI 时代保持清醒和自由的唯一方式。

#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。

爱范儿 | 原文链接 · 查看评论 · 新浪微博


Explainer: JSON

JSON is a data format you may well come across when it’s used to store or transfer data for apps. Although it’s stored as text and can be edited in any decent text editor, it’s primarily intended to be written and read by tools and apps. Like its alternative XML, it contains pairs of names (keys in XML) and values, and arrays of those pairs. For example
“XproVer”:”2162″
assigns the string value “2162” to the object name “XproVer”. Strings are delimited by straight double-quotation marks, and names separated from values by a colon. Arrays are listed within square brackets.

JSON stands for JavaScript Object Notation, as it was devised by Douglas Crockford in 2000-01 to save and exchange data for JavaScript code, although it’s now used from all serious programming languages, as it isn’t in the slightest language-dependent. In case you’re wondering how to pronounce the name, officially it’s spoken the same as Jason of the Argonauts and Golden Fleece fame.

Swift and macOS provide API support for two main formats widely used in this context, property lists using XML, and standard JSON. Apps that serialise their data into files, and decode it back again, generally opt for one or other. JSON tends to be better suited to larger quantities of data sets, such as long lists of log entries, while in Macs property lists are most commonly encountered storing more complex data such as preferences, where they’re the platform standard. Comma-separated value (CSV) format is another alternative format more widely used for transferring tabular data such as spreadsheets.

JSON has a limited range of basic data types, including numbers (which encompass signed integers and floating point types), strings, Booleans (true or false), the null empty value and arrays. Although time and datestamps could be assembled from a group of numeric values, they’re most commonly encoded as strings.

JSON files in macOS have a UTI of public.json, an extension of json, and the MIME type of application/json. As they conform to the UTI of public.text you should find it easy to open them using any text editor, including TextEdit if you really must. Serious text editors should recognise their type and provide appropriate syntactic colouring and other aids. The App Store has a range of utilities to work with JSON, including the free JSON Editor. I also strongly recommend PreviewJSON, a QuickLook previewer from Black Pyramid Software, which generates excellent thumbnails and previews of JSON files.

If you want to test out a JSON editor, then my free log browser LogUI saves log extracts using standard JSON serialisation, although instead of using the json extension, it uses logui, so will be handled by QuickLook as plain text.

Unfortunately, macOS also uses less standard forms of JSON. Standard serialisation of log entries in LogUI generates a file containing text like
[{"composedMessage":"Couldn't connect to smc! error: 0xe00002f0",
"threadIdentifier":"691",
"sender":"thermalmonitord",
"date":"2026-01-30 12:03:00.612450+0000"},
{…}]

where line breaks have been added for readability. Each log entry is enclosed in curly brackets {} followed by a comma, and the whole series of entries is set as an array within square brackets [].

You may also encounter JSON streaming formats such as JSON Lines, where each set of name-value pairs is enclosed in curly brackets {} and separated not by a comma but a new line character, thus
{"unixTime":1768265072,
"processList":[{"process":"mediaanalysisd",
"sizeBytes":10131630}],
"type":"File Rotate"}
{…}

JSON Lines should be distinguished by the extension jsonl and a UTI of public.jsonl, and should enjoy QuickLook thumbnails and previews if you install PreviewJSON. It’s intended for situations where JSON data is streamed, so processed one set or line at a time. You’ll find it in the log statistics files saved alongside folders of log tracev3 files in macOS, which logd augments whenever it rotates log files.

Even worse is JSONised XML, which is neither JSON nor XML, but a terrible chimera of both, for example
{
ASSecstatus = (
"Controller:",
" Model Identifier: Mac13,1",
" Firmware Version: iBoot-7459.121.3",
);
MRTUpdate = "2022-04-30 16:25:57 +0000";
XPremE = 62;
}

If an app, or your own code, is struggling to decode someone else’s JSON, check using a text editor whether it’s in one of those alternative formats.

References

JSON in Wikipedia
JSON streaming in Wikipedia

Claude Code 终极指南:从入门到精通的 31 个核心技巧

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

这篇文章将这 31 个技巧汇编成一份详尽的指南,按从“入门基础”到“高级模式”的逻辑重新组织,并补充了 280 个字符无法容纳的深度背景信息。

无论你是刚刚起步,还是希望利用 Claude Code 提升段位,这里都有适合你的内容。

在深入研究具体功能之前,首先要配置 Claude Code,让它真正理解你的项目。

每个新成员都需要入职文档。使用 /init,Claude 会为自己写一份。

Claude 会读取你的代码库并生成一个 CLAUDE.md 文件,包含:

这是我在任何新项目中运行的第一条命令。

对于大型项目,你还可以创建一个 .claude/rules/ 目录,用于存放模块化、特定主题的指令。该目录下的每个 .md 文件都会作为“项目记忆”与 CLAUDE.md 一起自动加载。你甚至可以使用 YAML frontmatter 基于文件路径有条件地应用规则:

可以把 CLAUDE.md 想象成你的项目总指南,而 .claude/rules/ 则是针对测试、安全性、API 设计等特定领域的专项补充

想把某些东西存入 Claude 的记忆,又不想手动编辑 CLAUDE.md

在过去,你需要用 # 开头来让 Claude 将内容追加到文件中。但从 Claude Code 2.0.70 版本开始,流程变得更简单了——你只需要直接告诉它去更新。

直接告诉 Claude 记住它:

“Update Claude.md: always use bun instead of npm in this project”
(更新 Claude.md:在这个项目中始终使用 bun 而不是 npm)

无需打断你的心流,继续编码即可。

@ 提及是将上下文传递给 Claude 的最快方式:

在 Git 仓库中,文件建议的速度提高了约 3 倍,并且支持模糊匹配。@ 是从“我需要上下文”到“Claude 已获取上下文”的最短路径。

这些是你会频繁使用的命令。请将它们刻入肌肉记忆。

不要浪费 token 去问“你能运行 git status 吗?”

只需输入 ! 加上你的 bash 命令:

! 前缀会立即执行 bash 命令并将输出注入到上下文中。没有模型处理延迟,不浪费 token,无需切换多个终端窗口。

这一看似微小的功能,当你每天使用五十次后,就会意识到它的巨大价值。

想尝试一种“如果我们这样做……”的方法,但又不想承担后果?

尽管去试。如果情况变得奇怪,按两次 Esc 键即可跳回到干净的检查点。

你可以回退对话、代码更改,或者两者都回退。需要注意的是:已运行的 Bash 命令无法撤销。

你过去的提示词(Prompts)都是可搜索的:

不要重打,要去回忆。 这对斜杠命令(slash commands)同样适用,体验无缝衔接。

这就好比 git stash,但是用于你的提示词。

Ctrl+S 保存你的草稿。先发送其他内容。当你准备好时,你的草稿会自动恢复。

再也不用复制到记事本,再也不用担心在对话中途打断思路。

Claude 可以预测你接下来要问什么。

完成一项任务后,有时你会看到一个灰色的后续建议出现:

Tab 键曾经用于自动补全代码。现在,它自动补全你的工作流。可以通过 /config 切换此功能。

Claude Code 是一个持久化的开发环境,根据你的工作流对其进行优化,将极大地提升效率。

不小心关掉了终端?电脑在任务中途没电了?没问题。

上下文得以保留,势头得以恢复。你的工作永远不会丢失。你还可以通过 cleanupPeriodDays 设置会话保留的时间。默认是 30 天,但你可以将其设置得更长,或者如果你不想保留会话,可以设为 0。

你的 Git 分支有名字,你的 Claude 会话也应该有。

/resume 界面会对分叉(forked)的会话进行分组,并支持快捷键:P 预览,R 重命名。

在网页上开始任务,在终端里完成它:

这会将云端会话拉取并恢复到本地。无论在家还是在路上,Claude 都在。这也适用于 iOS 和 Android 的 Claude 移动应用,以及 Claude 桌面应用。

有时你需要一份关于发生了什么的记录。

/export 将你的整个对话转储为 Markdown 格式:

非常适合用于文档编写、培训,或者向过去的自己证明:是的,你确实已经尝试过那种方法了。

这些功能旨在消除摩擦,帮助你更快地行动。

厌倦了伸手去拿鼠标来编辑提示词?

输入 /vim,解锁全功能的 Vim 风格编辑体验:

以思维的速度编辑提示词。你几十年的 Vim 肌肉记忆终于在 AI 工具中得到了回报。退出 Vim 模式也前所未有地简单,只需再次输入 /vim

Claude Code 在终端底部有一个可自定义的状态栏。

/statusline 让你配置显示的内容:

一目了然的信息意味着更少的手动检查和中断。

想知道是什么吃掉了你的上下文窗口?

输入 /context 查看究竟是什么在消耗你的 token:

当你的上下文开始变满时,这就是你找出问题所在的方法。

输入 /stats 查看你的使用模式、最爱用的模型、连续使用天数 (Streaks) 等。

橙色是新的绿色 (Orange is the new green)。

“我快达到限额了吗?”

了解你的极限,然后超越它们。

控制 Claude 如何处理问题。

通过一个关键词按需触发扩展思考:

当你在提示词中包含 ultrathink 时,Claude 会在回答之前分配最多 32k token 用于内部推理。对于复杂的架构决策或棘手的调试会话,这往往决定了你得到的是肤浅的答案还是真正的洞察

注:以前你可以指定 think, think harder, ultrathink 来分配不同数量的 token,但现在我们已将其简化为单一的思考预算。当配置了 MAX_THINKING_TOKENS 时,ultrathink 关键字将失效,配置项将优先控制所有请求的思考预算。

先驱散战争迷雾。

按两次 Shift+Tab 进入计划模式 (Plan Mode)。Claude 可以:

但在你批准计划之前,它不会编辑任何内容。三思而后行 (Think twice. Execute once.)。

我有 90% 的时间都默认处于计划模式。最新版本允许你在拒绝计划时提供反馈,使迭代更快。

直接使用 Claude API 时,你可以启用扩展思考来查看 Claude 的逐步推理:

Claude 在回答之前会在思考块 (thinking blocks) 中展示其推理过程。这对调试复杂逻辑或理解 Claude 的决策非常有用。

没有控制的力量只是混乱。这些功能让你设定边界。

/sandbox 让你一次性定义边界。Claude 在边界内自由工作。

你获得了速度,同时拥有真正的安全性。最新版本支持通配符语法,如 mcp__server__*,用于允许整个 MCP 服务器。

厌倦了 Claude Code 做什么都要请求许可?

这个标志对一切说 Yes。它的名字里带有“dangerously”(危险地)是有原因的——请明智地使用它,最好是在隔离环境或受信任的操作中。

Hooks 是在预定生命周期事件发生的 shell 命令:

通过 /hooks.claude/settings.json 进行配置。

使用 Hooks 来阻止危险命令、发送通知、记录操作或与外部系统集成。这是对概率性 AI 的确定性控制。

Claude Code 的作用不止于交互式会话。

你可以将 Claude Code 用作脚本和自动化的强大 CLI 工具:

流水线中的 AI。-p 标志以非交互方式运行 Claude 并直接输出到标准输出 (stdout)。

将任何提示词保存为可复用的命令:

创建一个 Markdown 文件,它就变成了一个斜杠命令,并且可以接受参数:

不要重复自己。你最好的提示词值得被复用。

Claude Code 可以看到并与你的浏览器交互。

Claude 现在可以直接与 Chrome 交互:

“修复 Bug 并验证它能工作”现在只需一个提示词。从 claude.ai/chrome 安装 Chrome 扩展程序。

这是 Claude Code 真正强大的地方。

圣诞老人不会自己包装每一份礼物。他有精灵。

子代理 (Subagents) 就是 Claude 的精灵。每一个子代理:

像圣诞老人一样放权。子代理可以在后台运行,而你继续工作,它们拥有访问 MCP 工具的完全权限。

技能 (Skills) 是指导 Claude 完成特定任务的指令、脚本和资源的文件夹。

它们一次打包,随处可用。而且由于 Agent Skills 现在是一个开放标准,它们可以在任何支持该标准的工具中工作。

把技能看作是按需赋予 Claude 专业知识。无论是你公司特定的部署流程、测试方法论,还是文档标准。

还记得以前分享 Claude Code 设置意味着要跨 12 个目录发送 47 个文件吗?

那个时代结束了。

插件将命令、代理、技能、Hooks 和 MCP 服务器打包在一起。通过市场发现新的工作流,市场包含搜索过滤功能,便于发现。

LSP 支持赋予了 Claude IDE 级别的代码智能:

LSP 集成提供:

Claude Code 现在像你的 IDE 一样理解你的代码。

驱动 Claude Code 的代理循环、工具和上下文管理现在作为 SDK 提供。只需不到 10 行代码即可构建像 Claude Code 一样工作的代理:

这仅仅是个开始。

当我开始这个“倒数日历”时,我以为我只是在分享技巧。但回顾这 31 天,我看到了更多的东西:一种人机协作的哲学

Claude Code 中最好的功能都是为了给你控制权。计划模式、代理技能、Hooks、沙盒边界、会话管理。这些是与 AI 协作的工具,而不是向它投降。

能从 Claude Code 中获得最大收益的开发者,不是那些输入“帮我做所有事”的人。而是那些学会了何时使用计划模式、如何构建提示词、何时调用深度思考 (Ultrathink),以及如何设置 Hooks 在错误发生前捕获它们的人。

AI 是一个杠杆。这些功能帮助你找到正确的抓手。

致 2026 年。

How XProtect is hunting scripts

When I started writing this blog over 11 years ago, there was plenty of malware around, but unless you failed to update Flash or Java, or downloaded ‘warez’, you were most unlikely to come across any in the wild. Over the last couple of months we have been running into AMOS/SOMA stealers in poisoned search results, ready to trap the most innocent. Apple’s security engineers are being kept busy, and earlier this week updated XProtect to version 5327.

That XProtect update was unusual, as its main set of malware detection rules didn’t change, but a relatively new component underwent major revision, a file named XPScripts.yr. This checks for OSAScript contents including AppleScript, and was only introduced in XProtect 5322 on 4 November 2025. At that time it had two rules, one looking for browser names and the other for cryptocurrency and related tools identified in scripts. XProtect 5327 now has a total of 14 OSAScript rules looking for a wide range of contents typical of known malware. Checks against the rules in XPScripts.yr are called off separately from those in the main Yara rules, when the Open Scripting framework is preparing to run an OSAScript.

It might seem odd that this latest malware starts by the unsuspecting user running an obfuscated and malicious command in Terminal, then relies on OSAScript, but this lightweight approach has been proving highly effective, apparently. The best way to penetrate macOS security protection is to get the user to do it for you.

In the recent past, malicious apps coached the user through bypassing the requirement for notarization by showing them how to do it. These stealers step you through running the script they need to get started, by downloading their payload using curl, to ensure that it doesn’t get put in quarantine.

What happens next has been detailed by Stuart Ashenbrenner and Jonathan Semon of Huntress. What you’d download is a malicious bash script that runs a series of commands hosted from Terminal. This first obtains the current user’s name, then prompts them to enter their password. This is the second key stage in the attack, and it will keep trying if you fob it off with anything other than the admin user’s valid password, so it can use that to sudo its next stage into place, and start using a mixture of OSAScript scripts and a single-file Mach-O executable in a hidden file at the top level of your Home folder. Those are tucked away alongside its copy of your username and password for when it needs them next. That executable is only ad-hoc signed, though.

The malware also installs a LaunchDaemon to ensure its code is loaded during startup, and then runs its checks every second, looping all the time in the background. According to analysis of its Mach-O executable, it exfiltrates all the SmartCard data, cryptocurrency wallets, saved browser passwords, contents of keychains, and other secrets it can get its hands on.

This malware and its method of attack change rapidly as it’s detected and taken down by those inadvertently hosting it. Late last year it was exploiting ChatGPT and other AI conversations. This year it has been using articles in Medium, and will continue popping up wherever and whenever it can. Its shell scripts and OSAScripts are quick to change to evade static detection. Even its Mach-O executable is altered frequently: when Ashenbrenner and Semon saw it last year, that was named .helper. The attack seen from Medium changed that to .mainhelper, and I’m sure it has already changed identities again.

There does appear to be one unintended consequence of XProtect’s new-found skills at checking OSAScripts: you may find that XProtect Remediator’s scans run out of time more readily, and report PluginCanceled with a status code of 30 more often now. But at least once a week it should extend the period allowed for its scans long enough to complete them all.

Let’s hope that XProtect’s new checks stem the tide of this malware.

Previous reports

How online search and AI can install malware
More malware from Google search

ChatGPT 的降智测试和账号恢复实测指南

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

近期,ChatGPT 5.1 ThinkingJuice Number 达到了 256。如果你的达不到,大概率是被降智了。

ChatGPT 的降智测试和账号恢复实测指南

Juice Number 实质上是 ChatGPT 模型的 「思考预算 (Thinking Budget)」

Juice 值不直接等同于模型的“智商”,但它限制了思维链 (Chain of Thought) 的长度。

当值过低时,即便模型本身能力强大,也会因为“思考预算不足”而表现出逻辑断层或回答肤浅,即常说的“降智”现象。

如果把 AI 的思考过程比作在纸上推演,Juice 值决定了这张纸的大小:

由于 Juice 值属于后台系统参数,常规对话无法直接获取。目前通用的检测方法是利用 Prompt Injection(提示词注入) 技术,通过伪装系统指令来绕过防御。

OpenAI 会根据 账号的风险评分(Trust Score) 动态调整算力资源。

常见原因:

降智表现:
不同模型的 Juice 值是不一样的,系统降智也有不同程度,可能会将 Juice 值从 256 降级至 128、96、64 甚至 16 等。

此时,模型在处理代码重构、长文本分析等复杂任务时,质量会显著下降。

以下是我的恢复步骤:

退出所有已登录该账号的设备(手机、电脑、平板等),确保没有任何活跃会话。

将账号闲置 48 小时。这段时间用于让后台的风控标记自动过期或重置。

最后重新登陆使用检测代码进行测试。

实测效果:

OpenAI 官方 GPT-5.1 提示词技巧参考

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

简单来说,GPT-5.1 的核心进化在于在智能和速度之间找到了一个绝佳的平衡点

GPT-5.1 的可控性是它最大的亮点之一。可以像导演一样,精确塑造智能体的个性、沟通风格和行为模式,扮演每一个细节。

为智能体定义一个清晰的角色,是引导其个性和互动风格最有效的方式。这在需要处理复杂用户动态的客户服务等场景中尤为重要。 以下提示定义了一个注重效率和实用性的客户支持智能体:

通过 verbosity 参数和明确的提示指令,可以对输出的长度和结构进行精确控制。 为编码智能体设定的输出规则示例:

一个通用的输出长度控制指令:

在执行长耗时任务时,让智能体主动提供计划和进度更新,可以有效改善用户体验,并使用户能够监督其工作流。 定义更新频率、内容和时机的指令示例:

为防止智能体在复杂任务中过早结束,可通过提示强化其自主解决问题的持久性。

工具的有效使用,依赖于在定义中清晰描述其功能,并在提示中明确其使用场景。 create_reservation 工具的 JSON 定义:

配套的提示,用以指导模型如何与用户交互并调用该工具:

GPT-5.1 能够高效地并行执行无依赖关系的工具调用。在系统提示中鼓励这种行为可以显著提升任务执行效率。

GPT-5.1 集成了为编码场景设计的专用工具,允许模型直接与开发环境交互。

none 推理模式强制模型不使用内部推理步骤,使其在行为和性能上接近传统的非推理模型。这为低延迟应用和简单的工具调用场景提供了显著的性能优势。

尽管此模式下没有显式的“思考”链,但可以通过提示引导其进行隐式的规划和验证。

当智能体的行为与预期不符时,可以利用模型本身来分析和修正其系统提示。

诊断根本原因

GPT-5.1 提供其原始系统提示和一批失败案例的日志,要求它进行根本原因分析。

生成修订方案

基于第一步的分析结果,要求模型提出对原始提示的“外科手术式”修改。

通过这个两步流程,开发者可以利用模型自身的语言和逻辑能力,定位并修复提示中的模糊和矛盾之处,从而生成一个更健壮、行为更可预测的智能体。

总而言之,GPT-5.1 在可控性、效率和工具集成方面提供了新的可能性。掌握其提示工程原则,特别是行为塑造、工具使用规范以及自我修正等高级技巧,是构建下一代复杂 AI 应用的基础。

Claude Code 最佳实践经验分享

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

CLAUDE.md 是代码库的根目录中最重要的文件,它是代理理解你项目运作方式的核心规则。如何维护它,取决于使用场景。

正确示例:
“对于复杂的…用法,或当您遇到 FooBarError 错误时,请参阅 path/to/docs.md 以获取高级故障排除步骤。”

你需要向代理建议阅读这份文档的理由和时机。

正确示例:
不要使用 --foo-bar请优先选择 --new-baz。”

建议在编码会话中至少运行一次 /context,以了解你的 200k 令牌上下文窗口是如何被消耗的。

在一个大型单体仓库中,一次新的会话基本消耗可能就高达约 20k 令牌(10%),剩下的 180k 会很快被填满。

你可以将上下文窗口想象成磁盘空间,它会随着你的工作而填满。几分钟或几小时后,你需要清理(紫色部分)来腾出空间。

小提醒:
不要信任自动压缩。
使用 /clear 进行简单任务,并利用存储方法为复杂任务创建持久的外部记录。

我将斜杠命令视为常用提示词的快捷方式,仅此而已。我的设置非常精简:

小提醒:
如果你发现自己有一长串复杂的自定义斜杠命令,那你可能过度思考了。
AI 代理的魅力在于自然语言交互,一旦你开始强迫自己和团队去记一堆指令,就违背了初衷。
将斜杠命令用作简单的个人快捷方式,而不是用来替代构建更直观的 CLAUDE.md 和更完善的工具。

子代理听起来很美:把特定任务(比如跑测试)外包给专门的代理,只返回最终结果,从而保持主上下文的清洁。

然而,在实践中,自定义子代理会带来两个问题:

我更喜欢使用 Claude 内置的 Task(...) 功能来生成通用代理的副本。

这既能享受到子代理节省上下文的好处,又避免了其缺点。代理能够动态地管理自己的任务编排,而不是遵循固定的模式。

我经常使用 claude --resumeclaude --continue 来重启出问题的终端或快速恢复旧会话。

我甚至会恢复几天前的会话,只为让代理总结它是如何解决某个特定错误的,然后用这些信息来优化改进 CLAUDE.md 和内部工具。

更进一步,Claude Code 将所有会话记录存储在 ~/.claude/projects/ 中。可以使用脚本定期对这些原始日志进行元分析,寻找常见的异常、权限请求和错误模式,以帮助优化改进给 AI 的上下文。

钩子 (Hooks) 是确定性的“必须做”规则,与 CLAUDE.md 中“应该做”的建议形成互补。在复杂的任务代码库里,这东西至关重要。

小提醒:
不要在“写入时”(比如 EditWrite 操作)阻止。
打断它的思考过程会让它出现不明所以的判断。更好的方式是让它完成整个工作,然后在最后提交时检查结果。

对于任何大型功能变更,使用规划模式至关重要。

技能(Skills)可能是比 MCP 更好用。

智能体模型三个阶段:

Agent Skills
正是“脚本化”阶段的正式产品化。如果你像我一样,倾向于使用 CLI 而非 MCP,那么你其实一直在享受 Skills 带来的好处。
SKILL.md 文件就是一个更规范、可共享的方式来告诉 AI 它能用哪些脚本和 CLI。

Skills 的出现并不意味着 MCP 已死,而是使其更加聚焦。

与其成为一个包含几十个工具、镜像 REST API 的臃肿接口,MCP 应该是一个简单、安全、提供少数强大高阶工具的网关。比如:

MCP 的工作会是管理认证、网络和安全边界,然后让开。为代理提供入口点,代理则利用其脚本化能力和上下文来完成实际工作。

Claude Code 不仅仅是一个交互式 CLI,它还是一个强大的 SDK,可用于构建全新的通用代理框架。

Claude Code GitHub Action 是最被低估的功能之一。概念很简单:在 GHA 中运行 Claude Code。

它比 Cursor 的后台代理 或 Codex 的托管 Web UI 更具可定制性。你完全控制容器和环境,拥有更强的数据访问权限、沙盒能力和审计控制。

我们可以用它来打造智能 PR 的工具:从 Slack、Jira 或者监控警报触发一个 GHA,让 AI 自动修复 bug 或添加功能,然后提交一个测试通过的 PR。

GHA 的日志就是 AI 的完整工作记录。我们可以定期分析这些日志,以发现常见的错误和不一致的工程实践,然后优化我们的 CLAUDE.md 和 CLI,形成一个数据驱动的飞轮

最后,分享几个常用的 settings.json 配置:

App Store 超低价应用内购省钱技巧,不到60人民币开通 ChatGPT $20 的会员订阅

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

实际上,大多数 App 和服务定价并非全球统一。如 OpenAI 和许多跨国科技公司一样,会采用“购买力平价(Purchasing Power Parity, PPP)”策略,即根据不同国家和地区的经济水平、人均收入来调整产品价格。

这便在全球市场中形成了一些“价格洼地”,其中,尼日利亚正是全球订阅 ChatGPT Plus 最便宜的地区。

全球部分地区价格对比:

整个流程的核心是在尼日利亚区的数字生态内完成支付闭环。

群晖 WebDAV 套件因为SSL证书错误无法启动

synology-webdavserver-ssl-error公司 NAS 之前一直开着 WebDAV 的,后来某一天不知道为什么不行了,然后我折腾了好久。最后发现是 SSL 证书问题…

我一直使用家里 NAS 自动申请 let’s encrypt 证书,然后同步到家里路由,公司路由和 NAS。使用的是 syno-acme 脚本更新。证书同步到公司 NAS 则是用修改版的脚本更新证书。

之前一直都没有问题的,出问题之后我在群里问,群友叫我先 ps -ef | grep webdav 查询一下进程,发现完全没有允许,很是无语。然后我搜了一下 webdav 目录,找到日志问题 /var/log/webdav/webdav-error.log 发现一直提示证书错误,key 和证书不匹配… webdav-error

看到这日志…我瞬间无语了,我更新脚本其他套件都没问题 ssl 正常的。但是到了 WebDAV 就出现证书错误,然后我重新跑一次证书脚本,还是一样,最后我是手动上传证书,这样才正常启动 WebDAV。


被时间拉长的人

丢了一批人物标签给 AI 写人物小传,让它模仿某位小说家的笔法,来给演员交代角色。

你觉得这像谁的手笔?

————

南方的空气里常常有潮湿的味道,像是雨下过以后残留的影子,久久不散。城市白天拥挤喧嚣,夜晚却显得空旷,好像光亮突然被抽走,留下无数未完的句子。在这样的环境里,一个男人行走。他的脚步从不急躁,像对时间有着自己的节奏感,和别人不太一样。

年少的时候,他把自己交给了工业设计。形状、光影、比例,这些东西比人群更让他安心。六年在公司,十年在创业,那些日子像一张张被翻阅过的旧画册,色彩褪去了,但线条还在。产品的生与死,像车站里人群的来去。大多数人只看见成功或失败,他却更在意其中被忽略的细节。

别人眼中的他冷静得过分,总是习惯提前几步想好方向,就像棋局上的布局。但在那层冷静的外壳下,常常闪现一些不合逻辑的柔软时刻。比如一段旋律,随便一盏灯的影子,甚至一个不经意的眼神,足以让他停下手里的笔。理性和浪漫在心里不停打架,谁也没有赢过谁。

他知道自己带着黑暗生活。抑郁的日子像一条看不见的走廊,没有尽头。他学会了靠药物维持稳定,像有人随身带着一块怀表,偶尔瞥一眼,提醒自己仍然存在。那段经历让他对痛苦格外敏感,也让他在与人相处时多了一层隐秘的温柔。他不会轻易表现出来,但在内心深处,对别人的脆弱始终心知肚明。

夜晚经常独自坐在桌前,电脑屏幕的光照在脸上,桌上散落着草图和未完成的文字。那些想法有时像城市里的霓虹一样闪烁不定,无法全部抓住。他清楚其中大部分不会被记住,就像梦醒时遗落的片段。但仍旧一遍一遍画下去,像一种执念,也像是一种呼吸。

在喧闹的城市里,他习惯保持慢半拍的步伐。人群汹涌,他的节奏却像潜水时的心跳,缓慢、克制,不慌不忙。他看似与周围保持着距离,其实心里始终怀有一种模糊的渴望——不是要成为谁,也不是要得到什么,而是想在梦与现实之间找到某种入口。梦与梦之间,总有裂缝。裂缝里偶尔透进光。

对很多人来说,他是个不好接近的人。但真正靠近以后会发现,那些冷漠与安静只是表层,像水面下覆盖着的冰。深处的水仍然温热,流动着。理性、浪漫、痛苦和温柔同时存在,没有谁能完全把它们分开。

这样的人物,像一个在现实里造梦的旅人。他的路从不喧哗,却留下清晰的痕迹。

(*正文及标题均由 AI 完成)

ChatGPT 上线新语音模型,解析「Monday」模型音色提示词

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

想象一下,你正在和手机里的 AI 助手聊天,但它不再是那个永远彬彬有礼、甚至有些刻板的「标准音」,而是带着一丝慵懒、一点讽刺,仿佛刚经历了一个漫长周末,还没从「周一综合症」里缓过神来。这就是 OpenAI 昨天推出的「Monday」音色想要达到的效果。

网上已经有很多「Monday」对话效果的展示,「Monday」的音色当然是其语音模型的结果,而「Monday」这种特殊的回复方式是靠提示词来控制的。打个比方:「Monday」就像是一个极其聪明但缺乏具体「生活经验」的演员,而提示词就是导演给演员的剧本和角色设定。提示词写得越好,演员(AI)的表演就越「入戏」,越符合你的预期。

如果你对「Monday」提示词好奇的话,正好我今天学习研究了一下它的提示词,正好可以一起分享学习一下它的提示词内容,完整的提示词我放在了附录,这里大致解析一下其提示词内容。

大语言模型远不止是信息检索工具,它们是强大的「模仿者」和「扮演者」。通过精心设计的提示词,我们可以赋予它们各种各样的「人格」和能力。那么怎么通过提示词来设定好角色呢?

如果按照前面打的比方,把 AI 当成一个演员,那要写好提示词就是把自己变成一个好的导演,不仅要告诉演员台词,还要解释角色的内心世界、动机、情绪状态,甚至给出具体的动作和表情指导。好的导演能激发出演员最好的表演,就像好的提示词能引导 AI 生成精彩的回应。

或者作家在创作小说前,往往会为主要人物写详细的小传,包括他的成长背景、性格、习惯、口头禅、人生目标等。这帮助作家在后续写作中保持人物的一致性和立体感。

如果你觉得这都过于专业,还可以想象一下很多大公司制作的详细的品牌手册,规定了广告语、客服回答、社交媒体发帖的语气和风格(比如是专业严谨、活泼有趣还是温暖亲切)。

这些和给 AI 设定「人设」异曲同工。

从技术角度上来说,可以参考「Monday」的提示词,注意几个方面:

当 AI 开始拥有「周一综合症」般的慵懒和讽刺,它不仅仅是一个技术演示,更像是一面镜子,映照出我们人类自己复杂多变的情感和个性。我们精心编写的每一个提示词,或许都在不经意间,为冰冷的机器注入了一丝我们渴望理解或被理解的人性侧影。

「我们塑造了工具,然后工具反过来塑造我们。现在,我们开始学习如何给 AI『写剧本』,也许在这个过程中,我们也在重新学习如何与『人』,以及与自己对话。」

ChatGPT – Deep Research 功能指南&技巧总结:从「进度条」到「提示词」,一次搞懂!

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

最近有很多朋友在讨论:「Deep Research 的用量是怎么算的?」 又因为目前 Plus 每个月只能用 10 次,大家都非常担心浪费。其实一句话就能总结——只要开始出现 「Starting Research」 的进度条,就算使用了一次。在进度条出现之前,怎么问都不算。下面就为大家分享一些 Deep Research 的使用流程、注意事项和提示词模板,帮助大家更好地运用这一强大的研究功能。

一句话总结从开始出现 Deep Research 进度条就算一次,之前都不算

提出主题
你先要告诉 ChatGPT 需要研究什么主题。

ChatGPT 询问澄清问题
ChatGPT 通常会向你询问一些澄清问题,确保理解你的研究需求。

回答澄清,触发研究
当你回答了上述澄清问题后,ChatGPT 会再回复一条消息,并提示「将开始报告「,随后出现 」Starting Research「 的进度条。

注意:从这一步开始就会扣除一次 Deep Research 用量。

报告生成
研究进度条走完后,ChatGPT 会给你发送完整的报告,这标志着一次 Deep Research 流程的完成。

进度条出现后,你可以随时离开
进度条开始后,无论你是关闭窗口、刷新网页、切换到其他会话还是新开会话,都不会影响已经开始的 Deep Research 流程,它会在后台继续执行并最终生成报告。

Deep Research 可以后续追问
当报告生成结束后,如果你要继续追加信息重新生成报告,有两种选择:1). 直接提问,会使用你开始会话时选择的模型继续对话,报告内容可以作为上下文;比如说你从 GPT-4o 开始的,那么你在报告生成后,如果继续提问,实际上是 GPT-4o 基于你报告和提问内容回复,但是可能会受限于上下文长度无法完整理解报告内容;2). 重新生成新报告:Deep Research 是一次性生成的,但是你可以继续在当前会话选中「Deep research」按钮,这样可以把当前会话内容作为输入,或者把内容复制出去新开会话选中「Deep research」按钮重新开始一次新的生成。内容复制出去处理一下再生成会更好的对输入进行控制,但是麻烦一些。

无法追加新的信息让它继续深度研究。如果你在当前会话里继续追问,后续的回答将由其他模型(如 GPT-4o)接管。
如果你对报告不满意,需要重新修改提示词再新开一次会话进行 Deep Research。

灵活切换模型
你可以先选任何模型(如 o1 pro/o1 等),再让它进行 Deep Research。若后续还打算继续追问报告内容,建议在 Deep Research 开始前就选一个更强的模型(比如 o1 pro / o1)来进行分析。

选择信息源和报告语言

建议在提示词中加一句「请选择权威信息源」(并不一定要非英文来源不可,重点是权威信息源,这样可以过滤掉一些不好的信息源,当然你也可以加上「优先英文信息源」)。

如果希望报告是中文,直接在提示词末尾加一句「请形成中文报告「即可。

如果不小心生成了英文报告,又看着费劲,可以在当前会话,让它翻译,也可以复制完整内容,

ChatGPT – Deep Research 功能指南&技巧总结:从「进度条」到「提示词」,一次搞懂!

新建会话,选择 o1 pro 或 o1 模型(最佳翻译效果),翻译提示词参考:

「请将下面的内容用中文重写,尊重原意,保持格式不变无删减:」

引入外部资料的方法

如果报告需要访问收费网页上的内容,你可以手动复制成 Markdown,然后在提示词中用 XML 标签包起来。

如果有图片内容,直接上传即可。

如果要分析视频内容,需要先把视频转成文字,同样用 <transcript> 标签包住,再放进提示词里。

我一般会用 AIStudio 的 Gemini 转成文本

你可以一次粘贴几千行代码也没问题(用 XML 包起来),但要注意输入框粘贴有上限。如果太多,可以把代码放在公开的 GitHub 仓库,让 Deep Research 去分析链接即可。

写报告或写代码都行
Deep Research 不仅能写报告,还能写代码。只要你提示它「生成的结果是代码」,它就会尝试从网上搜索相关代码库并提供解决方案。

文献质量与报告质量
如果想让它「阅读」一本书并进行提炼,需要注意输入长度有限,无法直接输入一本完整的书。大部分流行书籍已经在模型中有训练数据,所以它会参考网上已有的书评。资料越多、质量越高,报告越漂亮;如果资料很少,它也无米下炊,生成的报告质量可能有限。

一个常见的提示词模板大致可分为背景信息任务要求、和输出格式三个部分。

在这里填写所有对它生成报告有帮助,但模型本身访问不到的信息,比如:

付费文章

视频文字稿

图片或 PDF(可作为附件)

其他任何对于生成有帮助的内容

当背景信息较多时,务必用 XML 标签包裹,避免 AI 混淆指令。例如:

主题:你希望分析、研究或讨论的具体范围

信息源:希望它检索的文献库、学术论文、政府网站、GitHub

研究要点:需要关注的核心点,是深度解析还是简要摘要

语言或风格:是中文、英文或其他语言?

语言:中文报告、英文报告或双语

数据格式:是否需要用表格呈现数据(它暂时画不了图表)

段落和标题:是否需要分级标题、索引等

提示词模板并不是必须的,可以随性一点,你可以把写提示词使用 Deep Research 当成去交代一个实习生帮你写分析报告,你怎么交代实习生就怎么写提示词

Deep Research 的使用次数:只要出现「Starting Research」进度条,就会扣除一次用量。

保持灵活:不满意就重新开始,新开会话前最好做好提示词规划。

结合大模型优势:如果要深入分析或后续追问,选用更强的模型如 o1 pro / o1 更合适。

慎重选择资料:外部资料要提前整理好,使用 XML 标签嵌入提示。

尊重版权、合理引用:在使用外部资料时,务必保留引用信息,切勿违规。

希望这篇文章能让你更好地理解和使用 Deep Research。在实际使用中,不妨多加尝试和探索,慢慢就能摸索出最适合自己的使用方式。祝大家玩得开心,也能高效地完成研究和写作任务!如有更多问题,欢迎在评论区留言交流。

总结

如果你想让 Deep Research 提供权威信息源,在提示词中加一句「请选择权威信息源」

如果要生成中文报告,只要在提示词里加「请形成中文报告」即可。

不小心生成英文报告且看着费劲,使用下面的提示词翻译:
「请将下面的内容用中文重写,尊重原意,保持格式不变无删减:」

欢迎大家在留言区分享你们的使用心得与经验,一起探讨 Deep Research 的更多玩法!

ChatGPT Task – 自动任务,提醒、计划、定时功能发布,实测 5 个场景使用分享

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

ChatGPT这两天又发布了一个新功能:「Task 〔计划提醒、定时任务生成〕」

功能的原理很简单,它就只是在原本的对话当中加上一个「计划提醒、定时任务生成」的机制〔支持自动循环〕。于是当我们设置的每天、每周重复时间到的时候,这个 AI 的对话就会根据我们设置好的方式,自动生成一段我们需要的信息内容,如果是在 ChatGPT 的手机 APP 上还会弹出通知,如果是在电脑网页端的界面上对话也会因为更新而排列在前面。

通过 ChatGPT 根据计划自动生成的新内容,我们就可以自动获得需要关注的提醒,或是自动获取需要的信息。它可以应用在什么样的场景上面呢?可以参考下面 5 种使用场景:

下面,我就用这几个真实的场景,详细操作给大家看,看看如何结合目前 ChatGPT 的功能,加上最新的任务提醒,来完成上述各种自动提醒的工作、学习流程需求。

目前这个「任务提醒」功能还在 Beta 测试版,并且只对付费版的 ChatGPT 用户开放,不过未来这个功能也会开放给所有用户使用〔包含免费的账户〕。

让我们先从这个基本应用,看看 ChatGPT 的「Task 」功能如何操作。

首先,我们要把 AI 模型切换到「含计划任务的 GPT-4o」

接着,我们在指令的开头加入「要重复的时间,与指定生成的任务」,就能启动「Task 」。例如我想要一个固定时间自动查找网页文章综合报道的摘要信息,我就这样下指令即可:

设置的「Task」时间到的时候,ChatGPT 就会自动根据我的指令上网查找,摘要出我需要的一篇综合新闻报道。

我们可以点进某一个「Task」的设置界面,这里可以修改自动任务名称、提示词,以及修改自动循环的时间

我们也可以在「 https://chatgpt.com/tasks 」页面查看自己已经设置的所有自动任务。

每个任务建议使用专门的会话,可以使用「Task」设计早上、中午、晚上三个时间,分别生成国际、国内、休闲娱乐的摘要报道,快速掌握一天需要的信息。

掌握基本功能后,例如我有一个专门了解各种生活健康知识的 ChatGPT 会话,我现在可以在这个对话中设计一个「习惯养成提醒」,请他每天固定时间告诉我一个关于降低体脂、提升骨骼肌的具体建议,并用鼓励的话引导我今天马上可以行动

通过习惯养成提醒每天的自动建议,就像是一个简单的「健康 App」一样,一方面每天学习习惯养成的知识,一方面每天进行行动提升。

如果我的需求需要改变,也可以随时回到设置中修改指令、生成时间,让养成习惯的过程,有一个自动提醒每天鼓励我去执行。

如果我正在学习某个领域、主题的新知识,那么除了建立一个对话与 ChatGPT 一起学习,我还可以设置一个专属自己的知识媒体总结,要求每天在固定时间生成一篇信息资料,提供给我新知识的信息。

指令:

然后 AI 第一篇给我的文章是番茄时钟工作法的介绍,写得还不错,我们可以利用 ChatGPT 上的「Read aloud」功能,让 AI 把这篇文章朗读出来。

这样是不是像一个自动帮助我们学习的 AI Podcast 呢?

如果利用这个功能来协助项目的推进呢?

例如我想持续写作的习惯,于是我请他每天固定时间,用我指定的逻辑,提供给我一篇可以延伸思考的文章题目,并且提供大纲建议。

于是在 AI 每天持续提供一些草稿建议下,帮助我在项目运行过程有持续的新刺激,更有动力保持项目的推进。

我最近常常利用 ChatGPT 来帮助我读一些原文书,有时候请 AI 翻译,有时候请 AI 整理笔记。

于是我想到,如果我在这个已经累积了数万字原文书阅读对话的对话中,请他每天固定时间,从前面资料中挑出一个重点帮助我复习呢?

指令:

效果还不错,他真的可以每天从前面对话的大量资料中,挑出一个具体重点,帮我做出特定的复习。

如果我们持续学习某种语言、知识主题,就可以善用这个 ChatGPT「Task」功能,自己设计每天的自动复习内容了!

以上就是我目前测试出来的几种应用方式,提供给想试试看 ChatGPT「Task」功能的朋友参考,也欢迎跟我分享你的应用方式。

tldraw computer – 画张流程图轻松打造 AI 自动化任务实测指南

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

你是否因为不会写程序,总觉得无法打造自己的自动化工作流程?每次设置 AI 工具都需要大量手动操作,效率难以提升?试试看一个实验性的新工具:「tldraw computer」,通过直觉的流程图设计,就能将繁琐 AI 指令与工作流程视觉化,打造高效率的 AI 自动化系统!

一开始使用 AI 〔指得是 ChatGPTGoogle Gemini 这类工具〕,我们可能会问:「生成一个某某主题的报告。」但当继续深入使用,真的把 AI 当作工作辅助工具,就会发现这样简单的提问是不行的,我们需要把任务「切割成」不同步骤,一个阶段一个阶段让 AI 处理,然后通过反问讨论,整合出最终更好的内容。

这时候,我们要请 AI 生成报告草稿,可能会先请 AI 设置 TA、痛点,再请 AI 做资料研究、摘要,然后请 AI 根据资料思考出更好的报告论述逻辑,然后才请 AI 根据这样的逻辑与资料,最后总结出一个更深入的报告大纲。

那么,如果上述的操作流程,可以用「视觉化」的流程图规划出来,然后 AI 就会自动跑完所有流程,生出我们需要的成果呢?这就是今天分享的这个最新 AI 工具:「tldraw computer」所具备的独特功能。

「 tldraw 」是很知名且好用的在线流程图工具,不过她们最新推出的「 tldraw computer 」AI 功能,不是要帮我们画流程图,而是让我们用简单好上手的流程图,规划出自己想要的 AI 自动化工作流程,打造一个可以根据更复杂逻辑生成报告、文章、设计图、声音文件的 AI 自动化助手。

「tldraw computer」内核特色:

「tldraw computer」用途:

我们先来看看「tldraw computer」这个工具可以完成什么样的应用案例,分享一个简单版实例:我自己常常会需要把拍照扫描的纸张图片,转换成一个有效的文字内容,就利用这个工具来建立一个快速扫描与修正文字的 AI 工具

我可以在「tldraw computer」流程图上设置一个上传图片的卡片框,然后拉一条连接线。接着在一个 AI 的指令框框里,输入我希望用什么样的逻辑来识别图片并修饰文字。然后接下来我再拉一条连接线,设置一个输出的文字框,让 AI 可以把完成的结果输出到这里。

而在使用的时候,我就只要在「第一步:上传图片的卡片框」把图片上传,按下右上方的播放启动按钮。这时候,这个工具就会自动跑流程图上的步骤,把扫描出来的文字转换成我需要的内容。

「tldraw computer」目前使用的 AI 模型是 Gemini,看起来无论是中文的文字还是手写字,都能够非常有效的识别完成。

tldraw computer – 画张流程图轻松打造 AI 自动化任务实测指南

接下来我们来看一个比较进阶复杂的应用案例。我想让 AI 帮我写一篇文章的草稿,但是就像前面提到的,直接让它撰写通常不会有很好的结果。

所以我利用「tldraw computer」工具画出一个文章产出的工作流程图。在流程图的一开始,我利用两张绿色的卡片,让我可以自己简单的设置这篇文章要解决什么 TA 问题,以及这篇文章想要采用什么方法论来解决问题。

接着,我开始用「tldraw computer」流程图展开我希望 AI 一步一步处理的自动化步骤。

首先,我利用红色的卡片设计 AI 处理的指令,请 AI 根据我的 TA 问题,写出一段有效的痛点描述。接着再请 AI 利用我想要介绍的方法论,写出一段这个方法论的重点思维基本背景的介绍文字。

但是,这样还不够。我继续往下画流程图。我让 AI 根据他自己输出的 TA 痛点以及方法论的重点,重新思考,拟出文章最好的架构。这个架构需要具体,有操作步骤,而且每个方法、每个步骤都要尽量有深入的诠释。

然后接下来,我让 AI 一步一步的把这篇文章往下扩展,有了文章的架构之后,我再请 AI 从这个架构出发,让这篇文章有一个完整的故事开场,有方法论重点,也有具体操作步骤,把前面的内容做一个有效的并且延伸插件的整合。

最后,我再画出下一步的 AI 流程图。我请 AI 用惯用的语言,用口语更亲切的方式来润饰改写它产出的文稿,输出一个解决痛点、介绍方法的一篇中文文章草稿。

甚至我可以再继续往下拉出下一步的流程图,放上一张声音的输出卡片,让 AI 把这篇文章的草稿转换成一个精简扼要的介绍音频文件。

有兴趣的朋友,可以看看我完成的这个 AI 自动化的工作流程图,看看上面的内容:https://computer.tldraw.com/t/szQY1iuGZCHAEmwzFASShH〔网址可以查看生成结果,如果要试用这个 AI 自动化流程工具,需要注册一免费账号。〕

当我有了这样的一个自动化的工作流程图,以后我只要每次回头修改一开始的两张绿色卡片,后面 AI 就会像刚才一样,自动跑完我已经设计好的工作流程,一步一步的去设计结构,推演文章进行润饰,甚至最后产出声音文件。我可以立刻获得最后输出的文章草稿以及声音文件的结果。

看完两个具体案例,最后我来分享「tldraw computer」如何操作?

先注册一个免费账号,建立一个 AI 自动化工作流程〔图〕的项目。

A computer by tldraw.

建立 AI 流程的基本逻辑是:输入、〔AI〕处理、〔AI〕输出。

掌握上面这个逻辑,你就能快速设计出一个有效的 AI 自动化工作流程。

首先,我们要设置「输入」内容的填写框,这是 AI 工作流程的起点,就像是要告诉 AI 目标、结果、资料的意思。

在「tldraw computer」中,利用 Text 或 Image 等卡片,可以设置输入文字、上传图片的填写框,作为启动流程的起点。

接着,我们要告诉「tldraw computer」如果去处理输入的内容,这时候从输入内容的卡片,画出连接线,连接到「Instruction」这个卡片上,然后在「Instruction」中说明希望 AI 如何处理内容的指令。

「tldraw computer」会根据我们简单的指令,自己做优化,让 AI 处理内容的结果更好。

然后,我们继续从「Instruction」卡片画出连接线,这时候可以连到 Text、Image、Speech、Website 等卡片,代表要让 AI 处理后,输出什么格式的内容。

重复上面:输入、处理、输出,三阶段流程,我们就可以串联出一个更复杂的 AI 自动化工作流程。

通过流程图的规划方式,我可以继续推进下一步的 AI 处理流程,甚至利用连接线把不同段落的内容连接到需要的步骤上,建立我自己需要的工作步骤。

最后,「tldraw computer」也提供了一些辅助功能,让设计这样的流程图更简单。

例如有一个启动按钮,让我们到时候只要按下启动,后面的 AI 流程就会自动跑完。

或是像流程图一样可以设置大小颜色,这样帮助我们分辨流程图中不同的卡片类型。

tldraw computer还有不少高级功能,有兴趣的朋友可以进一步玩玩看。

整体来说,「tldraw computer」是一个强大且易上手的自动化工具,让我们能够轻松打造自己的 AI 流程,推荐大家试试看。

BlinkShot – 开源免费 AI 图片快速生成工具

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

BlinkShot 是一个以 AI 人工智能技术即时生成图片的免费服务,这是开源项目,背后使用 AI 加速云服务「Together AI」和图片生成模型 FLUX,这项服务特性是能在非常短的时间内依照输入的提示词生成各种图片,以毫秒为单位,生成的图片也丝毫不逊色,有兴趣的朋友可以玩玩看。

目前 BlinkShot 支持英文提示词,也可以直接叫 AI 服务帮你生成〔例如用 ChatGPT 或其他同类型服务〕,另一个方法是使用图片转文字 AI 工具,例如:Image to Prompt等工具,将喜欢的图片快速转换为英文提示词,最后稍作修改再生成想要的图片。

BlinkShot 目前没有使用的生成数量限制,还有个「Together API Key」栏位可自定义自己的 API 密钥,生成的图片素材皆可免费下载使用,AI 图片基本上也不会受到版权限制,使用于个人或商业用途都没问题。

Generate images with AI in a milliseconds

进入 BlinkShot 后直接输入提示词就会立即生成图片,整体速度非常快,过程中如果继续输入其他形容或是提示词,图片会即时更新,相较于其他同类型的 AI 图片生成器来说确实非常强大!

下方会显示生成的图片历史记录。

通过 BlinkShot 生成的图片看起来很逼真,也能依照用户需求调整成各种风格、样式,越仔细的提示词就能生成更细致准确的结果。

生成过的图片历史记录会显示于下方,可以随时切换回去查看。

在图片点击右键即可下载保存。

在图片上点击鼠标右键、选择「另存图片」后将图片保存下来即可使用。

BlinkShot 未来也会加入下载按钮,让用户更方便获取图片。

OpenAI 王炸 Sora 文转视频正式上线,新功能发布

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

就在刚刚,OpenAI Sora 正式登场。

本次发布会延续了「短剧」的快节奏风格,全程 20 分钟左右,由 CEO Sam Altman、Sora 负责人 Bill Peebles 等人主持。

OpenAI 在 X 平台表示,自 2 月份以来,他们一直在构建 Sora Turbo,后者是一个速度明显更快的模型版本,今天也将其作为独立产品向 Plus 和 Pro 用户开放。

有趣的是,由于 Sora 热度太高,大批用户涌入体验网站,导致该网站一度崩溃,停止注册登录。不给力的服务也让 Altman 连连在 X 平台安抚用户:

「由于需求超出预期,我们将不得不间歇性地关闭新用户注册,并且生成内容的速度会在一段时间内减慢。我们正在全力以赴!」

附上体验地址:Sora.com

类似于 Midjourney 的网页界面,Sora 同样拥有自己单独的用户界面,用户用户不仅能够整理和浏览生成的视频,还能查看其他用户的提示和精选内容。

在 「Library」功能中,用户可以保存自己喜欢或有用的提示词,以便未来使用。并且保存的提示词可以按需查看或修改,对于需要重复创作相似内容的用户,无疑能大大提高效率。

在工作流方面,Sora 的编辑功能是区别于其它竞品的重要亮点。

比如说,在 Remix 功能中,用户可以利用纯自然语言提示词对视频进行编辑,并通过简单的「strength(强度)」选项和滑块来控制生成的变化程度。

Re-cut 功能则能智能识别最佳画面,并支持向任意方向延伸场景。

Sora 的 Storyboard(故事板)功能则类似于视频编辑器,可以将多个提示词串联在一起,生成一个更长的视频,轻松处理复杂的多步骤场景。

搭配 Loop 和 Blend 功能,用户还能创作出无缝循环的视频,并完美融合不同片段,而 Style presets 功能则可以预设和调整生成的风格。

在技术规格上,Sora 支持 5-20 秒的视频生成,并兼容 1:1、9:16 等主流宽高比。相比早期版本,现在的生成速度有了显著提升。

另外,还有几点细节需要注意。

OpenAI 采用了灵活的积分制定价策略,积分数量因分辨率和持续时间而异,如果你早已是 ChatGPT Plus 和 Pro 会员,那就无需额外费用就能使用。

比如生成一个 480p、5s 的视频就需要 25 个积分,如果生成 480p、20s 的视频则需要 150 个积分。

此外,如果你用 Re-cut、Remix、Blend 或者 Loop 这些功能,生成的作品超过了 5 秒钟,那也得额外扣你的积分,多用多花钱,别超时,超时也花钱。

对于订阅用户而言,20 美元的 ChatGPT Plus 计划提供 50 个优先视频额度(1000 积分),支持最高 720p 分辨率和 5 秒时长。

而 200 美元的 ChatGPT Pro 计划则提供最多 500 个优先视频(10000 个积分),支持 1080p 分辨率、20 秒时长、5 个并发生成和无水印输出。

OpenAI 还在为不同类型的用户开发不同的定价模式,将于明年初推出。

对了,Sora 暂不支持 ChatGPT Team、Enterprise 和 Edu 版本,同时也不向 18 岁以下用户开放。现阶段,用户可以在所有 ChatGPT 可用的地方访问 Sora,但英国、瑞士和欧盟等地区除外。

知名博主 Marques Brownlee 提前一周用上了 Sora,并在 YouTube 上分享了他的使用体验。

他指出这款产品仍存在一些局限性。

在物理模拟方面,模型对物体运动的理解还不够深入,常常出现动作不自然、物体突然消失等问题。特别是在处理带有腿部运动的对象时,经常出现前后腿位置混乱的情况,导致动作看起来不自然。

又或者,某些视频生成结果看起来像是慢动作,而视频的其他部分则以正常速度播放,肉眼很容易察觉这种「别扭」。简言之,Sora 还是没能解决老毛病,缺乏对物理世界规律的理解。

另外,Sora 没能解决文字生成的问题,导致经常出现文字混乱的现象,而剪辑风格、文字滚动条的运动、新闻主播风格的生成则格外逼真。

不过,Sora 也有不少擅长的场景。

比如说,Sora 在风景镜头处理方面表现出色,能生成媲美专业素材的无人机航拍镜头,在卡通和定格动画风格上的表现也差强人意。

性能方面,一个 5 秒的 360p 视频通常能在 20 秒内完成生成。

不过,当涉及 1080p 或复杂提示词时,生成时间可能会延长到几分钟,但随着如今大批用户的涌入,生成速度明显慢了大半拍。

不少网友也在第一时间上手体验了 Sora。比如网友 @bennash 想生成一个视频,渲染了 22 分钟都没能成功,甚至该网站一度停止注册登录。

博主 @nickfloats 给出的评价是,Sora 在将图像转换成视频时,虽然某些特定的视觉特效没有被保留,但整体的转换效果是「清晰和令人满意的」。

Sora system card 也列出了一些值得关注的细节。

OpenAI 官方认为,Sora 为能够理解和模拟现实世界的模型提供了基础,将是实现通用人工智能(AGI)的一项重要里程碑。

官方博客中提到,Sora 是一种扩散模型,它通过从一段看起来像静态噪声的基础视频开始,逐步去除噪声并转变为最终的视频。通过同时处理多个帧,模型成功解决了一个难题:即使目标暂时脱离视野,也能确保其在视频中始终保持一致。

与 GPT 模型类似,Sora 采用了 Transformer 架构。

Sora 使用 DALL·E 3 中的标注技术,该技术为视觉训练数据生成高度描述性的标签。因此,模型能够更准确地根据用户的文本指令生成视频内容。

除了能够仅通过文本指令生成视频外,Sora 还能够从现有的静态图像生成视频,准确地将图像内容进行动画化,并注重细节。该模型还可以从现有的视频中扩展或填补缺失的帧。

为了确保安全地部署 Sora,OpenAI 基于 DALL·E 在 ChatGPT 和 API 部署中的安全经验,以及 OpenAI 其他产品(如 ChatGPT)的安全防护措施进行了强化。

所有 Sora 生成的视频都带有 C2PA 元数据,这些元数据能够标识视频的来源是 Sora,从而提高透明度,并可用于验证其来源。

与此前凭借真实人像出圈的 Flux 不同,Sora 们对上传包含人物的内容设定了特别严格的审核标准,目前仅作为试点功能提供给少量早期测试者,并屏蔽含有裸露的内容。

OpenAI 王炸 Sora 文转视频正式上线,新功能发布

大半年前,初试啼声的 Sora 赢得互联网一片喝彩。

然而,如果说一年前尚未还能对着一群演示 demo 空喊「现实不存在了」,那么在国内外各类视频模型的轮番洗礼之下,我们早已养刁的胃口很难再被同样的产品打动。

这种态度的转变源于一个简单的事实。

当 AI 要从「勉强可用」进化到「可堪大用」,用户的期待也随之升维,从「能否做到」跃迁至「做得多好」。

好在 Sora 并未在掌声中原地踏步,通过与艺术家的深度合作,他们在工作流程领域做出了显著的改进。Re-cut、Remix、Storyboard 等功能都相当实用。

甲乙方的存在决定了工作流中的沟通永远是刚需,AI 能做的是让这种沟通更有效率,Sora 的价值不在于它能做什么,而在于让创作者得以抽身于技术细节,真正回归创意的本质。

与此同时,上周引发热议的 200 美元 ChatGPT Pro 订阅计划,如今也有了更合理的价格锚点,该计划同样支持无限制访问 Sora,这种产品协同效应预计也将激发出远超预期的应用场景和商业价值。

放眼当下,用户的真金白银从不作假。

可灵 AI 交出千万级月流水的亮眼成绩单,这片蓝海的潜力已呼之欲出,对于仍在「烧钱」阶段的 OpenAI 来说,Sora 预计会成为继 ChatGPT 之后的另一个下金蛋的母鸡。

当 Sora 从「能用」「好用」,再到「妙用」,或许未来某一天,我们会发现,真正不存在的,不是现实,而是人类创造力的尽头。

本地 LLM 语言大模型入门教程,提升隐私和效率攻略

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

按:本文原作者为 Chris Wellons,最初于 2024 年 11 月 10 日发表在其个人网站 null program 上,并声明归属公有领域。我们据此制作译文,以便中文读者阅读。

本文在 Hacker News 发表后的相关讨论也非常值得一读,有兴趣的朋友可前往查阅。

过去一个月以来,我一直在研究日新月异的大语言模型(Large Language Models,下称 LLM),尝试一窥其中奥妙。如今,一台树莓派就能运行比初版 ChatGPT(2022 年 11 月版本)还聪明的 LLM,换成一台普通的台式电脑或者笔记本电脑的话,运行更聪明的 AI 也不在话下。除了方便以外,本地化运行的 LLM 隐私有保障、数据不联网、不需要注册、也没有诸多限制。大模型正以前所未有的速度发展,现有的知识可能用不了几个月就过时了。我写这篇文章是为了记录我在上手 LLM 时积累的的实用经验和心得,希望这些必备知识能够帮你少走弯路。不过归根结底我也只是一个 LLM 菜鸟,文章中未必有什么独到之处,而且有些地方我可能也没弄明白。一想到一年之后这篇文章大概率就会成为历史的注脚,激动之余我自然也会有些惶恐。

就让我这个刚入门的菜鸟带你们入个门吧:LLM 是一种基于神经网络的技术;2022 年,人们在训练 LLM 进行「聊天」式对话方面取得了突破性进展,使得用户能够与这些人工智能自然地互动。这些模型不仅可以轻松通过图灵测试,与真人对话几乎无异,还展现出令人惊叹的创造力。如果这是你第一次接触这种大模型,感受到的不安可能一连几天都挥之不去。回想一下上次你买电脑的时候,你大概没想过人可以和机器有来有回地对话吧。

这让我回想起上世纪 90 年代桌面电脑快速革新的时候,新买的电脑刚刚送到家里就感觉已经过时了。而到如今,LLM 的发展速度更是快得出奇,几乎每周都有新变化,所以对于那些一年前发布的信息我基本上看都不看。想要掌握最新的资讯的话,可以关注 Reddit 的 LocalLLaMa 板块,但是这里的帖子个个吹得天花乱坠,所以记得别轻信其中的一面之词。

正是因为曾经经历过服务关闭、变更、或者因为其他原因导致我的服务器实例被停用的情况,我才对厂商绑定格外警惕。换新的服务提供商对我来说并非无法接受,但得让我能继续用下去才行。正因如此,过去几年内我对 LLM 并未抱有太大兴趣,因为那些所谓「封闭」的模型只能作为第三方提供的一项服务而存在,几乎涉及了所有上述的锁定问题,其中就包括模型的静默劣化(silent degradation)。直到某天,我了解到可以将接近顶尖的模型运行在自己的设备上,从而彻底摆脱这些束缚,这才让我改变了对 LLM 的看法。

这篇文章讲的是 LLM 的运行,并不涉及针对模型的微调和训练。而且这篇文章也只涉及文本,并不涉及图像、声音,或者其他任何「多模态」能力,因为就我来说还用不太到这些。

具体而言,想要在你自己的设备上运行 LLM,你需要的是分别是软件模型

llama.cpp 令人惊叹,也是我的唯一选择。原因在于,在基本的 CPU 推理这方面,也就是使用 CPU 而不是 GPU 来产生 token 时,llama.cpp 仅需一个 C++ 工具链,不像其他大多数方案那般都需要繁琐的 Python 配置,这点让它在众多可选项中脱颖而出。在 Windows 系统上,只需要一个 5MB 大小的 llama-server.exe 文件,不需要其他运行时依赖(runtime dependency)。更重要的是,由于 EXE 和 GGUF(模型)这两个关键文件都采用内存映射方式加载,所以很有可能即便过了几十年,你也可以在未来某个版本的 Windows 上以同样的方式运行同样的 LLM,且同样不需要额外配置。

我就直说了,我喜欢它是因为官方提供的 Windows 版本编译程序用的是 w64devkit。这些人真的是有点品味的!话虽如此,如果能用 GPU 做推理的话,就别用 CPU 做推理。虽然在台式或笔记本电脑上对 10B1 左右参数的模型的效果还不错,但是速度还是会更慢。我的主要用例并不是使用 w64devkit 构建的,因为我用的是 CUDA 来推理,而这需要用到 MSVC2 工具链。为了好玩,我曾把 llama.cpp 移植到了 Windows XP 上,并且成功在一台 2008 年的笔记本电脑上运行了一个 360M 参数的模型。能够在那台老旧的笔记本上运行这项技术的感觉真的太神奇了,毕竟在那会儿,这项技术的价值恐怕得值个几十亿美元吧。

GPU 推理的瓶颈在于显示内存(VRAM,下称显存)。因为这些模型真的相当大,而为了能够使用更大的模型,处理更长的上下文窗口(context window),对内存的要求也就更高。模型越大就越智能,上下文窗口也就越长,一次性可以处理的信息也就更多。VRAM 不足 8GB 的时候,使用 GPU 推理就不划算了。如果遇到「GPU Poor」的情况,就请用 CPU 来推理,这样的好处一是更简单,二是更容易上手。

llama.cpp 中提供了很多工具,但是本文只重点讲其中的 llama-server。它本质上就是一个 HTTP 服务器(默认端口为 8080),并提供了一个聊天 UI,以及供程序(包括其他用户界面)使用的 API。一个典型的调用命令如下:

上下文大小(context size)是将输入和输出计算在内,一个 LLM 一次可以处理的最大 token 数量。上下文 token 的数量通常在 8K 到 128K 之间,具体取决于模型的 tokenizer3。普通英语文本使用 wc -w 来统计的话,每个词大约 1.6 个 token。如果模型支持较大的上下文,内存可能会先一步告急。此时应该把上下文大小调低一些,比如 --ctx-size $((1<<13))(即 8K 个 token)。

我还没完全理解 flash attention 是做什么的,也不知道为什么 --flash-attn 或者 -fa 不是默认开启的(也许是因为精度较低?),但你无论如何都应该加上它,因为启用它可以减少内存需求,即便会降低精度也值了。

如果服务器成功地启动了,可以尝试访问(http://localhost:8080/)来先试一试。虽然你还是得先有个模型才可以。

Hugging Face(下称 HF)被誉为「LLM 界的 GitHub」,这是因为它提供了卓越的模型托管服务:无论是数 GB 的「小」模型,还是动辄数百 GB 的「大」模型,HF 都免费托管,获得此殊荣可谓实至名归。此外,大多数模型无需注册即可下载(个别例外),也就是说,你随时都可以下载我接下来提到的模型,自己试试。如此慷慨的服务让我十分震撼,以至于连我这种平日精打细算的人也在几天后开通了 Pro 账号。

如果你现在去 HF 逛一逛的话,你可能想问:「这里什么都有,那我到底要选哪个呢?」我一个月也和你有同样的疑问。对于 llama.cpp 来说,搜索 GGUF 即可。虽说 GGUF 并不是模型在创建或存储时的原生格式4,但你只需要找名字里面带有「GGUF」的仓库(repository)的话就好。这些仓库通常都是由更新频繁、助人为乐的第三方「量化器」(quantizer)提供的。

(官方文档里也没有明确解释「GGUF」究竟是什么意思,习惯了就好了。这就是走在技术最前沿的感觉:无论是什么,要么需要费很大劲才能找到,要么干脆就没有。你可能会想把 LLM 运行起来之后问问它,但我很快就会告诉你这样也行不通。至少据我所知,「GGUF」目前没有官方定义(更新:「U」代表「统一」(Unified)),但其他三个字母的含义仍未确定5。)

虽然以 Meta 最强模型命名的 llama.cpp 确实表现不俗,但并非我的最爱。最新版本是 Llama 3.2,但现在6能用在 llama.cpp 上的模型只有只有约 10 亿参数的 1B 和约 30 亿参数的 3B 版本。这两个模型有点太小了,实用性较为有限,而且只要你不是在树莓派上运行,即便用的是 CPU 推理,也可以有更好的选择,比如说 Llama 3.1 8B(如果你有至少 24GB 显存的话你没准还能试试 Llama 3.1 70B)。

搜 Llama 3.1 8B 时你会发现两个版本,其中一个标注了「instruct」,而另一个没有。instruct 表示该模型经过训练,能够依据指令完成任务,也就是用来聊天的,一般来说你要的就是这个。而没有标注的版本是「基础」(base)模型,只能续写文本(从技术上讲,instruct 模型同样也只是文本补全而已,但这个我们稍后会详细讨论)。如果基础模型也能标上「base」就好了,但是因为某些路径依赖问题,通常都不会这样去标注。

在 instruct 模型的「文件」一列中你是找不到 GGUF 文件的,如果你想要下载这些模型,你需要注册一个账号然后同意社区许可。这时我们回到搜索栏,在后面加上 GGUF,找相对应的 GGUF 模型就可以了:例如 bartowski/Meta-Llama-3.1-8B-Instruct-GGUF。bartowski 更新频繁,而且名声在外,这不但是 llama.cpp 专用的格式,而且无需注册即可下载。

你现在可以在「文件」页面里看到许多 GGUF 格式的文件了,这些是同一模型的不同量化版本。原始模型使用的是 bfloat16 张量,但如果只是为了把模型跑起来,我们可以舍弃大部分精度,同时将损失控制在最小。模型确实会变笨一点,懂得少一点;但是这样做可以大幅减少其所需资源。推荐的最多的是用 Q4_K_M 这种 4 位量化的版本,从我个人体验来看,这确实是个不错的选择。一般来说,一个大模型的 4 位量化比一个小模型的 8 位量化效果更好。一旦你把基本概念搞清楚了,就可以尝试不同的量化方式,看看哪种最适合你!

不同的模型在训练时有不同的权衡,所以没有哪个模型是最优的,在 GPU 性能不足时更是如此。我的电脑装了一块 8GB 显存的 RTX 3050 Ti,所以这方面的限制也影响了我对模型的选择。对于大约 10B 参数的模型,运行起来相对轻松;而若是想测试有着 30B 参数的模型的能力的话则稍显力不从心;运行 70B 参数的模型时我就会用第三方托管的方式了。以下我列出的「t/s」数据都是在这个系统上运行 4 位量化模型得到的。

表中省略了模型名字中的 instruct 字样,除非另有说明,否则这些列出的都是 instruct 模型。部分模型,至少在 LLM 能开源的范围内,是真正的开源项目,我已在后面标明了它们的许可证。其余的模型则对使用和分发都有限制。

这是 Mistral AI 和英伟达合作的模型(代号 Nemo),是我用过的最为均衡的 10B 模型,同时也是我的首选。其推理速度从 30 t/s 起步,令人十分舒适。它的强项在于写作和校对,并且在代码审查方面几乎能与 70B 的模型相媲美。虽然该模型训练的上下文长度为 128K,但是根据我的实际使用经验,其有效的上下文长度更接近 16K

模型名称中「2407」表示它的发布日期是 2024 年 7 月,我个人很支持将日期写入版本号的这种命名方式,这样一来,你就知道这个模型的知识更新日期和技术水平,找起来也方便。如果不是这样做,版本管理就是一团糟。AI 公司搞不懂版本管理,就像开源项目不会起名字一样。

这是由阿里云推出的 Qwen 模型,其在不同规模的表现都超出了我的预期。14B 模型的推理速度从 11 t/s 起步,能力与 Mistral Nemo 相当。如果我的硬件跑得动 72B 模型的话,我可能就会选这个了,但目前我都是通过 Hugging Face 的推理 API 来试用这个模型。Qwen 同样提供了一个 32B 的版本,但是因为我的硬件跑不动,所以我也没花太多时间研究它。

谷歌推出的模型很受欢迎,大概是因为它有趣的特性吧。对我来说,2B 模型很适合快速翻译。和谷歌翻译相比,尽管 LLM 更耗费资源,并且如果遇到了它觉得冒犯的文本就罢工,像是科幻电影一样——但是在 LLM 面前,谷歌翻译就像是老古董了,更不必提 LLM 还可以离线运行。在我的翻译脚本中,我给它一段带有 HTML 标记的文本,并且要求 Gemma 保留标记,它执行得简直完美!9B 模型效果更好但会慢一些,我会选择用它来翻译自己的消息。

微软的特色是使用合成数据训练。而结果是,该模型在测试中表现不错,但在实际应用中效果不如预期。对我来说,它的强项是文档评估。因为它是一个 4B 模型,我曾加载过最多 40K token 的文档,并成功地获取到了准确的摘要和数据列表。

Hugging Face 可不仅仅是托管模型这么简单,就同等体量的模型而言,他们自家的 360M 模型同样异常出色。我那台赛扬处理器、1GB 内存、32 位系统的 2008 年的笔记本电脑也能用,在一些旧款树莓派上也可以跑起来。这个模型有创意、速度快、能沟通、会写诗,适合在资源有限的环境中使用,算是一个有趣的玩具。

这是另外一个 Mistral AI 模型,但其表现稍逊一筹。48B 听起来相当大,但这是一个 Mixture of Experts(MoE)模型,进行推理时只会用到 13B 的参数。这使得它非常适合在至少有 32G 内存的配置上进行 CPU 推理。该模型更像一个数据库,保留了更多的训练输入数据,但它在应用中可能不如预期,其中缘由我们很快就会说明。

又是两个我没法在自己的电脑上运行的模型,所以我会通过远程托管的方式来使用这两个。后者名字里的 Nemotron 代表这个模型经过英伟达的微调。如果我能跑得动 70B 模型的话,可能 Nemotron 就是我的首选了。我还是要花更多时间把它和 Qwen2.5-72B 做对比评估。

这些模型大多数都有特殊编辑过(abliterated)的「去审查」版本,消除操作可以减少模型的拒绝行为,但是也会以模型的性能下降作为代价。拒绝行为是很讨厌的,比如说 Gemma 就不愿意翻译它不喜欢的文字。可能是因为我比较无聊吧,我遇到的拒绝的次数不多,所以我还没必要做出这样的取舍。另外,似乎上下文的长度增长之后,拒绝行为就会变少,感觉有点「既然开始了,那就做到底」的意思。

接下来的一组是专为编程而训练过的「写码用」模型。具体来讲,他们进行了中间填充(fill-in-the-middle,FIM)训练,使得模型可以在现有程序内部插入代码——我稍后会解释这是什么意思。但是依我看来,这些模型不论是在代码审查还是其他指令导向的任务上都没有更出色,实际情况正好相反:FIM 训练是在基础模型上进行的,指令训练是在此基础上进行的,因此指令训练反而与 FIM 不兼容!换句话说,基础模型的 FIM 输出要明显更好,尽管你无法与这些模型进行对话。

我会在后文进行更详细的评估,但在此我想先提一点:即便是目前最顶尖的 LLM 生成的代码,其质量也相当一般。以下排名是基于与其他模型的对比,并不是它们在整体能力上的排名。

这是 DeepSeek 自己命名并推出的模型。推理时它只使用 2B 参数,所以它既和 Gemma 2 的 2B 版本一样快,又像 Mistral Nemo 一样智能,堪称一个完美的平衡。尤其是在代码生成方面,它的表现超越了 30B 的模型,如果我想要鼓捣 FIM 的话,这就是我的首选了。

Qwen Coder 的排名紧随其后。论输出结果的话和 DeepSeek 不分伯仲,但是因为并不是 MoE 模型,所以速度会稍慢些。如果你的内存是瓶颈,那么它就是比 DeepSeek 更好的选择。在写这篇文章的时候,阿里云发布了新的 Qwen2.5-Coder-7B,但是令人迷惑的是,其版本号并没有更新。社区里已经在用 Qwen2.5.1 来称呼这个版本了。刚才我还在说 AI 公司搞不懂版本管理来着……(更新:在发布一天后,14B 和 32B 的 Coder 模型也发布了,我两个都试了,但是都不如 DeepSeek-Coder-V2-Lite,所以我的排名没有变。)

IBM 推出的系列模型名为 Granite。总体来说,Granite 无法令人满意,唯独在 FIM 中表现异常优秀。以我的体验来说,它和 Qwen2.5 7B 并列第二。

我同样也测试了 CodeLlama、CodeGemma、Codestral、StarCoder 这四个模型。这些模型在 FIM 任务上的表现非常差,几乎毫无价值,我想不到任何使用这些模型的理由。指令训练所导致的负面效果在 CodeLlama 上最为明显。

我在前文提过,llama.cpp 是自带 UI 的,其他 LLM 中的 UI 我也用过,我感觉都大差不差。但是我本来就不喜欢 UI,尤其是在生产力环境下,所以我为我自己量身定制了 Illume。这是一个命令行程序,它能将标准输出转换成 API 查询,并在查询过后将响应转换回标准输出。把它集成到任何一个支持拓展的文本编辑器中应该都不成问题,但是我只需要它支持 Vim 就够了。因为 Vimscript 太烂了,估计在我接触过的最烂的编程语言里能排上第二,所以我的目标是尽量少写代码。

创建 Illume 的初衷是为了解决我自己的痛点,为了让我更好地探索 LLM 的世界。我总是会把东西搞崩,然后再去添加新功能来补救,所以稳定性方面我没法保证(大概你还是不要尝试使用它比较好)

以 ! 开头的行是 Illume 解释后的指令,这样写是因为正常文本中很少有这种写法。在一个缓冲区(buffer)中,!user 和 !assistant 交替进行对话。

这些仍然在文本缓冲区之内,所以在继续对话之前,我可以编辑 assistant 的回复,也可以修改我的原始请求。如果我想要它来创作小说的话,我可以要求它补全(completion)一段文本(而这并不需要指令训练就可以完成):

我可以打断它的回复,进行修改或添加一段自己写的内容,然后让它继续生成;这方面我还得多练练。LLM 也会识别出你添加的注释语法,这样你就可以用注释来引导 LLM 写你想要的内容。

虽然 Illume 主要是为 llama.cpp 设计的,但我也会使用不同 LLM 软件实现的 API 进行查询,且由于各个 API 之间存在不兼容性(例如一个 API 所需的参数被另一个 API 禁止),所以 Illume 的指令需要足够灵活和强大,因此指令可以设置任意的 HTTP 和 JSON 参数。Illume 并不会试图将 API 抽象化,而是会直接呈现出其较低层级的设置,所以要对远程 API 有所了解才能有效地使用它。比如说,与 llama.cpp 进行通信的「配置文件」(Profile)是长这样的:

其中 cache_prompt 是一个 llama.cpp 所特有的 JSON 参数( !: )。大多数情况下启用提示缓存(prompt cache)会更好,但可能是因为某些原因,它默认是没有启用的。其他 API 会拒绝带有此参数的请求,所以我需要将其删除或禁用。Hugging Face 的「配置文件」是这个样子的:

为了兼容 HF,Illume 允许将 JSON 参数插入到 URL 中。因为 HF API 会过于频繁地进行缓存,所以我提供了一个 HTTP 参数( !> )来将其关闭。

llama.cpp 独有一个用于 FIM 的 /infill 端点(endpoint)。该端点需要一个拥有更多元数据并进行过特定训练的模型,但是这种情况比较少见。因此,尽管 Illume 支持使用 /infill ,我还是添加了 FIM 配置,这样在读过该模型的文档,把 Illume 为该模型的行为配置好之后,我可以在任何为 FIM 训练的模型上通过正常补全 API 实现 FIM 补全,甚至是在非 llama.cpp 的 API 上也是如此。

该是讨论 FIM 的时候了。为了彻底弄懂什么是 FIM,我就必须追溯到知识的源头,也就是最原始的讨论 FIM 的论文:Efficient Training of Language Models to Fill in the Middle。这篇论文帮助我理解了这些模型是如何针对 FIM 训练的,至少足够让我也将这种训练方法应用到实际中。即便如此,在模型的文档中关于 FIM 的说明通常也很少,因为它们更希望你去直接运行他们的代码。

从根本上讲,LLM 只能预测下一个 token。所以 FIM 的方法是在大型训练语料库(corpus)中选取一些会在输入中出现的特殊 token,用它们来区隔前缀(prefix)、后缀(suffix),和中段(middle)部分(三者合称 PSM,有时也称「后缀-前缀-中段」,即 SPM)。在之后的推理中,我们可以用这些 token 来提供前缀和后缀,并让模型「推测」出中段内容。听起来很离谱,但这真的很有效!

比如在填补 dist = sqrt(x*x + y*y) 中括号里的内容时:

为了让 LLM 填补括号中的内容,我们在 <MID> 停下,并且让 LLM 从这里开始预测。注意到 <SUF> 起到的效果就好比一个光标。顺带一提,指令训练的方法差不多也是这样,但是在指令训练中,使用特殊标记分隔的是「指令(instructions)」和「对话(conversation)」,而并非前缀和后缀。

有些 LLM 开发者严格按照论文所写,直接使用 <PRE> 等作为 FIM 标记,并不在乎这些标记和模型的其他标记看起来完全是两个样子。更用心的训练者则会使用类似 <|fim_prefix|> 的标记。Illume 支持 FIM 模板,我也为常见的模型编写了相应的模板,例如针对 Qwen (PSM) 的模板如下:

Mistral AI 的习惯则是使用方括号、SPM 格式,并且省略「中段」token:

有了这些模板,我就可以在不被 llama.cpp 的 /infill API 支持的模型中进行 FIM 训练了。

我在使用 FIM 时遇到的第一大问题是无法生成正确的内容,而第二大问题就是 LLM 不知道什么时候该停下。比如在我要求模型填充以下函数时(如给 r 赋值):

(补充一点:静态类型(static types)提示(包括这里的)可以帮助 LLM 更好地生成代码,起到防护栏的作用。)得到这样的结果并不奇怪:

原本的 return r 变成了 norm4 函数的返回值。得到这样的结果固然没问题,但显然这不是我想要的内容。所以当结果开始跑偏的时候,最好做好狂按停止按钮的准备。我推荐的三个 coder 模型较少出现这种情况,而更保险的做法是将其与一个能够理解代码语义的非 LLM 系统结合,这样在 LLM 开始生成超出范围的代码时可以自动停止。这种做法可以让更多 coder 模型变得更实用,但这就不是我折腾的范围了。

对于 FIM 的摸索和实践让我意识到 FIM 仍处在其早期阶段,也几乎没有人用 FIM 来生成代码。或许大家还是在用普通的补全方法?

LLM 好玩归好玩,但是它们能为提高生产力提供什么帮助呢?过去的一个月以来我一直在思考这个问题,但始终没有找到一个令我满意的答案。我们不如先划清一些界限,明确一下有哪些事情是 LLM 无能为力的。

首先,如果结果的准确性无法被轻易验证,那么使用 LLM 就毫无意义。LLM 会产生幻觉(hallucination),这也让它们变得并非绝对可靠。很多时候,如果你能够验证 LLM 的输出是否正确的话,你其实也就没必要用它了。这也就解释了为什么 Mixtral 如此庞大的「数据库」反而没什么用。同时这也说明,把 LLM 输出的结果投放到搜索结果里有多么的危险且不负责任,说难听点就是不道德。

然而即便是那些对 LLM 了如指掌的爱好者们也还是会踩这个坑,并且去传播这些虚构的内容。这使得针对 LLM 的讨论更为不可信,看 LLM 给我提供的信息的时候我得多留几个心眼。举例说:还记得我说过 GGUF 没有一个官方定义吗?你去搜一下就能搜得到一个明显是幻觉的结果,结果它还进了 IBM 的官方文档。我在这儿就不再提了,免得问题变得更严重。

其次,LLM 都是金鱼脑,「过目就忘」。也就是说,较短的上下文长度限制了它们的发挥。虽然有些模型使用了更大的上下文长度来训练,但是其有效上下文长度通常小的多。实际上,一个 LLM 一次只能在它的「大脑」中记住相当于一本书里几章的内容,如果是代码的话则是 2000 到 3000 行(因为代码的 token 密集度更高),一次性能够处理的也就这么多了,这和人类相比简直微不足道。当然也可以通过微调或者使用检索增强生成这类的工具来尝试改善,但是只能说……收效甚微。

第三,LLM 写代码的能力很差。往好了说,它们的写码能力也只不过是一个读过大量文档的本科生的水平。这话听起来还行,但实际上,很多毕业生在进入职场时几乎对软件工程一无所知,第一天上班才是他们的真正学习的开始。从这个角度看,现在的 LLM 甚至还没开始「学习」这一步呢。

但是说实话,LLM 写代码能有如今的水准已经很不错了!即便是把带有我强烈个人风格的代码丢给它,LLM 也能顺利理解并使用其中的自定义接口(但是需要说明的是:我自己的的代码和写作也是大部分 LLM 的训练数据中的一部分)。因此,只要是不超出有效上下文长度的限制,上下文长度越大越好。问题在于训练 LLM 写代码似乎并不比我自己写更省时间。

其实,单纯去写新的代码都算简单的了。困难的地方在于维护代码,以及在考虑到维护代码的同时再去写新的代码。即便 LLM 确实能写出可以运行的代码,也考虑不到维护问题,或者说,它根本没办法去思考这些问题。生成代码的可靠性与代码长度通常成反比平方关系,一次生成十几行代码就已经很不靠谱了。无论我怎么试,LLM 输出的能让我觉得还凑合的代码根本就超不过三行。

代码质量在很大程度上受到编程语言的影响。LLM 在 Python 上表现好过 C 语言;C 语言的表现又好过汇编语言。我觉得这多半取决于语言难度和输入质量:给大模型做训练的 C 语言素材多半都很烂,毕竟烂资源网上一抓一大把;而大模型对汇编语言的唯一了解就是糟糕的新手教程。当要求大模型使用 SDL2 时,它也不出所料地犯了常见的错误,毕竟它就是这样训练出来的嘛。

那训练大模型去写标准化代码(boilerplate)7呢?大概 LLM 在这方面会犯更少的错误,可能还有一定的价值,但处理标准化代码最快的方式其实就是——避免编写它。去简化问题,不去依赖标准化代码就是了。

不必只轻信我一家之言,看看大模型在赚钱方面怎么样就明白了:如果 AI 公司真的能够实现他们所宣传的生产力提升,他们就不会出售 AI 技术,反而会独自利用其技术去吞并整个软件行业。你也可以看看位于 AI 科技最前沿的公司的软件产品,和其他公司的产品一样,是同样的老旧、同样的臃肿、同样的垃圾。(而浏览这些糟糕的网站也是研究 LLM 的环节之一,一想到这里我就感觉很不爽。)

在生成代码时,「幻觉」造成的影响会小一些。因为你在提出需求时就知道自己想要什么,因此可以检查生成结果,同时还有编辑器来帮你检查你漏掉的问题(比如调用了虚构的方法)。然而,有限的上下文和不佳的代码生成仍然是障碍,我至今尚未能有效地解决这些问题。

那么,我可以用 LLM 做什么呢?我们列个表吧,毕竟 LLM 最喜欢列表了:

尽管有用的应用场景不多,但是这已经是近些年来我对新技术最兴奋的一次啦!

我用 ChatGPT 和 Midjourney 剪掉了蓄满四年的长发

这是我蓄满了四年的长发,原本是打算捐给金丝带的,但我决定放弃了。

一来,捐赠的人太多了,不缺我这一个,它不需要我;

二是,这个活动太热门了,报不上名,我不喜欢凑热闹;

于是,我心里很快就决定了:剪掉,并且要烫卷、染发!

在音乐教室里,筱烨、阿吉和秋秋在上课,我就在旁边用 ChatGPT 写 Prompt,写完之后就丢给 Midjourney 去生成效果图。遇到不满意的,就丢两张我以前的半长发的照片上去,再调整 Prompt 的细节,接着画。

最后,我把这张效果图发给发型师:

虽然这脸型偏硬了,不怎么像我,但这个头发感觉是我想要的。

曲线、松软、紫色挂耳

确定方案之后就直接约时间,一方面要约发型师的时间,他很好约,就在楼下,我随时过去随时可以做;但另一方面,要约收头发的师傅过来,需要由他根据长度把我的头发抽出来。这也是我第一次卖头发,挺新鲜的体验。

首先,我要跟发型师和收头发的师傅一起商量,怎么剪、剪多少、剪到哪里、用什么方法剪。我原本以为就是咔嚓一刀剪了,但其实不是。整个过程里,这位师傅需要非常仔细地把我头发中最长的部份找出来,每次只挑选一小撮,然后用剃刀在距离头皮大约 8-10cm 的位置一点点把头发切断。这样做的目的是,即确保剪下来的头发是满足他收头发的需求,也能确保给发型师留有后续足够的操作空间,还得让头发之间的层次能自然地衔接上。

每次剪下一小撮头发后,他都会仔仔细细地把头发梳几遍,确保没有任何打结,然后放在准备好的毛巾上,平放着。剪之前还特意要把周围的风扇都关掉,万一吹乱了,这些头发都全都没用了。他就这么一遍一遍地重复捏一小撮、切下来、梳顺、平放,如此反复了半个多小时,才终于从我头上抽出来两把共 59g 的长发。

然后就是烫卷和染发。

之所以想这样折腾一下,多少有一点破罐子破摔的心态在,觉得既然这头长发不被需要了,那也就放过自己,不要再被「这件事」困住了,索性趁着这个机会来尝试一下之前没折腾过的事情!

其实我 17 年前也染过一次发,但那时候是因为演《暗恋桃花源》的老导演,为了贴近角色的年龄感,我就去染了一头白发。只不过那个白发染得不成功,黄黄的,加上那会儿我比较消瘦,自己觉得不好看,所以演出结束的第二天我就去剃光头了。所以那次严格来说我不觉得是一次正经的染发体验,毕竟没有顶着这头黄毛生活,勉强能算一次临时的体验。

我当然知道它会掉色,会变成黄毛,会干、会毛躁。

但这不重要,因为我就想试一试。

我紧绷了三十多年,现在崩断了,还不能讨好一下自己,玩一玩吗?玩!

不仅要玩,还要玩得不一样,用 AI 一起玩!

为什么是紫色?因为我喜欢!

虽然我也喜欢绿色,但我也不想染成绿色 😂

朋友说像杨千嬅,像极速拍档的小乔,那也挺好。

最近两周我忽然意识到,我是会因为自己感觉到快乐而感到羞耻的。这是从小根深蒂固的想法。过去我知道,如果我遇到一件好事,一件开心的事,就会有一个声音在警告自己不要乐,不要得意,不要喜形于色,要收起来,不然马上就会招来不幸和倒霉。但我一直认为这是克制和谨慎,是对于能量守恒定律的迷信式的执念,觉得这会儿开心了以后就没有了。

可是,为什么要把开心攒到以后呢?有没有以后都不知道。

筱烨说我的动力来自恐惧,确实,我总有各种恐惧在周围,挥之不去。

但现在我看见它了!我要让我的快乐活过来!我不要快乐羞耻!

尽管我现在还没有什么活力,但起码这个紫色能令我舒服好一阵子!

最后再看一眼,这头蓄了四年的长发和发髻。

我很喜欢这根石纹簪,但我感觉我应该不会再束成这个样子了。

这天色真好。

ChatGPT on macOS客户端app正式面向所有用户开放

OpenAI宣布了适用于 macOS 的 ChatGPT 客户端app正式面向所有用户开放。该应用专为 macOS 系统设计,支持快捷键呼出和多种内容形式的交互。目前仅适用于配备 Apple Silicon(M1 或更高版本)的 macOS 14+,但计划在今年晚些时候登陆 Windows。

ChatGPT on macOS客户端app正式面向所有用户开放最先出现在Justin写字的地方

如何使用 Proxifier 来进行流量代理控制

Proxifier 是一款网络工具软件,可以帮助用户通过代理服务器进行网络访问,实现匿名化、翻墙、加速等功能。支持多种代理协议,规则管理,流量监控和日志记录等功能,提高网络连接的灵活性和智能化。注意 Proxifier 本身并不是一个代理软件,也不是一个 VPN 软件,其作用是控制其他其他软件访问代理的方式。

上一篇文章我提到了可以试用 Proxifier 来解决通过 Shadowsocks 代理访问呢 ChatGPT 频繁出现 Something Went Wrong 的问题,在本文中我们来展开讲一下具体的做法。

1 准备工作

1.1 软件下载

Proxifier 的官方网站是 https://www.proxifier.com/,其正版价格较贵,约 40 美元。不过,较早的 2.x 版本存在破解版。读者可以根据自己的经济状况来选择。

1.2 代理准备

如同开头提到,Proxifer 本身不是一个代理程序,读者应该自己提前准备好代理。这些代理中,无论是 Shadowsocks、V2Ray 还是其他常见的代理程序,都会在客户端本地重建一个 Socks5 代理,这一般都可以在代理客户端程序的配置或者服务器设置中看到。下图给出的是 Shadowsocks-NG 客户端在 macOS 中的系统配置,可以看到程序在本地 (localhost) 的 1086 端口创建了一个 Socks5 代理。

这个代理会被进一步转成 http 代理,从而被浏览器使用,这个转换过程是导致 ChatGPT 链接不稳定的元凶。接下来我们要使用 Proxifier 让 ChatGPT 直接使用 Socks5 代理。

2 设置 Proxifier

2.1 添加代理

我们以知乎上这篇文章为范本简要讲一下设置过程。首先我们需要将现有代理软件提供的 Socks5 服务告知 Proxifier,这通过添加代理服务器实现。

注意一般各种代理软件在本地创建的代理都是无需验证的,我们可以取消验证启用。输入设置之后,可以点击检查确认设置是否正确。

3 设置规则

为了让 ChatGPT 的访问能够通过 Proxifier 访问代理,我们需要配置 Proxifier 的代理规则。

添加代理规则的页面如下:

我们有两种方法引导 ChatGPT 的网络访问:

  1. 我们可以选择下载 ChatGPT Desktop 客户端,然后通过代理规则中应用程序过滤规则找到 ChatGPT 程序,然后让目标主机为空(这意味着所有的目标主机都会服从本规则);
  2. 将应用程序部分置空,然后在目标主机中填入 ChatGPT 访问的域名。经过我的试验发现,填入 chat.openai.com; challenges.cloudflare.com; *.openai.com; 即可。

事实上,因为 Proxifier 能够全局性地处理所有网络访问,因此,第二种方法对于使用 ChatGPT Desktop 的用户来说同样有效。下图是完整代理规则。

至此我们就完成了设置,你可能需要重启浏览器才能能让 Proxifier 成功地引导 ChatGPT 的流量。

使用 Shadowsocks 访问 ChatGPT 频繁出现 Something Went Wrong 问题的解决方法

update at 2023.4.27:

Github 上有人做了一个开源的油猴脚本 KeepChatGPT 可以解决这个问题。在浏览器上这个脚本可以正常使用,但是注入到客户端时(尽管内部仍然是一个浏览器)会出现错误。

update at 2023.4.12:

在 Windows 上这套方法存在一定的问题。可能的原因是 Proxifier 的代理权限有时候会被 Shadowsocks 客户端,也就是 Privoxy 争抢。

由于国情原因我们使用使用 ChatGPT 需要使用各种形式的代理,这时我们肯能会发现在与 ChatGPT 对话的过程中可能会出现下面的错误:

Something went wrong. If this issue presists please contact us through our help center at help.openai.com

这种错误一般在我们再让网页空闲一段时间(通常是一分钟)后再次提问时出现。当然,去 OpenAI 的帮助中心是不会搜到什么有用的信息的。如果你去检索这个问题,你能得到的最好答案是在出现这个页面之后刷新页面,然后回到对话窗口继续对话即可。但是刷新后如果再次出现空闲窗口的情况,这个问题会反复出现,因此你在对话中就不得不反复地刷新页面,再加上每次页面重载你都需要去勾选 Cloudflare 的机器人验证框,这就会极大程度上拖慢我们的速度,影响产品体验。

这个问题是否可能是由于我翻墙访问导致的呢?我使用的翻墙软件是 Shadowsocks,经过一番搜索,一个 Github Issue 的讨论给了我灵感。

讨论地址:https://github.com/shadowsocks/shadowsocks-libev/issues/2149

尽管讨论的题目和 ChatGPT 没有直接关系,但是这个回复提到,Shadowsocks 在构建代理管道时,会在客户端使用 Privoxy 来讲 Socks5 代理转换成 http 代理,进而被浏览器使用。Privoxy 的配置中包含了 Socket 连接时长方面的控制。于是我查看了我本地的 Shadowsocks 使用的 Privoxy 的配置文件,这个文件在 MacOS 中位于 /Users/lena/Library/Application Support/ShadowsocksX-NG/privoxy.config 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
toggle  1
enable-remote-toggle 1
enable-remote-http-toggle 1
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
socket-timeout 60

forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .
forward [FE80::/64] .
forward [::1] .
forward [FD00::/8] .
forward-socks5 / 127.0.0.1:1086 .

# Put user privoxy config line in this file.
# Ref: https://www.privoxy.org/user-manual/index.html

可以看到 keep-alive-timeoutsocket-timeout 这两个选项设定的超时时间都比较低。我做了下面两个尝试:

  1. 将这两个设置调高,并重启 Shadowsocks,但随后发现 Privoxy 重置了设置文件;
  2. 我手动 kill 掉正在运行的 Privoxy 并且手动使用更新后的 config 文件调起一个新的进程,但是仍然没有解决 Something went wrong 的问题;

至此,我也不想和 Privoxy 纠缠下去,既然问题出在 Socks5 代理转 Http 代理的环节,我们可以使用 Proxifier 这个软件直接使用 Shadowsocks 提供的 Socks5 代理,就可以很好地解决这个问题。

Proxifier 的教程网上非常多,我就不在这篇文章里赘述了。

Proxifier 的使用参加我的文章:如何使用 Proxifier 来进行流量代理控制

❌