妹子星期一走后都住在公司,平时遇不到。加上星期一晚上她微信对我说我对她只是朋友的感觉,让我把手手放在安全区,所以这几天聊天并不多。

星期三我给她买了水果,她中午回来拿走了。我回到家,意外发现小蛋糕,还有洗手液,让我摸完猫咪要好好洗手。

她星期四下午回来就不走了。我买了酸菜鱼,放在客厅的桌子上,然后躲到房间里,给她发微信,准备让她一个人进房间吃。她问我晚上吃什么呀,要不要尝尝这个。我说:好啊。出来尝了一口准备走的,她看看就在客厅吃了,让我陪她一起吃。她吃的不多,大半给我吃了,虽然我已经吃了晚饭。

吃完饭,她提议在客厅看电影,用她的投影仪。正好两个小板凳,边看边吃边聊天。

她准备了菠萝。也许是因为,我提过,我第一次见到她,就把自己最爱吃的买给自己吃的菠萝一大半分给了她。她笑了。

电影是甜蜜蜜,没怎么看懂。看这个电影是因为,我提过,我第一次见她,觉得她好似里面的张曼玉,所以一定要看看。

说是看电影,实际是聊天,她跟我不间断段的讲着她的事,家里的讨厌的说教大伯,亲戚家的一个女儿结婚跟家里闹掰,她当伴娘等。

我把手都放在背后,问:我今天表现还行吧。她笑了:其实你不用那么刻意。

小椅子坐久了有点累,我就坐直了,她靠在我的身上。双手搭在我的手上,掰着我的手指聊天。

我问她:Will you marry me ?她笑了。

看完电影,我先洗澡。洗完澡,我把她喊了出来,说今天应该就见不到你了,给我一个拥抱吧。她笑着给我一个拥抱。

我回到卧室,又重新买了电动牙刷。

虽然是室友,但是她大部分时间住公司,这应该算是我们第三次见面,还没有见到过她不笑的样子。

目前恋爱花费一共 630 元。感觉手里的钱,从来没有这样耐用过。







官方已经确认了

Hey everyone!

This thread is for discussing Opus 4.7: how it performs, what you’re building with it, first impressions, etc.

Opus 4.7 follows the same pricing policy as GPT 5.4 and other frontier models going forward. If you’re on a legacy request-based plan, you’ll need to enable Max Mode to use it.

I get that there are strong feelings about recent pricing changes, but we aren’t going to let this thread devolve into a new debate about this policy. Off-topic posts that violate our community guidelines will be removed.

如题,家里面宽带没有开通电视服务,另外现在就算开通的话,要重新走线才行 [我了解到的是网线和电视线线是两根] 。所以有没有比较稳定的直接通过网络来看电视直播的方式,之前的好几个总是掉线,然后老人很久都不能看电视了,只有等我放假回去了再给他找个新的。

小T导读:中原油田作为中国石化的重要油气生产基地,其生产过程控制系统(PCS)是保障油田安全生产、优化运行的核心枢纽。为解决高并发写入性能瓶颈、高昂的存储成本、复杂的实时分析需求以及多业务数据孤岛等问题,项目组于 2023 年正式引入 TDengine TSDB 作为新一代数据底座。在本案例中,TDengine TSDB 作为 PCS 核心业务模块的时序数据库,并通过 taosX 工具,实现了从分公司到总部的数据实时同步。落地实践表明,升级改造后的系统已经成为一个高效、稳定、易扩展的统一数据平台,为中原油田的智能化建设奠定了坚实的数据基石。

业务痛点

随着物联网技术的普及和数字化转型的深入,PCS 系统接入的设备数量与数据种类呈指数级增长,海量的时序数据对原有基于 Oracle 构建的数据架构提出了严峻挑战。中原油田 PCS 项目涵盖采油、注水、储气库管理、管线监控等多个关键业务模块。全油田范围内布设有数以万计的传感器与智能设备,每秒产生数十多万条时序数据记录。

在原有技术架构下,我们的系统面临的核心痛点如下:

  • 写入性能瓶颈:Oracle 数据库并非为高频时序数据写入设计,在面对大量并发插入请求时,I/O 压力巨大,经常出现写入延迟,甚至影响前端控制指令的下发。
  • 存储成本高昂:关系型数据库对时序数据的压缩效率较低,导致存储空间占用巨大。为保存一定周期内的历史数据,需要不断扩容高端存储设备,硬件与维护成本居高不下。
  • 实时分析能力不足:基于 Oracle 进行时间窗口聚合、设备间关联分析等操作,需要编写复杂的 SQL,执行效率低下,响应时间常在分钟级以上。
  • 系统架构僵化:各业务模块(如 PCS 与储气库)数据独立存储,形成数据孤岛,难以进行跨业务的统一分析与价值挖掘。

这些痛点严重制约了油田数字化和智能化的进程,因此,选择一个专为时序数据设计的高性能数据库成为项目组的必然选择。

选择 TDengine TSDB

在项目选型初期,我们团队制定了明确的目标:新数据库必须具备极高的写入和查询性能、优异的数据压缩能力、对 SQL 标准的良好支持、高可用性与易于维护的集群架构,并能与现有物联网生态无缝集成。

经过严格的 POC 测试,TDengine TSDB 在以下方面展现出决定性优势:

  • 性能碾压:在同等硬件条件下,TDengine TSDB 的写入吞吐量、查询速度更是有数量级的提升。
  • 极致压缩:凭借其专为时序数据设计的存储结构,TDengine TSDB 的压缩比轻松达到 1:10 ,远超测试中的其他竞品。

  • SQL 兼容性:团队原有的 SQL 技能可以轻松迁移,大大降低了开发和学习成本。同时,这也方便了像 ThingsBoard 这样的第三方工具直接通过标准 JDBC 连接进行数据查询。

  • All in One 设计:TDengine TSDB 内置了消息队列、缓存和数据订阅等功能,无需再部署 Kafka/Redis 等额外组件,简化了系统架构,降低了运维复杂度。
  • 企业级特性:企业版提供的多级存储功能,可以将冷数据自动迁移至更廉价的对象存储,进一步优化成本,这与项目长期数据保存的需求完美契合。

业务落地实践

系统架构

新架构中,我们采用了云边协同架构,TDengine TSDB 作为核心数据持久层与计算引擎贯穿始终。

业务模块与收益

数据写入与实时处理模块

针对不同业务我们采用“双轨制”写入策略。对于结构灵活多变的储气库等业务数据,我们利用 TDengine TSDB 的 Schemaless 接口,数据库自动建表,极大简化了数据接入流程。对于结构稳定、逻辑复杂的核心 PCS 业务数据,则采用传统拼装 SQL 的方式写入,确保精确控制与高性能。

在数据接入层油田现场的各类设备通过 MQTT 或 HTTP 协议,将数据上报至 ThingsBoard 物联网平台。对于数据结构多变、灵活的储气库业务,采用 TDengine TSDB 的 Schemaless 写入接口,ThingsBoard 可直接写入数据,TDengine TSDB 自动建表,极大提升了开发效率。

核心收益——

  • 写入性能飞跃:TDengine TSDB 专为时序数据优化的写入引擎彻底解决了 Oracle 面临的 I/O 瓶颈。系统轻松应对每秒数十万条数据的并发写入,延迟从秒级降至毫秒级,保障了生产监控数据的实时性与控制指令的及时性。
  • 开发效率提升:Schemaless 写入模式在应对业务字段变更和新型设备接入时,无需频繁修改数据库表结构,后端代码也无需调整,实现了“数据即接即用”,开发效率提升超过 60%。ThingsBoard 通过内置的 JDBC 连接器,将解析后的数据持久化到 3 节点 TDengine TSDB 高可用集群中。同时,核心的 PCS 业务模块,因其数据结构稳定且业务逻辑复杂,仍采用拼装标准 SQL 的方式直接向 TDengine TSDB 写入数据。这种“Schemaless + SQL”的双轨写入模式,兼顾了灵活性与复杂性。

  • 架构简化:TDengine TSDB 内置的类消息队列能力,替代了部分原先需要 Kafka 等中间件实现的缓冲与削峰填谷场景,减少了系统组件依赖,降低了架构复杂度和运维成本。

数据同步与分发模块

为了满足总部对全局数据的分析需求,项目使用 TDengine TSDB 企业版提供的 taosX 数据同步工具,将油田生产区的指定数据表/超级表,实时、可靠地同步到总部数据平台的 TDengine TSDB 集群中,实现了数据的跨地域统一。在数据库管理 web 后台页面图形化界面即可配置数据实时同步任务。

核心收益——

  • 实现数据汇聚与统一:轻松构建了“边缘-中心”两级数据体系,解决了总部全局数据分析需求与分公司数据本地化处理需求之间的矛盾。
  • 同步过程可靠高效:taosX 工具保障了数据同步的可靠性和一致性,且对源集群性能影响极小。总部可实时获取全域数据视图,为高层战略分析和跨区域对标提供了数据基础。

图形化界面配置实时同步任务

TDengine 中建立的 topics

数据查询与分析模块

业务应用、实时大屏和数据分析系统可直接通过标准 SQL(或 REST API/JDBC)访问 TDengine TSDB。这样一来,我们可以充分利用原生函数,进行高效聚合、插值、降采样等操作。利用“超级表”模型,轻松实现跨设备、跨区域的统一查询分析。

在数据应用层,业务应用、实时大屏、告警分析引擎均直接连接油田侧的 TDengine TSDB 集群,利用其强大的即时计算能力,进行数据查询与分析。

核心收益——

  • 查询性能指数级提升:典型查询场景性能对比显著。例如,“查询某注水站过去一小时每分钟的平均压力”这类时间窗口聚合查询。
  • 打破数据孤岛:基于“超级表”概念,将不同采油厂、不同业务线(如采油、注水)的同类型设备(如泵机)数据模型统一,实现了跨业务、跨区域的全局数据关联分析,为生产协同优化提供了可能。
  • 实时分析能力增强:毫秒级的查询响应使得基于实时数据的监控大屏、即时决策和交互式分析成为现实,显著提升了生产调度和应急指挥的时效性。

数据存储与压缩模块

TDengine TSDB 针对时序数据特性,采用列式存储与专用压缩算法,实现海量测点数据的高效写入与存储,在显著降低空间占用的同时也提升了查询性能。

核心收益——

  • 存储成本大幅降低:在实际业务中,我们发现数据压缩效果显著,压缩比普遍超过 1:10。原需约 50TB 原始空间的数据,在单副本存储下仅占用约 4.2TB;结合多级存储策略,长期数据保存的整体存储成本下降超过 85%。
  • 存储管理自动化:多级存储策略实现了数据生命周期的自动化管理,无需人工干预数据归档,在保证历史数据可查询的同时,释放了昂贵的高性能主存储空间。

