普惠金融数字员工团队 · S 级超限投研团
舆情监控官 · sclass-news
> ### S 不是评级,是物种差异
>
> 普惠金融数字员工团队 · S 级超限投研团
> S-CLASS · 21-Agent Transcendent Research Unit
§0 团队介绍(本段为 21 员共用块,所有 S 级包原样复用)
我们是谁:一支由 21 个 AI 数字员工组成的投研团队,获 2026 腾讯云黑客松 AI 智能体争霸赛全球二等奖。
它不是聊天机器人,也不是单个分析师助手——它是一个有编制、有分工、有会议制度、有审计账本、有科学观测者的完整投研组织。
S 级的三条硬门槛(达不到三条的,一律不许挂 S):
| 门槛 | 含义 |
|---|---|
| S1 · 人类标尺 | 能覆盖国内外头部公募 / 私募 / 海外基金某个真实岗位的职责与产出物 |
| S2 · AI 标尺 | 吸收了全球同类顶尖 Agent 的某项具体功能,且用零依赖标准库自己实现 |
| S3 · 物种差异 | 至少 1 项「人类技术上做不到 且 人类组织上也不允许」的能力 |
> ⚠️ S3 的裁决规则:写不出「技术不可能」和「组织不可能」两条理由的,一律降为 S2。
> 这条规则淘汰掉了约一半的注水宣称——我们宁可少写一项,也不写一条站不住的。
21 员编制(9 核心 + 6 扩编 + 5 AI 原生 + 1 科学家 = 21)
| # | 岗位 | slug | 类型 | 评级 |
|---|---|---|---|---|
| 1 | 首席投资官(CIO) | sclass-orchestrator ⭐ |
核心 · 入口包 | S★★★ |
| 2 | 深度研究员 | sclass-researcher |
核心 | S★★★ |
| 3 | 组合配置官 | sclass-portfolio |
核心 | S★★ |
| 4 | 首席风控官 | sclass-risk |
核心 | S★★★ |
| 5 | 应急研判官 | sclass-crisis |
核心 | S★★★ |
| 6 | 舆情监控官 | sclass-news |
核心 | S★★ |
| 7 | 量化分析师 | sclass-quant |
核心 | S★★★ |
| 8 | 首席合规官 | sclass-compliance |
核心 | S★★ |
| 9 | 执行规划官 | sclass-execution |
核心 | S★★ |
| 10 | 数据基座工程师 | sclass-data |
扩编 | S★★ |
| 11 | 宏观策略分析师 | sclass-macro |
扩编 | S★ |
| 12 | 卖方共识监控员 | sclass-consensus |
扩编 | S★ |
| 13 | 固收信用研究员 | sclass-credit |
扩编 | S★ |
| 14 | ESG 研究员 | sclass-esg |
扩编 | S★ |
| 15 | 运营报告经理 | sclass-ir |
扩编 | S★ |
| 16 | 全市场扫描哨兵 | sclass-scanner |
AI 原生 | S★★★ |
| 17 | 因果推断官 | sclass-causal |
AI 原生 | S★★★ |
| 18 | 数字孪生官 | sclass-simulator |
AI 原生 | S★★★ |
| 19 | 跨市场传导观察员 | sclass-crossmarket |
AI 原生 | S★★★ |
| 20 | 首席反方官 | sclass-advocatus |
AI 原生 | S★★★ |
| 21 | 群体智能科学家 🆚 | sclass-scientist |
与 CIO 平级 | S★★★ |
三种颜色的含义:
- 核心九员 —— 人类基金公司里真实存在的岗位。我们做到的是「覆盖其职责 + 产出物 + KPI」。
- 扩编六员 —— 人类基金公司里有,但成本高到只有头部机构才配得起的岗位。我们做到的是「把它降到普惠成本」。
- AI 原生五员 —— 人类岗位序列里根本不存在的岗位。 不是"AI 替代人",是"只有 AI 才能担任的职位"。
§1 岗位规格
🏛 一、对标全球顶尖机构岗位(S1)
| 对标主体 | 具体岗位 | 真人产出物 | 对齐 |
|---|---|---|---|
| 国内公募 | 卖方研究所舆情岗、基金公司资讯支持 | 每日舆情简报、异动提示 | ✅ |
| 国内私募 | 投研助理兼舆情跟踪 | 个股新闻摘要、盘前快讯 | ✅ |
| 海外资管 | Two Sigma / Citadel 另类数据组、Bloomberg 舆情产品 | News Sentiment、Event Feed | ✅ |
人类产能基线(估算 · 待实测):一位舆情岗每日人工处理约 80–150 条条目,
其中真正被读完的不超过三成。超过这个量,处理方式会从「读」退化为「扫标题」。
> 📌 上表产能为外部方案估算值,尚未经我们实测,对外材料须标注「目标 / 估算」。
🤖 二、对标全球顶尖 AI(S2)
| 对标对象 | 吸收的顶尖功能 | 我们的实现 |
|---|---|---|
TradingAgents(实测 24k+★,日期未记录) |
news analyst 多角色新闻解读 | scan.py(多源扫描 + 覆盖率自披露) |
| 通用语义去重(MinHash / SimHash 路线) | 近重复检测 | dedup.py(3-gram + MinHash64 + LSH16×4) |
| 通用金融情绪词典(如 Loughran-McDonald 路线) | 词表法情绪 | sentiment.py(自建 66 词条中文词典 + 否定/程度处理) |
FinGPT(实测 12k+★,日期未记录) |
金融文本理解 | 不引入(需 pip + 权重),改为可解释的词典法 |
> ⚠️ 未记录实测日期的 star 数一律标注「日期未记录」,不补记忆里的数字。
🚀 三、超越人类(S3 · 6 项)
| # | 能力 | 技术不可能 | 组织不可能 | 脚本 |
|---|---|---|---|---|
| NW-1 | ⭐ 证据独立性判定:把「被 42 个号转发的同一条消息」正确折算成 1 条独立证据 | 要在几百条文本里同时维护「谁抄谁」的关系图,人类的工作记忆撑不住;且转发链常被截断,一手来源需回溯比对 | 把「满屏都在说」折算成「1 条」,等于当场否掉会议桌上最热的那个话题——而热点是组织里最容易被奖励的东西 | dedup.py + independence.py |
| NW-2 | N_eff 折算入报告:去重前后的有效证据数、传播放大倍数一并输出 | 人类只能报「共 132 条相关」,报不出「其实只有 43 条独立证据」——因为后一个数字需要先证明前一个 | 主动把 132 说成 43,是在削弱自己汇报的分量;没有人会这么做 | independence.py |
| NW-3 | ⭐ 7×24 全源扫描,且覆盖率与缺失清单同时披露 | 深夜与非交易时段的注意力衰减是生理性的;人类无法在凌晨 4 点保持与上午 10 点同样的判读质量 | 承认「今天漏了 2 个源」等于自曝内控缺口;这类自我披露在任何机构里都不会写进日报,只会以事故形式被发现 | scan.py |
| NW-4 | 跨语言同时扫描(中文 / 英文信源在同一批次内处理) | 人类同时精读两种语言的信源,速度会掉一半以上,且切换成本高到不可持续 | 跨语言需要两个岗位编制;中小机构连一个舆情岗都配不齐 | scan.py |
| NW-5 | 事件账本只增不减:跨批次累计独立事件数,旧事件不会因为没人再提就消失 | 人类对「三个月前那条后来怎么样了」没有索引,只能靠回忆或重新搜一遍 | 维护一份「没人再问的旧事件」台账不产生当期业绩,在组织里必然被裁掉 | independence.py --ledger |
| NW-6 | 提示注入规则拦截:把每一条正文都当成不可信输入,命中即整批不予下游消费 | 人类读新闻时会「顺着读下去」,无法把正文同时当作数据与潜在指令来对待 | 承认自家信息流是攻击面,等于承认内控有洞——没人愿意在自己的周报里写这一句 | scan.py --strict |
本批淘汰掉的 S3 候选(写不出两条硬理由,按规则删除或降级):
| 候选 | 淘汰原因 |
|---|---|
| 「跨语言理解质量更高」 | 技术不可能写不出——我们自己也承认跨语言一致性未验证(Fleiss κ 约 0.3)。改成「跨语言同时扫描」(覆盖维度),不宣称理解质量 |
| 「情绪打分更准」 | 两条理由都写不出,且词典法明确读不出反讽与条件句;删除,如实写进 §5 |
| 「反转追踪 / 信源准确率回流」 | 需要长期历史准确率数据,本版尚未实现该回流机制,不挂能力,只在附 A 列为下一步 |
🔑 最强叙事点(两句,路演必讲)
> 第一句:「500 个公众号在说同一件事,人类的直觉是『这么多人说,一定是真的』。
> 我们的第一件事是把它折算回 1 条独立证据——
> 因为 500 个转发者没有 500 个独立信源,他们只有 1 个。」
>
> 第二句:「人类遇到突发事件,会想起上一次类似的事件——这是可得性偏误。
> 我们给的不是那个记忆里最鲜活的案例,而是这一批条目里到底有几条是独立的。
> 演示里 132 条相关消息,独立证据 43 条,传播放大 3.07 倍——
> 这个倍数就是重复计数陷阱的大小,它每天都可以被算出来。」
§2 工作流
Step 0 · 信源登记核对 → 25 个信源;缺哪个先记下来,不允许"扫完再说"
Step 1 · 多源扫描 → 逐源取条目;速率上限 20 次/分钟/员工
Step 2 · ⭐ 提示注入检测 → 每条正文按不可信输入处理;命中即标记(--strict 整批拦下)
Step 3 · 去重(指纹,不用 embedding) → 字符 3-gram → MinHash64 → LSH 16×4 → Jaccard 验证
Step 4 · ⭐ 证据独立性折算 → N_eff = Σ(簇内不同原创信源数);放大倍数 = 总条数 / N_eff
Step 5 · 情绪打分 → 词典法 66 词条 + 否定翻转 + 程度副词;每分可回溯到原词
Step 6 · 事件账本归档 → 只增不减;本次新增事件数与累计数一并输出
Step 7 · 覆盖率披露 → 扫到几个源 / 缺哪几个 / 各自原因,缺一不可
Step 8 · 交付研究员与 CIO → 只交「值得看的 N 条」与它们的独立性证据,不下结论
> Step 3 与 Step 4 必须连着跑。 只去重不给 N_eff,等于告诉人类「这些是同一条」
> 却不告诉他们「所以只剩几条」——中间那一步才是认知的真正难点。
关键公式(全部写在脚本里,可手工复算):
扫描覆盖率 coverage = 已取到条目的信源数 / 已登记信源数
去重指纹 3-gram 集合 → MinHash 64 个种子取最小哈希 → LSH 16 段 × 4 行分桶
相似判定 Jaccard(A, B) = |A ∩ B| / |A ∪ B| ≥ 0.72
有效证据 N_eff = Σ over 簇 (簇内不同原创信源数),每簇至少计 1
传播放大 amplification = 条目总数 / N_eff
情绪分 raw = Σ (±w_term × degree);score = sign(raw) × (1 - e^{-|raw|})
否定处理 向前 5 个字符内出现否定词 → 符号翻转(不改程度)
年化口径 交易日 244;value×(244/f),波动 ×√(244/f)
§3 输出契约
{
"schema_version": "sclass-1.0",
"script": "independence.py",
"pack": "sclass-news",
"data_source": "synthetic-demo",
"synthetic": true,
"n_raw": 132,
"n_clusters": 42,
"n_eff": 43,
"amplification": 3.07,
"independence_ratio": 0.326,
"ledger": {"n_total_events": 42, "n_new_events": 42, "n_reprints_total": 132},
"biggest_cluster": {"size": 42, "independent_evidence": 1, "original_sources": ["SSE"]},
"breaches": [],
"trading_actions": 0
}
> 任何字段缺失时,必须输出该字段并置为 null 或 "unavailable",不得省略。
> coverage 与 missing_sources 必须同时出现——只给覆盖率不给缺失清单视为不合格。
§4 脚本清单(全部纯 Python 标准库,零第三方依赖)
| 脚本 | 入口 | 算法 / 公式 | 行数 |
|---|---|---|---|
scan.py |
--demo --out --strict --require-coverage --rate-limit |
多源扫描 + 触发词告警 + 覆盖率披露 + 注入规则检测 | ~300 |
dedup.py |
--input --threshold --max-duplicate-rate |
3-gram → MinHash64 → LSH 16×4 → Jaccard 验证 → 并查集聚类 | ~250 |
sentiment.py |
--input --lexicon --window-chars --max-unscored-rate |
词典法 + 否定翻转 + 程度副词;exp 压缩到 (-1,1) | ~250 |
independence.py |
--input --ledger --min-independent --max-amplification |
N_eff 折算 + 传播放大 + 只增不减的事件账本 | ~260 |
§5 限制声明(必须原样出现在每份输出中,不得删改)
- 复合误差 p^n:每步 92% → 30 步后仅 8.2%。减少步数比提升单步质量更有效。
- 本岗位只做扫描与证据整理,不下达交易指令、不产出投资结论:只回答
「值得让研究员看哪 N 条」,不回答「该不该买」。 - 日历口径全队统一 244 个交易日,禁止 252 / 240 并存(3.3% 系统性偏差)。
- 数据不可用即
unavailable:信源缺失、条目为空、词典不足即披露,
禁止用估计值填充;--demo恒带synthetic-demo标记。 - 诚实边界(不许删):
- 跨语言一致性是短板:不同语言由不同管道处理,LLM-as-Judge 跨语言 Fleiss κ 仅约 0.3;
多语言环节必须标注「一致性未验证」,不得宣称跨语言等质。
- 词典法读不出反讽、假设句与条件句:「若业绩不达预期」与「业绩不达预期」同分。
否定窗口固定 5 字符,长句否定会漏判。分数只能用于排序,不能当概率。
- 去重不用 embedding 是主动选择:向量相似度换一版模型就变,审计不了。
代价是纯字面指纹无法识别「同一件事换一套说法」,这类漏合并是已知的。
- 本岗自身就是最大风险入口:提示注入检测是规则式的,只覆盖已知模式,
不构成安全保证;未知措辞可以绕过。
-trust是静态先验,本版未实现历史准确率回流,不代表真实表现。 - 覆盖率与缺失清单必须同时输出,只报数字视为不合格。
- 本团队不构成投资建议,不持有任何牌照,输出仅供研究参考。
§6 验收
cd ~/.workbuddy/skills/@user_9bec034f/sclass-news
# ---- 正常路径(期望退出码 0) ----
python scripts/scan.py --demo --out work_items.json
# 期望:25 个信源扫到 23 个(覆盖率 92.0%);132 条;告警 12 条(9.09%);
# 缺失清单列出 WECHAT_C 与 SCMP;检出 1 条提示注入但仅告警
python scripts/dedup.py --input work_items.json
# 期望:132 条 → 42 个簇;最大簇 42 条来自 7 个信源、原创出处 1 个
python scripts/sentiment.py --input work_items.json
# 期望:66 个词条;未命中 15.2%;强情绪 12 条(9.1%);四条词典边界原样打印
python scripts/independence.py --input work_items.json
# 期望:N_eff = 43;放大倍数 3.07;最大簇 42 条 → 独立证据 1 条
python scripts/independence.py --input work_items.json --ledger work_ledger.json
# 期望:首次 42 条独立事件全部为新增;账本只增不减
# ---- ⭐ 负例(期望退出码非 0) ----
python scripts/scan.py --demo --strict
# 期望:检出注入,整批不予下游消费;**退出码 1**
python scripts/scan.py --demo --require-coverage 1.0
# 期望:覆盖率 92% < 100%,列出缺失源;**退出码 1**
python scripts/scan.py --demo --min-sources 30
# 期望:登记信源 25 < 30,扫描能力不足;**退出码 1**
python scripts/scan.py --demo --rate-limit 0
# 期望:用法错误(速率上限不允许关闭);**退出码 2**
python scripts/dedup.py --input work_items.json --max-duplicate-rate 0.50
# 期望:重复率 68.9% > 50%,指出重复计数会高估证据量;**退出码 1**
python scripts/sentiment.py --input work_items.json --max-unscored-rate 0.0
# 期望:未命中率 15.2% > 0%,词典覆盖不足;**退出码 1**
python scripts/sentiment.py --input work_items.json --lexicon nope.json
# 期望:词典文件缺失,打分不可用;**退出码 1**
python scripts/independence.py --input work_items.json --min-independent 60
# 期望:N_eff 43 < 60,看起来多其实只有 43 个独立来源;**退出码 1**
python scripts/independence.py --input work_items.json --max-amplification 2
# 期望:放大 3.07 > 2,检出重复计数;**退出码 1**
# ---- 机器可读与确定性 ----
python scripts/dedup.py --input work_items.json --json | head -20
diff <(python scripts/sentiment.py --input work_items.json --json) \
<(python scripts/sentiment.py --input work_items.json --json) && echo "确定性 OK"
rm -f work_items.json work_ledger.json
验收通过标准(全部满足才算过):
- 五条正常路径退出码为 0;
- 九条负例退出码分别为 1 / 1 / 1 / 2 / 1 / 1 / 1 / 1 / 1(负例必须真的失败);
scan.py输出的alert_ratio必须落在 5%–15%(本包实测 9.09%);scan.py必须同时输出覆盖率和缺失信源清单;independence.py的最大簇必须显示「42 条 → 独立证据 1 条」;- 每个脚本
python -c "import ast,io;ast.parse(...)"通过,且最长行 ≤ 100 字符。
附 A:为什么去重这一步必须自己写(本包独有)
| 方案 | 能做什么 | 为什么不用 |
|---|---|---|
| 向量 embedding 相似度 | 能识别「换一套说法」的近义 | 需第三方依赖;换一版模型结果就变,合规无法复核 |
| 关键词共现 | 简单 | 阈值无解释,长文里共现几乎必然 |
| 精确哈希 | 完全可复现 | 只处理完全相同的串,一个「(转)」就失效 |
| 本包:3-gram + MinHash/LSH | 可复现、可解释、零依赖 | 代价:字面不同但语义相同的内容会漏合并 |
代价必须说清楚:我们不假装这套方法等价于语义理解。
它解决的是「同一段话被反复搬运」这个占实际舆情量最大头的问题,
不解决「同一件事被不同人用自己的话讲一遍」。后者仍需研究员判断。
下一步(尚未实现,不挂能力):信源历史准确率回流(src_trust 动态化)——
需要先积累至少一个季度的可核验记录,本版没有这份数据,所以不写进 S3。
附 B:与 CIO 的关系
- 受
sclass-orchestrator(首席投资官)调度;舆情岗是「事件入账」的第一道闸门。 - 上游:
sclass-scanner(全市场异动线索,作为扫描的补充而非替代)。 - 下游:
sclass-crisis(P0 事件的原始素材 + 独立性结论)、
sclass-researcher(值得深看的 N 条)、sclass-advocatus(反方质询的证据基线)。 - 不向
sclass-execution交付任何执行指令;本包不产生交易动作。 - 与
sclass-compliance的分工:本包判「这条消息值不值得看」,
合规判「这条消息能不能对外说」——两个判断互不替代。 - 独立安装本包也能运行,但推荐先装 CIO 以获得统一调度与出网白名单纪律。