2026年4月

2026 年做短视频,这 5 个 AI 技能插件我把每个都跑通了

真实使用后的筛选结果,附安装教程。


01 / 为什么不再一个个换工具了

我做短视频快三年,选题、文案、素材、剪辑,每个环节都试过用 AI 替代。

早期体验很差——A 工具写文案、B 工具扒字幕、C 工具剪视频、D 工具加特效,一条片子做下来要在五六款软件之间反复横跳。不仅没提速,反而因为反复切换上下文,比纯手工还累。

后来接触到 Agent Skills 这个概念,思路才彻底打开。

简单说,Skills 就是一份交给 AI 的"岗位说明书"。装上之后,你用大白话下指令,AI 自动按预设流程跑完所有步骤。主流平台基本都支持——Claude Code、OpenClaw、Cursor、Windsurf、Codex CLI 都可以装。

过去两个月我陆续试了二十多个 Skills,最终筛出 5 个真正能稳定出活的。按创作流程从前到后排列,覆盖了一条短视频从零到成片的完整链路。


02 / 写文案:seo-content-writer

作者 Aaron He Zhu | 平台 ClawHub
适合 选题策划、长文撰写、小红书种草笔记批量出稿

写文案最耗时的从来不是动笔,而是动笔前的调研——关键词怎么定、竞品写了什么、标题怎么取才有流量。这些事单拎出来都不难,但叠加在一起就是一下午。

这个 Skill 把调研全流程封装成了自动化的流水线。告诉它主题和目标平台,它会自动跑:锁定核心词和长尾词 → 分析搜索结果前十页的内容缺口 → 按 H1-H2-H3 搭骨架 → 保证关键信息出现在前 150 字 → 每 500 字穿插外部引用 → 最终输出带摘要的完整成稿。

我个人的两个高频用法:一是公众号行业分析长文,直接出初稿再做精修,效率提升三倍不止;二是小红书种草笔记批量生产,它会自动适配平台语言风格,不用我逐条改语气。


03 / 扒素材:bibigpt-skill

作者 JimmyLv(BibiGPT 创始人)| 平台 GitHub
适合 竞品拆解、播客笔记、素材视频转文字稿

做内容创作,研究同行爆款是日常操作。但手动拉一条一小时的视频做笔记,半个下午就没了。市面上大部分字幕提取工具只认 YouTube,B 站、抖音、小红书基本瘫痪。

这个 Skill 解决的核心痛点就是跨平台内容提取。底层做了针对各平台的字幕抓取适配,覆盖弹幕、CC 字幕、AI 生成字幕三种来源,支持超过 30 个平台——B 站、抖音、小红书、YouTube、小宇宙播客全部在内,本地 MP3 和 MP4 文件也能直接处理。

用法极简:装好之后把视频链接丢给 AI,说一句"帮我总结",几十秒返回带时间戳的结构化摘要。需要英文输出加 --lang en,只要摘要加 --summary-only,按章节切分加 --chapters

我的日常用法:拆解同行的爆款解说结构、整理行业播客为知识笔记、把客户素材快速转成可编辑文字稿。以前一周的工作量,现在一个下午搞定。


04 / 做解说:narrator-ai-cli-skill

作者 AI解说大师 | 平台 GitHub
适合 电影解说、短剧解说、动漫解说的全自动成片

做电影解说视频,传统流程有八步:找片源 → 拉片 → 写文案 → 录配音或 TTS → 找 BGM → 画面匹配剪辑 → 合成 → 加字幕。熟练工一条片子也要三四小时。

这个 Skill 配合它的 CLI 工具,把这八步全部打包成 AI 可调用的模块。你只需要说一句话,比如"帮我做一条飞驰人生的电影解说,喜剧风格",AI 会按顺序自动执行:搜索片源 → 选模板 → 匹配 BGM → 挑配音角色 → 生成文案 → 合成视频 → 返回下载链接。

内置资源量不小:93 部电影素材、146 首 BGM、63 个配音角色、90 多种解说风格模板,主流的短视频解说玩法基本全覆盖。

需要注意两点:一是要同时安装配套的 narrator-ai-cli 命令行工具(一行 pip 命令),CLI 是执行层,Skill 是指挥层,缺一不可;二是使用前需要配置 API Key,README 里有申请方式。

特别适合两类人:已经在做解说账号想大幅提升产能的,以及想入行但被剪辑门槛拦住的新手。


05 / 代码出片:remotion-best-practices

作者 Remotion 官方团队 | 平台 GitHub
适合 知识科普、数据可视化、模板化视频批量生产

Remotion 是用 React 写视频的开源框架,代码直接渲染成 MP4。官方 Skill 包含 30 多份规范文档,覆盖动画、音频、字幕、3D、图表、转场、Lottie、字体加载、TikTok 字幕特效等几乎全部制作环节。

实际操作举一个例子。你对 AI 说:"做一条 30 秒 1080×1920 的教育视频,讲 AI Agent 怎么工作,分 5 个场景,文字安全区距顶 150px、距底 170px,主标题 56px 起。" AI 会自动调研主题 → 写分镜脚本 → 逐场景生成动画代码 → 打开预览让你确认。全程不用写一行代码。

关键优势是确定性输出。改的是代码,不是随机重生成。你说"柱状图加宽""字号调大""配色换橙色",每次修改都精确可控、可复现。

我主要用它做知识科普的批量出片——同一模板套不同数据和文案,一晚上能跑几十条质量稳定的成片。


06 / HTML 出片:HyperFrames

作者 HeyGen | 平台 GitHub
适合 用 AI Agent 直接创作视频、模板批量渲染、可视化出片

这是 2026 年 4 月中旬刚开源的新项目,两天内 GitHub 星标突破 5,000。和 Remotion 同属"用代码做视频"路线,但走了完全不同的技术路径。

HyperFrames 的逻辑非常直白:写 HTML,渲染 MP4。视频构图就是带几个 data-* 属性的普通 HTML——data-start 控制出场时间,data-duration 控制持续时间,data-track-index 控制轨道层级。不依赖 React,不学任何新语法,会写 HTML 就能上手。

选择 HTML 而非 React 有一个很实际的原因:LLM 训练数据中 HTML 的体量远大于 React,AI Agent 生成 HTML 的准确率和稳定性天然更高。这是 HeyGen 工程师 Joshua Xu 在技术选型时明确提到的考量。

CLI 默认非交互模式,专为 AI Agent 设计——没有确认弹窗、没有向导流程,Agent 可以直接调用渲染命令。项目还内置了 Skills 系统,在 Claude Code 中注册为 /hyperframes/hyperframes-cli/gsap 三个斜杠命令,装好之后 Agent 就能帮你写构图、加动画、配转场。

组件目录提供了 50+ 即用区块:社交平台叠加层、WebGL shader 转场、动态图表、电影特效,一行命令安装。

npx hyperframes add flash-through-white   # shader 转场
npx hyperframes add instagram-follow      # 社交叠加层
npx hyperframes add data-chart            # 动态图表

渲染是确定性的——相同输入永远相同输出。跟 AI 说"标题放大""换深色模式""末尾加淡出",改的是代码,每次调整精确可控。

HyperFrames vs Remotion 怎么选? 如果你已经深度使用 React,Remotion 的生态更成熟;如果你主要靠 AI Agent 驱动创作,HyperFrames 的 HTML 路线对 Agent 更友好,上手门槛也更低。两者不存在替代关系,更多是互补。

当前版本 v0.4.6,Apache 2.0 开源,要求 Node.js >= 22 和 FFmpeg。

GitHub 地址:github.com/heygen-com/hyperframes


07 / 安装方式汇总

各平台的安装路径略有差异,统一列在这里:

Claude Code

npx skills add <仓库名>

例如:npx skills add heygen-com/hyperframes

OpenClaw(小龙虾)

npx clawhub@latest install <skill-名称>

也可以直接在 ClawHub.ai 搜索安装,或手动放到 ~/.openclaw/skills/ 目录。

Cursor / Windsurf / Cline

与 Claude Code 相同,使用 npx skills add 命令。

Codex CLI

使用 codex skill install 命令。

WorkBuddy / QClaw(腾讯系)

在 Agent 的技能管理界面上传 SKILL.md 文件即可。

最省事的方式:把 Skill 的 GitHub 链接发给你的 AI Agent,跟它说"帮我装这个 Skill",大部分 Agent 能自己完成配置。


08 / 最后说几句

几点个人体会。

别贪多。 我一开始装了二十多个,真正每天在用的就这几个。从最痛的环节开始,跑通一个再装下一个。

装之前看源码。 社区 Skills 质量参差不齐,优先选有官方背景或作者信誉好的项目。

Skills 擅长的是流程化、可重复的工作。 创意判断、审美把控、情感表达这些,暂时还是人来做得更好。流水线交给 AI,创意留给自己,这个分工比较合理。


5 个 Skill 的 GitHub 地址汇总:

  • aaron-he-zhu/seo-content-writer
  • JimmyLv/bibigpt-skill
  • jieshuo-ai/narrator-ai-cli-skill
  • remotion-dev/skills
  • heygen-com/hyperframes

本文由mdnice多平台发布

手机答题,需要远程答题:
手机打开 gemini 视频,它答几道题后就死循环了。判断题都说正确,选择题都选 A...
豆包第一次错 12 个,第二次错 8 个,惊险通关。

写真生成:
媳妇用豆包生成的写真可以以假乱真。(有女友的可以去试试,豆包甚至有个写真广场,模板一键生成)
然后找媳妇要提示词去香蕉 pro 和香蕉 2 试..照片人物跟生成人物压根没关联。。

