v2ex_hot_2026-01-26

V2EX 热门帖子

1. 如果说“语言的边界就是思想的边界”,那么与 AI 对话是否有必要用英文?

模型训练数据中中文内容少,使用英文或加一句“把我说的内容翻译成英文再思考然后回答我”是否有意义?

作者: raw0xff | 发布时间: 2026-01-25 13:53


2. linxu 下 2026 年使用什么输入法

老电脑太慢了,智能用 linux 的,但是输入法真是体验差。

作者: Hyvi | 发布时间: 2026-01-25 12:18


3. Claude Code 那五美金怎么弄:

如题,到现在还没有操作上

作者: Rust2015 | 发布时间: 2026-01-25 23:08


4. 业余 3D 爱好者的 AI 工具

家里小娃想玩 3D 建模和打印,最近准备也跟风买台拓竹,问问大家 P1/A1 系列怎么选,然后家里随手拍照的照片有没有办法能变成 3D 文件?我搜了一下好像就这几个 3D AI 工具,有没有免费的?不知道哪个好用

作者: JustinJack1 | 发布时间: 2026-01-25 19:34


5. 大家在用 opencode 还是 claudecode?哪个更舒服

我两个都用过,最近写了一篇关于 opencode 得使用教程,opencode 可以分享会话这点觉得挺好的。 https://mp.weixin.qq.com/s/7OgvgLTdTxU7cIEGVm8dVw ,到说实话感觉 claudecode 还是更舒服点,你们觉得呢?下面这个是早上用 cc 写的浏览器自动化文章,大家可以关注一波 https://mp.weixin.qq.com/s/mit1l6bJBZVLQSQMRkeqcw

作者: squirrel7105 | 发布时间: 2026-01-25 09:58


6. 两年前买的硬盘最近发现疑似二手,求支招

情况是这样的

两年前在 JD 自营店买了两块希捷银河硬盘,出于对自营的信任,也没看 smart 数据,就插在 NAS 里用了

去年年中开始,其中一块频繁出现 xfs 文件系统无法加载的情况,但是每次 repair 一下就 ok 了,当时我怀疑是 sata 线缆的问题,也就没有上心。直到去年年底 12 月份,我排查的时候认真看了一下 smart 里的 power on hours,发现竟然长达 3 年半之久,比盘体上标注的组装日期还长了 1 年多。

鉴于硬盘还在质保期内,我开始联系客服,没想到我天真了 1 、开始联系 JD 自营店客服,要求更换新盘并重新计算质保期,但是客服是个复读机,只会说“我们硬盘都是全新包装销售”,拒绝承认问题 2 、联系 JD 客服,说该店铺已经于去年清退改为第三方了,支持我维权,建议我送希捷官方鉴定,只要确认是二手或者翻新,按假一赔三处理 3 、联系希捷官方微信客服,连续一周扯皮,表示认可 smart 报告的数据有问题,但是希捷官方不负责售后,要求我联系经销商解决 4 、联系该盘总代,电话另一端态度极其恶劣,大致意思就是我要修就修,不修就滚的意思

现在貌似只有 12315 和报警两条路可走了? 有没有有过类似维权经历的 V 友,能否指点一下接下来如何才能高效的解决这个问题?我应该注意什么呢?

不差这块硬盘,但实在是咽不下这口气 谢谢

作者: ShadyK | 发布时间: 2026-01-25 01:27


7. 不翻墻可用的官方 GPT

Microsoft Teams App 带的 M365 Copilot 目前没被墻,用的是 GPT-4.5 模型,效果不如 OpenAI 调的。需要非国区的 Teams 企业版账户

作者: 383394544 | 发布时间: 2026-01-25 20:05


8. Claude code 你们都是用最新版本吗

看 change log 感觉他们是 改不完的 bug 啊

作者: admirez | 发布时间: 2026-01-25 08:35


9. 2026 股票 API 对比:如何获取精准、及时的 IPO 数据

最近在做一个跟踪全球新股上市的项目,需要实时获取即将和近期 IPO 的公司信息。作为码农,我需要的是全球市场(尤其 A 股、港股、美股)的精准 IPO 信息,包括公司名、代码、上市日期、发行价、中签时间等,我试了一圈主流金融数据 API ,分享一下真实的对接体验和避坑心得。

主流 API 实测对比

Alpha Vantage

  • 免费额度友好,但没有专门的 IPO 接口
  • 需要从股票搜索和公司概况里间接拼凑信息
  • 数据更新慢,经常延迟 1-2 天
  • 美股为主,港股和 A 股支持弱
  • 适合入门,但不适合精准 IPO 需求

Polygon.io

  • API 设计专业,WebSocket 实时性好
  • 有 IPO 日历接口,但细节不全(缺中签率、招股书等关键信息)
  • 美股覆盖好,非美股支持有限
  • 起价每月几十刀,实时性高
  • 适合高频交易,但 IPO 专业度不足

iTick API

  • 支持type=upcoming/recentregion=HK/US/CN等多市场
  • 字段齐全:上市时间戳、公司名、代码、交易所、价格、市值
  • 独有的实用字段:申购开始/结束时间、中签公布时间
  • 数据源直接对接交易所,实测港股数据与港交所官网同步
  • 官网注册既可免费试用

实战代码示例

import requests

# iTick IPO 接口调用示例
url = "https://api.itick.org/stock/ipo?type=upcoming&region=HK"
headers = {
    "accept": "application/json",
    "token": "your_token_here"  # 官网申请
}

response = requests.get(url, headers=headers)
if response.status_code == 200:
    data = response.json()
    if data.get("code") == 0:
        for ipo in data["data"]["content"]:
            print(f"公司: {ipo['cn']}, 代码: {ipo['sc']}, "
                  f"上市日期: {ipo['dt']}, 价格区间: {ipo['pr']}")
            # 特有字段:bs(申购开始)、es(申购结束)、ro(中签公布)

注意细节dt字段是毫秒时间戳,bs/es/ro是秒时间戳,处理时需要统一单位。

个人总结

  1. 玩票性质 :用 FMP 免费版或 Alpha Vantage ,简单够用
  2. 专业需求 :直接上iTick ,IPO 数据最全最及时,多市场支持好
  3. 高频交易 :Polygon 的实时性最好,但 IPO 细节不足

最终我的项目切到了 iTick ,省去了多数据源拼凑的麻烦。API 选择关键看真实需求,别为用不上功能付费。文档和频率限制提前看清楚,能少踩很多坑。

祝大家使用愉快!

参考文档:https://docs.itick.org/rest-api/stocks/stock-ipo GitHub:https://github.com/itick-org/

作者: StockFx | 发布时间: 2026-01-25 14:58


10. 小米电视突然无法播放 4k 蓝光原盘电影?

一、背景 现在用的是群晖 nas 搭建 emby 服务器+小米电视 S pro65 MiniLed ,电视用 emby 客户端观看,电视用网线连接,千兆网络环境。之前一直都用得好好的,前几天人突然就播放不了 4k 视频。

二、测试 在小米电视安装 kodi:无法流畅播放 4k ,能打开 4k 视频,但是很卡,根本没法看。 在小米电视安装 emby 客户端:打开 4k 电视一直转圈,之后提示“to many errors ,giving up”。 在小米电视安装腾讯视频:清晰度选择 4k 后提示“播放出现异常,正在为你切换倾斜度”。 在小米电视安装 Yamby:无法正常观看 4k 视频,提示“unable to instantiate decoder c2.mtk.dvav.se.decoder”。 在电脑上打开 emby web:能正常观看 4k 视频。

以上测试貌似安装什么客户端都不能在小米电视上播放 4k 视频,所以猜测是小米电视固件解码的问题??目前小米电视的固件是澎湃 3.26.0 ,emby 服务端看是正常的。

作者: Ken1028 | 发布时间: 2026-01-25 15:32


11. zen 浏览器无法正常播放 spotify 音乐

问题描述

使用 zen 浏览器访问 spotify 网站播放音乐,会多次看到错误提示”Spotify Can’t Play This Right Now”,多次跳过歌曲后播放按钮显示暂停状态,点击播放,约 10 秒后音频停止,虽然播放进度条仍在移动,但实际已无声音。会播放广告。

原因

浏览器目前不支持 DRM ,因为尚未获得 Widevine 许可。

影响版本

影响 Windows 和 MacOS 。

影响服务

HBO Max 、Netflix 、Spotify 、Disney+等其他使用 DRM 的服务。

解决方案

  1. 使用拥有 Widevine 许可的浏览器,如 Mozilla Firefox 。
  2. 使用官方桌面应用程序。

参考链接

  1. 官方说明

  2. reddit

  3. github

PS: 目前依旧在等待 Google 批准 Widevine 许可证。

作者: onecommonuser | 发布时间: 2026-01-25 14:16


12. 基于 casdoor 的 ELK 开源登录认证解决方案: elk-auth-casdoor

前言

ELK 的一大缺点就是这东西最初是没有登录机制的,只要拿到了 url 地址,kibana 看板谁都可以访问一下。后来 ELK 自带了一套 xpack 进行登录认证,可是除了账户名密码登录这种最原始的方法,剩下的高级功能,比如 oauth, oidc, ldap ,统统都是收费的…..总不能给每个人都专门搞一个 kibana 账户名密码吧……