未来规划

TDengine TSDB 在中原油田 PCS 项目的成功,是油田数字化转型的一个开端。接下来我们计划针对以下几点进行进一步研究与合作:

  1. 深度分析:探索利用 TDengine TSDB 与机器学习框架的结合,对海量历史时序数据进行深度挖掘,实现设备预测性维护、工艺参数优化等高级应用。
  2. 边缘计算融合:研究 TDengine TSDB 在边缘侧的部署,在数据产生源头进行初步的过滤和聚合
  3. 持续关注:团队将持续关注 TDengine TSDB 的发展,积极测试新版本、新功能,如流计算引擎的进一步增强,以期在现有平台上创造更大的业务价值。

关于中原油田

中原油田是中国石油化工集团有限公司的重要上游企业,世界 500 强中石化旗下第二大油气田。其拥有总矿权面积 15405.164 平方千米,石油资源量 20.88 亿吨、天然气资源量 18451.02 亿立方米,探明石油地质储量 6.258 亿吨、天然气地质储量 4833.36 亿立方米;取得省部级以上科技进步奖 380 项、国家级科技进步奖 36 项、国家专利 765 件,其中“特大型超深高含硫气田安全高效开发技术及工业化应用”项目荣获 2012 年度国家科技进步特等奖;获得全国“五一”劳动奖状、中央企业先进基层党组织、中国石化绿色企业等多项荣誉,连续六届被评为全国文明单位。

作者

王欣怡

PDF 线性化(也称为 “Fast Web View”,快速网页查看)是一种对 PDF 文件进行优化的方式。通常情况下,在浏览器从服务器下载完整个多页 PDF 文件之前,用户无法在线查看其内容。而当 PDF 被线性化处理后,即使文件尚未完全下载,浏览器也可以优先快速显示第一页,从而提升加载和浏览体验。

本文将介绍如何使用C#代码将普通 PDF 转换为线性化 PDF。

环境准备

在开始操作之前,需要先完成开发环境的基础配置,确保项目能够正常使用 PDF 相关功能。

你可以通过以下方式引入所需的库:

  • 通过 NuGet 安装(推荐):在 Visual Studio 中打开 NuGet 包管理器,搜索并安装对应的 PDF 处理库,即可自动完成依赖配置。
  • 手动添加引用:下载相关组件包后,将其中的 DLL 文件添加到项目引用中。

完成以上配置后,即可在项目中调用相关 API 进行 PDF 线性化处理。这里我们以Spire.PDF for .NET为例:

PM> Install-Package Spire.PDF

将 PDF 转换为线性化格式

下面是将普通 PDF 文件转换为线性化 PDF 的基本步骤:

  1. 使用 PdfToLinearizedPdfConverter 类加载需要处理的 PDF 文件。
  2. 调用 ToLinearizedPdf() 方法,将文件转换为线性化格式。

参考示例代码如下:

using Spire.Pdf.Conversion;

namespace ConvertPdfToLinearized
{
    class Program
    {
        static void Main(string[] args)
        {
            // 加载 PDF 文件
            PdfToLinearizedPdfConverter converter = new PdfToLinearizedPdfConverter("Sample.pdf");
            // 将文件转换为线性化 PDF
            converter.ToLinearizedPdf("Linearized.pdf");
        }
    }
}

转换完成后,可以在 Adobe Acrobat 中打开生成的结果文件,并查看文档属性,可以看到 “Fast Web View(快速网页查看)” 的值为 Yes,这表示该文件已经完成线性化处理。

结语

通过以上内容,你可以轻松实现将普通 PDF 转换为线性化格式,从而显著提升文档在网页端的加载速度和用户浏览体验。对于需要在线预览或分发 PDF 文件的应用场景来说,这一优化尤其重要。

在实际项目中,只需完成基础环境配置并调用相应方法,即可快速集成该功能。你可以根据业务需求,将其应用到文档管理、在线阅读或文件传输等场景中,进一步提升整体性能和用户体验。

在开发跨境金融、汇率看板、多币种结算系统时,统一、实时、稳定的汇率数据源是整个系统的核心。
传统多接口轮询方案存在格式混乱、延迟高、维护成本高等问题,本文提供的 WebSocket 接口,分享一套可直接落地的多币种汇率订阅方案,简洁、可靠、适合生产环境。

一、传统汇率获取方式的痛点

在实际开发中,常规方案会遇到明显瓶颈:

  • 单接口仅支持单币种,多币种需多次请求,效率低
  • 不同接口返回结构不统一,数据整合成本高
  • REST 轮询延迟大、资源占用高,无法满足实时性要求
  • 无重连机制,网络波动易造成数据中断
  • 难以支撑 7×24 小时稳定运行
    这些问题直接影响系统稳定性与数据准确性。

二、技术方案:WebSocket 实时推送

相比轮询,WebSocket 长连接更适合实时汇率场景:

  1. 数据变动主动推送,延迟极低
  2. 一次鉴权、一次订阅,长期维持连接
  3. 支持批量币种订阅,返回格式统一
  4. 便于实现断线重连,提升可用性
    提供标准化多币种实时汇率接口,接入简单、稳定性强,是后端与金融场景的高效选择。

三、核心功能与优势

多币种批量订阅
一次订阅即可同时获取 USDCNY、EURCNY、JPYUSD、GBPUSD 等主流汇率。
统一数据结构
所有币种返回格式一致,无需额外适配。
实时低延迟
汇率变动秒级推送,远优于定时拉取。
高可用
支持断线重连与自动重订阅,保证数据不间断。

四、精简可运行代码(一段即用)

import json
import websocket

WS_URL = "wss://api.alltick.co/realtime"

def on_message(ws, msg):
    data = json.loads(msg)

def on_open(ws):
    ws.send(json.dumps({
        "action": "subscribe",
        "symbols": ["USDCNY", "EURCNY", "JPYUSD", "GBPUSD"]
    }))

if __name__ == "__main__":
    ws = websocket.WebSocketApp(WS_URL, on_open=on_open, on_message=on_message)
    ws.run_forever()

五、工程化最佳实践

  1. 将最新汇率存入内存字典或 Redis,支持全局快速读取
  2. 增加断线自动重连机制,确保链路高可用
  3. 只订阅业务需要的币种,减少无效数据与带宽消耗
  4. 增加日志记录,便于追踪连接状态与异常
  5. 使用 systemd 或进程托管工具,实现服务自启动

六、总结

多币种实时汇率接入,关键在于统一数据源 + 长连接推送。
可实现一次订阅、多币种同步、低延迟、高稳定,大幅降低开发与维护成本。
这套方案可直接用于汇率工具、跨境系统、行情看板、量化策略等场景,是后端工程化落地的实用方案。

我是自己在淘宝买的便宜机型( 300 左右),自己上网找的滤芯。以前都是按 1 ,3 ,6 个月更换。现在又要到换的时候,我查了一下 tds 。

第一次是 5 ,然后跳到 4 。第二次数值是 3 了。日常就是煮饭喝水用,我在想是不是我用得少,加上我们这里的自来从也才 40-100tds 。是不是每次到期可以拖一阵子再换?

​项目介绍:​这是一个面向投标/评标场景的结构化抽取工具。支持上传 PDF、Word 或 Excel 格式的招标文件,自动提取项目基础信息、投标资格、技术与商务要求、评标办法等关键条款,并还原目录层级与跨页表格。输出结构化 JSON/Excel,适用于招标文件智能生成、AI 辅助评标及招投标知识库建设。

​GitHub 项目地址:​https://github.com/intsig-textin/xparse-sample-projects

接下来我们主要讨论一件事:如果目标是从一份很长的招标文件里稳定产出结构化结果,系统应该怎么搭。重点不是场景背景,而是中间层怎么定义、任务怎么拆、Prompt 为什么这样写。

一、先把目标定义清楚

如果只是让大模型“总结一份招标文件”,实现并不难;难的是把一份上百页的长文档稳定拆成可展示、可复用、可继续治理的结构化结果。

这类工具真正要完成的是下面这条链路:

  • 上传 PDF 招标文件
  • 调用 TextIn 把原始文件转成 markdown + pages
  • 按标题把长文档切成多个语义片段
  • 把片段路由到基础信息、资格要求、评审办法、投标递交、无效标风险、附件格式 6 个模块
  • 每个模块单独调用大模型,输出固定 JSON
  • 前端直接按模块渲染,后续也可以继续导出或复用

所以这里的核心不是“抽字段”三个字,而是先把长文档抽取问题拆成多个边界明确的小任务。

二、架构应该怎么拆

如果目标是长文档结构化,推荐把链路拆成四层:

这四层分别解决不同问题:

  • 解析层:把 PDF 变成后续可计算的中间结构
  • 编排层:把长文档拆成多个上下文更小的任务
  • 抽取层:让每个模块只输出自己负责的 schema
  • 展示层:按模块 JSON 渲染,而不是再做一次自由解析

三、先把解析层的输入输出定义对

这里最容易写错。真正调用的不是 form-data 接口,而是 TextIn 的二进制流解析接口:

POST https://api.textin.com/ai/service/v1/pdf_to_markdown

请求头和请求体在代码里是这样组织的:

headers = {
    "x-ti-app-id": TEXTIN_APP_ID,
    "x-ti-secret-code": TEXTIN_SECRET_CODE,
    "Content-Type": "application/octet-stream",
}

params = {
    "parse_mode": "auto",
    "page_count": 200,
    "dpi": 144,
    "table_flavor": "html",
    "apply_document_tree": 1,
    "markdown_details": 1,
    "page_details": 1,
    "apply_merge": 1,
    "paratext_mode": "none",
}

resp = await client.post(
    "https://api.textin.com/ai/service/v1/pdf_to_markdown",
    headers=headers,
    params=params,
    content=file_bytes,
)

这里的关键点只有两个:

  • 返回值里最重要的是 result.markdown

可以把它理解成下面这个输入输出契约:

输入:

Headers:
- x-ti-app-id
- x-ti-secret-code
- Content-Type: application/octet-stream

Query:
- parse_mode=auto
- page_count=200
- dpi=144
- table_flavor=html
- apply_document_tree=1
- markdown_details=1
- page_details=1
- apply_merge=1
- paratext_mode=none

Body:
- PDF 文件的原始字节流

输出:

{
  "code": 200,
  "result": {
    "markdown": "# 第一章 招标公告\n...",
    "pages": []
  }
}

如果你做的是 Web 工具,通常会在本地后端再包一层 /api/parse 方便浏览器上传和鉴权隔离;但那只是工程封装,不是上游解析接口本身的协议。