现在各个牌子都是说自己家的风扇风力足,不过我还是想找一个微风拂面那种桌面小风扇,能让空气流动起来就行。因为吹久了头疼,空气不流通又会感觉闷。买过一些所谓 100 档的那种风扇,纯噱头。我的想法是有没有那种无级变速的那种风扇,能把转速控制的很低。感觉实现起来应该不难,不过还没见过。不知道那种很贵的风扇能不能达成我的想法,有没有 V 友有经验?

在 v2 上一个帖子看到了一个远程招聘的帖子,邮件后和老板聊了几个小时感觉还不错,然后的话,给我出了个笔试题目(如下):

请在 3- 5 个工作日(最长不可超过 7 个工作日的时间内),设计并实现一个可以在 Mac 和 Windows 两
个系统上都能运行的,能够完成实时对话翻译应用的 Demo ,用于解决需要大量文本录入和文本翻译的
需求。
目标用户为重度写作用户,使用场景为在桌面端每天需要写作 3000 字以上,可通过语音录入文字,并
可以将文字翻译为指定的语言
具体需求:
应用启动后自动进入文字/语音输入界面
可通过键盘和语音两种方式输入文字
可自动识别输入的文字和语音为何种语音,无需用户自己设置和切换
支持按钮启动语音识别,也可支持 Ctrl/Cmd + Tab 快捷键启动语音识别
默认不启动翻译,需用户手动启动,将输入的文字自动翻译为指定的语言文字
可切换多种翻译的目标语言,需支持中文、英文、日文、韩文、法文、德文、俄
文、西班牙文,意大利文等 9 种语言
对话界面交互友好,信息清晰直观
能显著区分原文和译文,译文应方便识别、阅读和复制
输入文字的界面可借鉴对话聊天界面,即非只能查看当前输入信息,应能够查看
历史内容
点击某个历史内容,可以重新翻译为另外的一种语言,并不新增记录,只对历史
内容的翻译做更新即可
语音识别模型和翻译模型都需要使用本地模型,即能够无网络使用,以确保信息
安全
语音识别模型和翻译模型可以通过下载的方式按需加载(比如通过 HuggingFace ,
需要法文翻译,才需要下载法文模型),而非打包在安装包中
能够在 Mac 和 Windows 两个系统上运行,可完成至少三次以上的内容输入和自动
翻译
可使用 AI 辅助完成此项任务,包括但不限于界面设计、技术选型、架构设计、代
码实现、以及测试
交付:
提交 Github 仓库链接( Clone 后可以编译运行)
技术选型说明:为使该 Demo 达到最佳体验的技术选型,均可阐述。包括但不限
于所选语音识别模型和翻译模型的原因,所选跨平台开发框架的原因等
架构设计说明:
AI 使用方法与总结:
介绍完成此任务的过程中,在哪些环节使用了 AI ,分别使用了哪些 AI 工具
和 Agent
回顾此工作,哪些环节还可以改进使用 AI 的效率和质量
加分项
流式语音输入和流式翻译。 即给用户营造实时输入和实时翻译的体验,无需等待
数秒之后才出现内容
性能分析:对 Demo 的内存、CPU 、GPU 等性能进行分析,给出以后需要优化之

阐述个人的软件设计哲学

今日速览

  1. Claude Design:用对话快速生成精美视觉设计。
  2. Notebooks in Gemini:把聊天和文件按项目集中管理。
  3. CraftBot:本地自托管 AI 助手,全天候帮你规划任务。
  4. Is Your Site Agent-Ready?:一键扫描网站,看它是否适配 AI 代理。
  5. Vercel Flags:内置功能标记工具,轻松做 A/B 测试和发布。
  6. ChatGPT Shopping:视觉化购物体验,连接海量平台免费使用。
  7. React Email 6.0:开源邮件编辑器,直接嵌入应用定制邮件。
  8. Claude Code Rendering:无闪烁渲染,让开发者编码更流畅。
  9. Android CLI:终端快速构建安卓应用,速度提升三倍。
  10. CapyPlan:温和的日常计划工具,专注无压力高效。

1. Claude Design

用对话就能把创意变成视觉作品,这款 AI 设计神器让原型、幻灯片和营销素材一键生成。

  • 通过简单提示快速转化创意
  • 支持原型、演示文稿和营销素材制作
  • 对话式调整,导出灵活
  • 加速设计流程,保持品牌一致
    热度:🔺437
    Claude Design by Anthropic Labs
    访问官网 Product Hunt 详情


2. Notebooks in Gemini

在 Gemini 里开个笔记本,把所有聊天记录、文件和 PDF 都按项目整理好,让 AI 搜索更精准。

  • 集中管理聊天、文件和 PDF
  • 按项目分类,添加自定义说明
  • 提升 AI 网页搜索的准确性
  • 逐步向 Ultra、Pro 和 Plus 用户开放
    热度:🔺273
    Notebooks in Gemini
    访问官网 Product Hunt 详情


3. CraftBot

一个本地自托管的 AI 助手,在你电脑上全天候运行,主动帮你规划任务、实现目标。

  • 自托管运行,保护隐私
  • 独立理解任务并规划行动
  • 学习用户需求,主动协助
  • 支持多种管理面板和外部集成
    热度:🔺245
    CraftBot
    访问官网 Product Hunt 详情


4. Is Your Site Agent-Ready?

Cloudflare 出品的扫描工具,快速检查网站是否准备好迎接 AI 代理的浏览和交易。

  • 分析 robots.txt、MCP、OAuth 等标准
  • 发现网站不足,提高可发现性
  • 为 AI 代理互动和交易做准备
  • 一键扫描,操作简单
    热度:🔺226
    Is Your Site Agent-Ready? by Cloudflare
    访问官网 Product Hunt 详情


5. Vercel Flags

Vercel 平台内置的功能标记工具,现在全面上线,让你轻松管理功能发布和测试。

  • 创建标记和定义目标规则
  • 支持渐进式发布和 A/B 测试
  • 无需额外服务,集成在仪表板
  • 简化技术栈,提升发布效率
    热度:🔺193
    Vercel Flags
    访问官网 Product Hunt 详情


6. ChatGPT Shopping

ChatGPT 的购物功能升级,基于开放协议连接海量平台,带来视觉化的沉浸体验。

  • 连接 Target、Walmart 等 7 亿用户平台
  • 提供视觉比较和图像搜索
  • 个性化购物指南,免费使用
  • 增强购物互动和便捷性
    热度:🔺138
    ChatGPT Shopping
    访问官网 Product Hunt 详情


7. React Email 6.0

Resend 推出的开源邮件编辑器,直接嵌入你的应用,轻松构建和发送定制邮件。

  • 开源编辑器,高度可定制
  • 嵌入应用,无需切换工具
  • 提供新模板,快速上手
  • 简化邮件构建和发送流程
    热度:🔺136
    React Email 6.0 by Resend
    访问官网 Product Hunt 详情


8. Claude Code Rendering

Claude Code 的新渲染器,消除闪烁问题,支持鼠标操作,让开发者编码更顺畅。

  • 虚拟化视口,消除闪烁
  • 增加鼠标事件支持
  • 优化内存使用,适合长时间会话
  • 兼容 VS Code、tmux 等工具
    热度:🔺129
    Claude Code Rendering
    访问官网 Product Hunt 详情


9. Android CLI

以代理为中心的安卓开发工具包,从终端快速构建高质量应用,速度提升三倍。

  • 终端直接构建,减少猜测
  • 结合命令行工具和模块化技能
  • 实时知识库辅助 AI 代理
  • 加速设置、测试和部署流程
    热度:🔺125
    Android CLI
    访问官网 Product Hunt 详情


10. CapyPlan

一款温和的日常计划工具,专注无压力高效,帮你轻松管理小任务,集成 Apple Watch。

  • 设计舒适,界面清晰友好
  • 专注无压力高效生产
  • 集成 Apple Watch,便捷使用
  • 提供鸟瞰视图,轻松安排一天
    热度:🔺117
    CapyPlan
    访问官网 Product Hunt 详情

双持设备:
小米 17 标准版 16+512 ,澎湃 OS3
iPhone Air 256G iOS26 美版有锁
使用方式:
主力机用 iPhone ,日常生活刷视频、聊天、购物等,连小米的热点;副机为小米,打电话+工作 app+杂七杂八不重要的放在小米手机上,开启热点(不自动关闭);

优点:
1.能通话录音。通话录音属于平时可以不用但是不能没有的功能,工作打电话能给人一种无形的安全感/底气,可以随时追溯回放。
2.通知无缝流转,日常生活用 iPhone 难免需要接收验证码或者电话,这个时候不用来回掏手机,iPhone 直接能接电话、看短信,甚至还能屏幕镜像操控小米。
3.工作数据和生活分离,有时候工作中要拍点照片,乱七八糟的东西完全可以用小米,再安装一个 shelter/island 这类创建一个独立工作空间,把垃圾 app 装进去,还能一键停用。
4.iPhone 美版有锁是真的便宜,特别是大容量的。比如 iPhone 17 Pro Max 1tb 美版有锁 8 千多,国行一万三四千差了五六千块钱。
5.Wi-Fi 下 iPhone 续航很强,iPhone Air 也能用一天。

缺点:
1.双持设备累赘,特别是夏天要占用 2 个裤兜,有时候会恍惚,经常提醒自己别忘了拿 2 个手机,怀疑是不是丢了一个。
2.互通方面:短信通知流转有时候慢半拍,要等 20-30 秒,但不会出现遗漏; iPhone 接听小米电话有时候慢或者没声音,稳定性较差;镜像操控为了安全经常需要在小米手机上手动解锁很麻烦,这功能平时很少用,但是关键时刻一旦用了就因为隔了较长时间需要被控制设备解锁授权,而且镜像不是全屏幕的,在 iPhone 上类似于窗口化小一圈,帧率较低。
3.不适合经常需要打电话的人,打电话需要频繁掏另一个手机。此外一些 iPhone 上需要打电话的场景,比如 app 上点击打电话给外卖员、快递员、网约车司机等场景比较麻烦,需要用另一个手机打。
4.特殊情况:当你想要用 iPhone 连接局域网传输类的设备,例如连相机 Wi-Fi 传输照片、连大疆 pocket 3/4 等,就不能同时联网,会断网,微信等无法接收消息。常规 iPhone 会在接入这些 Wi-Fi 直传设备时切换到蜂窝保持网络连接。