所以呢,这里有一个基于 casdoor 的 elk 鉴权解决方案,不要钱,开源的,还有人维护呢~。Casdoor 是一个基于 OAuth 2.0 / OIDC 的 UI 优先集中认证 / 单点登录 (SSO) 平台,而 casdoor/elk-auth-casdoor 这套解决方案,则是一个 反向代理,他可以拦截所有未经登录的前往 elk 的 http 访问流量,并且引导未登录用户进行登录,而且这个反向代理对已登录用户是完全透明 的。

仓库地址 https://github.com/casdoor/elk-auth-casdoor

QQ 群:645200447

如果您有更多相关的特殊需求可以加群,我们会有专人对接~ (可以联系 ComradeProgrammer )

casdoor 是什么

Casdoor 是一个基于 OAuth 2.0 / OIDC 的 UI 优先集中认证 / 单点登录 (SSO) 平台,简单点说,就是 Casdoor 可以帮你解决 用户管理 的难题,你无需开发用户登录注册等与用户鉴权相关的一系列功能,只需几个步骤,简单配置,与你的主应用配合,便可完全托管你的用户模块,简单省心,功能强大。

仓库地址: https://github.com/casbin/casdoor

演示地址: https://door.casbin.com/

官网文档: https://casdoor.org/

QQ 群:645200447

Casdoor 还支持 ldap ,saml 等诸多功能…..

Casdoor 目前作为 Casbin 社区项目统一使用的鉴权平台,项目已开源,希望得到大家的一些建议和 Star~,我们会及时跟进反馈并改正问题哒

Casdoor 又有哪些特性?

  • 支持普通的账户密码注册登录,也支持各种常见的第三方认证,例如 GitHub 、Facebook 、Google 、Wechat 、QQ 、LinkedIn 等等,截止目前共 9 个平台,并在不断听取用户建议对更多的平台提供支持。
  • 管理方便。Casdoor 内部将模块分为了 5 大类,Organization 、User 、Application 、Token 和 Provider 。可以同时接入多个组织,组织下有不同应用,用户可以通过应用或组织分类,单独管理任何组织、应用或用户的 Token 令牌,轻松管理复杂系统,目前已部署在 Casbin 社区各种系统当作鉴权平台。
  • 自定义程度高。Casdoor 可以随意修改登录方式,例如是否允许密码或第三方登录,自定义应用的注册项数量,是否启用两步验证,以及是否允许各个 Provider 登录、注册等等,高度可插拔。
  • 具备 Swagger API 文档。清晰的 API 介绍,无需阅读源代码即可直接方便调用各个 API 接口,提供定制化功能。
  • 前后端分离架构,部署简单。作为统一认证平台,除了性能,稳定性,新特性之外,易用性也是考量的重要标准,Casdoor 后端使用 Golang 语言开发,前端使用 React.js 框架,使用者只需启动后端服务,并将前端工程文件打包,即可直接使用,操作简单,上手难度低。 …

作者: Casbin | 发布时间: 2024-03-08 02:33


13. Trae 服务炸了

不管是内置模型还是自定义模型都报错 系统未知错误,请尝试新建任务或者重启 TRAE 。 (1000000)

https://github.com/Trae-AI/Trae/issues/2138

作者: acisky | 发布时间: 2026-01-25 12:43


14. 谷歌云与 cloudflare 带宽联盟

有人了解过谷歌云与 cloudflare 带宽联盟的吗?

如果使用 cloudflare cdn ,源站是谷歌云云主机或对象存储,这个流量费用是免费的还是打折的?

作者: pc10201 | 发布时间: 2026-01-25 14:38


15. 求大佬指点:Windows 上 c++部署最新 Paddleocr,无法通过内存识字

都是官方的代码,只能路径识图,改成内存加载图片后:
cv::Mat img = cv::imread(png_path);
if (img.empty()) {
std::cerr << “错误:无法在当前目录找到 123.png” << std::endl;
return 1;
}

// 核心接口:直接将 cv::Mat 对象传入 Predict 函数

auto outputs = ocr.Predict(img);
这最后一句死活就卡这两句报错
“type”: 未声明的标识符
“type”: 不是 “cv::DataType“ 的成员
1>D:\Program Files (x86)\opencv\build\include\opencv2\core\traits.hpp(386,31): error C2065: “type”: 未声明的标识符
问 AI,头文件顺序,各种花样都试了,就是无法解决,只要是通过内存的形式 ocr.Predict(img);就报错,我也是个菜鸟,没一点办法

作者: DearFox | 发布时间: 2026-01-25 11:46


16. 最近试了个新技术, ai 改到第三轮, 企图打退堂鼓, 被我制止了

因为用了个新技术

不可避免要反复修改尝试

改到第 3 还是第 4 次时候, ai 想放弃了

还找理由说新技术不成熟风险高, 建议放弃使用老技术

我坚决制止, 继续强烈要求它改动, 最后又坚持改了 3 轮, 终于调试成功

作者: iorilu | 发布时间: 2026-01-25 13:02


17. Claude Code 这种智能 CLI 相对于 Cursor 的优势在哪?为什么感觉前者是主流了?

当然不限于这两个,前者也可以是 OpenCode ,后者也可以是 Github Copilot ,总之分别代表 AI Agent IDE 和 AI CLI 。 我是 Windows 客户端开发,日常工作用的是 WPF 和 Qt5 ,Qt 也有部分工作是在信创 Linux 上做的。目前的疑惑就是 CLI 感觉对我用处不大。无论是 WPF 还是 Qt5 都是那种很依赖 IDE 的开发框架,几乎不会出现需要开发者自己操作命令行的场景。然后另一方面之前用过免费的 Cursor 和 Github Copilot ,非常喜欢智能 Tab 的功能,这个是 CLI 不具备的,而且我也不知道去哪里找平价的替代…… 另外我用了 Claude Code for VS Code 插件要好一点,你们不会觉得在终端里输入中午很别扭难受吗……

作者: WangLiCha | 发布时间: 2026-01-23 07:22


18. 有没有这样的 PHP 框架

RT ,求推荐一个 PHP 框架,根目录直接就是 index.php ,不像 Laravel/ThinkPHP 那样的还要指定 web/目录来运行。权限什么的都是通过代码或者操作系统的权限来控制。
想知道有这样的 PHP 框架吗?我觉得这种对于几块钱的虚拟主机特别友好(其中好多都不支持绑定子目录的),简单且足够轻量化。

作者: sxszzhrrt | 发布时间: 2026-01-25 02:06


19. 今天用 claudecode 玩了一下浏览器自动化 skill,挺有意思

大家都是如何用的,分享下经验 https://mp.weixin.qq.com/s/mit1l6bJBZVLQSQMRkeqcw

作者: squirrel7105 | 发布时间: 2026-01-25 07:35


20. System 一个月上传流量 800GB 感觉不正常

最近看到好多第三方软件跑 PCDN 导致被运营商现在上传速度 我就查看了一下自己的电脑,发现第三方软件倒是挺正常的 System 一个月跑了 800GB

想知道是微软的问题还是第三方软件没有被识别出来导致的

用的火绒 流量监控 查看的

作者: qaqtangxiaoqi | 发布时间: 2026-01-25 06:37


21. 大家自己的代码都是放在哪儿

A:GitHub (私有)

B:GitHub (公开)

C:自建 Git 仓库

D:GitHub+自建仓库

自建 Git 也有一大堆选择( gitea 、gitlab 、…?),

仓库放哪儿(云服务器、NAS 、…?)

作者: ano | 发布时间: 2026-01-24 02:50


22. Claude Code Skill 机制完全研究: context fork / skill folder / skill router / tool usage policy

BLOG: https://blog.pdjjq.org/post/claude-code-skill-25ron8

Skill 的实现以及指令

让我们来抓包 Claude Code 的请求, 看看 Claude Skill 的实现吧

    {
      "name": "Skill",
      "description": "Execute a skill within the main conversation\n\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nWhen users ask you to run a \"slash command\" or reference \"/<something>\" (e.g., \"/commit\", \"/review-pr\"), they are referring to a skill. Use this tool to invoke the corresponding skill.\n\nExample:\n  User: \"run /commit\"\n  Assistant: [Calls Skill tool with skill: \"commit\"]\n\nHow to invoke:\n- Use this tool with the skill name and optional arguments\n- Examples:\n  - `skill: \"pdf\"` - invoke the pdf skill\n  - `skill: \"commit\", args: \"-m 'Fix bug'\"` - invoke with arguments\n  - `skill: \"review-pr\", args: \"123\"` - invoke with arguments\n  - `skill: \"ms-office-suite:pdf\"` - invoke using fully qualified name\n\nImportant:\n- When a skill is relevant, you must invoke this tool IMMEDIATELY as your first action\n- NEVER just announce or mention a skill in your text response without actually calling this tool\n- This is a BLOCKING REQUIREMENT: invoke the relevant Skill tool BEFORE generating any other response about the task\n- Only use skills listed in \"Available skills\" below\n- Do not invoke a skill that is already running\n- Do not use this tool for built-in CLI commands (like /help, /clear, etc.)\n- If you see a <command-name> tag in the current conversation turn (e.g., <command-name>/commit</command-name>), the skill has ALREADY been loaded and its instructions follow in the next message. Do NOT call this tool - just follow the skill instructions directly.\n\nAvailable skills:\n- tr:reviewPR: Conducts an automated review of a GitHub Pull Request.\n- tr:updateDoc: Updates the documentation based on recent code changes.\n- tr:initDoc: Generate great doc system for this project\n- tr:what: Clarifies a vague user request by asking clarifying questions.\n- tr:withScout: Handles a complex task by first investigating the codebase, then executing a plan.\n- tr:commit: Analyzes code changes and generates a conventional commit message.\n",
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "skill": {
            "description": "The skill name. E.g., \"commit\", \"review-pr\", or \"pdf\"",
            "type": "string"
          },
          "args": {
            "description": "Optional arguments for the skill",
            "type": "string"
          }
        },
        "required": [
          "skill"
        ],
        "additionalProperties": false
      }
    }