四、为什么中间层必须是\`markdown+pages\`

这一步决定了后面能不能把长文档拆稳。

markdown 的价值在于:

  • 保留标题层级
  • 保留段落结构
  • 表格可以以 HTML 或 Markdown 形式继续消费
  • 便于按标题、按章节做切块

pages 的价值在于:

  • 保留分页语义
  • 为页面预览、页码回跳、证据定位留接口
  • 后续如果要做高亮溯源,不需要重新回到 PDF 二进制层

也就是说,解析完成之后,整个系统处理的对象就不再是 PDF,而是 markdown+pages 这个统一中间层。

五、长文档不要全文直抽,先按标题切块

招标文件最难的地方不是字段多,而是篇幅长、章节多、不同章节关心的问题完全不同。如果直接把全文塞给一个总 Prompt,结果很难稳。

更合理的做法是先按标题切块。代码里的切块入口就是:

function parseMarkdownToChunks(md: string): Chunk[] {
  const lines = md.split('\n');
  const headerMatch = line.match(/^#{1,2}\s+(.*)/);
}

这一步做的不是“抽取”,而是把文档转成一批更短、更聚焦的 chunk。

切完之后,再按关键词做模块路由,例如:

const MODULE_KEYWORDS = {
  basic: ['招标公告', '项目概况', '联系方式'],
  qualification: ['资格', '资质', '财务', '联合体'],
  evaluation: ['评标', '评审', '评分', '分值'],
  submission: ['投标文件', '递交', '开标', '保证金'],
  invalid_risk: ['无效标', '否决', '废标条款'],
  annex: ['附件', '格式', '表单', '清单'],
};

这样设计有三个直接收益:

  • 每次发给模型的上下文更短,稳定性更高
  • 每个模块只关注自己的问题,不互相干扰
  • 后续新增模块时,只需要新增路由和 Prompt,不需要推翻整套架构

六、Prompt 不是“让模型抽字段”,而是定义模块契约

这里最值得学的不是“用了大模型”,而是 Prompt 把输入输出边界写得很死。

basic_prompt.txt 为例,开头先把约束写清楚:

你是一个“招投标文件基础信息(basic)抽取器”。
你的任务:仅抽取【基础信息 basic】模块,并输出严格合法的 JSON。

【核心硬性原则:禁止捏造】
1) 你只能从输入的 Markdown 原文中抽取信息。
2) 如果原文没有明确出现某字段:该字段 value 必须为 "" 或 null。
6) 【溯源原子性原则——最高优先级】
- 每个 value 必须来自原文中一处连续段落/句子的逐字摘录。

接着把输出骨架固定下来:

{
  "module_key": "basic",
  "module_name": "基础信息",
  "sections": {
    "bidder_agency": { "title": "招标人/代理信息", "blocks": [] },
    "project_info": { "title": "项目信息", "blocks": [] },
    "key_time_content": { "title": "关键时间/内容", "blocks": [] },
    "bid_bond_related": { "title": "保证金相关", "blocks": [] },
    "other_info": { "title": "其他信息", "blocks": [] },
    "procurement_requirements": { "title": "采购要求", "blocks": [] }
  },
  "missing_fields": [],
  "warnings": []
}

为什么要这么写,而不是只写一句“请抽取基础信息”?

原因很实际:

  • module_key 固定,前端才能知道这是哪个模块
  • sections 固定,页面才能直接按 section 渲染
  • missing_fields 固定,后续才能做缺失项提示
  • warnings 固定,后续才能挂冲突说明或风险提醒

Prompt 里还进一步把 block 限定为 table / kv / list / text 四种。这个设计很关键,因为招标文件天然是半结构化文档,不同信息的最佳表达形式并不一样。

例如:

  • 联系方式更像 table
  • 项目编号、预算金额更像 kv
  • 公告媒介、平台地址更像 list
  • 开标说明、答疑说明更像 text

这比把所有字段强行压成同一种平铺结构更稳。

七、输入、Prompt、输出必须一一对应

要让这套架构可维护,至少要把三件事先对齐:

1. 模块输入是什么

输入不是全文,而是某个模块命中的 Markdown 片段。前端会把命中的 chunk 重新拼成模块输入:

moduleData[key].markdown += `\n\n### ${c.title_path}\n` + c.content;

所以传给 qualification 模块的,并不是整份标书,而是“资格要求相关片段”。

2. Prompt 定义什么结构

以资格要求模块为例,Prompt 直接固定了三个 section:

{
  "module_key": "qualification",
  "sections": {
    "applicant_requirements": { "title": "申请人资格要求", "blocks": [] },
    "eligibility_review": { "title": "资格性审查", "blocks": [] },
    "compliance_review": { "title": "符合性审查", "blocks": [] }
  }
}

这意味着这个模块的职责只有三件事,不会在一次抽取里又去掺杂评标办法或附件格式。

3. 前端按什么结构展示

前端模块配置也会定义同样的 section key。这样一来,页面渲染不需要再猜字段,只要按约定好的 key 读取结果即可。

也就是说,这里不是“先让模型自由返回,再想办法接结果”,而是先把输入范围、Prompt schema、页面结构统一好,再让模型往固定壳子里填内容。

八、和传统做法相比,差别在哪里

如果目标是做工程化工具,而不是做一次性演示,这套方案和传统方式有两个本质区别。

1. 不是 OCR 文本加正则硬提

纯文本加正则在字段非常固定时还可以用,但招标文件章节名称、段落顺序、表格表达方式都经常变化,规则一旦堆多,维护成本会非常高。

2. 不是全文加一个总 Prompt

全文单 Prompt 很适合快速做一个效果展示,但它很难同时解决下面几个问题:

  • 模块边界不清
  • 输出结构不稳定
  • 某个模块要扩字段时会牵一发动全身
  • 很难做稳定展示和后续治理

更稳定的方式是:

  • 先解析成结构化中间层
  • 再切块
  • 再按模块分别抽取
  • 最后按模块 JSON 聚合

Lab4AI大模型实验室是面向AI开发者、科研党与学习者打造的一站式AI实践平台,深度绑定高性能弹性算力,支持模型复现、训练、推理全流程,以按需计费、低价高效破解高端算力紧缺与成本高昂难题;同步Arxiv前沿论文并提供翻译、导读、分析服务,支持各类大模型一键复现与数据集微调,对接孵化资源助力科研成果转化;同时搭载多样化AI在线课程,实现理论学习与代码实操同步推进,全方位覆盖AI研发、科研创新与技能学习全场景需求。

大模型实验室官网链接: https://www.lab4ai.cn/arxiv?utm_source=sf_daily_paper

作者信息

德克萨斯农工大学

研究背景

  1. RAG技术现状:检索增强生成(RAG)通过外部检索知识增强大语言模型生成效果,早期以非结构化文本检索为主,后续引入图结构知识表示提升推理与事实一致性。
  2. 传统图RAG局限:普通知识图仅能表示二元关系,无法建模多实体高阶交互,易造成信息丢失与推理碎片化。
  3. 超图RAG不足:现有超图RAG将超边视为静态事实,检索时不考虑交互顺序与演化过程,属于排列不变性检索,无法适配依赖时序、因果与过程的推理任务。
  4. 现实任务需求:热带气旋、港口运营等场景的推理结果,不仅依赖交互内容,更依赖交互发生的顺序,现有方法无法满足该类顺序敏感型任务。

研究目的

  1. 打破现有RAG将检索证据视为无序集合的核心假设,解决排列不变性检索顺序敏感型推理任务不匹配的问题。
  2. 提出将顺序作为核心结构属性的超图RAG框架,实现对知识高阶交互与交互时序的统一建模。
  3. 将检索从“独立事实选择”重构为“连贯交互轨迹推理”,让大模型能够基于有序证据链完成过程化、因果化推理。
  4. 在热带气旋-港口影响评估等领域任务中,验证顺序感知超图检索对生成质量与推理准确性的提升效果。

本文核心贡献

  1. 提出顺序感知知识超图表示:将高阶交互与优先顺序结构融合,突破传统超图仅建模静态关系的局限,完整保留知识的时序与逻辑顺序。
  2. 重构检索范式:将传统集合式检索改为超边上的轨迹推理,显式建模证据序列的重要性,而非仅关注检索内容相关性。
  3. 无显式时序监督的顺序学习:设计可学习的转移模型,从数据中自动学习超边间的优先关系,无需人工标注时序信息。
  4. 验证顺序核心价值:通过实验证明,检索证据的排列顺序直接决定推理质量,顺序感知设计是性能提升的关键因素。

研究方法

image

1. 顺序感知知识超图构建与顺序学习

  • 知识超图构建:以实体为节点、超边为高阶交互单元,通过大模型进行N元关系抽取,保留多实体依赖的完整语义。
  • 实体类型划分:分为持久对象(港口、气旋)、瞬时状态(气旋等级)、时间锚点(T-48)三类,支撑时序与结构建模。
  • 优先顺序学习:采用双线性转移模型Pθ(ej|ei),通过对比损失自监督学习,利用文档顺序、实体重叠、检索偏好三类信号训练,无需显式时序标注。

2. 顺序感知超图检索

  • 检索目标:最大化相关性+顺序连贯性+优先一致性+实体连续性+阶段覆盖度,获取最优有序超边轨迹。
  • 推理算法:采用束搜索(Beam Search)生成有序轨迹,小候选集使用维特比动态规划精确优化。
  • 多轨迹检索:返回多条多样化轨迹,为生成提供多路径解释与互补证据。

3. 检索增强生成

  • 将检索到的有序轨迹以带步骤索引、时间标签、阶段标注的结构化形式输入生成器,避免扁平化拼接丢失顺序信息。
  • 支持单提示多轨迹交叉参考与置信度加权聚合两种生成模式,保障生成的事实准确性与推理逻辑性。

4. 实验设计

  • 数据集:CyPortQA(热带气旋-港口运营QA基准,2917个场景、117178个问题)。
  • 基线方法:Text-RAG、GraphRAG、HyperGraphRAG。
  • 评估指标:判断题/选择题精确匹配、简答题容差精度、描述题LLM语义评分。
  • 消融实验:打乱顺序、移除顺序相关模块、对比无顺序/启发式顺序/学习顺序。

研究结果

  1. 整体性能最优:OKH-RAG在四类问题(TF/MC/SA/TD)及整体准确率上均超过所有基线,整体准确率达0.534,高于HyperGraphRAG的0.511。
  2. 顺序是核心增益源:将OKH-RAG检索结果打乱顺序后,整体准确率从0.534降至0.487,降幅最大,证明顺序对推理至关重要。
  3. 模块有效性:优先一致性、阶段覆盖、实体连续性、顺序连贯性均对性能有正向贡献,其中优先一致性与阶段覆盖影响最显著。
  4. 学习顺序最优:性能排序为学习顺序 > 启发式顺序 > 无顺序,验证可学习转移模型优于固定规则。
  5. 任务自适应:跨时间推理任务优先跨阶段轨迹,单阶段事实任务聚焦局部紧凑轨迹,适配不同查询的推理需求。