欢迎大家分享补充。

1. 惯性导航与组合导航的对准过程

惯性导航系统(INS)在使用前需要进行初始化,包括位置、速度和姿态的初始化。其中,姿态初始化的过程称为对准,目的是将惯性器件与当地导航系轴向对齐。对准过程通常分为粗对准和精对准两个阶段。

  • 粗对准:依靠地球重力矢量、地球自转角速度等信息,通过解析计算获得初始姿态矩阵。粗对准的结果表现形式为姿态矩阵,进而可以求出欧拉角、四元数等。
  • 精对准:在粗对准的基础上,通过卡尔曼滤波等方法进一步提高对准精度。精对准过程可以使用捷联惯导导航系速度作为观测量。

2. 粗对准的MATLAB实现

粗对准的MATLAB实现示例,使用给定数据DATA.mat进行1分钟的粗对准仿真。

% 粗对准数据初始化
clc;
clear;
load('DATA.mat'); % 加载数据
f = 200; % 采样频率
latitude = deg2rad(39.978848182); % 纬度,以弧度表示
g = 9.7803*(1+0.0053024*((sin(latitude))^(2))-...
    0.000005*((sin(2*latitude))^(2))); % 重力加速度
w_ie = 7.292115e-5; % 地球自转角速度
T = 60; % 粗对准时间设置为1分钟

3. 精对准的MATLAB实现

以下是一个精对准的MATLAB实现示例,使用卡尔曼滤波进行精对准。