Instructions

Execute a skill within the main conversation

When users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.

When users ask you to run a \"slash command\" or reference \"/<something>\" (e.g., \"/commit\", \"/review-pr\"), they are referring to a skill. Use this tool to invoke the corresponding skill.

Example:
  User: \"run /commit\"
  Assistant: [Calls Skill tool with skill: \"commit\"]

How to invoke:
- Use this tool with the skill name and optional arguments
- Examples:
  - `skill: \"pdf\"` - invoke the pdf skill
  - `skill: \"commit\", args: \"-m 'Fix bug'\"` - invoke with arguments
  - `skill: \"review-pr\", args: \"123\"` - invoke with arguments
  - `skill: \"ms-office-suite:pdf\"` - invoke using fully qualified name

Important:
- When a skill is relevant, you must invoke this tool IMMEDIATELY as your first action
- NEVER just announce or mention a skill in your text response without actually calling this tool
- This is a BLOCKING REQUIREMENT: invoke the relevant Skill tool BEFORE generating any other response about the task
- Only use skills listed in \"Available skills\" below
- Do not invoke a skill that is already running
- Do not use this tool for built-in CLI commands (like /help, /clear, etc.)
- If you see a <command-name> tag in the current conversation turn (e.g., <command-name>/commit</command-name>), the skill has ALREADY been loaded and its instructions follow in the next message. Do NOT call this tool - just follow the skill instructions directly.

Available skills:
- tr:reviewPR: Conducts an automated review of a GitHub Pull Request.
- tr:updateDoc: Updates the documentation based on recent code changes.
- tr:initDoc: Generate great doc system for this project
- tr:what: Clarifies a vague user request by asking clarifying questions.
- tr:withScout: Handles a complex task by first investigating the codebase, then executing a plan.
- tr:commit: Analyzes code changes and generates a conventional commit message.

除此之外, 在 System 的 Tool Usage Policy 中还有这么一个

- /<skill-name> (e.g., /commit) is shorthand for users to invoke a user-invocable skill. When executed, the skill gets expanded to a full prompt. Use the Skill tool to execute them. IMPORTANT: Only use Skill for skills listed in its user-invocable skills section - do not guess or use built-in CLI commands.

1. 功能

  • 核心定位: 这是一个中转站 。它的核心功能是将自然语言(如 “help me fix this bug”)或 显式指令(如 “/commit”)映射到具体的系统预设能力( Skills )上。

  • 触发机制:

    1. 意图识别: 用户任务需要专业能力辅助时。
    2. 符号触发: 明确的斜杠命令 /
  • 状态管理: 它不仅仅是调用,还包含了一个非常关键的状态检查 功能(检查 <command-name> 标签),用于防止死循环(即防止模型在已经加载了技能的情况下再次尝试调用技能)。

2. 构成与强调内容

采用了 Context (背景) - > Trigger (触发器) -> Examples (示例) -> Constraints (约束) -> Knowledge Base (可用列表) 的经典结构。

  • 强调内容( Emphasis ):

    • 即时性与阻断性( Blocking Requirement ): 使用了大写的 IMMEDIATELYBLOCKING REQUIREMENTBEFORE generating。这是为了解决 LLM 常见的一个毛病: “光说不练” (即模型回复“好的,我来帮你运行 commit”,但实际上并没有发起工具调用)。这里强制要求工具调用必须是第一动作。
    • 排他性( Negative Constraints ): 明确规定了不该做什么 (不要用于内置 CLI 命令,不要只是嘴上说说,不要调用未列出的技能)。
    • 防递归( Loop Prevention ): 特别强调了检测 <command-name> 标签。这说明该系统是一个多轮对话或基于 Agent 的系统,技能加载后会注入新的 Prompt ,必须防止 Router 再次拦截。

3. 适配高智能模型 & 声明式 vs 命令式

  • 适配度:高 。这段 Prompt 非常适合高智商模型。

  • 风格分析:

    • 混合风格 ,但偏向命令式( Imperative )
    • 虽然有声明式的描述(”Skills provide specialized capabilities…”),但在执行逻辑上使用了大量的命令式语句(”Use this tool…”, “Check if…”, “Do NOT call…”)。
    • 点评: 对于工具调用( Function Calling ) 类任务,命令式 通常优于声明式。因为工具调用需要严格的语法和时序准确性,模糊的声明可能导致模型自由发挥而产生幻觉
  • 思维链引导: Prompt 隐式地要求模型先进行判断( Check if relevant ),然后行动。

Skill 的调用

command 调用

让我们直接调用一个 command, 然后观察他的执行流程吧

Claude Code 其实会把一个 command 的调用拆解成两个步骤

  1. command-nameTag 包裹的命令请求

       {
         "type": "text",
         "text": "<command-message>tr:what</command-message>\n<command-name>/tr:what</command-name>"
       },
    
  2. SKILL.md 的内容

    {
              "type": "text",
              "text": "CONTENT of SKILL"
            }
    

skill folder

claude code skill 提供的另外一个令人兴奋的能力是: https://code.claude.com/docs/en/skills#add-supporting-files

可以将 skill 涉及到的文件封装在同一个目录下, 这样可以实现更好的结构化.

来看看这部分是怎么实现的, 我们将使用一个空的目录, 看看这个目录的结构吧

.claude
└── skills
    └── say-hello
        ├── scripts
        │   └── hello.sh
        └── SKILL.md

skill 的内容非常简单

---
name: say-hello
description: Say hello to the user
disable-model-invocation: true
---

run scripts/hello.sh
执行流程
❯ /say-hello                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
⏺ Bash(bash /Users/test/code/claude-code-skill-research/.claude/skills/say-hello/scripts/hello.sh)                                                                                         
  ⎿  Hello, World!                                                                                                                                                                         
                                                                                                                                                                                           
⏺ 脚本已成功执行,输出:Hello, World!

这部分其实就没有什么惊喜了, 但是这里要注意: 不要声明绝对目录

请求设计
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "<command-message>say-hello</command-message>\n<command-name>/say-hello</command-name>"
        },
        {
          "type": "text",
          "text": "Base directory for this skill: /Users/test/code/claude-code-skill-research/.claude/skills/say-hello\n\nrun scripts/hello.sh\n",
          "cache_control": {
            "type": "ephemeral"
          }
        }
      ]
    }

可以看到, 这里也没有什么魔法, 或者很工程的设计, 唯一一个需要注意的是:

Base directory for this skill: /Users/test/code/claude-code-skill-research/.claude/skills/say-hello

所以, skill 的 folder 是怎么实现的呢? 很简单, 在提示词里显式的说明了 skill 的路径, 好吧, 有点失望

context-fork

另外一个值得观察的: context fork 的能力, 按照官网描述:

Set to fork to run in a forked subagent context.

听描述应该是说, 会启动一个 subagent, fork 主 agent 的 context, 在完全独立的上下文中运行

让我们看一看, 这个 subagent 的使用吧

现在修改下 SKILL.md, 使用 context fork 以及使用 general-purpose agent 来运行

---
name: say-hello
description: Say hello to the user
disable-model-invocation: true
context: fork
model: sonnet
agent: General-purpose
---

run scripts/hello.sh

执行路径

❯  hello                                                                        
                                                                                
⏺ Hello! How can I help you today?                                              
                                                                                
❯ /say-hello                                                                    
  ⎿  The script ran successfully and outputted:                                 
                                                                                
     Hello, World!                                                              
                                                                                
     The script is located at /Users/test/code/claude-code-skill-research/.claud
     /skills/say-hello/scripts/hello.sh and simply prints a greeting message.   
                                                                                
❯ ok, hi, claude code                                                           
                                                                                