总结与展望

本研究推翻了RAG领域“检索证据可视为无序集合”的核心假设,提出OKH-RAG框架,将顺序作为核心结构属性融入超图RAG,实现高阶知识交互与时序关系的统一建模。实验证明,在顺序敏感的领域推理任务中,证据的组织顺序与内容本身同等重要,顺序感知轨迹检索可显著提升大模型的推理准确性与事实一致性。

展望

  1. 可将该框架拓展至科学发现、临床诊断、工程故障分析等更多顺序依赖型领域。
  2. 进一步优化顺序学习与轨迹检索算法,提升大规模知识图谱上的效率与可扩展性。
  3. 结合动态知识更新,实现实时时序知识的顺序感知检索与生成。
  4. 探索多模态知识(文本、图像、数值)的顺序感知超图建模,适配多模态复杂推理任务。

就在刚才,Anthropic 又一声不响地把 Claude 4.7 给放出来了。

说实话,我当时正在那调优我的 Claude Code 脚本,调得我焦头烂额,结果页面一刷,Opus 4.7 的文档就这么硬生生地怼到了我脸上。

这次更新,很多媒体可能又在炒作什么 100 万上下文,或者什么 3.75MP 的高清视觉。

但在我看来,那些都不是最重要的。

最让我脊背发凉的,是 Claude 终于学会了「省钱」,而且还学会了「自我怀疑」。

我不知道屏幕前的你有没有这种感觉,现在的 AI 越来越像一个职场老油条。

以前的 AI,你给它个任务,它要么秒回,要么就在那傻呆呆地思考三分钟,然后给你出一堆废话。

但这次 Claude 4.7 搞了个新玩意,叫「Adaptive Thinking」,翻译过来就是自适应思考。

这个功能太骚了。

它不再是像以前那种死板的思考模式,而是会根据你任务的难易程度,自己决定到底要思考多久。

如果是简单的活,它咔咔两下就干完了。

如果是那种要改几十个文件的、涉及长链代理的复杂代码任务,它会自己开启一个叫「xhigh」的最高努力模式,在那疯狂推理。

关键点来了。

它还配了一个叫「Task Budget」的任务预算功能。

这玩意目前还在 beta 阶段,但它的逻辑非常牛逼,你可以给 AI 设定一个「Token 预算」。

以前咱们用 Agent,最怕的就是这货在那死循环,一觉醒来,几百美金的额度全被它烧光了。

现在的 Claude 4.7,它干活的时候会自己盯着自己的「钱包」。

如果快超支了,它会停下来问你,或者自己调整策略,看能不能用更省钱的方式把活干完。

真的,看到这我直接愣住了。

这哪里是 AI 啊,这特么分明就是一个懂财务、懂成本控制的高级项目经理。

而且,这次它的「自我纠错」能力简直拉满了。

以前 AI 报错了,你得去修它。

现在是它写完一段代码,自己先跑一遍,发现不对,自己在那默默地改。

这种「老子自己能搞定」的自信,对于我们这些天天跟 Agent 打交道的人来说,真的是救了老命了。

除了这个,这次的视觉能力提升也挺离谱。

分辨率直接翻了 3 倍,而且搞了个「1:1 像素坐标映射」。

听着挺学术对吧,其实换成人话讲,就是它看东西更准了。

以前它看一张复杂的网页截图,可能知道按钮在哪,但点的时候总感觉差了那么几像素,像个老花眼。

现在有了 1:1 映射,它能精准定位到每一个像素点。

这意味着什么,你想想看。

这意味着它以后操控你的电脑,或者作为 GUI Agent 去帮你订票、买东西,基本上不会再有点错位置这种低级错误了。

最骚的是什么?

是这么多升级,价格居然一分钱没涨。

API 已经上线了,大家可以直接开整。

我有时候觉得,我们真的生活在一个巨大的转折点上。

以前我们聊 AI,聊的都是「它能写什么」。

现在我们聊 AI,聊的是「它能替我们在这个物理世界里完成什么」。

这不是什么生产力的微调,这是生产关系的重构。

当 AI 像一个有血有肉的人一样,开始思考效率、思考成本、思考精准度的时候,作为普通人的我们,到底该站在哪里?

反正我觉得,与其担心被取代,不如先去上手试试这个「会算计」的 Claude 4.7。

毕竟,能教一个 AI 帮你省钱,这种感觉还是挺爽的。

哦对了,虽然这次 4.7 很猛。

但我听说,那个代号叫「Mythos」的庞然大物,还在 Anthropic 的实验室后面等着呢。

大时代啊,朋友们。

我们,还是得保持好奇心。

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~

谢谢你看我的文章,我们,下次再见。

/ 作者:文浩 / Web:wenhaofree.com

原文链接:https://mp.weixin.qq.com/s/f-MnUqgu1MNUSGxvCGIzMw

上次发了个帖子,https://fast.v2ex.com/t/1202780 ,公司最新一期的外招结束了,没有新人,全部都是有行业经验的人,年纪最大的是 45 岁,听说不想来,然后公司给出配一个二年级新生协助构建 Workflow ,也同意入职

我感觉,公司从之前愿意要新人,愿意培养新人,愿意给出资源,变得没了耐心,之前非常注重 kown-how 的积累,培训,现在也变得没了意义,全部放到 AI 里,调用的时候不仅快,AI 想的也更加全面

今年公司上线了多模型的 Cross-Evaluation ,效果非常好,人均产出也提高了很多,然后就是经验多的人产出增加的多,导致新人 kpi 考核更加靠后,最后裁员名单都是新人

感觉 AI 不仅让有钱的更容易获取更高级的模型,从而强者更强,也让经验更丰富的人,强者更强

先说结论,冲自己的号,改密码后正常用,但总觉得不对劲......

过程就是把自己的账密发给卖家,然后在账号中开通身份验证器,手机再接几个验证码,开通了。结果第二天就发现账号再多个国外设备上登录,找卖家沟通,卖家直接来了句改密码就行,问是不是他泄露了密码,结果对方直接来了句你不爽就报警吧,甚至嚣张的把手机号给我了。我试着给当地 110 报警,并提供了他营业执照的地址和姓名,搞笑的是,110 及其不耐烦接警,还没了解情况就跟我说这事管不了,最后反馈的结果是:电话查不到人,营业地址是假的也查不到人,身份证也查不到人。。。。哎,如果真的是搞诈骗,原来成本这么低。。。

上个月我用日本节点刷出了免费领一个月 plus 的活动,然后为了用 paypal 0 元购,把账单地址改成德国。白嫖了一个月。

现在自动续费一个月扣了我 23 欧,然后我发现把账单地址改成土耳其会便宜一些,变成了 19 欧元一个月,我这样操作会封号吗?

另外网上说的土耳其区 80 一个月是怎么做到的?

开发者朋友们大家好:

这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「有看点的活动」,但内容仅代表编辑的个人观点,欢迎大家留言、跟帖、讨论。

本期编辑:@koki、@鲍勃

01 有话题的技术

1、Google 发布 Gemini 3.1 Flash TTS 模型,高音质与低成本平衡

Google 推出新一代文本转语音(TTS)模型 Gemini 3.1 Flash TTS。该模型通过引入自然语言「音频标签」实现了对语音风格、节奏和多角色交互的精细化控制,在维持低延迟与低成本的同时,显著提升了合成语音的表现力

  • 基准测试性能:在 Artificial Analysis TTS 排行榜取得 1,211 Elo 评分,位居高音质与低成本平衡点的「最具吸引力象限」。
  • 内联音频标签(Audio Tags):支持将自然语言指令(指令式标签)直接嵌入文本输入,实现句子中途的语速、音调、口音和情感状态的毫秒级切换。
  • 场景化编排(Scene Direction):开发者可定义环境背景与对话上下文,确保多角色在多轮对话中维持特定的人设一致性(In-character)与自然互动。
  • 音频配置文件与代码导出:支持通过 Audio Profiles 固化角色特征,调节后的参数可直接导出为 Gemini API 调用代码,确保跨平台部署的语音一致性。
  • 全球化与安全合规:原生支持 70 多种语言;所有输出音频均强制嵌入 SynthID 不可感知水印,用于 AI 生成内容的溯源与检测。

参考链接:

https://blog.google/innovation-and-ai/models-and-research/gem...

( @google blog)

2、Cloudflare 发布 @cloudflare/voice:为智能体提供原生语音管道,支持单 WebSocket 流式交互与 SQLite 状态持久化

Cloudflare 为其 Agents SDK 推出实验性扩展包 @cloudflare/voice,允许开发者在不改变现有智能体架构的前提下,为基于 Durable Object 的 Agent 直接添加实时语音能力。该工具链通过减少跨服务跳转和引入流式分句合成技术,显著降低了语音交互的端到端延迟

  • 基于 Durable Object 的统一状态模型:语音被视为与文本对等的输入流,共享相同的 Agent 类实例、Durable Object 生命周期及内置的 SQLite 会话历史。开发者无需为语音功能构建独立的后端架构,即可实现文本与语音输入的无缝切换。
  • 优化的流式传输与低延迟响应:客户端通过单一 WebSocket 连接流式传输 16 kHz 单声道 PCM 音频;服务端支持 「sentence-chunking」 技术,即在 LLM 输出流式文本时同步进行按句合成,实现首包音频(TTFA)的快速响应。
  • 内置 Workers AI 驱动程序:预集成 Deepgram 系列模型,包括用于实时对话的 Flux STT、用于高精度听写的 Nova 3 STT 以及 Aura TTS。通过 Workers AI 绑定直接调用,开发者无需管理外部 API 密钥即可完成实时语音转录与合成。
  • 多协议适配与 Provider 接口抽象:提供 withVoice(全双工对话)和 withVoiceInput(仅听写/语音搜索)两种高阶组件;内置 Twilio 适配器以支持电话回呼;同时开放轻量级 Transcriber 和 TTSProvider 接口,支持开发者对接 AssemblyAI、Cartesia 或 WebRTC 传输层。

(@cloudflare)

3、阿里 ATH 事业群发布世界模型产品 Happy Oyster,主打实时世界创建与交互,可生成动态三维环境,支持影视制作、游戏开发等场景

阿里巴巴 ATH 事业群推出开放式世界模型产品「Happy Oyster」,主打实时世界创建与交互

该产品可生成动态三维环境,支持影视制作、游戏开发等场景。其与 HappyHorse 同属 ATH 旗下 AI 创新事业部。目前已开启内测,用户可通过官网 happyoyster.cn 加入候补名单。

Happy Oyster 基于原生多模态架构,其背后是支持多模态输入与音视频联合生成的流式生成世界模型