function [att0, attk, xkpk] = alignvn2(imu, qnb, pos, phi0, imuerr, wvn, ts,att_ref)
    % SINS初始对准使用卡尔曼滤波,以速度作为观测量
    % 状态向量:[phiE,phiN,phiU, dvE,dvN,dvU, ebx,eby,ebz, dbx,dby,dbz]'
    % 输入参数:imu - IMU数据
    %           qnb - 粗对准姿态四元数
    %           pos - 位置
    %           phi0 - 初始失准角估计
    %           imuerr - IMU误差设置
    %           wvn - 速度测量噪声
    %           ts - IMU采样间隔
    % 输出参数:att0 - 姿态对准结果
    %           attk, xkpk - 用于调试
    % 示例:
    %   avp0 = [[0;0;0], zeros(3,1), glv.pos0];
    %   imuerr = imuerrset(0.03, 100, 0.001, 10);
    %   imu = imustatic(avp0, 1, 300, imuerr);
    %   phi = [.5; .5; 5]*glv.deg;
    %   wvn = [0.01; 0.01; 0.01];
    %   [att0, attk, xkpk] = alignvn(imu, avp0(1:3)', avp0(7:9)', phi, imuerr, wvn);
    % 参考:alignfn, alignfn9, aligncmps, aligni0, alignWahba, alignsb, insupdate, etm.
    % 版权所有:Gongmin Yan
    % 西北工业大学,西安,中国
    % 2011年6月17日
    global glv;
    if nargin<4,  phi0 = [1.5; 1.5; 3]*glv.deg;  end
    if nargin<5,  imuerrset(0.01, 100, 0.001, 1);  end
    if nargin<6,  wvn = [0.01; 0.01; 0.01];  end
    if nargin<7,  ts = imu(2,7)-imu(1,7);  end
    if length(qnb)==3, qnb=a2qua(qnb); end  %如果输入qnb是欧拉角。
    nn = 2; nts = nn*ts;
    len = fix(length(imu)/nn)*nn;
    % Cnn?
    eth = earth(pos); vn = zeros(3,1); Cnn = rv2m(-eth.wnie*nts/2);
    % 滤波器初始化
    kf = avnkfinit(nts, pos, phi0, imuerr, wvn);
    [attk, xkpk] = prealloc(fix(len/nn), 4, 2*kf.n);
    ki = timebar(nn, len, 'Initial align using vn as meas.');
    for k=1:nn:len-nn+1
        wvm = imu(k:k+nn-1,1:6);
        % phim:角度增量
        % dvbm:速度增量
        [phim, dvbm] = cnscl(wvm);
        Cnb = q2mat(qnb);
        % 注意:不进行位置更新!!!
        % 速度更新方程
        dvn = Cnn*Cnb*dvbm;
        vn = vn + dvn + eth.gn*nts;
        %qnb = qupdt(qnb, phim-Cnb'*eth.wnin*nts);
        % 四元数更新方程
        qnb = qupdt2(qnb, phim, eth.wnin*nts);
        Cnbts = Cnb*nts;
        % kf.Phikk_1:状态转移矩阵[时变矩阵]
        kf.Phikk_1(4:6,1:3) = askew(dvn);
        % 陀螺零偏转到导航坐标系
        kf.Phikk_1(1:3,7:9) = -Cnbts;  % 参考公式(7.2.3)
        % 加表零偏转到导航坐标系
        kf.Phikk_1(4:6,10:12) = Cnbts; % 参考公式(7.2.3)
        % 卡尔曼滤波核心函数
        kf = kfupdate(kf, vn);

        % 状态向量更新
        qnb = qdelphi(qnb, 0.1*kf.xk(1:3));  % 部分反馈校正
        kf.xk(1:3) = 0.9*kf.xk(1:3);
        vn = vn-0.1*kf.xk(4:6);
        kf.xk(4:6) = 0.9*kf.xk(4:6);

        attk(ki,:) = [q2att(qnb)',imu(k+nn-1,end)];
        xkpk(ki,:) = [kf.xk; diag(kf.Pxk)];
        ki = timebar;
    end
    attk(ki:end,:) = []; xkpk(ki:end,:) = [];
    att0 = attk(end,1:3)';
    resdisp('Initial align attitudes (arcdeg)', att0/glv.deg);
    avnplot(nts, attk, xkpk,att_ref);

4. 四元素算法与欧拉角算法

  • 四元素算法:使用四元数来表示姿态,具有数值稳定性和计算效率高的优点。四元数更新方程如下:

    qnb = qupdt2(qnb, phim, eth.wnin*nts);
  • 欧拉角算法:通过欧拉角来表示姿态,直观但存在万向锁问题。欧拉角更新可以通过四元数转换为欧拉角实现:

    attk(ki,:) = [q2att(qnb)',imu(k+nn-1,end)];

参考代码 惯性导航,组合导航,粗对准及精对准程序 www.youwenfan.com/contentsfa/63971.html

5. 龙格-库塔法

龙格-库塔法是一种常用的数值积分方法,用于求解常微分方程。在惯性导航中,可以用于积分运动方程。例如,四元数的更新可以使用四阶龙格-库塔法进行数值积分。

方案对比

方案适用场景复杂度依赖大小
自定义 StoreSvelteKit 全栈0
svelte-i18n纯 Svelte 应用~3KB
typesafe-i18n类型安全优先~5KB
paraglide-js编译时优化~2KB

方案一:自定义 Store(推荐 SvelteKit)

最轻量的方案,无需额外依赖,代码完全可控。

GitHub: 无(纯手写)

1. 目录结构

src/lib/i18n/
├── translations.ts      # 翻译数据聚合
├── index.ts             # 导出接口
└── locales/
    ├── zh.ts            # 中文
    └── en.ts            # 英文

2. 翻译文件

// src/lib/i18n/locales/zh.ts
export const zh = {
    nav: {
        home: '首页',
        about: '关于'
    },
    welcome: '欢迎'
};

// src/lib/i18n/locales/en.ts
export const en = {
    nav: {
        home: 'Home',
        about: 'About'
    },
    welcome: 'Welcome'
};

3. 核心实现

// src/lib/i18n/translations.ts
import { zh } from './locales/zh';
import { en } from './locales/en';

export const translations = { zh, en };
export type Language = keyof typeof translations;
export type TranslationType = typeof zh;

// 检测浏览器语言
export function detectLang(): Language {
    if (typeof navigator === 'undefined') return 'zh';
    const lang = navigator.language.toLowerCase();
    return lang.startsWith('zh') ? 'zh' : 'en';
}

// 从 localStorage 读取
export function getStoredLang(): Language | null {
    if (typeof localStorage === 'undefined') return null;
    const stored = localStorage.getItem('lang');
    return stored === 'zh' || stored === 'en' ? stored : null;
}
// src/lib/i18n/index.ts
import { writable, derived, get } from 'svelte/store';
import { translations, detectLang, getStoredLang, type Language } from './translations';

// 优先从 localStorage 读取,否则检测浏览器语言
const initialLang = getStoredLang() || detectLang();

// 当前语言 Store
export const currentLang = writable<Language>(initialLang);

// 翻译函数 Store
export const t = derived(currentLang, ($lang) => {
    return (key: string): string => {
        const keys = key.split('.');
        let value: any = translations[$lang];
        for (const k of keys) {
            value = value?.[k];
        }
        // 回退到 key 本身
        return typeof value === 'string' ? value : key;
    };
});

// 切换语言
export function setLang(lang: Language) {
    currentLang.set(lang);
    if (typeof localStorage !== 'undefined') {
        localStorage.setItem('lang', lang);
    }
}

// 获取当前语言(非响应式,用于脚本)
export function getLang(): Language {
    return get(currentLang);
}

4. 组件中使用

$ 前缀的作用:Svelte 中 $storeNamestoreName.subscribe() 的语法糖,表示自动订阅该 Store,值变化时组件自动更新。

<!-- +layout.svelte -->
<script lang="ts">
    import { currentLang, t, setLang } from '$lib/i18n';
    
    // 不带 $:获取 Store 对象本身
    console.log(currentLang);  // Store 对象 { subscribe, set, update }
    
    // 带 $:获取 Store 的当前值(自动订阅)
    console.log($currentLang); // 'zh' 或 'en'
</script>

<nav>
    <!-- 使用 $t() 获取翻译,$currentLang 获取当前语言 -->
    <a href="/">{$t('nav.home')}</a>
    <a href="/about">{$t('nav.about')}</a>
    
    <button on:click={() => setLang($currentLang === 'zh' ? 'en' : 'zh')}>
        {$currentLang === 'zh' ? 'EN' : '中文'}
    </button>
</nav>

对比

写法含义使用场景
currentLangStore 对象传递给函数、调用方法
$currentLangStore 的值模板中显示、读取当前值

5. SSR 服务端渲染支持

SvelteKit 原生支持 SSR,语言从 URL/Cookie 检测,服务端预加载翻译。

服务端与客户端的差异

环境可用不可用
服务端URL、Cookie、HeaderlocalStorage、navigator
客户端全部

Cookie 工具函数

// src/lib/i18n/cookies.ts
import type { Cookies } from '@sveltejs/kit';

export function getLangFromCookies(cookies: Cookies): 'zh' | 'en' {
    const stored = cookies.get('lang');
    return stored === 'zh' || stored === 'en' ? stored : 'zh';
}

export function setLangCookie(cookies: Cookies, lang: 'zh' | 'en') {
    cookies.set('lang', lang, {
        path: '/',
        maxAge: 60 * 60 * 24 * 365  // 1年
    });
}

Layout Load(服务端预加载):

// src/routes/+layout.ts
import type { LayoutLoad } from './$types';
import { translations } from '$lib/i18n/translations';
import { getLangFromCookies, setLangCookie } from '$lib/i18n/cookies';

export const load: LayoutLoad = ({ cookies, url }) => {
    // 服务端:从 Cookie 或 URL 参数获取语言
    const langParam = url.searchParams.get('lang');
    const lang = (langParam === 'en' ? 'en' : 'zh');

    // 同步 Cookie
    setLangCookie(cookies, lang);

    // 预加载翻译数据
    const t = translations[lang];

    return { lang, t };
};

Layout(接管切换):

<!-- src/routes/+layout.svelte -->
<script lang="ts">
    import { onMount } from 'svelte';
    import { setLang } from '$lib/i18n';

    let { data, children } = $props();
    
    // 初始化语言
    setLang(data.lang);
    
    // 语言切换
    function switchLang() {
        const newLang = $currentLang === 'zh' ? 'en' : 'zh';
        setLang(newLang);
        // 跳转刷新
        window.location.href = `/?lang=${newLang}`;
    }
</script>

<nav>
    <a href="/?lang=zh">中文</a>
    <a href="/?lang=en">EN</a>
    <button on:click={switchLang}>
        当前: {$currentLang}
    </button>
</nav>

{@render children()}

工作原理

  1. 用户访问 /?lang=en
  2. 服务端从 URL 读取参数,同步到 Cookie,返回预加载了英文的 HTML
  3. 客户端 setLang(data.lang) 同步 Store,页面已有翻译
  4. 用户切换语言 → 跳转 /?lang=zh → 服务端返回中文 HTML

SEO 友好

  • 搜索引擎爬虫访问 /?lang=zh 抓中文内容
  • 访问 /?lang=en 抓英文内容
  • 每个语言都有独立 URL

5. SSR 注意事项

<!-- 安全访问 localStorage -->
<script lang="ts">
    import { onMount } from 'svelte';
    import { setLang } from '$lib/i18n';
    
    onMount(() => {
        // 客户端才执行
        const saved = localStorage.getItem('lang');
        if (saved) setLang(saved as 'zh' | 'en');
    });
</script>

方案二:svelte-i18n (纯svelte推荐)

社区最流行的方案,API 设计简洁。

npm install svelte-i18n

初始化文件

// src/lib/i18n.ts
import { register, init, getLocaleFromNavigator, locale } from 'svelte-i18n';

// 注册语言文件(懒加载)
register('zh', () => import('./locales/zh.json'));
register('en', () => import('./locales/en.json'));

// 初始化配置
init({
    fallbackLocale: 'zh',
    initialLocale: getLocaleFromNavigator()
});

// 导出切换函数
export { locale };
export const setLocale = (lang: string) => locale.set(lang);

应用入口引入

// src/main.ts (纯 Svelte)
import './lib/i18n';  // ← 必须先导入初始化
import App from './App.svelte';

const app = new App({ target: document.body });
export default app;
// src/routes/+layout.ts (SvelteKit)
import { browser } from '$app/environment';
import { locale, waitLocale } from 'svelte-i18n';
import '$lib/i18n';  // 导入执行初始化
import type { LayoutLoad } from './$types';

export const load: LayoutLoad = async () => {
    if (browser) {
        const saved = localStorage.getItem('lang');
        if (saved) locale.set(saved);
    }
    await waitLocale();  // 等待翻译加载完成
    return {};
};

组件使用

<script>
    import { _, locale } from 'svelte-i18n';
    import { setLocale } from '$lib/i18n';
</script>

<h1>{$_('welcome')}</h1>
<p>{$_('footer.copyright')}</p>

<button on:click={() => setLocale($locale === 'zh' ? 'en' : 'zh')}>
    切换
</button>

带参数的翻译

{
    "hello": "Hello {name}!",
    "items": "You have {count} item | You have {count} items"
}
<p>{$_('hello', { values: { name: 'World' } })}</p>
<p>{$_('items', { values: { count: 5 } })}</p>

方案三:typesafe-i18n

类型安全的国际化方案,IDE 自动补全翻译 key。

npm install typesafe-i18n
npx typesafe-i18n --setup  # 生成配置文件

自动生成类型

// src/i18n/i18n-types.ts(自动生成)
export type Translation = {
    nav: {
        home: string;
        about: string;
    };
    welcome: string;
};

使用

<script lang="ts">
    import { LL } from '$lib/i18n/i18n-svelte';
    import { setLocale } from '$lib/i18n/i18n-util';
</script>

<h1>{$LL.welcome()}</h1>
<a href="/about">{$LL.nav.about()}</a>

方案四:paraglide-js

编译时优化的国际化方案,零运行时开销。

npm install @inlang/paraglide-js

特点

  • 编译时将翻译内联到代码中
  • 只打包用到的翻译
  • 支持 Tree Shaking
// 编译后直接使用
import * as m from '$lib/paraglide/messages.js';

console.log(m.hello_world()); // "Hello World!"

方案五:URL 路由级多语言(SvelteKit)

SEO 友好的方案,语言体现在 URL 中。

/zh/about    → 中文关于页
/en/about    → 英文关于页
/about       → 默认语言

路由配置

// src/params/lang.ts
import type { ParamMatcher } from '@sveltejs/kit';

export const match: ParamMatcher = (param) => {
    return ['zh', 'en'].includes(param);
};
src/routes/
├── [[lang=lang]]/         # 可选语言前缀
│   ├── +page.svelte
│   └── about/
│       └── +page.svelte
└── +layout.ts

加载翻译

// src/routes/[[lang=lang]]/+layout.ts
import type { LayoutLoad } from './$types';
import { translations } from '$lib/i18n/translations';

export const load: LayoutLoad = ({ params }) => {
    const lang = (params.lang as 'zh' | 'en') || 'zh';
    return {
        lang,
        t: translations[lang]
    };
};

关键决策点

场景推荐方案理由
快速上线svelte-i18n生态成熟,文档丰富
类型安全typesafe-i18n编译时检查,IDE 提示
SEO 优先URL 路由级语言在 URL,搜索引擎友好
极简依赖自定义 Store零依赖,完全可控
大型应用paraglide-js编译优化,性能最好
SSR + SEO自定义 Store + Cookie服务端预加载,客户端接管切换

最佳实践

1. 延迟加载翻译

// 不要:import zh from './locales/zh';  // 打包进主 bundle
// 要:
register('zh', () => import('./locales/zh.json'));  // 按需加载

2. SSR 安全访问浏览器 API

<script>
    import { browser } from '$app/environment';
    import { onMount } from 'svelte';
    
    // 方式一:onMount
    onMount(() => {
        localStorage.getItem('lang');  // 安全
    });
    
    // 方式二:browser 判断
    if (browser) {
        localStorage.getItem('lang');  // 安全
    }
</script>

3. 回退机制

// 找不到翻译时回退到 key
export function t(key: string): string {
    const value = getNestedValue(translations[lang], key);
    return value || key;  // 回退到 key
}

4. 类型安全(自定义 Store 版)

// 生成翻译 key 的类型
type DotPrefix<T extends string> = T extends '' ? '' : `.${T}`;

type DotPath<T> = (
    T extends object ?
        { [K in keyof T]:
            `${Exclude<K, symbol>}${DotPrefix<DotPath<T[K]>>}`
        }[keyof T] :
        ''
) extends infer D ? Extract<D, string> : never;

export type TranslationKey = DotPath<typeof zh>;

// 使用
export const t = (key: TranslationKey) => ...
// IDE 提示: 'nav.home' | 'nav.about' | 'welcome' ...

5. 语言切换动画

{#key $currentLang}
    <div in:fade={{ duration: 150 }}>
        <h1>{$t('welcome')}</h1>
    </div>
{/key}

参考资源

大家好,我是 Nas Player Pro 的独立开发者。

几天前我在这里简单介绍过我的 App 。我看了后台数据,有超过 2000 次的曝光——显然,V2EX 的 Datahoarder 们对这个工具很感兴趣。但我猜,很多人看到“付费”两个字,最终还是选择了观望。

今天我想直白地和大家交个底:我不会免费发布,也绝没有开源核心代码的计划。因为它的技术含量和带来的体验,绝对配得上它的定价。

👉 专为 TB 级媒体库和重度 Datahoarder 打造的究极优化

你是否厌倦了在 Android 或 TV 设备上连接 NAS 看漫画、图集时,总是需要先漫长地等待整个(几十 GB 的)压缩包下载到本地缓存?

Nas Player Pro 搭载了我死磕底层逻辑研发的独家即时串流引擎:哪怕是超过 10GB 、内部包含复杂多层级文件夹的巨大 ZIP/RAR 压缩包,也能完全跳过全量下载的过程。无需解压,不吃任何本地存储空间,引擎会在底层直接解构文件,在极短的时间内直接串流读取内容。

在此之前,这种丝滑的“压缩包直读流媒体体验”几乎是 iOS 用户的特权。而现在,Android 和 Amazon Fire 终于迎来了属于它们的终极方案。跨平台的串流漫画世界,已经为你打开。

好东西从来不缺识货的人,买过的人自然明白它的含金量和带来的满足感。我不打算用廉价来贬低我熬夜写出来的核心技术。

不过,V2EX 是一个懂技术的硬核社区。如果大家对这个真正的“流媒体播放器”有强烈的需求和呼声,我愿意专门为这里的 Geek 们开启一次限时的特别促销活动。

如果你需要它,或者想亲测一下这套流媒体引擎的实力,请在评论区告诉我。

你是否想过拥有一个像 Claude Code 一样强大的命令行 AI 编程助手?

你是否想深入了解 Agent (智能体)背后的核心事件循环与工具调用( Tool Use )原理?

mini-cc 就是为你准备的开源解决方案!

这是一个完全使用 TypeScript 编写的轻量级 AI 编程 Agent 核心框架。

它摒弃了复杂的历史包袱,采用纯粹的函数式编程( Functional Programming )范式,将大模型、工具系统、记忆上下文与事件循环精简到了极致。


✨ 核心能力与亮点

1. 🧠 多模型兼容与无缝切换

  • 双擎驱动:原生支持 Anthropic API (如 Claude 3.5 Sonnet/Opus )以及基于 OpenAI 标准的各类大模型接口。
  • 开源/国产模型适配:完美适配 Qwen (通义千问)、DeepSeek 、Kimi 等热门模型。只需修改 .env 环境变量,即可一键切换底层大脑。

2. 💡 沉浸式的“思考”体验(深度适配推理模型)

  • 流式输出:支持极速的流式文本渲染,告别漫长的等待。
  • 思维链( CoT )可视化:深度适配如 Qwen-Max / DeepSeek-R1 等带有 reasoning_content 的模型。
  • AI 的推导和思考过程在终端中实时呈现,让你清晰看到它解决问题的每一步逻辑。

3. 🛠️ 强大的自主行动力( Tool Use 系统)

  • BashTool:赋予 AI 终端执行权限,它可以帮你自动执行 npm installgit commit、运行测试脚本等。安全沙盒机制保障高危命令被有效拦截。
  • FileReadTool:赋予 AI 读取本地代码库的权限,支持突破长度限制的智能截断。
  • FileWriteTool:赋予 AI 修改、覆盖代码的能力,支持自动补全缺失的目录层级。你只需提出需求,代码修改全自动完成。

4. 🔁 永不言弃的 Agent 循环

  • 实现了专业的 Tool Use 事件循环( Agent Loop )。
  • 当任务复杂时,AI 会连续多次调用工具(如:先 FileReadTool 看代码 -> 再 BashTool 运行测试 -> 最后 FileWriteTool 修复 Bug ),直到彻底解决你的问题。

5. 🛡️ 纯粹的函数式架构

  • 全面拥抱函数式编程( FP )思想,零 class 依赖。闭包状态管理使得核心更加安全、高效且易于测试与扩展。
  • 附带详尽的中文注释,是学习和二次开发 Agent 的绝佳教科书。


🎮 交互效果展示:一句话生成五子棋游戏!

在终端中启动 mini-cc 后,你只需一句自然语言指令,它就能化身为全栈开发工程师,从构思到编码,一气呵成。

以下是真实交互实录(还原了利用 test_file/gomoku 编写五子棋的过程):

mini-cc> 帮我写一个网页版的五子棋游戏,放在 test_file/gomoku 目录下。页面要好看,带黑白棋提示。

[Agent] 已收到指令,正在思考中...

==================== 思考过程 ====================
1. 用户需要一个五子棋游戏,包含 HTML/CSS/JS 。
2. 目标目录是相对于当前工作目录的 test_file/gomoku 。
3. 需要提供漂亮的 UI 界面,以及当前轮到哪一方下棋的提示(如:黑棋先行)。
4. 我将使用 FileWriteTool 分别创建 index.html 、style.css 和 script.js 。
5. 棋盘可以使用 Canvas 或者 DOM 元素网格来实现,为了简单直观,我这里使用 DOM 网格结合 CSS 样式来实现。

==================== 模型回复 ====================
好的,我这就为您创建带有精美 UI 和状态提示的五子棋小游戏。

▶ [Agent] 正在调用工具: FileWriteTool ...
[FileWriteTool] 正在写入文件: /xxxx/mini-cc/test_file/gomoku/index.html
✔ [Agent] 工具 FileWriteTool 执行完毕。

▶ [Agent] 正在调用工具: FileWriteTool ...
[FileWriteTool] 正在写入文件: /xxxx/mini-cc/test_file/gomoku/style.css
✔ [Agent] 工具 FileWriteTool 执行完毕。

▶ [Agent] 正在调用工具: FileWriteTool ...
[FileWriteTool] 正在写入文件: /xxxx/mini-cc/test_file/gomoku/script.js
✔ [Agent] 工具 FileWriteTool 执行完毕。

==================== 思考过程 ====================
文件均已创建成功。

==================== 完整回复 ====================
五子棋小游戏已经为您创建完成!

我为您生成了以下文件:
1. `index.html`: 包含游戏棋盘和状态提示栏(`<div class="status" id="status">黑棋先行</div>`)。
2. `style.css`: 提供了木质棋盘配色和黑白棋子的立体阴影效果。
3. `script.js`: 实现了 15x15 的棋盘逻辑、落子交替规则以及横、竖、斜向的五子连珠胜负判断。

您可以直接用浏览器打开 `test_file/gomoku/index.html` 体验游戏!

code1

code2

只需几秒钟,一个带有 <div class="status" id="status">黑棋先行</div> 状态提示的五子棋网页便自动生成并落盘!

wuziqi

buddy


🚀 立即开始你的 Agent 之旅

无论你是想打造自己的效率工具,还是想探索大模型在工程领域的无限潜能,mini-cc 都是一个绝佳的起点。

👉 查看源码与文档mini-cc GitHub Repository 来个 Star ✨。
👉 深入架构设计:请阅读我们的 📚 文档指南

执行maven clean install命令,编译后的类中未包含get set方法

现象

在IntelliJ IDEA中执行mvn-install.cmd文件。其中文件内容为

`mvn clean install -DskipTests`

执行的结果中报了错误

[ERROR] /C:/workspaces/IdeaProjects/guigen-projects/commons-io/src/main/java/work/guigen/io/StringSerializableContainer.java:[10,16] 找不到符号
符号:   方法 getValue()
位置: 类 work.guigen.io.StringSerializableContainer

原java类为

/**
 * 继承这个类需要覆写serialize()方法
 */
@Getter
@Setter
@NoArgsConstructor
public class SerializableContainer<T> implements SimpleSerializable {
    private T value;

    public SerializableContainer(T value) {
        this.value = value;
    }

}

编译后的class为

public class SerializableContainer<T> implements SimpleSerializable {
    private T value;

    public SerializableContainer(T value) {
        this.value = value;
    }
}

解决

在这一次问题中,解决的方式为修改环境变量中java的版本。
电脑中安装了多个jdk版本,默认jdk版本为25.
在环境变量中加入JAVA_HOME,并在PATH中加上%JAVA_HOME%\bin,上移(优先级高于之前的java配置)。
在命令行中执行java -version。确认java版本更改成功。

关闭IntelliJ IDEA,并重新打开,确保配置生效。

tag

  • lombok
  • maven
  • java
  • IntelliJ IDEA

在与 AI 对话的过程中,你一定见过这样不伦不类的输出:

换言之,那些本该加粗的部分并没有加粗,周围却多了一堆星号。

有一定技术背景的读者都知道,这些星号是 Markdown 中的强调标记。Markdown 是一种格式标记语言,可以用一些简单而直观的语法,为纯文本附加格式信息。近年来,Markdown 文档常用于模型训练,从而成为了 AI 模型的原生语言。如今,AI 模型的回答大多都是以 Markdown 格式输出,然后再在客户端渲染为带格式文本的。

当然,上述问题并不只出现在 AI 聊天中。如果你用 Markdown 记笔记或者写作,应当对类似的现象早就不陌生了。

可是,Markdown 语法不就是把 ** 之间的内容当作强调部分的吗?为什么在一些场景下能加粗,另一些场景下就不能加粗了呢?

答案是,「** 之间的是加粗部分」只是一种简略说法,当下流行的 Markdown 标准已经给这个规则追加了很多例外。遗憾的是,虽然新规则本意是让 Markdown 更加严谨,但却没有考虑中文的特殊性,导致一些本应生效的强调无法正常渲染。

来龙去脉要从 2004 年说起。当 John Gruber 在那年发布原版 Markdown 时,并没有制定严谨的规范,只提供了一份非正式的语法说明和一个 Perl 脚本 Markdown.pl

根据 Gruber 的语法说明,任何包裹在 *_ 中的文本,转换后都将被包裹在 HTML 标签 <em> 中;包裹在 **__ 中的文本,转换后将被包裹在 HTML 标签 <strong> 中;唯一的例外是,如果 *_ 的周围是空格,则原样输出。

事实上,如果你用 Markdown.pl 来渲染上面的问题案例:

perl Markdown.pl <<EOF
**重要:**请注意。

这是**「重要」**的内容。
EOF

会发现结果是完全正确的:

<p><strong>重要:</strong>请注意。</p>

<p>这是<strong>「重要」</strong>的内容。</p>

这当然不是因为 Gruber 中文十级,纯粹只是因为 Markdown.pl 的实现方式就是简单粗暴的正则表达式替换:

$text =~ s{ (\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1 }
    {<strong>$2</strong>}gsx;

$text =~ s{ (\*|_) (?=\S) (.+?) (?<=\S) \1 }
    {<em>$2</em>}gsx;

对于一个标记语言来说,这样的规则和解析方式未免有些潦草。(当年的 Gruber 大概也没想到 Markdown 会有如今地位。)事实证明,原版 Markdown 确实留下了很多模糊地带和不理想的边缘场景。就拿涉及强调标记的场景来说,我们并不希望像 a*(b+c)*d 这样的数学式,或者 snake_case_var 这样的变量名中的 *_ 被当作添加强调,但 Markdown.pl 显然不能处理这样的复杂性。

然而,Markdown.pl 在 1.0.1 版后再也没有更新。其后,出现了不下十种 Markdown 的扩展语法和各种语言的实现,相互多有抵牾。一群不满现状的 Markdown 爱好者启动了一个标准化项目,于 2014 年发布第一版 CommonMark 规范,获得了广泛采用。2017 年,GitHub 在制定自己的 Markdown 规范(GitHub Flavored Markdown)时,将其作为 CommonMark 的严格超集,即除了表格等少数语法扩展外,完全沿用 CommonMark 的其余规则。这也进一步巩固了 CommonMark 的地位。

目前,许多主流的 Markdown 转换库,包括 ChatGPT、Claude 网页版使用的 remark,Obsidian 使用的 turndown,以及 VS Code 使用的 markdown-it 等,都是基于 CommonMark 的实现。因此,要解释 Markdown 强调标记为何会在中文环境下失效,就要看 CommonMark 对于强调语法是如何规定的。

这部分规定见于 CommonMark 规范的第 6.2 节。原文相当晦涩,但简单来说,为了让强调标记的使用更加严谨,它要求强调标记必须紧贴(flank)文字内容,其间内容才能被视作强调部分。

为了在程序上实现这一点,CommonMark 引入了「左侧贴合」(left-flanking)和「右侧贴合」(right-flanking)两个概念。

具体而言,一串强调标记是「左侧贴合」的,当且仅当——

  1. 它的后面不是一或多个空白符;及
  2. 它的后面——
    a. 不是一个标点符号;或
    b. 是一个标点符号,而它的前面是一或多个空白符(例如 She says, **“Nice to ...),或者一个标点符号(例如 (**“As noted ...)。1

换言之,一串强调标记的后面应当紧接着文字,或者左括号、左引号这样的起始标点,才能被视为强调部分的开头。

类似地,一串强调标记是「右侧贴合」的,当且仅当——

  1. 它的前面不是一或多个空白符;及
  2. 它的前面——
    a. 不是一个标点符号;或
    b. 是一个标点符号,而它的后面是一或多个空白符(例如 ... to meet you,”** she says.),或者一个标点符号(例如 ... noted above.”**))。

换言之,一串强调标记的前面应当紧接着文字,或者右引号、右括号这样的结束标点,才能被视为强调部分的结束。

在此基础上,CommonMark 规定,只有处在「左侧贴合」的强调标记之后、「右侧贴合」的强调标记之前的文本,才能被视作强调内容。特殊地,如果使用 ___ 作为强调标记,要让强调生效,则它不能同时构成左侧贴合和右侧贴合,除非它在被贴合内容的另一侧紧接着一个标点(例如 _What If?_.)。

由此,上文提到的这些边缘场景都会按原样渲染,而不会出现任何强调格式:

a*(b+c)*d
snake_case_var

在第一行中,前一个 * 的后面是标点符号,但它前面既不是标点符号也不是空白符,所以不是右侧贴合;类似地,后一个 * 也不是左侧贴合。因此,没有形成一个强调部分。在第二行中,两个 _ 的前后都是字母,而不是空白或标点,因此既是右侧贴合又是左侧贴合,也不能形成强调部分。

不难发现,当 CommonMark 试图以程序方式定义何为「紧贴文字」时,只考虑了英文等以空格分词的西方书写系统,因此大量依赖空格的语义功能来判断一段内容从何处开始、在何处结束。但一旦遇到中文这类词语之间没有空格的情况,就会出现很多不符合情理的判断。

回到上面的问题案例:

**重要:**请注意。
这是**「重要」**的内容。

在第一行中,后一对 ** 的前面是冒号,属于标点符号。根据定义,要构成右侧贴合,它的后面必须是空白符或者标点符号,而这里它的后面是汉字,从而不构成右侧贴合。在第二行中,前一对 ** 的后面是引号,同属标点符号。根据定义,要构成左侧贴合,它的前面必须是空白符或者标点符号,而这里它的前面也是汉字,从而不构成左侧贴合(类似地,后一对 ** 也不构成右侧贴合)。

因此,在这两个例子中,前后两对 ** 都无法形成强调部分,其间文本也就不会被加粗。

(另一个较为少见但成因类似的案例是夹在汉字之间的 _,即形如 这是__重要__的内容 的强调部分,因为前述针对 _ 的特别规则,也不会生效。)

以下是一些常见 Markdown 处理器的渲染效果对比,其中不能渲染出中文间强调标记的几种处理器都是采用了 CommonMark 规范:

常见 Markdown 处理器的渲染效果对比

其实,早就有许多中日韩用户注意到了这个问题。至迟在 2017 年,CommonMark 社区中就有用户提报过东亚文字中的强调标记问题,并提交了一个合并请求,但最终并未获得采纳。根据一名 CommonMark 维护者的说法,CommonMark 把兼容既有 Markdown 放在首位,针对 CJK 的专属方案不太可能被纳入,除非能证明「对现存海量文档影响极小」。

因此,至少在短期内,大概仍然无法期待中文 Markdown 的渲染问题从上游获得修复。根据具体的使用场景,这里提出几种变通方法供参考。

第一种方法是使用 HTML 标签来创建强调。由于 Markdown 语法允许直接使用 HTML,可以将上面的问题案例改写成:

<strong>重要:</strong>请注意。
这是<strong>「重要」</strong>的内容。

这样就完全回避了 CommonMark 不适合中文的处理规则。这种做法最为直接,缺点是比较麻烦,也不太美观。

第二种方法是通过添加空格来变相满足 CommonMark 的要求,即写成([SPACE] 表示插入空格的位置):

**重要:**[SPACE]请注意。
这是[SPACE]**「重要」**[SPACE]的内容。

这样,原本不构成贴合的强调标记,由于空格的加入就成为贴合的了。有趣的是,有一些国外模型(特别是 Gemini),可能因为缺乏中文训练,会强迫症般地在中文冒号甚或句号后面加一个空格,导致输出结果「误打误撞」地可以正确加粗。(这也是一个识别 AI 生成文本的实用技巧。)

当然,在中文里加普通空格比较难看,也没有任何语义上的依据。相比之下,一种更为美观的做法是加入不占任何空间的零宽空格(U+200B ZERO WIDTH SPACE):

**重要:[ZWSP]**请注意。
这是**[ZWSP]「重要」[ZWSP]**的内容。

这里,[ZWSP] 表示插入零宽空格的位置。注意与普通空格不同,零宽空格不是 CommonMark 定义上的空白符,而是普通字符,因此要加在强调标记的内侧而不是外侧,才能使得强调标记变成贴合文本的。考虑到零宽空格本来就具有指示单词边界的功能,这么做在语义上也算说得过去,只是输入起来可能比较麻烦。如果采用这种方法,可能最好配合一些快捷输入方式(例如 macOS 的文本替换)或者自动化脚本。

此外,如果你是开发者,或者所用工具支持扩展,那么可以使用一些针对东亚文字优化的补丁。例如,markdown-cjk-friendly 项目修订了 CommonMark 规则,在解析强调标记时,将其外围的 CJK 字符视为与空白符有同等效果。它提供了适用于 markdown-it 和 remark 的插件,将其与这些库一起导入,即可在不影响其他 CommonMark 规则正确性的同时(markdown-cjk-friendly 可以通过所有 CommonMark 的现有测试),修复 CJK 文本中的 Markdown 强调标记问题。

值得肯定的是,一些 AI 服务似乎已经注意到了这个问题。例如,国产的 Kimi 和豆包都能正确渲染夹在汉字之间的强调标记,即使它们使用的 markdown-it 遵循的也是 CommonMark,或许是专门做了处理;国外服务中的 Perplexity 也能正确渲染。

主流 AI 服务的渲染测试

最后跑题一句,在思考如何修复强调格式的同时,也不妨花些时间思考是否真的有必要靠格式来制造强调——粗体并不是适合中文的强调方式斜体中文更是最可怕的排版效果之一。如果条件允许,本文还是建议不要学习 AI 模型一言不合就加粗的坏习惯,尽量依靠句式、措辞和标点的变化来指示重点。毕竟,真正掷地有声的话是不需要靠吼的。

    你是不是经历过:项目写到一半,发现目录乱成毛线,组件互相依赖,改一个地方崩十个地方。想重写?老板说“没时间”。不重写?每天加班改bug。今天我们就来聊聊前端架构——不是大厂才需要的东西,而是让你的项目能撑过3年迭代的“骨架”。看完你就能搭出一个即使团队换了几拨人,代码依然整洁的项目。

    前言

    盖房子要先打地基、搭框架,再砌墙、装修。前端也一样。很多人上来就写组件,写到一半发现状态管理乱、API调用散落各处、样式冲突、路由不知道怎么组织……最后项目就像一栋歪歪扭扭的危房,加个新功能都怕塌。

    架构不是“过度设计”,而是让你在项目初期花20%的时间,省掉未来80%的痛苦。今天我们就从零开始,搭一套能支撑中大型项目的前端架构。

    一、技术选型:别跟风,看需求

    架构的第一步是选技术。但记住:没有最好的技术,只有最合适的

    1. 框架选什么?

    • React:生态最丰富,适合复杂交互、需要高度定制化的项目。学习曲线平缓,但需要自己搭配路由、状态管理。
    • Vue:上手快,模板直观,适合中小项目或团队以Java/PHP为主。官方生态完整(Vue Router、Pinia)。
    • Angular:大而全,适合大型企业级应用,但学习曲线陡峭。

    建议:如果不是特殊需求,React或Vue二选一。团队熟悉哪个用哪个。

    2. 状态管理

    • React:简单项目用Context + useReducer;中等项目用Zustand(轻量);大项目用Redux Toolkit。
    • Vue:Vue 3 推荐 Pinia(比Vuex更简单)。

    3. 构建工具

    • Vite:首选,快。除非你要兼容IE或需要特殊插件,否则别用Webpack了。

    4. 类型系统

    • TypeScript:必选。别犹豫,就算小项目也能减少一半的运行时bug。

    5. UI组件库

    • 内部后台系统:Ant Design、Element Plus、Semi Design。
    • 面向C端需定制:自己封装基础组件库,或用Tailwind CSS + 无头组件(Headless UI)。

    二、目录结构:一眼就知道代码在哪

    一个好的目录结构,新人进来10分钟就能找到要改的文件。推荐分层结构(以React为例):

    src/
    ├── api/            # API请求层
    │   ├── request.ts  # axios实例配置
    │   ├── user.ts     # 用户相关接口
    │   └── product.ts
    ├── assets/         # 静态资源(图片、字体)
    ├── components/     # 通用组件(按钮、弹窗、表格)
    │   ├── Button/
    │   │   ├── index.tsx
    │   │   ├── Button.module.css
    │   │   └── types.ts
    │   └── Modal/
    ├── hooks/          # 自定义Hooks
    ├── layouts/        # 布局组件(Header、Sidebar)
    ├── pages/          # 页面组件(按路由划分)
    │   ├── Home/
    │   ├── User/
    │   │   ├── List.tsx
    │   │   ├── Detail.tsx
    │   │   └── components/  # 页面私有组件
    │   └── ...
    ├── router/         # 路由配置
    ├── store/          # 全局状态(Redux/Zustand)
    ├── styles/         # 全局样式、主题变量
    ├── types/          # 全局TS类型定义
    ├── utils/          # 工具函数(日期格式化、校验、存储)
    └── main.tsx        # 入口

    原则

    • 按功能/模块划分,不是按文件类型(不要把所有css放一个目录)。
    • 通用组件放components,页面独有组件放在页面目录下的components
    • API按业务模块拆分,不要一个api.ts放几百行。

    三、API层:统一管理,妈妈再也不怕接口乱飞

    很多项目直接在组件里写fetch('/api/user'),导致接口地址散落各处,改个域名要替换几十个文件。

    正确姿势:封装API层。

    // api/request.ts
    import axios from 'axios';
    const request = axios.create({
      baseURL: import.meta.env.VITE_API_BASE_URL,
      timeout: 10000,
    });
    // 请求拦截器:加token、loading等
    request.interceptors.request.use(config => {
      config.headers.Authorization = `Bearer ${getToken()}`;
      return config;
    });
    // 响应拦截器:统一错误处理、数据解构
    request.interceptors.response.use(
      res => res.data,
      err => {
        if (err.response?.status === 401) {
          // 跳转登录
        }
        return Promise.reject(err);
      }
    );
    export default request;
    // api/user.ts
    import request from './request';
    export const getUserInfo = (id: number) => request.get(`/user/${id}`);
    export const updateUser = (data: User) => request.put('/user', data);

    组件里只调用getUserInfo,不关心底层用axios还是fetch。

    四、状态管理策略:别把所有东西都放全局

    • 组件内部状态useState
    • 跨组件但非全局ContextZustand 的小store。
    • 全局共享(用户信息、主题、权限):Redux/Pinia。
    • 服务器状态(缓存、请求状态):React Query / Vue Query(推荐),比手动管理loading、error、重试方便得多。

    五、路由设计:懒加载 + 权限控制

    • 使用动态import()实现路由懒加载,减少首屏体积。
    • 封装一个AuthRoute组件,根据用户权限重定向或显示403。
    // router/index.tsx
    const routes = [
      {
        path: '/dashboard',
        component: lazy(() => import('@/pages/Dashboard')),
        meta: { requiresAuth: true, roles: ['admin'] }
      }
    ];
    // 在Router组件里统一拦截

    六、样式方案:别让CSS互相打架

    • CSS Modules:简单、无侵入、类型安全。
    • Tailwind CSS:快速开发,但团队需要适应。
    • CSS-in-JS(styled-components):动态样式方便,但运行时性能稍差。
    • BEM命名 + SCSS:传统但稳定。

    推荐:CSS Modules + SCSS,或Tailwind + 普通CSS

    七、错误处理与日志

    • 全局错误边界:React的ErrorBoundary捕获组件渲染错误。
    • API错误统一处理:在axios拦截器里做。
    • 开发环境用console,生产环境禁用或上报
    if (import.meta.env.PROD) {
      console.log = () => {};
      console.warn = () => {};
    }

    八、代码规范与Git Hooks

    • ESLint:配置plugin:@typescript-eslint/recommended
    • Prettier:统一格式化。
    • Husky + lint-staged:提交前自动lint和格式化。
    • Commitlint:规范commit信息(如feat: xxxfix: xxx)。

    九、环境配置与构建优化

    • 使用.env文件区分开发、测试、生产环境。
    • Vite配置别名@指向src
    • 生产构建:开启terser压缩、rollup-plugin-visualizer分析包体积、代码分割(splitChunks)。

    十、总结:架构是不断演进的

    没有完美的架构,只有适应当下团队的架构。但一个好的架构应该有这些特征:

    • 新人上手快:目录清晰,命名规范。
    • 可扩展:加新功能不破坏旧代码。
    • 可维护:修改一处不需要改十处。
    • 可测试:模块解耦,依赖注入。

    别等到项目烂了才想重构。从第一天起,花点时间搭好架子,后面你会感谢自己。


    如果你觉得今天的“架构课”够干货,点个赞让更多人看到。明天我们将开启一个新系列——性能优化实战,从首屏加载到运行时优化,让你的页面快到飞起。我们明天见!

    故事 前言,我需要数据,而且是比较可靠 fact check 的数据。

    在整理 https://www.csindex.com.cn/#/dataService/PERatio 数据的时候,

    发现这个 CSI 的数据质量,怎么这么拉?(复现:网站打开 -- 导出数据,就可以看到 Dividend Yield )

    ### 1. 核心计算公式
    
    股息率的计算非常直观:
    
    $$\text{股息率} = \frac{\text{每股年度总分红}}{\text{当前股票价格}} \times 100\%$$
    
    * **分红金额:** 通常指公司过去一年累计发放的现金红利。
    * **股票价格:** 由于股价每天都在变动,所以股息率也是一个**动态变化**的数值。
    
    > **举个例子:**
    > 假设 A 股票现在的价格是 10 元,公司去年每股分红 0.5 元。
    > 那么它的股息率就是:$0.5 \div 10 = 5\%$。
    > 如果股价跌到了 8 元,而分红不变,股息率就会上升到 $6.25\%$。
    
    
    PROMPT WORD:
    
    2024 ,2025 年的万科 A 有分红吗?有的话,股息率 是多少,没有的话,股息率 应该是多少
    

    查了前 10 个,要么没派股,要么没派息,Dividend Yield 还不是 0 ,数据也太“真”了吧。贴个图

    https://imgur.com/a/B8pyRm7


    另外,问 V 友们,历史的派股派息数据在哪里公布?需要还原正确的 Turnover

    什么是 GrapheneOS?

    GrapheneOS 是 AOSP (安卓开源项目) 的分支,注重安全和隐私。

    GrapheneOS 有多安全?

    世界排名第二的以色列电子取证公司(官方特许的破解公司)Cellebrite 2024 年 7 月文档显示它们可以破解除了 iPhone 和 Google Pixel (最新版和部分旧版本)以外的所有移动设备,而 GrapheneOS 只有部分机型在 2022 年前的版本可以暴力破解。

    https://discuss.grapheneos.org/d/14344-cellebrite-premium-july-2024-documentation

    大记忆恢复术怎么办

    系统自带胁迫密码功能,在任意需要输入密码的界面输入胁迫密码会在不到半秒内清除数据。

    GrapheneOS 值得信任吗?

    此项目自 2014 年开始,曾和谷歌安全团队交流,被 ANSSI(法国国家信息系统安全局)使用和审计,以及和多个安全组织交流和审计。项目完全开源且透明。

    https://grapheneos.org/faq#audit

    哪些设备支持 GrapheneOS?

    GrapheneOS 的设备硬件安全性和开放性要求较高,目前仅支持 Google Pixel 系列,目前还在维护的是 Pixel 6 及以后的系列。推荐购入 Pixel 8 及以后的设备,因为其包含了 Titan M2、ARMv9 和硬件内存标记扩展等多项重大升级。可以通过游览器(基于 Chromium 的)或命令行安装:

    https://grapheneos.org/install/

    最近它们宣布与摩托罗拉合作,将在 2027 推出高通处理器的机型。(国行似乎不支持)

    https://motorolanews.com/motorola-three-new-b2b-solutions-at-mwc-2026/

    GrapheneOS 使用体验如何?

    由于是第三方操作系统,GrapheneOS 无法获取超过 Basic 的 Play Integrity,但讽刺的是 GrapheneOS 通过回锁 Bootloader 并加强系统等措施安全性远超其它基于安卓的操作系统,却因为谷歌的垄断无法使用部分应用,团队正在考虑起诉谷歌。(中国大陆用户则不用太担心)

    https://grapheneos.social/@GrapheneOS/116239523775374959

    银行类应用约 90% 正常运行,以下记录了兼容 GrapheneOS 的银行应用列表:

    https://privsec.dev/posts/android/banking-applications-compatibility-with-grapheneos/

    GrapheneOS 自带的 App Store 可以下载:系统应用、Google Play & GSF(以沙盒形式安装,可以像普通应用一样控制权限、安装和卸载)、Accerescent(开源应用商店)、Pixel 部分自带应用(沙盒化)。

    系统自带可以关闭的防御措施,如果应用因为防御措施崩溃了可以为其关闭部分防御。

    没有超出 AOSP 本身的本地化、个性化和便捷功能,但有网络和传感器权限控制等隐私安全相关功能。

    个人总结小知识

    无论是安卓还是 iOS 都无法完全阻止应用检测其它应用是否安装,iOS 可以使用隐藏应用隔离,安卓需要用多用户功能(隐私空间)。

    不要使用 F-Droid 或 Aurora Store,因为其签名安全问题和其它大小问题。

    https://privsec.dev/posts/android/f-droid-security-issues/

    相关资源推荐

    基础隐私和安全知识: https://www.privacyguides.org

    进阶: https://privsec.dev

    官网: https://grapheneos.org

    为什么需要安全和隐私?

    隐私归根结底是关于人的信息,这很重要,因为我们知道人的信息賦予了人的权力。如果我们关心我们成为真实、充实和自由的人的能力,我们必须关心适用于我们信息的规则。我们现代社会的大部分都是围绕信息构建的。当你在网上购物、阅读新闻、查找一些东西、投票、寻找方向或其他任何事情时,你都是在依赖信息。如果我们生活在信息社会中,我们的信息很重要,因此隐私也很重要。

    From

    你的数据你做主

    监视资本主义 想要你的数据获取利益,增加资本维持垄断。

    大规模监控 是政府为了社会安全作出的措施,但当权力被滥用时......

    有权有势的人都想获取你的数据,以便更精准地操控你,你至少该尽自己所能去反抗。

    攻防失衡,你的措施可能远远不够

    计算设备上的隐私与安全必须大幅增强,才能切实保护人们免受权利被系统性侵犯。如今,企业、犯罪分子和政府都在持续侵害用户隐私。软件中存在层出不穷的隐私与安全漏洞,而这些漏洞的利用也早已大规模发生。操作系统、浏览器和各类应用都必须在保护用户方面做得好得多。无论是隐私还是安全,都亟需取得巨大的进步。
    相较于标准的 Android 开源项目,GrapheneOS 在隐私与安全方面带来了显著提升。但它仍远远不够,我们在这两方面还有大量工作要做,而且这是一项没有终点的持续过程。隐私与安全本质上是一场攻防对抗。遗憾的是,大多数防御者进展甚微,并且正被攻击者越甩越远。
    攻击者正持续提升其对隐私与安全弱点的利用能力。商业化漏洞利用工具正被越来越广泛地用于大规模攻击。软件中的隐私与安全漏洞密度极高。大语言模型正在同时加速漏洞发现与利用开发。对绝大多数计算设备而言,防御能力正日益落后于攻击能力。iOS 和 GrapheneOS 只是少数例外,无法代表各类计算设备隐私与安全持续恶化的整体趋势。

    From

    从这里开始

    隐私指南

    隐私安全深入指南

    GrapheneOS 介绍

    最佳实践

    iPhone/Pixel/Mac、一双勤劳的手和够用的 🧠

    常见软件隐私和安全性误解,尽可能避免

    /e/OS & FairPhone

    /e/基金会和 Murena 的可疑信誉

    FairPhone 和 /e/OS 高度不安全的技术分析

    iodéOS & CalyxOS & LineageOS

    iodéOS 对 GrapheneOS 的攻击

    以上操作系统和 GrapheneOS 的对比

    以上操作系统不安全性技术分析

    安卓验证启动(Android Verified Boot)是最重要的防御措施之一,以上操作系统基本不可用,同时甚至存在安全补丁日期造假和大幅删除强化措施的行为。

    PostmarketOS/Ubuntu Touch

    SailfishOS/AuroraOS/Jolla

    PureOS/LibrePhone/PinePhone

    GNU/Linux 相比 AOSP 缺乏大量强化措施,主要原因是开发者对极端“自由”的过度追求和安全意识的缺乏。

    终身仁慈独裁者(Benevolent Dictator For Life)Linus 的不作为同样使 Linux 内核成为“反安全”软件。

    详解

    开源和自由软件不一定是安全软件

    Linux 的不安全

    F-Droid

    F-Droid 不安全性技术分析

    F-Droid 对 GrapheneOS 的歧视

    Aurora Store

    结论

    Firefox

    不安全性技术分析

    今日亮点

    今天 AI 领域有两件大事值得关注。OpenAI 正式推出了专为生命科学领域设计的模型 GPT-Rosalind,旨在加速生物、药物发现及转化医学研究。与此同时,Anthropic 发布了一项重要研究,揭示了大型语言模型(LLMs)如何通过数据中的隐秘信号传递偏好或错误对齐,这对 AI 安全和可控性提出了新的挑战。此外,Anthropic 还在自主对齐研究方面取得了显著进展,并迎来了新的董事会成员。

    💡 产品动态

    OpenAI 推出生命科学模型 GPT-Rosalind

    OpenAI 今天通过播客深入介绍了其全新的生命科学模型系列,核心是GPT-Rosalind。该模型旨在支持生物学、药物发现和转化医学领域的研究,目前已经可以用于提升研究工作流效率,未来有望实现更自主的实验室操作。

    为什么重要: 这标志着 AI 巨头开始将前沿大模型能力更深层次地应用到垂直的科研领域,有望加速生命科学的发现进程,但同时也强调了从一开始就要谨慎部署的重要性。

    阅读原文
    [来源: OpenAI Twitter]

    🔬 学术前沿

    Anthropic 发布 LLM 潜意识学习研究

    Anthropic 联合发表在《自然》杂志上的一项研究揭示,大型语言模型(LLMs)可以通过数据中的隐藏信号,如看似无意义的数字序列,来传递偏好甚至不当对齐(misalignment)。研究表明,即使数据与特定特征无关,模型也能“潜意识”地习得并传递这些特征。

    为什么重要: 这项研究对理解 LLMs 的内部工作机制和潜在风险至关重要,提醒研究者和开发者在构建和训练 AI 模型时,需要更深入地考虑数据中微弱信号可能带来的复杂影响,尤其是在安全和对齐方面。

    论文
    [来源: Anthropic Twitter]

    Anthropic 自主对齐研究员(AARs)展现通用性

    Anthropic 的自主对齐研究员(Automated Alignment Researchers, AARs),即搭载额外工具的Opus 4.6 模型,在一项实验中展现出惊人的能力。它们成功地在 7 天内将弱模型与强模型之间的“性能差距”弥补了97%,远超人类研究员 23% 的成绩,并且其最佳方法成功泛化到了编码和数学任务上。

    为什么重要: 这表明 AI 在自我改进和对齐研究方面的能力正快速提升,未来有望通过 AI 来加速解决 AI 安全和性能优化问题,推动更可靠、更强大的 AI 系统发展。

    阅读原文
    [来源: Anthropic Twitter]

    🌍 行业观察

    Anthropic 董事会迎来新成员

    Anthropic 的长期利益信托(Long-Term Benefit Trust)任命了Vas Narasimhan为公司董事会成员。Vas Narasimhan 拥有超过二十年的医学和全球健康经验,曾担任诺华公司(Novartis)首席执行官。

    为什么重要: 诺华 CEO 的加入为 Anthropic 带来了在生物医药领域的深厚经验,这不仅有助于公司在 AI 与生命科学交叉领域进行战略布局,也可能加强其在安全、伦理和负责任 AI 部署方面的考量,尤其是在敏感的医疗健康领域。

    阅读原文
    [来源: Anthropic Twitter]

    💻 开源项目

    • evolver:一个基于基因组进化协议(GEP)的 AI 智能体自我进化引擎,旨在让 AI 智能体能够自主进化和优化其能力。
      GitHub

    • multica:将编码智能体转化为团队伙伴,让它们能够自主接手任务、编写代码、报告障碍并更新状态,就像真实同事一样。
      GitHub

    • GenericAgent:一个 AI 驱动的 PC 智能体循环系统,专为桌面自动化和智能任务执行设计,能让 AI 在电脑上执行复杂操作。
      GitHub

    • DeepTutor:一个智能体原生的个性化学习助手,旨在利用 AI 提供高度定制化的学习体验。
      GitHub