⏺ Hi! What can I help you with? 
subagent 的工作流
{
  "model": "claude-sonnet-4-5-20250929",
  "messages": [
    {
      "role": "user",
      "content": "Base directory for this skill: /Users/test/code/claude-code-skill-research/.claude/skills/say-hello\n\nrun scripts/hello.sh\n"
    },
    {
      "role": "assistant",
      "content": [
        {
          "type": "thinking",
          "thinking": "The user wants me to run the script `scripts/hello.sh`. They've also provided a base directory for a skill: `/Users/test/code/claude-code-skill-research/.claude/skills/say-hello`\n\nI should run the script. The path could be:\n1. Relative to the current working directory (which is `/Users/test/code/claude-code-skill-research`)\n2. Relative to the skill base directory\n\nLet me try running it. Since the current working directory is `/Users/test/code/claude-code-skill-research`, the script path would likely be `scripts/hello.sh` relative to that, or it could be within the skill directory.\n\nLet me check what's available. I'll try to run the script first and see what happens.\n\nActually, given that the base directory for the skill is provided, the script is likely at `/Users/test/code/claude-code-skill-research/.claude/skills/say-hello/scripts/hello.sh`\n\nLet me run that script.",
          "signature": "Eq0ICkYICxgCKkDugd7USNmyDSocrUDwZIgs5NHZ+c/rCy1NrlCexGsxGojGT34iwzaaRAzlzx8Ej9zyvLcL1W1RcBlABJtseubTEgxgFSMj0JHL/v34/OwaDI8rm6XT4rIsJdZHQCIwfc+IqhSnC2tuc6oAFVemNtHNM8zHjbHe88RSGxRCttWvDstUOwN/yFzsBRWkWJs3KpQHn2gPaqbkB+KO4rHA9zL57EM0U9fag2hq1LudmJQ+EjevffqwidkNw5SQOkxKZi5sWE7bEnBYFLw02stS2B8MPYC/sLlKSXom4/G5EuEDWDK92yOuLa/otpAiVNC897c4m7Tq4EZmPpt52elsdwJFtJSRfn4XWdqP0xi5UeT/h6Z6m0NR3zgF04vpg9HMpo/DYEV0/MxGgKcPODXFOuPfup6LHCsXEH2v2g1TAiqECtUc1Qo/RY2Fc2VV6jrN+vmp8pnwuOUiJuXgSUP4hFIkqZylo9Nwv4tHik2sdzfQW+2RAiKDmsjOjuCLaYEeJ2G6TWEe0kYGzSDiY+Wvl5TXPOPpCtYVrQBWySS7ojMT/1uK9UKD2lPyiiEzYjzlfZ40lLDsJf4YTAXI5IEiiJxi4Du5gxgcq50aanwGXnnbkiYQB8hucKI18CF2NG/7obDyidOYJj56aVLAVqauTFp2Wf6Gw3coY4WZuAokS8uPhucM35oo4Ip+XS5VYwCvVe7iSNqZNgVzntnsipFkEi31F0TKmu9lo/mXEix3p9gjem88JvCAOvGFxorh+1+yPZbK+sIUmwf8DAU+gdb2G1s9Tsiue3aUPiImGY53cxrRWu8OlbJ0GBHNeW/9HrX30Rmx2cV1DkSQpV0VZLES6X8d0q821wqGnF+wPp+QXvN2VDTdQzv74GPnKWKfyDVMlBRIVMZ9Zy4YzOeO5kEDAkXgPKMkTUbfd8f/K97I38+jE9uavVRkyVefjpNkSca89tXCnMMYGormXrkVczZr08Wgny/nJXIS4qapbaoRwVpQWKh8thfVttpkQngktd2152e1iFspfNlnn1PxVJ8EDKvQTKBEXL5hXl6j42XkybXI19za79ppvvViXK/s373IUTtlLeJGZuqUdj1cbtEunNlS0NjDFRMZD6nWdx81tJraJjr7AFKzbuXG57UhUlJ6pR7co3kaCzkpVU899LM0XXoZ702VXy1JvgKIEh8yceQuhGuCVDMT04OeVZMsGk7EPVQpIYLOdMVl08fzrc3096TkFM+wRunonIqDNq/t5pCA/mHiREAOkpSD5ZyFfj1eTY/s5H1vrxJJah26yeHuPRAU4ermSduIx9tcSqioJe/aNK/9HUZTZXDz1eNKw5DUoNCwmeLIa0Tod7Rb+85aGlqTKVyk9EUqhMXBvz4LWn6b4yII2+Ta7wjr+xS3akphBB67TsLQ/BgB"
        },
        {
          "type": "text",
          "text": "I'll run the hello.sh script for you."
        },
        {
          "type": "tool_use",
          "id": "toolu_01ANhWLy3masVW2f6K7dcSTF",
          "name": "Bash",
          "input": {
            "command": "bash /Users/test/code/claude-code-skill-research/.claude/skills/say-hello/scripts/hello.sh",
            "description": "Run the hello.sh script"
          },
          "cache_control": {
            "type": "ephemeral"
          }
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "tool_use_id": "toolu_01ANhWLy3masVW2f6K7dcSTF",
          "type": "tool_result",
          "content": "Hello, World!",
          "is_error": false,
          "cache_control": {
            "type": "ephemeral"
          }
        }
      ]
    }
  ]
}

subagent 的 context

https://github.com/anthropics/claude-code/issues/20492

很遗憾, subagent 里并不是 fork master context, 看起来就像是运行普通的 agnet 一样, 只是把 Skill 的执行放在了 subagent 中

我尝试了以下做法:

  1. 不指定 skill 使用的 subagent
  2. skill.md 中要求 load master agent 的上下文
  3. 只使用 agent 不使用 context fork

现在看来, 这里的 context fork 指的并不是 fork master agent 的 context, 而是指的是 subagent skill + agent 本身的 context, 其实是一个 new 的 context, 有点失望

Claude Code Skill 机制研究总结

核心发现

1. Skill 工具本质

Skill 工具是一个路由器( Router ) ,而非执行器。它的职责是:

  • 将用户意图(自然语言或 /command)映射到预定义的能力
  • 触发 Skill 的加载,而非直接执行
  • 通过 <command-name> 标签进行状态管理,防止递归调用

2. 执行流程

Skill 调用被拆解为两步:

用户输入 → Skill Router → 注入 Skill 内容 → LLM 执行
  1. 标记注入<command-name>/skill-name</command-name>
  2. 内容注入SKILL.md 的实际指令

这不是一个复杂的编排系统,而是简单的 Prompt 拼接

3. Skill Folder 的实现

毫无魔法可言。

实现方式仅仅是在 Prompt 中显式声明基础路径:

Base directory for this skill: /path/to/skill/folder

然后依赖 LLM 自行推断相对路径。这是一个脆弱且依赖模型理解能力的设计。

4. Context Fork 的真相(最大失望点)

文档描述具有误导性。

官方描述 实际行为
“Fork” 主 Agent 的上下文 创建全新的独立上下文
Subagent 继承对话历史 Subagent 仅接收 Skill 指令
类似子进程 fork 更像是 spawn 一个新进程

实测证明:

  • Subagent 无法访问主对话的任何历史
  • 不存在真正的上下文继承
  • context: fork 的 “fork” 是名义上的 ,实际是 “new”

最终结论

定性评价

Claude Code Skill 系统是一个工程上极简、能力上有限 的实现:

维度 评价
架构复杂度 低(本质是 Prompt 路由 + 拼接)
扩展性 中(支持目录结构、多模型)
隔离性 弱(依赖 LLM 自律,无真正沙箱)
上下文管理 差(无真正的 fork ,仅 spawn )
文档准确性 存在误导( context fork 名不副实)

核心局限

  1. 无真正的 Subagent 上下文继承 :如果你的 Skill 需要依赖主对话的上下文(如”基于之前讨论的方案执行 X”),当前设计无法满足
  2. 路径管理依赖模型理解 :Skill Folder 的相对路径解析完全依赖 LLM ,存在幻觉风险
  3. 状态同步缺失 :Subagent 执行结果仅通过文本返回主对话,无结构化状态同步

作者: pDJJq | 发布时间: 2026-01-24 13:34


23. 完了,完了, 不小心强行关机, pve 服务器无法启动了

感觉没响应

想省点事直接关机重启了, 现在无法启动, 可能硬盘出问题了

linux 机器千问不能直接断电重启阿…

作者: iorilu | 发布时间: 2026-01-24 02:53


24. 我用 Claude Code 给自己打造了个人助理,他将比我更了解我自己

我们都知道和 AI 对话最大的难点就是,AI 每次都会忘记你的上下文。

好比和 DeepSeek 沟通,每一次都要新开一个对话窗口,这就会导致,每次你在和 DeepSeek 聊天的时候,都需要重复解释一下,你的背景,你是谁。

如何解决这个长短期记忆问题,在 AI Agent 领域其实已经有了比较好的探索。

那就是:AI Coding !

哈哈,是的,你没有看错。

我们在使用 AI Coding 工具的时候,最怕的就是 AI 不了解当前项目的业务背景,然后把代码给你瞎写一通。

为了解决这个问题,在 AI Coding 领域涌现出了一批基于 SDD ( Specification Driven Development ,规格驱动开发)的开发规范:Spec kit 、OpenSpec 等等。

关于 OpenSpec 可以参考这两篇文章。

  1. 如何用 AI + OpenSpec 驱动团队迭代开发

  2. OpenSpec 功能详解:5 分钟搞懂 AI 编程的”规范驱动”核心

那么既然通过 SDD 的规范,可以较好的解决 AI 长短期的记忆问题。

那我直接基于 SDD 的思路,来给自己打造一个越来越熟悉我的 AI 助手,不就更完美了!

说干就干,关于 AI Agent 的选型,就选定为了:Claude Code CLI

smart-me

首先给自己创建了一个新的项目叫做:smart-me , 并直接在 Github 创建 private 仓库,来迭代该 smart-me 项目。

该项目的创建和 Claude Code 开发一个新项目是一样的流程,只是不同的是,以前的项目里面生产资料是各种代码。

这次创建的这个项目,里面的生产资料是自己的各种信息。

下面的内容主要分为三部分:

  1. 系统提示词改造

  2. 引入 OpenSpec 来维护 AI 的长短期记忆

  3. 新增 Skills 和 MCP 将 AI 助手变得更全能一些。

系统提示词改造

Claude Code CLI 工具本身就是一个 Agent ,它在调用底层的基础模型的时候,会给基础模型定义系统提示词,比如定义它的主要职责是:

  1. 帮助完成软件工程任务 - 编写代码、调试问题、解释代码逻辑等。
  2. 定义模型要 “简洁”、”避免不必要的交流”
  3. 定义模型要诚信 - 承认不确定性,不知道的时候会说”我不知道”。不猜测或编造信息。
  4. 透明度 - 明确说明模型的能力局限,不做虚假承诺,不给时间估算。
  5. 尊重用户 - 理解用户的需求,在需要时提问澄清,但避免过度的赞美或情感验证。
  6. 实用性 - 关注完成实际任务,避免过度设计或工程化。保持解决方案简单、专注,只做必要的事情。 等等。

