LLM 辅助研究:让 DeepSeek 批量读公告
给「超级研究实习生」立规矩:强制引用原文,只当参考不当信号
q0.3 讲过 AI 的真本事:读得又快又广;q0.6 你亲手摸过它的边界:会编瞎话、不能预测。今天,把这位「超级研究实习生」正式请进你的量化工作流——批量、自动、按固定格式地读公告。
但请进门之前,先立三条规矩:只准依据原文、必须引用原文、输出只算研究参考。没有规矩的 AI 是幻觉制造机,立了规矩的 AI 才是研究助理。这节课的核心不是调 API(那只有几行),是这三条缰绳怎么套。
让 LLM 读公告,像让实习生帮你剪报:你要的不是他的「个人感想」,而是一份格式统一的摘要卡——说了什么、偏正面还是负面、原文在哪一句(方便你复查)。
「必须标注原文出处」这条规矩,妙处在于:实习生就没法瞎编了——编出来的话,在原文里找不到,一查一个准。这就是治幻觉最朴素也最有效的缰绳。
一、几行代码,批量开读
只用 Python 标准库(连 requests 都不用装)。API Key 用环境变量传入(永远别写死在代码里,见坑二):
import os, json, urllib.request
KEY = os.environ["DEEPSEEK_API_KEY"] # 运行前:export DEEPSEEK_API_KEY=你的key
# 练习素材:两条虚构公告(与 q0.6 同思路,零真实标的)
announcements = [
"【星澜科技】公司预计2026年上半年归母净利润同比下降40%-50%,主要因主营产品价格下行及计提存货减值;公司同时宣布拟回购不超过1亿元股份。",
"【云帆物流】公司中标某省智慧物流项目,合同金额约12亿元,占公司2025年营收的35%;项目建设周期3年,毛利率预计低于公司现有业务平均水平。",
]
def read_announcement(text):
prompt = (
"你是量化研究助理。请只依据下面这条公告原文完成:"
"1)一句话摘要;2)情绪标签(利好/利空/中性/混合);"
"3)必须原文引用支撑你判断的关键句(用「」括起);4)一个值得人工核实的风险点。"
"只依据原文,禁止使用任何外部信息。\n公告:" + text
)
body = json.dumps({
"model": "deepseek-v4-flash", # 轻量便宜,批量任务首选
"max_tokens": 300, # 花费上限,顺手就设
"thinking": {"type": "disabled"}, # 轻任务关思考:更快更省(DeepSeek课 d0.3 讲过)
"messages": [{"role": "user", "content": prompt}],
}).encode()
req = urllib.request.Request(
"https://api.deepseek.com/chat/completions", data=body,
headers={"Content-Type": "application/json", "Authorization": "Bearer " + KEY})
with urllib.request.urlopen(req, timeout=60) as r:
return json.loads(r.read())["choices"][0]["message"]["content"].strip()
for a in announcements:
print("=" * 30)
print(read_announcement(a))
二、实测输出:比你想的更细腻
2026-07 实测(节选),两条公告它都判了「混合」:
星澜科技:情绪标签「混合」——利空「公司预计2026年上半年归母净利润同比下降40%-50%」+ 利好「宣布拟回购不超过1亿元股份」;风险点:「计提存货减值」规模未披露。
云帆物流:情绪标签「混合」——利好「合同金额约12亿元,占2025年营收的35%」+ 利空「毛利率预计低于公司现有业务平均水平」;风险点:毛利率仅称「低于平均」,未给具体数字。
注意两个细节:① 真实世界的公告大多是「利好利空混杂」,不是非黑即白——AI 能拆开揉碎,比「一句话定性」的人靠谱;② 每个判断都钉着原文引用,你可以秒查。这就是研究助理该有的样子。
三、给引用上锁:机器自动查岗
规矩三条,第二条(必须引用)还能自动验收——把它输出的引用句抓出来,查是否真在原文里:
import re
def verify_quotes(output, source):
quotes = re.findall(r"「(.+?)」", output)
return [(q, q in source) for q in quotes if len(q) > 8] # 太短的引用不做数
# 每条 (引用句, True/False)——False 就是它编的,人工复核
编出来的引用,在原文里找不到,一查一个准。这个「AI 干活 + 代码查岗」的组合拳,是所有 LLM 进工作流的标准姿势——比「信不信 AI」的争论有用一万倍。
AI 说「利好」,你就买?三层反对意见:① q0.3 讲过,语言情绪 ≠ 市场反应——利好出尽照样跌,市场可能早就定价了;② 情绪标签没有经过任何统计检验——想把它变成因子,请回 q1.5 的流程:全量统计、q1.9 的样本外,一步不能少;③ 幻觉从未清零,引用校验只拦住一部分。
它的正确位置:帮你从 500 条公告里挑出 20 条值得人读的——筛选器,不是发令枪。
① Key 只放环境变量或密钥管理,永远不写进代码——尤其别提交进 git(公开仓库里的 key,几分钟内就会被扫走盗刷);② 设消费上限:代码里 max_tokens 限单次,平台后台设月度预算,双保险;③ Key 一旦疑似泄露立刻作废重开。
另外批量跑之前,先拿 2 条测试(就像本节),确认格式对了再放量——500 条格式错误的输出,浪费的钱和时间都是你的。
📌 免责:本课为技术科普,示例公告均为虚构,AI 输出仅为研究参考,不构成任何投资建议或交易信号;使用 API 产生的费用与风险请自行评估;投资有风险,盈亏自负。
这一节你把 AI 正式编入了工作流,并学会了给它套上三条缰绳:只依据原文、强制引用(还能代码自动查岗)、输出只当筛选器。你现在拥有的是一条「AI 初筛 → 代码验收 → 人工复核 → 统计检验」的完整流水线——这比任何「AI 炒股神器」都朴素,也都可靠。
至此,Q1 的全部技能点已点亮:数据、体检、图、指标、基本面、规则书、回测、防坑、绩效、AI 助研。
下一节,Q1 毕业礼:30 天模拟盘。不碰一分真钱,把整套流程完整跑一遍——你会拿到一张模拟记录表、一套周复盘模板、和一份「毕业自查清单」。还记得 q0.9 挠着头的老王吗?学完下一节,你就能回答他那个问题了:「道理我都懂了,到底该干嘛?」
🔎 来源与核验· 3 条,点开核对