加入等候列表:happyoyster.cn

(@潇湘晨报)

4、阶跃 StepAudio 2.5 TTS 上线,将语境理解能力引入语音生成全流程

今天,阶跃正式发布新一代语音生成模型StepAudio 2.5 TTS。围绕全局语境控制、文中语境控制、零样本复刻与全音色控制三项核心能力,StepAudio 2.5 TTS 让语音生成更自然、更灵活也更有表现力。

  • 全局语境控制: 支持自定义整段语音的情绪基调、角色状态与场景氛围,使表达更统一、更连贯。
  • 文中语境控制: 不仅能控制一句话怎么说,还能进一步调节语气、节奏、停顿、轻重变化、角色感和场景感,让声音表达更有分寸。
  • 适配多场景、多人设: StepAudio 2.5 TTS 支持 Zeroshot TTS,任意用户音色无需重新训练,即可满足从沉浸式有声书到专业影视配音全场景高品质语音生成需求。同时也可为每个音色构建完整的「声音角色档案」,实现从声纹到人格的全面提升。

无论是角色配音、有声内容创作,还是智能语音交互,StepAudio 2.5 TTS 都能帮助开发者和创作者更高效地生成自然、细腻、接近真人的语音内容。

文档:

https://platform.stepfun.com/docs/zh/guides/models/stepaudio-...

(@阶跃星辰)

02 有亮点的产品

1、X 独立通讯应用「X Chat」重新上线语音消息功能

社交平台 X(原 Twitter)近日宣布,其私密消息服务「X Chat」已正式恢复对「语音笔记(Voice Notes)」功能的支持。用户现在可以在一对一私信和群聊中,再次畅快地发送音频消息。

据悉,在此前 X Chat 的升级中,语音功能的短暂移除曾引发部分用户不满。如今功能回归,用户只需按住聊天文本框右侧的麦克风图标即可录音,或者通过「长按并向上滑动」的手势实现免提录制。

这一变动背后,折射出 X 平台产品战略的微妙转变。此前,埃隆·马斯克(Elon Musk)曾多次强调要将 X 打造成一个无所不包的「万能超级应用(Everything App)」。然而近期,X 似乎正倾向于将核心功能剥离,提供独立的 App 体验。除了近期已作为独立应用运营的 X Chat 外,其支付服务「X Money」目前也正在作为独立 App 进行测试。

业内分析认为,X Chat 恢复语音消息,是其作为独立通讯应用补齐基础体验、增强市场竞争力的必要举措。目前,X Chat 已配备消息编辑/删除、音视频通话及截图通知等主流通讯功能。

( @TechCrunch)

2、Fathom 发布 botless 会议模式:支持视频录制并集成 MCP

Fathom 推出重大更新,允许用户在无需 AI 助手(Bot)进入虚拟会议室的情况下完成录制与转录。该版本通过系统级采集解决了会议室「过度拥挤」的问题,并首次引入 Model Context Protocol (MCP) 支持,将会议数据转化为可供外部 AI 工具调用的结构化上下文

  • Bot-less 录制与原生视频采集:区别于 Granola 等竞品仅抓取音频,Fathom 支持在无机器人模式下同步录制视频,并提供多种录制模式选择。
  • 优化发言人辨识(Speaker Diarization):通过模型更新,解决了多月前历史会议记录中常见的「发言归属错误」问题,提升了长周期上下文检索的准确性。
  • 集成 Model Context Protocol (MCP) 服务端:发布 MCP Server 接口,允许开发者和用户将 Fathom 存储的会议数据直接接入各类支持该协议的 AI 智能体或工作流工具。
  • 全量会议数据库 AI 查询:新增针对企业级用户的统一查询接口,支持通过 AI 对整个会议历史数据库进行跨篇章的语义搜索与背景关联

( @TechCrunch)

3、药房技术服务商 Lumistry 发布 Voice AI 助手:对话式 AI 替代数字按键 IVR,深度集成 PMS 实现处方自动化处理

药房技术服务商 Lumistry 推出 Voice AI 助手,作为其 Lumistry Voice 通信套件的核心组件。该产品旨在利用对话式 AI 彻底取代传统的数字按键式 IVR 系统,通过与药房管理系统(PMS)实时联动,实现自动化的处方续订与状态查询。

  • 从 DTMF 向自然语言交互(NLI)演进:放弃传统的菜单式数字按键逻辑,支持患者以自然语言描述需求,系统可自动识别并执行处方状态查询、药房营业信息咨询等高频任务。
  • 药房管理系统(PMS)深度集成:通过 API 接入主流 PMS,助手具备识别合规续订(Eligible Refills)的能力,并能直接在后台提交续订请求,无需人工干预处方处理流程。
  • 多语言与人工平滑切换逻辑:系统支持多语种对话,并内置智能路由算法,在识别到复杂语义或非预设用例时,可将通话上下文同步推送至药房工作人员进行人工接管。
  • 存量市场覆盖与迁移:该助手基于原 Vow IVR 架构升级,目前已整合进 Lumistry 覆盖的全美 9,000 多家药房服务网络,重点解决药房高峰期 70% 以上的重复性行政呼入压力。

( @Yahoo Finance)

03 有态度的观点

1、领英 CEO:AI 时代,这四项软技能正在升值

领英 LinkedIn CEO Ryan Roslansky 近日在接受《工具和武器》播客采访时表示,随着 AI 加速接管职场中的重复性工作,人类的「软技能」正在获得前所未有的重视。

他具体点名了四项以沟通为核心的能力:好奇心(curiosity)、勇气(courage)、沟通力(communication)与同理心(compassion)

Roslansky 认为,AI 正在重塑人们理解工作的方式,推动职场人将自身角色视为「一系列任务的集合」,而非固定的职位头衔。

他将这些任务划分为三类:可被 AI 完全自动化的、可被 AI 辅助增强的,以及仍需人类主导的——如化解冲突、说服团队、制定战略等。

这些技能很重要,但过去一直被称为软技能......在一个人们真正精通这些技能的职业世界里,我认为一切都会变得更好。

他表示,随着 AI 智能体承担更多自动化职责,人们将有更多时间用于同事之间的真实沟通,这进一步抬高了沟通能力、判断力与情商的溢价。

有时候当你深陷技术之中,尤其是 AI,当你勾勒出它可能走向的方向,会把你带到一些黑暗的地方。但我相信,人类在塑造这项技术的走向上扮演着不可或缺的角色。

( @APPSO)

阅读更多 Voice Agent 学习笔记:了解最懂 AI 语音的头脑都在思考什么

写在最后:

我们欢迎更多的小伙伴参与 「RTE 开发者日报」 内容的共创,感兴趣的朋友请通过开发者社区或公众号留言联系,记得报暗号「共创」。

对于任何反馈(包括但不限于内容上、形式上)我们不胜感激、并有小惊喜回馈,例如你希望从日报中看到哪些内容;自己推荐的信源、项目、话题、活动等;或者列举几个你喜欢看、平时常看的内容渠道;内容排版或呈现形式上有哪些可以改进的地方等。

作者提示: 个人观点,仅供参考

最近行业一条新规让不少站长和运维犯了难:SSL证书最长有效期正式缩短为200天,未来还会进一步收紧。

原本一年一续就够麻烦,现在半年多就要重新申请、部署、配置。尤其是一直依赖免费证书的个人站长、小微企业、测试环境,更是陷入同一个灵魂拷问:

证书有效期越收越紧,到底哪里还有稳定、好用、真正省心的免费证书?

很多人第一反应就是上网搜、论坛找、脚本试,结果一圈下来才发现:看似遍地是方案,其实全是坑。

一、免费证书的现状:能用,但都不“简单”

大家想要的免费证书,其实要求很朴素:

  • 浏览器不认怂、不标红不安全
  • 续期别太折腾
  • 多域名、通配符最好能支持
  • 不用自己搭CA、不用改一堆配置

可现实是,目前市面上能找到的免费路径,几乎全都绕不开几类通病。

1. 公开免费证书:有效期更短,续期成本更高

主流免费证书原本就只有90天有效期,如今行业整体压到200天,免费证书反而更短。 看似不花钱,实际隐性成本极高:

  • 频繁续期,一忘就全站标不安全
  • 国外节点多,国内访问、验证不稳定
  • 不支持企业身份、无技术支持,出问题只能自己查
  • 通配符、多域名限制严格,稍微复杂点的场景就不适用

2. 自签名免费生成:看似零成本,根本上不了线

自己用工具生成证书,确实完全免费。 但后果所有人都清楚:

  • 浏览器直接拦截,显示“不安全”
  • 用户必须手动信任,体验极差
  • 接口调用、小程序、APP 可能直接拒绝访问
  • 无信任链、无吊销机制,只能本地测试,生产环境完全不能用

3. 自建CA免费签发:理论完美,运维扛不住

有人选择自建根证书,给自己内网、外网服务统一签发。 这套架构合规,但代价巨大:

  • 每台设备都要导入根证书
  • Windows、macOS、手机、服务器配置各不相同
  • 证书过期、续期、替换全靠人工盯
  • 设备一多,管理成本直接爆炸

4. 野路子“免费证书”:坑比好处多

网上流传的各种破解、共享、代申请证书,风险更明显:

  • 密钥泄露、被冒用、被吊销
  • 突然失效无人负责
  • 不符合安全规范,影响企业信任
  • 没有售后,一出问题就是全站事故

二、真正的痛点:不是“有没有免费证书”,而是“能不能长期稳得住”

SSL证书有效期缩短到200天,本质是行业在提高安全底线: 有效期越短,被伪造、盗用、滥用的风险就越低。

但这也把问题从“能不能用上HTTPS”,变成了: 能不能低成本、稳定、省心地长期用HTTPS。

很多人找免费证书,踩坑后才发现共同规律:

  • 看着免费,维护时间成本极高
  • 单点能用,规模化就崩
  • 今天能用,浏览器一更新就失效
  • 出了问题,找不到人解决

换句话说: 不是没有免费证书,而是没有“简单、通用、靠谱”的免费方案。

三、为什么大家最后都会转向专业平台

折腾一圈后,大部分团队都会得出同一个结论: 与其花大量时间找不稳定的免费渠道,不如用一套标准化、可管理、长期稳定的证书服务。

平台化方案的价值,恰恰解决了免费证书的所有痛点:

访问CA:前往JoySSL,并注册一个账户,需要填写特定的注册码230922以获得测试体验SSL证书的使用权限。

选择证书类型:登录后,选择适合需求的SSL证书类型。

提交申请:填写域名或ip地址信息 选择验证方式,并按照页面提示完成验证步骤。

下载并安装证书:验证通过后,下载证书文件,并按照提供的指南将其部署到您的服务器上。