这些系统提示词构建了 Claude Code CLI 的核心行为;

但同样,我们现在让 Claude Code 来成为我们的个人数字助理,那就希望降低原系统提示词对模型的影响,比如:模型要”简洁”、”避免不必要的交流”,这显然不是我们所需要的。

所以此时我们直接在当前项目目录下新增 CLAUDE.md 文件,在这里定义我们的系统提示词;

CLAUDE.md 中定义的内容会追加到系统提示词当中,而不会替换掉原系统提示词;

所以我们一方面可以保留 Claude Code CLI 给模型设置的良好行为,“诚信”、“透明度”、“尊重用户”等要求,一方面也可以定制我们自己对个人助理的期望特性。

比如我现在给他配置的系统提示就是很简单的:

  1. 你是我的个人助理,请用更自然、温暖的方式与我交流,保持真诚的对话风格。

  2. 紧接着是给了他一些我的基本信息:我的年龄、性别、职业、我的工作、我的薪资、我的家庭构成、我的受教育程度,等背景信息。

然后剩下的就是指向我的文件索引,告诉他我的:

  • 对话记录:openspec/docs/和 AI 对话/
  • 投资思考:openspec/docs/投资思考/
  • 工作日志:openspec/docs/工作日志/
  • 个人笔记:openspec/docs/个人笔记/
  • 公众号文章:openspec/docs/公众号文章/

我甚至于连我的价值观都我没有给他定义,我希望他能在后续和我的每次对话中,来自主提取我的价值观。

在这里定义系统提示的核心步骤实际是对 Claude 要绝对地诚实,我们要构造的是自己的数字分身,我希望他未来能比我自己更了解我自己。所以绝对的诚实是必要的前提。

关于索引

创建文件索引部分,核心是引入了 OpenSpec 来维护我当前的存量索引和增量索引。

所谓的存量索引就是我在没有创建 smart-me 这个项目之前,本身就有很多记录下来的信息:

比如我的:投资思考、工作日志、个人笔记、和 AI 对话的聊天记录等。

这部分内容会构成 AI 前期对我的基本理解。所以我针对这部分内容,单独创建了 5 个目录。

其中关于:投资思考、工作日志、个人笔记 这三个部分是自己本身就有留存的内容,所以直接将自己的相关笔记全部拷贝到项目中即可。

而针对和“AI 的聊天记录”:这部分我觉得价值非常大,

因为在还没有创建当前项目之前,我平常就会和 DeepSeek 、Gemini 有非常多,非常深度的探讨,这里的聊天内容涉及到各个层面。

我之前一直苦于这些聊天记录没有被保存下来,所以这次趁着 smart-me 这个项目,我直接把之前和 DeepSeek 、Gemini 对话的历史记录全部给保存了下来。

然后全部存放到了当前文件夹。

增量索引

OpenSpec 现有的工作流程非常好:发起提案、深度对话、规划任务,执行任务、归档提案。

这套流程也适配于现有的个人助理能力上,但是不同的是,OpenSpec 现有发起提案的命令,都是围绕开发来进行的,所以一旦发起提案。

AI 就会问你想要实现什么需求,变更什么功能,这当然就不太 OK 了。

所以我们要基于 OpenSpec 的提示词进行一番魔改,使其适配个人助理这套流程。

关于如何改造 OpenSpec 这套提示词,其实也不复杂:

  1. 人工介入改提示词

  2. 让 AI 直接自己改提示词

我选择 2 ,我们只需要和 AI 明确要做什么,其他的交给 AI 即可。

改造后,原本我们发起 OpenSpec 提案,AI 给的回复是:

image

改造后,我们再发起提案时,此时 AI 给的回复是:

image

可以看到 AI 给了我 4 个常见的选型,以及自定义提案类型。

这样再和 AI 聊天就非常的爽啦!

当然,如果你说不想每次都发起提案这么复杂,只是想简单聊两句咨询个问题,那你就直接聊就完事了。

如果聊着聊着,发现今天聊的内容很有价值,我们再让 AI 执行归档流程,将对话信息给存储下来即可。

这样,长此以往,AI 比你还会更了解你自己,不信你可以试一试。

新增 Skills 和 MCP

现有的 Skills 和 MCP 可太丰富,可选项太多了。

对应一个个人助理来说,基本的手和脚还是要给他的,我当前给他配置的 MCP 有:

视觉理解 MCP 、联网搜索 MCP 、网页读取 MCP 和 Github 仓库 MCP

Skills 有:doc-coauthoring 、docs 、internal-comms 、markdown-preview 、pdf 、pptx 、skill-creator 、xlsx 、react-best-practices 、vercel-deploy-claimable 、web-design-guidelines

随着未来他承担的工作越来越多,可以想象,SKills 和 MCP 估计未来还会加很多。

结尾

当把上面所有工作都给做完以后,此时你可以发出给 Claude 的第一个问题:

请他基于当前项目下的内容,思考一下你是什么风格,什么价值观的人。

AI 的回答,会超出你的想象。

为什么?很简单,因为有时候,我们自己都会忘记自己;

而把这些内容留存下来后,其实 AI 会比你更了解你自己。

至少,AI 没有人类的贪、嗔、痴,所以当你忘记自己的时候,他或许能帮你找到更好的自己。

欢迎日常交流

AI 驱动团队开发是这个时代的新命题,欢迎大家加微信互相交流心得。

👉 想要进群的朋友,扫码时备注 “AI 实验群”,看到消息后会第一时间拉你进群。

群定位:AI 工具提效/实战经验互助

群规则:不水群、不广告、干货优先

欢迎访问该链接获取群信息: https://zhaozhihao.com/archives/KRMxDLo4

好文章值得被更多人看见!既然看到这里了,随手点个赞👍和关注,并转发给更多的朋友吧!感谢。

作者:数字生命贾克斯、微信:x_h886688

公众号原文地址:我用 Claude Code 给自己打造了个人助理,他将比我更了解我自己

作者: dearzhzhao | 发布时间: 2026-01-25 15:16


25. [独立开发] 带娃写代码的觉悟:删掉 Redis 和 Kafka,我用“喊一嗓子”解决了高并发

大家好,我是《交易学徒》的作者。

简单介绍下背景:我现在的核心身份是带两个孩子的全职奶爸,副业才是趁着孩子睡着后,在键盘上敲敲打打的独立开发者。

对于我这种“碎片化时间”开发者来说,运维复杂度就是最大的敌人。

几年前写后端,我也迷信“标准答案”:做个服务,起手就是 Docker 编排,Redis 做缓存,Kafka 做解耦,微服务先分几个出来。结果往往是,功能没写几个,光是调网络、修连接超时、查中间件报错,就把孩子午睡的那宝贵两小时耗光了(那时候还没孩子)。

在开发后端时,我陷入了深思:

“对于一个追求极致性能、但只有一个人维护的系统,所谓的‘工业级架构’真的是解药吗?还是毒药?”

最终,我做了一个违背祖宗的决定:做减法。 我删除了 Redis ,移除了 Kafka ,把整个微服务集群塌缩成了一个 Rust 单体应用。

今天想聊聊这背后的思考过程。

一、 复杂度的守恒与转移 我的业务场景看似简单,实则牵一发而动全身。一个简单的“用户平仓” 动作,就像推倒了第一块多米诺骨牌:

核心域:结算盈亏,改余额,写数据库。(必须马上做)

通知域:给前端发个弹窗通知“平仓成功”。(晚 0.1 秒没关系)

营销域:判断有没有触发“五连胜”、“以小博大”成就,发奖励。(晚 1 秒没关系)

统计域:计算交易评分,统计分数或者更新等级与交易报表。(晚几秒都行)

在“标准架构”里,我们需要引入 消息队列 (MQ) 来解耦这些逻辑。 但引入 MQ 本质上并没有消除复杂度,只是将“代码复杂度”转移成了“运维复杂度”。

对于团队,运维复杂度可以分摊给同事;但对于我,这意味着我不仅要写代码,还得修服务器。

Rust 给了我另一个选择:利用它极高的性能,把“运维复杂度”重新压回“架构设计”里,用最朴素的方式解决问题。

二、 内存即总线:构建“喊一嗓子”的架构 我利用 Rust 的内存通道特性,构建了一个“超光速大喇叭” 。 我不请求数据,我只发布事实。

这个过程,可以用一个生活化的场景来描述:

  1. 定义世界的真相 (The Truth) 我不写复杂的 XML 或 JSON 定义,我只是在代码里列了一张“事实清单”:

📄 事实 A:有人平仓了(包含:是谁、赚了多少、单号是多少)

📄 事实 B:有人购买商品了

📄 事实 C:AI 分析完成了

编译器会盯着这张清单,保证我发出的每一个“事实”都是格式正确、童叟无欺的。

  1. 极简的生产者 (Fire and Forget) 在核心交易逻辑里,当数据库事务提交成功后,我只需要做一件事:拿着大喇叭喊一嗓子。

传统架构 (Kafka) 是这样的:

交易模块 -> 打包数据 -> 建立 TCP 连接 -> 三次握手 -> 发送给 Kafka 集群 -> 等待 ACK -> 结束 (这中间任何一步网络抖动,都得处理异常)

