如何像分析师一样利用 AI 深度解读任何公司

@gemchange_ltd
英语2个月前 · 2026年5月30日
383K
268
27
8
764

TL;DR

一份全面的指南,教你如何利用 SEC EDGAR 数据、法务会计评分以及 YouMind 的 AI Agents 实现财务分析自动化,从而识别传统股票和加密协议中的风险。

1998 年春天,康奈尔大学的六名 MBA 学生对安然公司的财务报表算了个公式,结果得到了 -1.89。

判断一家公司是否在财务造假的标准是低于 -2.22。安然的数值已经越线了。而且,这还只是几个学生算的,不是什么法务会计机构。

gemchanger - inline image

他们把这报告挂在了学校网站上。当时整个华尔街都还在给安然评级为买入,并且大多数机构一直维持这个评级,直到它归零前几周。

这是一份任何人都能查到的公开文件,加上一个用手算大概 20 分钟的公式。接下来我要带你做的,就是这件事,只不过你几秒钟就能搞定,而且可以把它用在世界上任何一家公司或代币上。

非投资建议,请自行研究。法务评分只是概率信号,并非确凿证据;这里所有价格都在变化,请在下注前核实。我主要为专业预测市场交易者构建工具 [@coldvisionXYZ*](https://x.com/@coldvisionXYZ

L0:数据仓库

美国每家上市公司都向 SEC 提交文件,而 SEC 通过一个名为 EDGAR 的 API 免费提供所有这些数据。你访问一个 URL,就能拿到一家公司报告过的所有数字,而且是结构化的。

EDGAR 有两个厉害之处:

  1. 全文搜索。它对所有已提交文件的实际文本建立了索引,所以你可以搜索"material weakness"这样的短语,然后在整个市场中找出所有刚刚悄悄承认其会计控制存在问题的公司。这大约一秒钟就能生成一个做空观察名单。
  2. 结构化财务报表。每个科目,每个季度,机器可读,涵盖多年数据。

edgartools 是你需要的库。

gemchanger - inline image

Pip 安装,无需密钥,它能解析 10-K、8-K、内部人士 Form 4、13F 基金持仓等所有文件,并转换成清晰的 Python 对象。

它还附带了一个 MCP 服务器,所以你可以直接让 Claude 连接它,然后说"比较苹果和微软过去三年的营收增长",它就会真的去抓取真实的申报文件,而不是编造一些听起来合理的数据。

sec-edgar-downloader 是大家最先找到的。它只是下载原始的申报文件,然后丢给你一堆 HTML 让你自己解析。这方法是几年前的做法,现在用起来很痛苦。用 edgartools 吧。

BamSEC ,如果你只想阅读申报文件,又不想用 EDGAR 那个 1998 年风格的界面。干净清爽的阅读器,支持并排对比,大部分功能免费。适合人工审视。

gemchanger - inline image

好了,现在你可以免费获得所有上市公司的结构化财务数据了。

L1 - 抓住说谎者

你拿到了数字。在你阅读管理层关于他们"变革性一年"的任何一句话之前,先用几个公式对原始数据算一算。

这些公式是学者们根据几十年来的实际欺诈案例构建的。你只需要知道每个公式在探测什么。

Beneish M-Score 就是那个识别安然公司的公式。

八个数据输入,最终融合成一个数字。最重要的输入是总应计项目除以总资产,因为伪造收益最快的方法就是将从未以现金形式出现的收入入账。下一个标志是过于干净、不真实的销售增长,这正是安然公司暴露的那个指标。数值高于 -2.22 你就需要去调查了。安然的数值是 -1.89。

gemchanger - inline image

Altman Z-Score 用于衡量破产风险。

它将盈利能力、杠杆率和资产利用效率混合成一个单一的压力分数。低于 1.81 是危险区域。

gemchanger - inline image

Sloan accruals ratio 用于衡量盈利质量。

由现金构成的盈利是真实的,由应计项目构成的盈利最终会反转。当应计比率偏离超过大约 25% 时,盈利基本上就是一个会计海市蜃楼,即将在你面前消散。

gemchanger - inline image

Piotroski F-Score ,包含 9 个是/否问题,用于判断一家公司是否真的在财务上变得更强。得分 6 或以上表示健康。

gemchanger - inline image

将这些从功课变成工作流程的关键是,一次性对整个观察名单运行所有这 4 个指标,然后只阅读那些触发警报的公司。这正是下面这个脚本要做的事。

另外,请不要根据某个随机的博客重新实现这些算法,GitHub 上有一半的 M-Score 代码都有细微的错误。

FinanceToolkit 代码库包含 150 多个比率——Beneish、Altman、Piotroski、Sloan,等等——而且公式是公开的,这样你就可以在怀疑某个数字时去核实它。

再配上一个 FMP 的密钥来获取数据,你就一切就绪了。老实说,这是最被低估的金融代码库之一,透明且持续维护。

https://github.com/JerBouma/FinanceToolkit

gemchanger - inline image

Beneish M-Score 基于去年的数据,所以当你看到结果时,财务操纵可能已经在反转了。它会遗漏一些真正的欺诈,也会错误地标记一些干净的公司。一个糟糕的分数意味着你需要打开申报文件仔细阅读。它绝不能单独作为做空的理由。

L2:让 AI 读取文字

你筛选了,某家公司触发了警报,现在你打开 10-K 文件,里面有 100 多页的法律术语,其目的就是让人看不懂。

把这项工作交给 AI 吧。

错误的方式是:

把整个文件粘贴到聊天框里,然后问"这家公司好吗?"。它会被信息淹没,然后告诉你你想听的话。

好的方式是:

让它对比今年和去年的文件。

把今年和去年的 10-K 文件中的"风险因素"部分提取出来,都交给模型,给它一个明确的任务。

只告诉我今年新增了哪些内容,或者删除了哪些内容,引用新的措辞,忽略两者都有的模板化内容。

一家悄悄加入了一段关于客户集中度描述的公司,实际上是在告诉你一个重要客户可能出了问题。一家删除了关于某个关键供应商描述的公司,则是在告诉你一段关系结束了。这些事情永远不会出现在新闻稿里。律师们写下这些句子是因为他们害怕被起诉,而恐惧就隐藏在白纸黑字里,只是没人会去读第二遍。

同样的对比方法也适用于 MD&A(管理层自己对当年的陈述)和财务报表附注。安然的整个欺诈行为都隐藏在关于表外实体的附注中。故事是谎言,但附注不是。

edgar-crawler 这个代码库的存在,基本上就是为了将这些项目部分(风险因素和 MD&A)提取成干净的 JSON 格式,这样你就不需要通过正则表达式去解析 HTML 了。这就是它的全部工作,而且做得很好。将它的输出输入到你的对比函数中。

如果你宁愿付费购买而非自己构建,以下是为你做这些事的工具清单。

Hudson Labs(原 Bedrock AI)

这是一个低调的选择,也是我真正愿意付费的那个。它能自动进行跨年度的红旗标记提取,无需你提问就能发现持续经营问题、重大缺陷、关联方风险。起价大约每月 100 美元。如果你认真研读申报文件,这是这份清单上性价比最高的选择。

gemchanger - inline image

AlphaSense

机构标配,每个席位大约 1.5 万到 2 万美元,所以实际上只有你的公司付费才可行。它拥有 Tegus,一个包含数千次与前高管和客户进行的付费访谈的库。这几乎是你所能获得的最接近合法的内幕信息了,而且你无法免费复现这些信息。

gemchanger - inline image

Daloopa

提取模型就绪的财务数据,每个数字都超链接回其在申报文件中的确切位置。正是这种审计追踪能力使得构建严肃 DCF 模型的人使用它。企业级定价,除非建模是你的实际工作,否则就太过了。

gemchanger - inline image

Fintool 是 AI 优先的,专为美国股票构建,所有信息都有引用来源,还支持持续警报,比如"每当有任何公司新提到供应链问题时通知我"。

如果你觉得 Hudson 太侧重于法务审计,而 AlphaSense 又太贵,那么它是一个不错的中庸选择。

gemchanger - inline image

L3:加密领域

转换到代币。思路完全相同。

在股票中,欺诈隐藏在应计项目和附注里。

在加密货币中,欺诈隐藏在供应计划和持有者集中度中,而这两者都在公开的链上,你可以免费读取。

你在这边的 EDGAR 等价物是 DefiLlama

gemchanger - inline image

免费 API,无需密钥,覆盖几乎所有协议的总锁仓价值(TVL)、费用、收入和解锁计划。

一个协议有 3 个数字,直接对应到一家普通的公司。

  • 费用 = 用户支付的所有费用。这就是总营收。
  • 收入 = 协议实际保留的部分。这就是净营收。
  • 收益 = 收入减去它为了贿赂用户而凭空铸造出来的代币成本。

Token Terminal 将所有这些数据标准化——费用、收入、收益以及加密货币的市盈率等价物——覆盖所有主要区块链。

它确实是"加密货币界的彭博终端",这种标准化工作是你讨厌手工完成的任务。但它的价格大约是每月 350 美元,对个人来说有点贵,免费层加上 DefiLlama 可以满足你的大部分需求。

gemchanger - inline image

然后是两个关键点,也就是加密货币版本的法务筛查。

首先是解锁计划。

代币并非在启动时全部存在,团队和风险投资(VC)的份额需要数年的时间才能解锁,而当它们解锁时,那些以接近零成本入手的持有者终于可以抛售给你了。经验法则:任何单次解锁量超过流通供应量 5% 都是一个危险信号。举个具体的例子,Arbitrum 的第一个大额解锁事件是在一天之内,解锁的 ARB 数量大约相当于当时整个流通供应量。从一开始就持有的巨鲸可以借此套现离场,而小散则成了接盘侠,而这个解锁日期早在几个月前就已经写在日历上了。

了解这 3 种形态。

  1. 悬崖式解锁:在一天内大量抛售(暴力)。
  2. 线性解锁:每天持续少量释放(缓慢流血,有时你可以扛过去)。
  3. 基于活动的发行:产量释放。如果是一次悬崖式解锁,并且代币流向了 VC 钱包,那就是终结你投资组合的事件。

其次是持有者集中度。谁真正持有这个东西。如果少数几个钱包持有大部分供应量,而且它们被标记为团队或某个早期 VC 基金,那么恭喜你,你被设计成了接盘侠。

这就是钱包标记工具价值所在的地方,因为原始的链上数据只是一串 0x...,直到有人告诉你它是 Jump Trading 或是团队归属合约。

Arkham

从这里开始,因为它是免费的,面向个人用户,而其他严肃的平台都没有免费版本。它的去匿名化引擎是货真价实的;这家公司曾公开追踪回价值数十亿美元的被盗比特币,追溯到一次黑客攻击。你可以对正在查看的任何代币使用相同的实体追踪功能。免费是其杀手锏,直接用就好了。

Nansen

追踪"聪明钱",即那些历史上能早期且准确地发现机会的钱包,覆盖众多区块链。最近大幅降低了其 Pro 版本的价格,大约是每月 49 美元。标签是其全部产品,而且质量很好,但当资金进入中心化交易所后,追踪线索就会中断。如果你认真进行链上交易,它值得一试。

Dune

拥有超过 10 万个社区创建的 SQL 仪表盘,你可以直接复制使用,不需要自己写任何 SQL。免费层对几乎所有人来说都足够了,而且你想要的仪表盘可能已经有人做好了,所以在你自己动手之前,先去找到它。

Messari 提供高质量的定性研究和评级。定价不透明,偏向企业客户,免费的研报值得一读,但如果不经过商务谈判,不要指望能获得优质内容。

Tokenomist(原 Token Unlocks)是专门的解锁日历。DefiLlama 也涵盖解锁信息,但如果解锁交易就是你的全部策略,那这个就是专家。

L4:一个统一的系统

你现在拥有了所有部件:双方(传统金融和加密领域)的免费数据、法务计算公式、文档对比工具、链上筛查工具。最后一层是让它们作为一个整体运行,而不是你在 15 个标签页之间复制粘贴。

virattt/ai-hedge-fund 是一个 AI Agents 团队,每个 Agent 都模仿一位著名投资者的理念,它们会对一只股票进行辩论并得出一个结论。这种投资者角色扮演说实话有点噱头的意思,你绝对不应该用它来做实盘交易。

https://github.com/virattt/ai-hedge-fund

但作为一堂免费的课程,教你如何编排分析 Agent,如何将一个数据获取器链接到一个筛选器再链接到一个推理器,它是目前 GitHub 上最好的老师。

gemchanger - inline image

OpenBB 是开源的彭博终端。一次连接你的数据供应商,随处使用,附带 MCP 服务器,因此 Agent 可以驱动整个系统。功能强大但也很重,配置起来需要实际的工作量,数据质量完全取决于你接入的是哪个免费供应商。如果你需要一个万能仪表盘,它值得一试;如果你只是想筛选几个公司,那就太过了。

https://github.com/OpenBB-finance/OpenBB

gemchanger - inline image

FinGPT / FinRobot 是开放的金融领域大语言模型(LLM),你可以低价进行微调。学术上令人印象深刻,而且是的,微调比人们想象的要便宜。

https://github.com/ai4finance-foundation/finrobot

但对于几乎所有人来说,你不需要微调任何东西,一个前沿模型配合上面的提示词就能完成工作。

gemchanger - inline image

按顺序来

首先是工具层,即函数调用或 MCP 服务器,封装 EDGAR、FMP、DefiLlama,这样模型就能获取真实数字,而不会自己编造。这是不可协商的,一个引用未经证实财务数据的 AI 是 liabilities(责任/风险),而不是分析师。

其次是筛选层,即法务评分和链上检查,对你关注列表中的任何东西自动运行。

然后是阅读层,即对通过筛选的公司进行年度对比。

最后是综合层,即模型撰写备忘录,每个声明都附上引用来源,然后你阅读备忘录,而不是那 200 页的文件。

关于模型,Claude 或 GPT 都可以。如果你要处理敏感数据,不希望文件离开你的机器,可以本地通过 Ollama 运行开放模型。模型从来都不是护城河。护城河在于将模型连接到干净、经过验证、带有来源的数据,并对其应用严谨的数学方法。

L5:构建 L1

给它一个股票代码,它会从 EDGAR 拉取真实的申报文件,计算 Beneish、Altman、Piotroski 和应计比率,如果你提供了密钥,它还会运行年度风险因素对比,并为你撰写一段话的结论。

python
1#!/usr/bin/env python3
2"""
3forensic_screener.py - 像分析师一样阅读任何公司,一条命令搞定。
4
5setup:
6 pip install edgartools anthropic
7 export SEC_IDENTITY="Your Name [email protected]" # SEC 要求此标头
8 export ANTHROPIC_API_KEY="sk-..." # 可选,仅用于 diff
9
10run:
11 python forensic_screener.py AAPL
12 python forensic_screener.py TSLA NVDA SMCI # 同时筛选多个
13 python forensic_screener.py SMCI --diff # 添加风险因素 diff
14"""
15
16import os, sys, argparse
17from dataclasses import dataclass
18
19# 阈值 - 改变你立场的标杆。可根据喜好调整。
20M_FLAG = -1.78 # Beneish 指标高于此值 -> 操纵风险(经典临界值为 -2.22)
21Z_DISTRESS = 1.81 # Altman 指标低于此值 -> 困境区域
22Z_SAFE = 2.99 # Altman 指标高于此值 -> 安全区域
23ACCRUAL_BAD = 0.25 # |应计/资产| 高于此值 -> 盈利质量红旗
24F_STRONG = 6 # Piotroski 指标达到或高于此值 -> 正在加强
25
26@dataclass
27class YearData:
28 sales: float; cogs: float; sga: float; net_income: float; cfo: float
29 receivables: float; current_assets: float; current_liabilities: float
30 ppe_net: float; depreciation: float; total_assets: float
31 total_liabilities: float; long_term_debt: float; retained_earnings: float
32 ebit: float; market_cap: float; shares: float
33
34def load_two_years(ticker: str):
35 """returns (this_year, last_year). 通过网络调用 SEC EDGAR。"""
36 from edgar import Company, set_identity
37 identity = os.environ.get("SEC_IDENTITY")
38 if not identity:
39 sys.exit("设置 SEC_IDENTITY='Your Name [email protected]' - SEC 要求此项。")
40 set_identity(identity)
41
42 company = Company(ticker)
43 fin = company.get_financials()
44 inc, bal, cfs = fin.income_statement(periods=2), fin.balance_sheet(periods=2), fin.cash_flow(periods=2)
45
46 def g(stmt, col, *aliases):
47 # 尽力而为的行查找;公司对同一概念的标记方式不同
48 for a in aliases:
49 try:
50 row = stmt.loc[stmt.index.str.contains(a, case=False, na=False)]
51 if not row.empty:
52 return float(row.iloc[0, col])
53 except Exception:
54 continue
55 return 0.0
56
57 def build(col):
58 return YearData(
59 sales=g(inc, col, "RevenueFromContractWithCustomerExcludingAssessedTax", "Revenues", "SalesRevenueNet"),
60 cogs=g(inc, col, "CostOfGoodsAndServicesSold", "CostOfRevenue"),
61 sga=g(inc, col, "SellingGeneralAndAdministrativeExpense"),
62 net_income=g(inc, col, "NetIncomeLoss"),
63 cfo=g(cfs, col, "NetCashProvidedByUsedInOperatingActivities"),
64 receivables=g(bal, col, "AccountsReceivableNetCurrent", "ReceivablesNetCurrent"),
65 current_assets=g(bal, col, "AssetsCurrent"),
66 current_liabilities=g(bal, col, "LiabilitiesCurrent"),
67 ppe_net=g(bal, col, "PropertyPlantAndEquipmentNet"),
68 depreciation=g(cfs, col, "DepreciationDepletionAndAmortization", "DepreciationAmortizationAndAccretionNet"),
69 total_assets=g(bal, col, "Assets"),
70 total_liabilities=g(bal, col, "Liabilities"),
71 long_term_debt=g(bal, col, "LongTermDebtNoncurrent", "LongTermDebt"),
72 retained_earnings=g(bal, col, "RetainedEarningsAccumulatedDeficit"),
73 ebit=g(inc, col, "OperatingIncomeLoss"),
74 market_cap=getattr(company, "market_cap", 0.0) or 0.0,
75 shares=g(bal, col, "CommonStockSharesOutstanding"),
76 )
77
78 # col 0 = 最新年份,col 1 = 前一年(edgartools 将最新的排在前面)
79 return build(0), build(1)
80
81def d(a, b): return a / b if b else 0.0 # 安全除法
82
83def beneish_m_score(t, p):
84 DSRI = d(d(t.receivables, t.sales), d(p.receivables, p.sales))
85 GMI = d((p.sales - p.cogs)/p.sales if p.sales else 0, (t.sales - t.cogs)/t.sales if t.sales else 0)
86 AQI = d(1 - d(t.current_assets + t.ppe_net, t.total_assets), 1 - d(p.current_assets + p.ppe_net, p.total_assets))
87 SGI = d(t.sales, p.sales)
88 DEPI = d(d(p.depreciation, p.depreciation + p.ppe_net), d(t.depreciation, t.depreciation + t.ppe_net))
89 SGAI = d(d(t.sga, t.sales), d(p.sga, p.sales))
90 TATA = d(t.net_income - t.cfo, t.total_assets)
91 LVGI = d(d(t.total_liabilities, t.total_assets), d(p.total_liabilities, p.total_assets))
92 return (-4.84 + 0.92*DSRI + 0.528*GMI + 0.404*AQI + 0.892*SGI
93 + 0.115*DEPI - 0.172*SGAI + 4.679*TATA - 0.327*LVGI)
94
95def altman_z_score(t):
96 wc = t.current_assets - t.current_liabilities
97 return (1.2*d(wc, t.total_assets) + 1.4*d(t.retained_earnings, t.total_assets)
98 + 3.3*d(t.ebit, t.total_assets) + 0.6*d(t.market_cap, t.total_liabilities)
99 + 1.0*d(t.sales, t.total_assets))
100
101def piotroski_f_score(t, p):
102 s = 0
103 s += t.net_income > 0
104 s += t.cfo > 0
105 s += d(t.net_income, t.total_assets) > d(p.net_income, p.total_assets)
106 s += t.cfo > t.net_income # 现金超越应计
107 s += t.long_term_debt < p.long_term_debt
108 s += d(t.current_assets, t.current_liabilities) > d(p.current_assets, p.current_liabilities)
109 s += t.shares <= p.shares # 无稀释
110 s += d(t.sales - t.cogs, t.sales) > d(p.sales - p.cogs, p.sales)
111 s += d(t.sales, t.total_assets) > d(p.sales, p.total_assets)
112 return int(s)
113
114def sloan_accruals(t): return d(t.net_income - t.cfo, t.total_assets)
115
116def risk_factor_diff(ticker):
117 """对比今年与去年的风险因素。整个分析栈中最佳单一操作。"""
118 key = os.environ.get("ANTHROPIC_API_KEY")
119 if not key:
120 return "(已跳过 - 设置 ANTHROPIC_API_KEY 以启用 diff)"
121 from edgar import Company
122 import anthropic
123 f = Company(ticker).get_filings(form="10-K").latest(2)
124 this_rf = getattr(f[0].obj(), "risk_factors", str(f[0]))
125 last_rf = getattr(f[1].obj(), "risk_factors", str(f[1]))
126 client = anthropic.Anthropic(api_key=key)
127 msg = client.messages.create(
128 model="claude-opus-4-8", max_tokens=1024,
129 messages=[{"role": "user", "content": (
130 "比较来自连续年度申报文件的两个风险因素章节。"
131 "仅报告今年 NEW 或今年 REMOVED 的内容。引用新语言。"
132 "忽略两者都有的模板化内容。用一句话结束:这里的任何内容是否会改变风险?\n\n"
133 f"去年:\n{last_rf[:40000]}\n\n今年:\n{this_rf[:40000]}")}],
134 )
135 return msg.content[0].text
136
137def screen(ticker, do_diff=False):
138 print(f"\n{'='*60}\n {ticker.upper()}\n{'='*60}")
139 try:
140 t, p = load_two_years(ticker)
141 except Exception as e:
142 print(f" 无法加载申报文件:{e}"); return
143
144 m, z, f, a = beneish_m_score(t, p), altman_z_score(t), piotroski_f_score(t, p), sloan_accruals(t)
145 flags = []
146 if m > M_FLAG: flags.append(f"M-Score {m:+.2f} - 盈利操纵风险")
147 if z < Z_DISTRESS: flags.append(f"Z-Score {z:.2f} - 财务困境区域")
148 if abs(a) > ACCRUAL_BAD: flags.append(f"应计项目 {a:+.1%} - 盈利质量红旗")
149 if f < F_STRONG: flags.append(f"F-Score {f}/9 - 未在加强")
150
151 print(f" Beneish M : {m:+.2f} (> {M_FLAG} = 需要调查)")
152 print(f" Altman Z : {z:.2f} (< {Z_DISTRESS} 困境, > {Z_SAFE} 安全)")
153 print(f" Piotroski F: {f}/9 (>= {F_STRONG} 强)")
154 print(f" Sloan Accr : {a:+.1%} (|x| > {ACCRUAL_BAD:.0%} 红旗)")
155 print(f"\n 结论:{'需要调查' if flags else '状况良好'}")
156 for fl in flags: print(f" - {fl}")
157 if do_diff:
158 print("\n 风险因素对比 (年度间):")
159 print(" " + risk_factor_diff(ticker).replace("\n", "\n "))
160
161def main():
162 ap = argparse.ArgumentParser(description="针对任何美国上市公司的法务筛选器")
163 ap.add_argument("tickers", nargs="+")
164 ap.add_argument("--diff", action="store_true", help="同时运行风险因素对比")
165 args = ap.parse_args()
166 for tk in args.tickers:
167 screen(tk, do_diff=args.diff)
168 print("\n提醒:这是概率信号,不是确凿证据。Beneish M-Score 基于去年数据运行,因此"
169 "操纵可能已经开始反转。一个糟糕的分数意味着需要打开申报文件,切勿仅根据这个数字就做空。\n")
170
171if __name__ == "__main__":
172 main()

我在发布前检查过数学计算,输入一组健康的数字后,它会输出一个干净的 M 值大约为 -2.24,Z 值在安全区域,F 值为 9/9,应计项目接近零,完全符合预期。

唯一需要你机器完成的工作是实时的 SEC 连接和用于 diff 的密钥。标签别名涵盖了标准的申报公司,一个特殊的公司可能需要添加一行代码,我已经在代码中标记了位置。

一键保存

使用 YouMind AI 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind
写给创作者

把你的 Markdown 变成干净的 𝕏 文章

图片上传、表格、代码块,往 𝕏 上手动重排太痛苦。YouMind 把整篇 Markdown 一键转成干净、可直接发布的 𝕏 文章草稿。

试试 Markdown 转 𝕏

更多可拆解样本

近期爆款文章

探索更多爆款文章