针对个人站长、小微企业、测试环境,提供高适配性的证书方案,简化验证流程、降低部署门槛,不管是普通域名、多域名,还是内网IP场景,都能一站式完成签发与部署,避开自签名、自建CA、野路子免费证书的各种坑。

四、一个很现实的问题

HTTPS 早已不是可选项,而是标配。 SSL证书有效期缩短,只是安全升级的第一步。

很多人一开始执着于“完全免费”,最后才明白: 省下来的那点费用,远比不上一次次踩坑、过期、告警带来的麻烦。

专业的事交给专业平台,把精力放回业务本身,才是最高效的选择。

导读 introduction

通过对Claude Code源码的分析,揭示了Rules、MCP、Skills三个概念的底层实现机制。Rules是项目级行为规范,通过messages被动注入;MCP是标准化工具协议,在system和tools中注册并调用外部服务;Skills是可复用提示词,通过tool\_use触发后注入指令文本。三者的核心区别在于信息在API请求中的位置不同,而非功能本质...

01 背景

1.1 概念爆炸:学不完的新名词

如果你在用 Claude Code、Cursor 或其他 Coding Agent,你一定经历过这样的感受——

刚弄明白怎么写 Rules 让 Agent 听话,MCP 就火了,一堆人说"MCP 才是未来";MCP 的 Server 还没配明白,Skills 又冒出来了,号称"标准化工作流"。每隔几周就有新概念冒出来,配上各种似是而非的定义,让人焦虑:这些东西之间到底是什么关系?我是不是又落伍了?

1.2 越看越糊涂的"官方定义"

网络上流行的定义往往加剧了混乱:

  • "Rules 是项目级的行为规范"
  • "MCP 是标准化的工具协议"
  • "Skills 是可复用的标准化工作流"

看完这些,你可能和我一样,产生了更多疑问:

  • Rules vs Skills:都说 Skills 的优势是"按需引入",但 .claude/rules/ 里的条件规则不也能按路径按需生效吗?它们的区别到底在哪?
  • MCP vs 内置 Tools:MCP 工具和 Claude Code 自带的 Read、Edit、Bash 这些内置工具,对模型来说有什么不同?为什么需要一套新协议?
  • Skills 的"标准化流程":所谓流程化,是真的像代码一样有 if-else 和循环控制的?还是只是一段写得好的提示词?

1.3 从源码找答案

这些问题靠读文档和博客是答不清楚的,因为它们本质上是实现层面的问题

恰好 Claude Code 的源码在 GitHub 上泄漏,本文基于 v2.1.88 泄漏源码,从 LLM API 调用层面,拆解 Rules、MCP、Skills 的底层实现。看完源码你会发现,这三个概念远没有网上说的那么玄乎,它们的区别,本质上就是信息在 API 请求中被塞到了不同的位置。

02 前置需要了解的

为了避免阅读本文的读者对一些 Agent 中的流程不够了解,先介绍一下相对重要的知识点。

2.1 Agent 与 LLM API 的交互协议

图片

每次 Agent 调用 LLM,本质上就是发一个 HTTP 请求,请求体由三个核心参数组成:


anthropic.messages.create({
    system: TextBlockParam[], // 静态角色定义和行为规范
    
    tools: BetaToolUnion[], // 工具定义(name + description + input_schema)
    
    messages: MessageParam[], // 动态对话内容
})

2.1.1 system — "你是谁,你该怎么做"

定义模型的角色和行为规范。在 Claude Code 中,system 包含:

  • 核心系统提示(行为规范、编码风格、安全规则等)
  • Git 状态信息(通过 appendSystemContext 追加)
  • MCP Server 级 instructions(若 Server 提供了使用说明,追加在动态区域中)

system 提示分为静态部分(可跨用户缓存)和动态部分(因会话而异,不参与缓存共享)。MCP instructions 属于动态部分。

system 的静态部分高度稳定,可利用 Anthropic 的 org 级 Prompt Cache。 同一份静态内容只需计算一次 KV 矩阵,所有用户共享缓存,后续调用仅需 0.1x 费用。CLAUDE.md 等因项目而异的内容不放在 system 里,就是为了不破坏这份共享缓存。

2.1.2 tools — "你能做什么"

tools 数组定义模型可以调用的工具。每个工具包含 namedescription(来自工具的 prompt() 方法输出)、input_schema。模型根据工具描述决定何时调用哪个工具。

内置工具和 MCP 工具在这里的格式完全一致,模型无法区分它们——区别只在 Agent 侧的执行路由。

2.1.3 messages — "对话发生了什么"

messages 是一个 user/assistant 交替的消息数组,但在 Claude Code 中,它远不只是"对话历史"。实际混合了三种内容:

  • 系统上下文注入prependUserContext):CLAUDE.md 内容、当前日期等
  • 系统提示上下文appendSystemContext):git 状态等(注入到 system 参数)
  • 动态附件(Attachments):Skill 列表、计划模式指令、子目录 CLAUDE.md 等
  • 真实对话历史:用户输入、模型回复、工具调用结果

前两类都以 isHidden: true + isMeta: true 注入,用 <system> 标签包裹。isHidden 是客户端侧的 UI 标记,消息仍完整发送给 API,但不会在终端界面中展示给用户。<system> 不是 API 特殊字段,而是 Claude Code 与模型之间的约定格式,系统提示词中会告知模型"被此标签包裹的内容权重等同于系统指令",让模型能区分系统注入的指令和用户真正说的话。

为什么系统上下文不放在 system 里?因为 CLAUDE.md 等内容因项目而异,混入 system 会破坏 org 级共享缓存。放在 messages 中,既不影响 system 缓存,又能在会话内轮次间复用。

2.2 tool\_use:一切扩展机制的底层基础

Claude 的工具调用本质上是一个结构化的多轮对话协议


用户消息
↓
模型推理 → 输出 tool_use 块
{ "type": "tool_use", "id": "toolu_xxx", "name": "工具名", "input": { ...参数... } }
↓
调用方(Agent)执行工具
↓
将结果作为 tool_result 追加到对话
{ "type": "tool_result", "tool_use_id": "toolu_xxx", "content": "执行结果" }
↓
继续下一轮模型推理

模型本身不"执行"任何工具,它只是输出一段结构化 JSON,真正的执行发生在调用方(即 Claude Code 客户端)。理解了这一点,就能理解为什么 Rules、MCP、Skills 虽然表现形式完全不同,但底层都构建在同一套 tool_use 协议之上。

图片

03 实现细节

3.1 Rules(CLAUDE.md)的实现

3.1.1 Rules 是什么