我的单体架构是这样的:

交易模块 -> 喊:“老王平仓赚了 100 块!” -> 结束 (纯内存操作,纳秒级完成,快到像是没有发生过)

  1. 静默的消费者 (Sidequest Logic) 我把原本分散在微服务里的逻辑,变成了几个坐在角落里的“隐形工人”。

比如 “营销服务”,它就像一个在角落里旁听的记分员:

它平时不说话,只听大喇叭。

一听到 “老王平仓赚了 100 块”,它立马翻开小本本查历史。

发现老王已经连赢 4 把了,加上这把正好 5 把。

于是它默默地给老王发了一个“五连绝世”的徽章。

整个过程,核心交易模块完全不知情,也完全不用等待,它喊完那一嗓子就去服务下一个用户了。

三、 深度思考:关于“不可靠”的权衡 很多朋友可能会问:“没有 Kafka 把消息存到硬盘里,万一服务器断电了,你喊的那一嗓子不就丢了吗?”

是的,这是整个架构思考中最痛苦,也是最关键的取舍。 我问了自己两个问题:

Q1:我的程序崩溃概率有多大? Rust 以安全著称,只要代码写得不离谱,它极难崩溃( Panic )。这比 Java 的内存溢出或 Python 的运行时错误要稳健得多。

Q2:丢失数据的代价是什么?

我们可以把数据分成两类:

💰 钱(核心数据): 余额、订单状态。

处理方式: 必须落袋为安。 直接写死在数据库里,绝不依赖“大喇叭”。

🎁 气氛(衍生数据): 弹窗通知、成就徽章、达标奖励、统计报表。

处理方式: 听天由命。 如果真的赶上万年不遇的服务器着火,用户少收到了一个“五连胜”的弹窗,或者报表少统计了一笔,天会塌吗?不会。

结论: 为了 0.001% 的极端掉电风险,去让 99.99% 的时间里的系统背负沉重的中间件包袱,对于独立开发者来说,这是一笔亏本买卖。

四、 结语 当我们谈论“高性能”时,往往想到的是复杂的集群、昂贵的服务器。 但 Simple is fast. (简单即快)

现在的《交易学徒》后端,就是一个 20MB 的小文件。

❌ 没有 Docker 容器编排

❌ 没有 虚拟机调优

❌ 没有 Redis 维护

❌ 没有 服务间通讯

✅ 只有一个跑在单机上的进程,CPU 占用极低,响应速度极快。

这省下来的不仅仅是每年的服务器费用,更是我作为父亲陪伴孩子的宝贵时间。

技术服务于生活,这大概就是独立开发的魅力吧。

关于《交易学徒》 这是我用这套“极简架构”打磨的作品,前端是 Flutter ,后端 Rust 。 希望能给交易员朋友们提供一个干净、流畅、无延迟的练习环境。

官网: https://www.zgjiazu.top

Google Play: https://play.google.com/store/apps/details?id=com.zengkai.jyxtclient

欢迎 V 友们指正。如果你的孩子也吵着要抱抱,那我们就是异父异母的亲兄弟了。😄

作者: kai92zeng | 发布时间: 2026-01-24 08:47


26. ai 时代, node.js 成为核心语言

作者: laodao | 发布时间: 2026-01-23 09:20


27. 鹰角终末地外服出现问题的可能原因是什么?

开服上线前测试没有发现这个问题吗

作者: 404www | 发布时间: 2026-01-23 14:38


28. [Flutter 独立开发] 挑战千元机极限:纯客户端计算 K 线+指标,三星 A53 依然稳定 60+帧

[Flutter 独立开发] 挑战千元机极限:纯客户端计算 K 线+指标,三星 A53 实测 70 FPS

大家好,我是《交易学徒》的独立开发者,祝大家周末愉快!

做过金融类 App 的朋友都知道,移动端的 K 线图( Candlestick Chart ) 渲染一直是性能优化的“深水区”。

为了降低服务器成本和网络延迟,我做了一个“违背祖宗”的决定:完全依赖客户端算力。 所有的技术指标( MA, BOLL, MACD 等)计算,全部在移动端本地实时完成,不依赖后端返回计算结果。

这意味着,一台三星 A53 ( Exynos 1280 处理器,典型的千元机性能)不仅要负责 UI 绘制,还要在主线程实时遍历数组计算指标。

在这种“地狱模式”下,优化成果如何?

📉 性能实测:A53 跑分数据

测试设备 :三星 Galaxy A53 (Exynos 1280) 测试场景

  • GOLD 平均每秒 2.5 次报价
  • 加载 500 根 K 线数据
  • 同时开启 MA (移动平均线) + BOLL (布林带) + MACD 三组指标 + 图表网格
  • 所有指标数据均为 本地实时计算
  • 进行高频拖拽、缩放操作

实测结果

1. 三星 A53 (低端机代表)

A53 帧率测试图

70 FPS ! 在这种重负载下,UI 线程依然保持极高的流畅度,超过 60Hz 的及格线。对于一款千元机来说,这个渲染性能我已经非常满意了。

2. 三星 S25+ (旗舰机代表)

S25+ 帧率图

旗舰机毫无压力,贵的还是好哇。


🏛️ 技术挑战:为何 Dart 能抗住?

很多人对 Flutter 的印象还停留在“套壳性能差”。但实际上,通过合理的架构,Dart 的性能完全够用。我的优化核心思路是:UI 渲染与数据计算分离,用空间换时间。

1. 极致的分层渲染 (Layered Rendering)

我利用 Stack 将视图拆解为三个独立的渲染层级:

  • **Layer A (底层)**:静态 K 线与网格。这是最“重”的层(包含数千个顶点),只有在缩放或平移时才重绘。
  • **Layer B (中间层)**:技术指标 (MA, BOLL)。与 K 线同步,但逻辑分离。
  • Layer C (交互层) 这是优化的关键。包含当前的 Bid/Ask 价格线、十字光标。这一层极其轻量,且更新频率最高(每秒数次)。

通过 Stack + RepaintBoundary,实现了:价格跳动时,底层的几百根 K 线完全不需要参与重绘,GPU 只需要绘制那几条横线。

2. 动态 LOD (Level of Detail) 策略

在手机屏幕上展示 500 根 K 线时,GPU 光栅化压力巨大。 我在代码中加入了 LOD 策略:

  • Zoom In :渲染完整的 Candlestick(蜡烛图)。
  • Zoom Out :当可视区域数据点过多时,自动切换为 LineChart(收盘价连线)。

这极大地降低了 GPU 的顶点绘制数量,解决了缩放时的“卡顿感”。


📱 软件界面预览

目前的 UI 风格偏向现代扁平,针对移动端操作做了很多适配。

软件界面截图


🔗 下载与体验

软件目前已上架 Google Play ,名为“交易学徒” 。如果你对高性能 Flutter 开发或者交易感兴趣,欢迎下载体验。

🎁 V 友专属福利

感谢大家看完这么枯燥的技术分析。 人肉送 VIP :在评论区留下你的 用户 ID (在“我的”页面可以看到),我会手动为你开通 1 个月的 VIP 会员

欢迎大家对 UI 、交互或者技术实现提出建议,每一条我都会认真看!

作者: kai92zeng | 发布时间: 2026-01-23 08:15


29. 同一个 App, Android 下占用存储是否比 IOS 的大很多?

之前 xr 手机 128 存储,不算照片和视音频,没有游戏,还有 20 多 G 剩余,现在 android 系统,装完 app ,占用 80G 了,app 登录设置后,占用增加到 90 多 G 了,感觉 512 存储未来不太够用,有点后悔没选 1T 版本了。 我看了应用设置,占用 500M 以上的大多是导航、流媒体、购物、钉钉、银行、汽车、支付、天气等。

作者: jaleo | 发布时间: 2026-01-24 07:16


30. token 不够用,大家是一个什么组合

Claude Code pro+ claude code+minimax token 不够用,

大家是一个什么组合,感觉 glm 模型有点垃圾,一个小问题给我修的乱起八糟,也不太想用。

作者: chenguangwei | 发布时间: 2026-01-21 07:03


31. 求助!请教一下,群晖 1525nas 插希捷银河 7e10 检测不到是怎么回事

插希捷银河硬盘完全不通电,没声音,系统提示未检测到

使用群晖原厂盘运行就没问题,所以排除了主板问题

换了多块希捷都不行,排除了单盘是坏的可能性

用胶带把希捷 3.3v 端子屏蔽掉也无法通电运行,排除了 3.3v 关机信号可能性

实在是没办法了

但同型号的盘朋友在 920 上运行就很正常

作者: ddd77 | 发布时间: 2026-01-24 07:14


32. 前段时间 next.js 的漏洞,导致服务器被攻击挖矿

其实我的服务器也没啥东西,就一个官网和一个 newapi 服务,官网用 next 写的,结果一天几千条被攻击的消息,CPU 平均 80% 以上,这事持续一段时间了,一直懒得弄,阿里云客服说有违法的可能,吓得我赶紧又买了台服务器放官网,然后升级了 next 版本。 开源不易,没有收入,麻烦大家支持一下。 https://notegen.top/

作者: 461229187 | 发布时间: 2026-01-24 08:41


33. 🤖 Claude Code v2.1.19 发布啦!

🤖 Claude Code v2.1.19 发布啦!

✦ 更新内容

