第 3 课 · 新闻情绪打分器

把非结构化的新闻文本,变成结构化的分数——Agent 辅助决策的第一步

预计用时:35 分钟 上一课:第 2 课 · 数据底座

这节课你将得到什么

一个能跑的"新闻情绪打分器"雏形:输入茅台的最新新闻,输出每条新闻的情绪分(-1 ~ +1)相关度(0 ~ 1)一句可审计的理由,最后聚合成一个情绪仪表。这就是 TradingAgents 论文里"情绪分析师(Sentiment Analyst)"角色的最小实现——你的 Agent 团队的第一个成员。

更重要的心智模型是:LLM 在量化里的核心价值,不是预测股价,而是把文本世界(新闻、公告、研报、政策)翻译成你程序能处理的数字。第 2 课你处理了结构化数据(行情表),这节课处理非结构化数据(文本)。

一、文本数据从哪来

脚本 scripts/news_sentiment.pyak.stock_news_em(symbol="600519") 拉取东财的个股新闻(标题+摘要+时间)。接口失败时自动退回内置样本——第 2 课的教训:免费接口一定会挂,任何数据入口都要有备胎。政策面与公告文本(巨潮、交易所监管动态)在后续课程展开,本课先用新闻把流程跑通。

二、Prompt 设计三原则(本课的知识核心)

看脚本里的 SYSTEM_PROMPT,它只有几行,但每行都对应一条工程原则:

你是一名A股情绪分析师。对用户给出的新闻,判断它对指定股票的影响。
只输出JSON,不要输出任何其他文字:
{"score": <-1.0到1.0的小数,-1极利空,0中性,1极利好>,
 "label": <"利好"|"利空"|"中性">,
 "relevance": <0.0到1.0,新闻与该股的关联程度>,
 "reason": <不超过30字的判断依据>}
原则对应设计为什么
1. 结构化输出强制"只输出 JSON"程序要消费这个结果去聚合、存储、画图;一段散文无法进流水线
2. 标尺定义明确 -1/0/+1 的含义,并把"情绪"与"相关度"拆成两个字段没有标尺,模型的分数每次漂移;拆分相关度,防止"提到茅台名字的无关新闻"污染平均分
3. 要求理由reason 字段,≤30 字你不敢把真金白银交给一个只说"+0.7"的黑盒;理由让每条打分可人工审计
第四条隐含原则:永远校验 LLM 的输出

脚本里 json.loads() 失败会直接跳过该条并警告——LLM 偶尔会返回带 markdown 围栏或格式残缺的"JSON"。工程纪律:LLM 的输出是不可信输入,必须像对待用户表单一样校验它。

三、动手:跑起来(无需 API Key)

演示模式内置了真实抓取的新闻和预计算打分,先把流程看懂:

cd "$HOME/AI Project/Quant Learning"
source .venv/bin/activate
python scripts/news_sentiment.py

你会看到(我已在你的环境实测通过):

  [利好] +0.9 (相关度1.0)  飞天茅台 官宣涨价!+100元
      理由:核心产品提价直接增厚利润,公司官方公告
  [中性] +0.0 (相关度0.1)  11只个股大宗交易超5000万元
      理由:主角是兆易创新,与茅台几乎无关
  ……
==================================================
情绪仪表(仅统计相关度≥0.5的 4 条)
  加权情绪分:+0.73   利好 4 条 / 利空 0 条
==================================================

注意第二条:标题里根本没有"茅台"两个字(它出现在正文统计表里),相关性字段把它挡在了聚合之外。这就是原则 2 的实战价值。

四、接入真实模型(可选,课后完成)

演示模式用的是预计算结果;真实模式需要一个 LLM API Key。推荐 DeepSeek 开放平台:注册、充值 10 元(够你打几十万条新闻)、创建 API Key,然后:

export LLM_API_KEY="sk-你的key"
python scripts/news_sentiment.py --live

脚本用 OpenAI 兼容协议(requests 直连),换别家模型只需改 LLM_BASE_URLLLM_MODEL 两个环境变量。真实模式我已写好但尚未实测(你机器上还没有 Key)——拿到 Key 后跑一次,有报错直接贴给我。

五、批判性思考:+0.73 为什么不是买入信号

这是本课最重要的一节,请慢读。

所以这个组件的正确定位是 TradingAgents 里的那个角色:信息整理员——它把 100 条新闻压缩成"4 条相关、加权 +0.73、理由在此",让你 3 分钟读完原本 1 小时的信息,并且每条结论都能点开理由审计。决策权始终在你手里。到第 5 课,我们会给它加上"与价格行为对照"的校验机制。

六、你当一回 LLM(互动)

两条真实新闻,你先打分,再看"模型"的答案。注意:这类题没有唯一正确答案,重点是比较你的推理和模型的理由。

自测

延伸阅读

下一课预告

第 4 课 · 策略骨架与人生第一回测:用第 2 课存的茅台数据写一个双均线策略,亲手踩一次"回测幻觉",并学会正确建模 T+1 与交易成本。

有任何不清楚的地方(比如 JSON 解析、环境变量、Prompt 写法),直接问我——我是你的老师。