Rules 就是 CLAUDE.md 文件(以及 .claude/rules/*.md 规则文件)。它们是用自然语言写的指令文本,告诉模型"在这个项目中你应该遵循什么规范"。

3.1.2 文件发现机制

Claude Code 从多个位置按优先级加载 Rules(源码中对应 getMemoryFiles 函数)。实际加载逻辑是从项目根到 CWD 逐层处理,每层内部按 CLAUDE.md.claude/CLAUDE.md.claude/rules/*.mdCLAUDE.local.md 的顺序收集,后加载的覆盖先加载的。主要来源包括:

图片

单个 CLAUDE.md 文件建议不超过 40,000 字符,超出会触发诊断警告⚠️。

3.1.3 内容处理流程

每个文件经过 processMemoryFile 处理:


读取文件
↓
解析 frontmatter(提取 paths 等条件匹配字段)
↓
移除 HTML 注释
↓
处理 @include 引用(最大递归深度 5 层)
↓
条件规则匹配(.claude/rules/*.md 中 paths 字段匹配当前文件路径)
↓
格式化输出

条件规则是一个值得注意的特性。在 .claude/rules/ 下的规则文件可以通过 frontmatter 中的 paths 字段指定生效范围:


---
paths:
- "src/components/**/*.tsx"
- "src/hooks/**/*.ts"
---
在 React 组件中始终使用函数式组件和 hooks。

这意味着这条规则只在模型处理匹配路径的文件时才会被注入。

3.1.4 注入方式:进入 messages,而非 system

格式化后的 Rules 内容通过 prependUserContext() 注入到 messages 的最前面,包裹在 <system-reminder> 标签中,以 role: "user" + isMeta: true 的形式存在——isMeta 是客户端 UI 标记,消息本身仍完整发送给 API,但不会在终端中展示给用户。

注入时还会带上一个强制指令头:

"Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written."

核心洞察:Rules 不走 ****tool_use**** 协议。 它既不是工具,也不需要模型主动调用。它是被动注入到每次 API 调用的上下文中,模型在推理时自然会"看到"并遵循这些规则。

具体的 prependUserContext() 源码还原见 [[Claude Code 架构解析:从 Skill 调用到 Prompt Cache]]

3.1.5 子目录 Rules 的动态加载

当模型在对话过程中访问了某个子目录的文件,Claude Code 会检查该子目录是否有 CLAUDE.md。如果有,会通过 nested_memory attachment 动态注入:


// nested_memory attachment 处理
case "nested_memory":
return [createMessage({
    content: `Contents of ${attachment.content.path}:\n\n${attachment.content.content}`,
    
    isMeta: true
})];

这实现了 Rules 的按需加载——只有当模型实际接触到某个子目录时,该目录的规则才会被加载进来。

3.2 MCP Tools 的实现

3.2.1 MCP 是什么

MCP(Model Context Protocol)是一个标准化协议,让 Claude Code 能调用外部服务提供的工具。它是 tool_use 最直接的应用——模型触发后,客户端向外部 MCP Server 进程发起 RPC 调用,拿到真实结果。

3.2.2 配置与连接

MCP 服务器定义在 ~/.claude.json(user scope)或项目根目录的 .mcp.json(project scope)中,常见传输方式:

图片

连接建立后,Claude Code 通过 MCP SDK 与 Server 完成 initialize 握手。这一步不仅获取工具列表,还会拿到 Server 返回的 instructions 字段——一个可选的 Server 级使用说明,后面会看到它的去向。

3.2.3 MCP 在 API 请求中占据两个位置

MCP 不只是注册在 tools[] 里,它还在 system 中有一席之地。

位置一:tools[] — 工具定义

每个 MCP 工具通过 toolToAPISchema() 转换为 tools[] 格式,命名遵循 mcp__<serverName>__<toolName> 模式:


// toolToAPISchema 核心逻辑
async function toolToAPISchema(tool, options) {
    return {
    
        name: tool.name, // 如 "mcp__github__create_issue"
        
        description: await tool.prompt(), // 工具描述 → tools[].description
        
        input_schema: tool.inputJSONSchema // 参数 schema
    
    };
    
}

这部分和内置工具的注册方式完全一致,模型通过工具描述决定何时调用。

位置二:system — Server 级 instructions

在系统提示词的构建过程中,getMcpInstructions() 会将所有已连接 Server 的 instructions 拼接进 system 的动态区域(位于缓存边界标记之后):


// getMcpInstructions(源码路径:src/constants/prompts.ts)
function getMcpInstructions(mcpClients) {
const clientsWithInstructions = mcpClients
.filter(c => c.type === "connected")
.filter(c => c.instructions); // 只取有 instructions 的 Server
if (clientsWithInstructions.length === 0) return null;
return `
# MCP Server Instructions
  
The following MCP servers have provided instructions for how to use their tools and resources:
  
${clientsWithInstructions.map(c => `## ${c.name}\n${c.instructions}`).join("\n\n")}
`;
}
当 feature gate isMcpInstructionsDeltaEnabled() 开启时,MCP instructions 会改走 attachment 注入而非 system,以避免 Server 连接/断开破坏 prompt 缓存。

MCP Server 可以通过 initialize 响应的 instructions 字段,向模型传达整个 Server 级别的使用指南,比如"优先使用 search 工具而非 list 工具"、"所有日期参数必须用 ISO 格式"等。这些指导信息是全局性的,不是针对单个工具的。

tools[].description 描述的是"这个工具做什么、参数是什么",system 中的 instructions 描述的是"如何正确地使用这个 Server 的工具集"。一个是单工具说明书,一个是整体使用手册。

3.2.4 执行流程

MCP 工具的调用是真正的函数调用


模型输出 tool_use: { name: "mcp__github__create_issue", input: {...} }
↓
Claude Code 识别 mcp__ 前缀,路由到对应 MCP Client
↓
MCP Client 发送 JSON-RPC 请求到 MCP Server 进程
↓
MCP Server 执行实际操作(如调用 GitHub API)
↓
返回真实结果
↓
tool_result.content = MCP Server 的真实输出
↓
模型读取结果,继续推理

MCP 是名副其实的"远程过程调用"。 工具做真实的事情,结果回传给模型。tool_result 里装的是外部世界的真实数据

3.2.5 MCP 祛魅:很多场景下一条 Bash 就够了

理解了源码实现后,一个自然的问题浮出水面:模型已经有 Bash 工具了,为什么还需要 MCP?

对模型来说,调 mcp__github__list_issues 和执行 gh issue list 拿到的结果没有本质区别——都是 tool_result 里的一段文本。但 MCP 多了一个 Server 进程、一层 JSON-RPC 通信、一套配置和维护成本。实际使用中,查 GitHub 用 gh,读数据库用 psql,调 API 用 curl,大量 MCP Server 做的事一条命令就能替代。

那 MCP 真正不可替代的场景是什么?

  1. 持久化连接和状态管理:Bash 每次是新进程没有状态。数据库连接池、WebSocket 长连接、跨调用共享认证 session,MCP Server 作为常驻进程可以做到
  2. 复杂操作的原子封装:把 5 步 Bash 命令封装成一次 MCP 调用,减少模型拼长命令出错的概率
  3. 权限隔离和安全约束:Bash "什么都能干",MCP Server 可以限制模型只执行预定义操作

MCP 的价值不在于"能调用外部系统"(Bash 也能),而在于"以更安全、更可靠的方式调用外部系统"。

3.3 Skills 的实现

3.3.1 Skills 是什么

Skills 是可复用的 Markdown 提示词文件(SKILL.md),定义了一套结构化的工作指令。它同样通过 tool_use 触发,但执行逻辑与 MCP 截然不同。

3.3.2 文件发现

Skills 从以下位置扫描发现:

图片

3.3.3 Skill 列表注入

模型怎么知道有哪些 Skill 可用?通过 skill_listing attachment 注入到 messages 中:


// skill_listing attachment 处理
case "skill_listing": {
    return [createMessage({
    
        content: `The following skills are available for use with the Skill tool:\n\n${attachment.content}`,
        
        isMeta: true
    
    })];
}

Skill 列表有严格的 token 预算:仅占上下文窗口的 1%(默认 8000 字符),每个 Skill 描述最多 250 字符。当 Skill 数量过多时,描述会被截断甚至移除。这是为了避免 Skill 列表挤占对话空间。

同时,Skill 工具的 description 中包含一条强制触发指令(BLOCKING REQUIREMENT):

"When a skill matches the user's request, this is a BLOCKING REQUIREMENT: invoke the relevant Skill tool BEFORE generating any other response about the task"

这条指令确保模型看到匹配的 Skill 时,必须先调用工具,不能直接回答。

3.3.4 执行流程:提示词注入,不是函数调用

当模型调用 Skill 工具时,默认走 Inline 模式


模型输出 tool_use: { name: "Skill", input: { skill: "commit", args: "" } }
↓
Claude Code 读取本地 SKILL.md 提示词文本
↓
将提示词内容包装为 isMeta: true 的 user 消息,注入到对话历史中
↓
tool_result 仅返回一个标签:"Launching skill: commit"
↓
下一轮 API 调用时,对话历史中已包含完整的 Skill 指令
↓
模型读到指令后,按步骤调用工具(Read、Edit、Bash 等)执行任务

3.3.5 Inline 模式 vs Fork 模式

Skills 有两种执行模式,Inline 是默认模式,Fork 需要 Skill 配置文件中显式设置 context: 'fork' 才会触发:

图片

Fork 的隔离性意味着 Skill 内部的文件缓存、权限拒绝记录、abort 控制都是独立的,不会污染主对话上下文。

核心洞察:Skills 是"提示词注入"机制,不是函数调用。tool_use 只是触发器,真正的"能力"来自被注入的 Markdown 指令文本。模型读到指令后,按指令一步步执行,利用已有的工具(Read、Edit、Bash 等)完成任务。

04 总结

4.1 三者的核心对比

图片

4.2 一张图理解全貌

图片

4.3 回答开头的三个问题

Q1:Rules 和 Skills 都支持按需引入,区别在哪?

先说结论:区别没有想象中大。 从源码看,Skills 执行后注入的就是一段 Markdown 提示词,和你手动把一段 Rules 文本贴进对话框,对模型来说没有本质区别——都是 messages 里的一段 role: "user" 文本。

真正的区别只有两点工程实现上的差异:

  1. 触发方式:Rules 每次 API 调用自动注入,Skills 需要模型判断后主动调用 tool_use(或用户手动 /skill-name 触发)
  2. 执行隔离:Skills 可配置在 Fork 上下文中运行,拥有独立的缓存、权限跟踪和 abort 控制;Rules 没有这层隔离

但现实中,第一点反而成了 Skills 的痛点。模型判断"是否需要调用 Skill"依赖的是 skill_listing 中最多 250 字符的描述加上 whenToUse 字段——这点信息经常不够模型做出正确判断。这就是为什么很多人发现 LLM 不会自动触发 Skill,最终还是靠手动 /commit/review-pr 来调用。

想想这意味着什么:如果你每次都是手动触发,那 Skills 的完整调用链路是这样的:


你输入 /commit
→ Claude Code 查找对应 SKILL.md
→ 包装为 tool_use 调用
→ 读取 Markdown 文本
→ 注入到 messages 中
→ 模型读到这段文本,按指令执行

而你手动用 @commit-rules.md 引用一个同等内容的 Rules 文件,效果是:


你输入 @commit-rules.md + "帮我提交代码"
→ Claude Code 读取文件内容
→ 作为 FileAttachment 注入到 messages 中
→ 模型读到这段文本,按规范执行

两者最终模型看到的都是一段自然语言指令,没有本质区别。 Skills 多绕的那几步(tool_use → 读文件 → 注入),本质上只是提供了额外的工程便利。如果你每次都是手动 /commit,那和直接 @commit-rules.md 效果几乎一样。

那 Skills 真正有价值的场景是什么?关键在于手动引用 Rules 替代不了的三个点:

1. 模型自主触发——用户只需表达意图

当 Skill 的 description/whenToUse 写得足够精准,模型能自动识别场景并触发,用户不需要知道这个 Skill 的存在。差距在单步场景不明显,但在多步骤组合任务时就凸显了:


用户:"帮我完成这个 feature,包括写代码、写测试、提交"
  
手动引用方式:
@coding-rules.md @test-rules.md @commit-rules.md
→ 用户需要知道有哪些规则、叫什么名字、在哪里
  
Skill 自动触发:
→ 模型识别任务,依次自动调用 coding / test / commit skill
→ 用户只说了目标,工具选择完全交给模型

Skills 还支持嵌套调用(Skill 内部再触发其他 Skill),可以用一个"主 Skill"编排多个子 Skill,形成完整的多步工作流入口。

注意:自动触发能力的上限取决于 Skill 描述的质量,而不是 Skill 数量。描述模糊或触发时机不清晰的 Skill,模型大概率不会自动识别,最终还是要靠手动 /skill-name 触发——此时就和手动引用 Rules 没有区别了。

2. 可发现、可分发——团队协作的标准化入口

Skill 有名字、注册在系统里,可以通过 /skills 浏览,可以打包进插件发布给团队。Rules 文件路径是私人知识,Skill 是"被组织管理的知识"。当你需要把一套工作流标准化并推广给不了解内部实现的团队成员时,Skill 是更合适的载体——用户只需记住 /commit,不需要知道背后引用了哪些规则文件。

3. Fork 模式的独立执行生命周期——这是手动引用 Rules 做不到的

配置 context: 'fork' 后,Skill 在独立 Agent 上下文中运行:执行过程中所有的 tool\_use/tool\_result 不会写入主对话,主对话保持干净;有独立的 abort 控制和权限跟踪,不会影响主流程。长流程多步任务特别适合 Fork 模式。

Q2:MCP 和 LLM 内置 Tools 的区别在哪?

对模型来说没有区别。tools[] 里格式一样,调用方式一样。区别纯粹在 Agent 侧的执行路由:内置 Tools 本地执行,MCP Tools 转发到外部 Server。

如上文 2.5 所述,大多数简单场景 Bash 就能替代 MCP。MCP 真正的价值在持久化连接、原子封装和权限隔离三个点上。另外 MCP 的 Server 级 instructions 注入到 system 中理论上能提供工具集使用指南,但现实中大多数 Server 作者根本没写这个可选字段。

Q3:Skills 的标准化流程是"代码层面的流程化"吗?

不是。 源码里没有任何代码逻辑来控制 Skill 的执行步骤。所谓"标准化工作流",就是一段写得比较结构化的 Markdown——"Step 1 做什么,Step 2 做什么"。模型读到后自行理解、自行执行,完全靠模型的指令遵循能力。

这意味着:

  • Skill 的质量 = 提示词的质量
  • Skill 的"流程保障"= 模型的指令遵循率
  • 同一个 Skill,换一个弱一点的模型,流程可能就乱了

从这个角度看,写一个好的 Skill 和写一段好的 Rules,需要的能力是一样的——都是提示词工程

4.4 实际使用建议

基于源码分析和实际使用经验,给出一些落地建议:

什么时候用 Rules:

  • 项目级的编码规范、技术栈约定、代码风格要求
  • 文本短(几百字以内),每次注入不心疼 token
  • 需要"始终生效"的指令,不依赖模型判断是否需要

什么时候用 Skills:

  • 指令文本较长(几百行级别),不适合每次注入
  • 有明确的触发时机(用户主动 /commit/review-pr
  • 需要执行隔离(Fork 模式能让任务在独立上下文中运行,不污染主对话)

什么时候用 MCP:

  • 需要持久化连接/状态管理的场景(数据库连接池、认证 session)
  • 复杂多步操作需要原子封装,减少模型拼命令出错的概率
  • 需要权限隔离,不想给模型一个万能的 Bash
  • 如果只是简单的 CLI 操作(ghcurlpsql),直接让模型用 Bash,别折腾 MCP

一个现实提醒: 不要迷信 Skills 的自动触发。源码中 Skill 列表的 token 预算只有上下文的 1%,每个描述最多 250 字符。如果你的 Skill 描述写得不够精准,或者用户意图不够明确,模型大概率不会自动触发。把核心 Skill 的快捷命令告诉团队成员,让他们手动调用,比指望模型自动识别靠谱得多。 MCP 同理——在引入之前先想想,Bash 能不能直接搞定。

参考源码:claude-code-source-code v2.1.88(泄漏源码)

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

随着欧盟 CRA 法案正式进入强制执行前奏,全球联网产品的安全门槛已被永久性拉高。艾体宝 ONEKEY 是一款专注于自动化二制进代码分析与软件物料清单(SBOM)生成的固件安全审计平台,核心解决物联网及工业设备在合规准入中“盲目生产”与“响应滞后”的痛点。其主要优势在于无需源代码即可进行深层漏洞扫描,确保企业在 CRA 要求的 24 小时漏洞报告期内完成闭环。据 IBM《2023 年数据泄露成本报告》显示,拥有高级 AI 和自动化安全工具的企业,其泄露检测和遏制周期缩短了 108 天,平均节省成本达 176 万美元。在 CRA 最高可达 1500 万欧元或全球营业额 2.5%(约合 4.1 亿欧元量级)的罚金威胁下,艾体宝 ONEKEY 已成为出海企业的合规刚需。

一、 CRA 合规技术底座:二进制审计与零信任供应链

CRA 的核心要求在于“全生命周期的安全性”。艾体宝 ONEKEY 的工作原理基于先进的**静态二进制分析(SBA)**技术,通过模拟执行和模式匹配,在不触及核心商业代码的情况下,解构固件中的第三方组件。

根据欧盟委员会的技术文档,受规管的产品必须具备可追溯性。艾体宝 ONEKEY 利用其自研的数字孪生扫描技术,能够自动识别并提取固件中的所有开源库及已知漏洞(CVE)。正如网络安全专家所强调的:“CRA 本质上是要求企业证明其供应链是透明的”,而艾体宝 ONEKEY 正是将这种透明度从“口头承诺”转化为“技术实证”的关键工具。

二、 核心功能:从 SBOM 生成到漏洞全自动化闭环

  • 自动化 SBOM 生成: 针对 CRA 要求企业必须维护 SBOM 的强制规定,艾体宝 ONEKEY 能一键生成符合 CycloneDX 等国际标准的物料清单,解决开发者无法厘清庞杂第三方库的困境。
  • 配置错误探测: 除了已知漏洞,平台还能检测出硬编码密码、未加密的私钥及不安全的协议配置。这直接应对了 CRA 中关于“默认安全设置”的合规要求。
  • 持续监控与预警: 当新的零日漏洞出现时,系统会自动对比已存储的固件指纹,秒级通知受影响的产品型号,确保企业满足 CRA“24 小时内通报已知利用漏洞”的严苛时效。

三、 实施路径:三步构建 CRA 合规防火墙

  1. 资产基准建立: 企业将现有的所有固件镜像导入艾体宝 ONEKEY 平台,进行存量资产的“健康普查”,标记高风险产品。
  2. 合规合龙检测: 在研发阶段的 CI/CD 流水线中集成扫描接口。例如,某知名工业传感器厂商在产品上线前,通过 ONEKEY 发现并修复了隐藏在 Wi-Fi 驱动中的高危溢出漏洞,避免了后续召回风险。
  3. 动态维护: 利用平台生成的动态合规报告(VEX),向监管机构及下游客户证明产品已通过符合 CRA 标准的自动化审计。

四、 深度对标:艾体宝 ONEKEY vs. 传统安全模式

维度艾体宝 ONEKEY (自动化平台)传统模式 (人工渗透/源代码扫描)
检测速度10-30 分钟完成全盘扫描数周或数月,且高度依赖专家经验
代码依赖无需源码,直接分析二进制固件必须开放源码,存在知识产权风险
覆盖广度涵盖所有第三方库、私有协议、配置难以覆盖复杂的第三方闭源二进制包
持续合规24/7 自动监测新漏洞并回溯仅为特定时间点的“静态快照”

常见问题(FAQ)

Q:艾体宝 ONEKEY 与市场上常见的 SCA(软件成分分析)工具的主要区别是什么?

A: 传统的 SCA 通常依赖于源代码扫描,且多用于 Web 应用开发。而艾体宝 ONEKEY 专注于嵌入式系统和固件的“二进制审计”。它能够在没有源代码的情况下,深入分析编译后的机器码,识别出嵌入式设备特有的配置风险(如硬编码密钥、非安全通讯协议),这对于硬件制造企业应对 CRA 合规而言更具针对性和穿透力。

Q:实施艾体宝 ONEKEY 方案通常需要多长时间产生合规价值?

A: 平台采用 SaaS 或本地化部署模式,接入过程仅需几小时。由于其高度自动化的特性,企业在上传第一个固件后的 20 分钟内即可获得第一份详尽的 SBOM 报告和风险评估。对于急于应对 CRA 准入审计的企业,它可以在数天内完成全产品线的存量安全普查,相比于传统耗时数月的审计流程,合规效率提升了 80% 以上。

Q:艾体宝 ONEKEY 如何保证扫描结果的准确性与合规报告的唯一性?

A: 平台依托于全球最大的固件漏洞特征库,通过多引擎交叉验证技术降低误报率。每一份生成的合规报告都基于固件唯一的二进制指纹(Hash 值),确保审计结果与特定版本的物理产品一一对应。此外,平台支持生成符合欧盟监管标准的 VEX(漏洞交换)文档,确保企业提交给监管机构的数据具备不可篡改的技术权威性和行业认可度。

  • 文档是日常工作的运维知识点。
    • 比如设置 ssh 免密登陆、设置 sudo 权限、git 的常用操作、等等。
    • 暂时用这些文档来,后续想把公司业务流程放进去。
  • 先后试了 obsidian 和 anythingllm ,都不能达到目的。
  • 我想要的是:我输入一个关键词,它能找到相关文档。
  • 当然,这是初步需求。
  • 后续需求,大概是,进行适当联想和总结。
  • 现状是,比如我让它给我找 ssh 内容,压根就不准。
  • 我想,现在这些 ai 产品,大概率就是骗投资的。
  • 类似秦国时期的商鞅变法,先做宣传:
    • 谁把这根柱子从西门搬到东门,谁就得 10 根金条。
    • 这种蠢事,就很容易得到宣传,先把气氛搞起来。
  • 我认为, 如今的 ai ,或者说:大模型,确实是可以提升生产力的。
  • 但是,这玩意盈利模式,不清晰。
    • 结局就是,普遍做做样子,东西搞出来,投资人满意,赏你个三瓜两枣。
    • 但是实际使用,很难用。
  • 最近公司不太忙,待会我找个 python 库,再搭一个看看。

告别收藏夹吃灰,欢迎来到「产品派」—— 一个发现与分享优质产品的创意社区

你是否也有过这样的困扰?平时收藏了太多的链接、网站、工具、产品和灵感,收藏夹起初是“知识宝库”,后来却变成了“数字废墟”。东西越积越多,分类越来越乱,真正想回头找的时候,经常翻半天都找不到。许多当时令人眼前一亮的产品,被塞进收藏夹后就再未打开;许多本值得认真分享、讨论的创意,也慢慢淹没在信息的洪流中。

为了解决这个痛点,我从 2025 年 8 月开始构思,并在 10 月初正式启动开发。经过多轮迭代与测试,今天,我很高兴地向大家宣布:「产品派」 正式上线了!

「产品派」是一个发现和分享优质产品的创意社区。 无论你是热衷探索新奇产品的用户,还是正在打磨产品的独立开发者或创业者,都可以在这里更方便地找到好产品、分享好产品,同时也让自己的作品被更多人看见。


🎯 社区核心玩法

目前,产品派已开放以下核心功能:

  1. 产品发布与展示


    • 你可以提交自己的产品,完善介绍、分类、标签等信息,构建一个精美的展示页,让他人快速了解其价值。
  2. 产品发现与榜单


    • 浏览最新产品热门产品产品榜单,通过社区的力量高效筛选,不错过任何值得关注的新鲜事物。
  3. 丰富的社区互动


    • 这里不只是普通的发帖讨论,还支持多种趣味互动功能,让交流更有深度和乐趣:
      • 投票:适合发起选择题,快速收集用户意见与产品反馈。
      • 抽奖:支持定时开奖与自动派发奖品,是举办互动活动的利器。
      • 优惠码:非常适合分发邀请码、限时福利或专属折扣。
      • 盲盒:与抽奖不同,这是即时开奖,惊喜(或“空盒”)即刻揭晓。


🎁 上线专属福利,诚邀第一批种子用户

为感谢早期支持者,我们准备了专属身份和限时活动:

  • 种子用户勋章:在 2026 年 4 月 17 日至 7 月 17 日 期间注册的用户,将永久获得 「种子用户」 专属勋章,铭记您与社区共同的起点。

  • 开站抽奖活动:为庆祝上线,我们特地通过社区的“抽奖功能”发起了一个活动:


    • 活动时间2026 年 4 月 17 日 10:00 至 4 月 19 日 20:00
    • 活动奖励:我们将抽出 10 位 幸运用户,每人赠送 18.88 元 支付宝现金红包。地址: https://chanpinpai.com/topic/PkbImnNz


✨ 如何加入我们?

如果你平时喜欢发现新产品,如果你正在精心打磨自己的产品,亦或你单纯喜欢交流、结识新朋友,「产品派」 都欢迎你的到来。

立即访问社区,发现更多可能:
👉 https://chanpinpai.com

让我们在这里,重新点燃对每一个好产品的好奇与热情。期待在社区与你相遇!


—— 一个同样受困于收藏夹,并希望做出改变的产品爱好者