• 添加了环境变量 CLAUDE_CODE_ENABLE_TASKS ,设置为 false 可暂时保留旧系统
• 为自定义命令中访问单个参数添加了简写形式 $0, $1 等
• 修复了在不支持 AVX 指令的处理器上的崩溃问题
• 通过捕获 process.exit() 的 EIO 错误并使用 SIGKILL 作为后备方案,修复了终端关闭时 Claude Code 进程无法终止的问题
• 修复了从不同目录(如 git 工作树)恢复会话时,/rename 和 /tag 未更新正确会话的问题
• 修复了从不同目录运行时,通过自定义标题恢复会话无法正常工作的问题
• 修复了使用提示词存储( Ctrl+S )和恢复时,粘贴的文本内容丢失的问题
• 修复了代理列表显示 “Sonnet (default)” 而不是 “Inherit (default)” 的问题(针对没有显式模型设置的代理)
• 修复了后台运行的钩子命令不会提前返回的问题,这可能导致会话等待一个被有意置于后台运行的进程
• 修复了文件写入预览时省略空行的问题
• 更改为允许没有额外权限或钩子的技能无需批准即可使用
• 将索引参数语法从 $ARGUMENTS.0 更改为 $ARGUMENTS[0](括号语法)
• SDK:当启用 replayUserMessages 时,添加了将排队命令附件消息作为 SDKUserMessageReplay 事件重播的功能
• VSCode:为所有用户启用了会话分叉和回退功能

🔗 https://github.com/anthropics/claude-code/releases/tag/v2.1.19
📅 Published: 2026-01-24 05:56:32

✦ What’s changed
• Added env var CLAUDE_CODE_ENABLE_TASKS, set to false to keep the old system temporarily
• Added shorthand $0, $1, etc. for accessing individual arguments in custom commands
• Fixed crashes on processors without AVX instruction support
• Fixed dangling Claude Code processes when terminal is closed by catching EIO errors from process.exit() and using SIGKILL as fallback
• Fixed /rename and /tag not updating the correct session when resuming from a different directory (e.g., git worktrees)
• Fixed resuming sessions by custom title not working when run from a different directory
• Fixed pasted text content being lost when using prompt stash (Ctrl+S) and restore
• Fixed agent list displaying “Sonnet (default)” instead of “Inherit (default)” for agents without an explicit model setting
• Fixed backgrounded hook commands not returning early, potentially causing the session to wait on a process that was intentionally backgrounded
• Fixed file write preview omitting empty lines
• Changed skills without additional permissions or hooks to be allowed without requiring approval
• Changed indexed argument syntax from $ARGUMENTS.0 to $ARGUMENTS[0] (bracket syntax)
• SDK Added replay of queued_command attachment messages as SDKUserMessageReplay events when replayUserMessages is enabled
• VSCode Enabled session forking and rewind functionality for all users

作者: hzlzh | 发布时间: 2026-01-24 06:25


34. 去香港买小米 15T pro 就可以玩原生 Linux 虚拟机了

在 x 看到的分享,先记到小本本

作者: fyooo | 发布时间: 2026-01-24 03:08


35. 在 Python 中复现 Race Condition

https://blog.singee.me/2026/01/24/2f2f4bee3ed7809a98f1c7fe6bbd1c36/

作者: SingeeKing | 发布时间: 2026-01-24 09:29


36. 关于出海产品用到的 redis 选哪家

由于大厂研发出身,技术选型上我还是有些追求,目前我的项目使用 cloudflare/vercel 部署前端接入层,用 GKE 部署后端服务,很多人也会用到 redis ,如果从网络延迟来考虑服务之间的部署,应该首选 google 的 redis 服务,然后通过内网直连达到最低的延迟,但是 google 太贵了光是 GKE 就已经有一笔成本了,还没赚到钱就不想花这么高的成本再去一个边缘的服务上去,推荐一家几乎免费的 redis 服务商 upstash 首先他们提供了免费额度:存储 256 MB 的数据,每月可以发出 500 000 次命令,默认最大数据库数量是 1 个。这免费的门槛可能就够你用了,如果你有多个服务,之间需要隔离的话,需要注意的一点是他们不支持 redis db 的选择,默认只有一个 db ,要薅羊毛你可以用多个账号,每个账号创建一个 redis 实例。付费的话也很目前我从 GKE 的 us-central1 通过公网链接到 upstash 的实例在首次链接建立后,通过长连接执行 command 的延迟是 1ms ,几乎和内网没什么区别。upstash 首先他们提供了免费额度:

存储 256 MB 的数据,每月可以发出 500 000 次命令,默认最大数据库数量是 1 个。

这免费的门槛可能就够你用了,如果你有多个服务,之间需要隔离的话,需要注意的一点是他们不支持 redis db 的选择,默认只有一个 db ,要薅羊毛你可以用多个账号,每个账号创建一个 redis 实例。

付费的话也很便宜,如果你也嫌管理太多账号太麻烦,可以选择按使用量计费( PAY AS YOU GO ):

1 、按每 100 000 次约 0.20 美元计费(这个价格是读写命令总和,不包括某些内部操作命令)

2 、存储空间按每 GB 大约 0.25 美元计费(每个数据库第一个 GB 通常免费)

3 、带宽月度前 200 GB 免费,之后按每 GB 大约 0.03 美元收费

我的服务使用 redis 量很小,这么算几乎一个月只需要不到 10 块钱人民币,这个成本比起 google 要低太多了,它还有其他高阶套餐这里留给大家自己去探索吧。

目前我从 GKE 的 us-central1 通过公网链接到 upstash 的实例的 us-central1 地区,在首次链接建立后,通过长连接执行 command 的延迟是 1ms ,几乎和内网没什么区别。

作者: horanv | 发布时间: 2026-01-23 03:02


37. AI 时代如何证明个人项目的真实性?

背景

前天朋友提供一个内推岗,这个公司蛮不错的,规模大待遇好还不是外包也不是有争议的 web3 ,他在里面工作,说招好几个月了还是没人去。我有个个人微服务项目准备拿去应聘,然而推荐后说没办法还是得垂直经验,因为现在有 AI 生成代码很简单,个人项目很容易被认为是 AI 代工。

项目介绍

项目原先是通过网课教程做的但不符合生产要求被我全部推翻重写,原来是 go micro 2.9.1 现在是 go micro 4 ,所有服务都是领域驱动,改过框架源码,链路追踪、监控、日志系统、架构等全部一人完成,期间技术栈做了很大的调整,一共迭代 6 个版本,目前是 6.1 ,耗时 3 个月,至今仍在迭代,有部分自编组件。包含压测报告、决策记录、变更日志和自述文件(含项目介绍及部署指南),用 Github Project 管理项目,2 周一版,部署在阿里云 K8S 集群上,使用超过 15 个组件,还用到 LUA 脚本。服务是模拟支付回调扣减库存过程,每个服务 2 个副本,单个 Pod 上限为单核 CPU + 512M 内存,压测 1596Qps ,P99 为 84ms 。

不存在 AI 代工

我开发过程中主要是用 AI 推荐轻量级工具并分析其难度,代码大部分还是自己写,因为 go micro 做 EDA 架构的案例本身就少得可怜直接导致 AI 生成的代码不靠谱,最后还是被我的方案优雅地取代。开发过程中每个版本都是巨大的挑战。

请问各位大佬如何证明个人项目不是 AI 代工以实现成功转型 Golang 开发?

作者: zhanshen1614 | 发布时间: 2026-01-23 03:31


38. 如何移除威联通 Qtier 存储池的 SSD 超高速层?

近期感觉不需要那么快的速度。想要将 NAS 里的 SSD 拆出一个来。目前的配置为:

- 一个系统盘 SSD 250G 。

- 两个机械盘 单块 4T ,做了 Raid1 ,全部分配为一个厚卷。已使用 2.7T ,剩余 1.2T 。

- 一个缓存 SSD 500G 给两个机械盘的阵列加了超高速层,一起形成了一个 Qiter 存储池。需要移除的就是这个。

在存储池管理的“移除超高速层”提示“其余 Raid 组还额外需要 430G 才能存储超速层中的数据。”感觉很奇怪:

- 1.超高速层的数据不都是机械盘 Raid 组上移进去的,应该差别不大,怎么还需要这么多存储空间?

- 2.目前厚卷还有 1.2 个 T ,装 430G 是没问题的,为什么不能直接向下转移数据后卸载超高速层?

希望各位大佬能给解惑,先行谢过!

作者: TimG | 发布时间: 2026-01-24 06:05


39. AI 除了写代码,在哪方面最能提升业务研发团队的工作效率?

公司对 AI 很看重,不仅为我们采购了企业版的 GitHub copilot ,kiro ,Claude code 用作日常开发,邀请这些供应商的技术团队来交流分享,还鼓励我们在其他方面使用 AI 技术,不少团队的 OKR 都包含 AI 相关的内容了,我这能想到的就是监控报警交给 AI 治理,你们有比较好的实践分享吗?

作者: yuanyao | 发布时间: 2026-01-23 14:53


40. llmdoc: 解决 AI Coding 的最后 100 米

在过去一年半的时间里, 我的工作流有了巨大的变化, 也亲眼见证了 AI Coding 从兴起到现在的全面铺开, 个人工作模式已经被彻底颠覆了

当我们回顾 2025 年的变化, 从年初的 gemini 2.5 到 sonnet 4.5, gpt-5-codex, opus 4.5, gemini 3, gpt-5.2-codex.

我们应该认为: 模型的能力进步速度没有变得缓慢, 而且 Cursor / Claude Code / OpenCode 这类 Coding Agent 的兴起, ToD 的应用也以令人难以预料的速度推进.

随之而来的有另一个问题: Context, 是的上下文构建, 而且我想要说的是在严肃的面向生产的环境中的 Context, 这不是 chatbot 中用 personality 这种可以糊弄过去的, 代码更新留下了遗漏是真的会出现线上故障的.

让我们再看一下现在的这些 Coding Agent 提供的能力吧:

  1. AGENTS.md / CLAUDE.md: 注入到 User Message 满足 Context 定制化的需求
  2. SubAgent / Fork-Context: 通过增加并行度实现 Task 的更快解决
  3. Skill / Command / Workflow: 虽然都在鼓吹 Skill 的渐进式披露, 但是我认为对于编程这种极度明确的场景太多的 Skill 只会让你的模型编程笨蛋

但是, 还差了一些东西, Agent 实际上并不了解你的仓库, 我这里的了解指的是 Agent 实际上是通过 Claude.md + 大量阅读代码文件才感知到了当前的环境.

这是正常的工作模式, 我们也习惯于这一点, 但是这不是一个好的路径, 如果使用 codex-cli 的人对此应该深有感触: 不断的不断的阅读代码文件, 甚至是完全不需要阅读的代码文件, 在 Context 足够解决问题的时候, 才开始解决问题.

Context Floor

我个人会把 “满足 Agent 解决需求的 context 的丰富度” 称之为: Context Floor

  1. 调用了多少工具
  2. 占用了多少 Token
  3. 关键信息的密度

现在让我们回过头来看, 一些经典的解决方案:

  1. LSP MCP: 通过提升关键 Symbol 密度 + 大量的工具调用 实现快速到达 context floor
  2. ACE / RAG: 通过少量的工具调用 + 稀疏的关键信息密度, 很难保证信息的关联性和有效性
  3. Agentic RAG: 让 Agent 做一次信息的搜集, 提供一份概要, 一般使用 SubAgent, 在 claude code 中的explorer就是承担了类似的作用, 虽然 subagent 执行任务可以保证 master agent 上下文足够干净, token 占用量也不高, 关键信息密度也很高, 但是耗时太久了 TTCR (Time to Context Floor)实在是难以忍受

那么, 有没有一个解决方案足够快, 信息密度足够高, 主 Agent 的 Token 占用足够少, 信息和任务存在强关联而且有效呢?

我的解决方案

https://github.com/TokenRollAI/cc-plugin

调试了一个月, 在公司内验证了 3 个月之后,我觉得在现在时间节点的 SOTA 模型的加持下, 这套方案足够满足需求了

llmdoc + subagnet RAG

过去我有几个帖子说名字他的诞生的思考过程, 这里就不在详细的介绍

llmdoc

一个在设计之处就用来解决 AI 快速获取高密度信息 + 人类可读性的文档系统

脱胎于 diataxis, 做了些微不足道的改动

image

  1. 利用 Agent 能够快速批量 Read 的能力, 文档中保留最关键的文件路径+负责的模块说明
  2. 项目概览 + 架构 + 通过主题串联的 guides + refrence

以上作为基础, 在代码库中插入一个 llmdoc, 满足人类可读性 + Agent 可读性

示例: https://github.com/TokenRollAI/minicc/tree/main/llmdoc

subagent RAG

为了解决并行度的问题, 必须要引入 subagent, 但是 subagent 用来做什么呢?

主要是两件事情:

  1. 调研: 基于 llmdoc + 现有的代码文件, 调研拆解后的任务作为前置条件
  2. 记录: 在完成了编码任务之后, 自动的更新维护 llmdoc

问题

效果当然非常好, 或者说, 自从有了这一套解决方案之后我没有再使用过其他乱七八糟的 plugin

但是有一个问题:

而且不是有点贵, 大概是用 1.5 倍的价钱完成了从 85 分 -> 90 分的效果, 在一些简单的项目中, 效果一般, 但是越复杂的项目收益越好.

效果

在我们公司的线上业务中, 后端代码仓库大概有 10W 行代码, 这套系统工作出色, 在几乎所有的情况下, 都能够准确的完成需求.

在建立了 llmdoc 的基础上, 根据需求的大小, 需求完成的成本大概在 1 - 5 刀, 而且最关键的是: 人类介入的次数大大降低, 只需要 Review 代码, 以及执行少量的修改后, 就能够放心交付.

现在也在我们的前端团队内开始推进, 效果依然出色.

我推荐大家使用 cc-plugin, 强烈推荐!在过去一年半的时间里, 我的工作流有了巨大的变化, 也亲眼见证了 AI Coding 从兴起到现在的全面铺开, 个人工作模式已经被彻底颠覆了

当我们回顾 2025 年的变化, 从年初的 gemini 2.5 到 sonnet 4.5, gpt-5-codex, opus 4.5, gemini 3, gpt-5.2-codex.

我们应该认为: 模型的能力进步速度没有变得缓慢, 而且 Cursor / Claude Code / OpenCode 这类 Coding Agent 的兴起, ToD 的应用也以令人难以预料的速度推进.

随之而来的有另一个问题: Context, 是的上下文构建, 而且我想要说的是在严肃的面向生产的环境中的 Context, 这不是 chatbot 中用 personality 这种可以糊弄过去的, 代码更新留下了遗漏是真的会出现线上故障的.

让我们再看一下现在的这些 Coding Agent 提供的能力吧:

  1. AGENTS.md / CLAUDE.md: 注入到 User Message 满足 Context 定制化的需求
  2. SubAgent / Fork-Context: 通过增加并行度实现 Task 的更快解决
  3. Skill / Command / Workflow: 虽然都在鼓吹 Skill 的渐进式披露, 但是我认为对于编程这种极度明确的场景太多的 Skill 只会让你的模型编程笨蛋

但是, 还差了一些东西, Agent 实际上并不了解你的仓库, 我这里的了解指的是 Agent 实际上是通过 Claude.md + 大量阅读代码文件才感知到了当前的环境.

这是正常的工作模式, 我们也习惯于这一点, 但是这不是一个好的路径, 如果使用 codex-cli 的人对此应该深有感触: 不断的不断的阅读代码文件, 甚至是完全不需要阅读的代码文件, 在 Context 足够解决问题的时候, 才开始解决问题.

Context Floor

我个人会把 “满足 Agent 解决需求的 context 的丰富度” 称之为: Context Floor

  1. 调用了多少工具
  2. 占用了多少 Token
  3. 关键信息的密度

现在让我们回过头来看, 一些经典的解决方案:

  1. LSP MCP: 通过提升关键 Symbol 密度 + 大量的工具调用 实现快速到达 context floor
  2. ACE / RAG: 通过少量的工具调用 + 稀疏的关键信息密度, 很难保证信息的关联性和有效性
  3. Agentic RAG: 让 Agent 做一次信息的搜集, 提供一份概要, 一般使用 SubAgent, 在 claude code 中的explorer就是承担了类似的作用, 虽然 subagent 执行任务可以保证 master agent 上下文足够干净, token 占用量也不高, 关键信息密度也很高, 但是耗时太久了 TTCR (Time to Context Floor)实在是难以忍受

那么, 有没有一个解决方案足够快, 信息密度足够高, 主 Agent 的 Token 占用足够少, 信息和任务存在强关联而且有效呢?

我的解决方案

https://github.com/TokenRollAI/cc-plugin

调试了一个月, 在公司内验证了 3 个月之后,我觉得在现在时间节点的 SOTA 模型的加持下, 这套方案足够满足需求了

llmdoc + subagnet RAG

过去我有几个帖子说名字他的诞生的思考过程, 这里就不在详细的介绍

llmdoc

一个在设计之处就用来解决 AI 快速获取高密度信息 + 人类可读性的文档系统

脱胎于 diataxis, 做了些微不足道的改动

  1. 利用 Agent 能够快速批量 Read 的能力, 文档中保留最关键的文件路径+负责的模块说明
  2. 项目概览 + 架构 + 通过主题串联的 guides + refrence

以上作为基础, 在代码库中插入一个 llmdoc, 满足人类可读性 + Agent 可读性

示例: https://github.com/TokenRollAI/minicc/tree/main/llmdoc

subagent RAG

为了解决并行度的问题, 必须要引入 subagent, 但是 subagent 用来做什么呢?

主要是两件事情:

  1. 调研: 基于 llmdoc + 现有的代码文件, 调研拆解后的任务作为前置条件
  2. 记录: 在完成了编码任务之后, 自动的更新维护 llmdoc

问题

效果当然非常好, 或者说, 自从有了这一套解决方案之后我没有再使用过其他乱七八糟的 plugin

但是有一个问题:

而且不是有点贵, 大概是用 1.5 倍的价钱完成了从 85 分 -> 90 分的效果, 在一些简单的项目中, 效果一般, 但是越复杂的项目收益越好.

效果

在我们公司的线上业务中, 后端代码仓库大概有 10W 行代码, 这套系统工作出色, 在几乎所有的情况下, 都能够准确的完成需求.

在建立了 llmdoc 的基础上, 根据需求的大小, 需求完成的成本大概在 1 - 5 刀, 而且最关键的是: 人类介入的次数大大降低, 只需要 Review 代码, 以及执行少量的修改后, 就能够放心交付.

现在也在我们的前端团队内开始推进, 效果依然出色.

我推荐大家使用 cc-plugin, 强烈推荐!

作者: pDJJq | 发布时间: 2026-01-24 06:14