用 Prompt 工程让大模型写出一份能看的 A 股研报

0 阅读8分钟

写在前面

很多人用 DeepSeek、千问写股票研报,输出的都是一堆"建议审慎关注""行业景气度较高"这种废话。不是模型不行,是 Prompt 太粗糙。

jimeng-2026-05-14-6866-科技感扁平插画风格,正中央三层悬浮立体卡片堆叠:顶层“ROLE 角色”科技蓝紫 ....png

我在做 多智能体 AI 股票分析 系统的过程中,光研报这一个环节就迭代了 20 多版 Prompt。这篇文章把最终可用的模板开源出来,以 2025Q1 贵州茅台为案例,演示从烂 Prompt可用 Prompt 的全过程。

完整茅台案例研报可以看这里 👉 AI 研报 Prompt

⚠️ 免责声明:本文所有研报输出片段(包括"中性偏谨慎""批价 2200 元"等表达)均为 Prompt 工程的方法论范例,仅用于演示提示词结构差异,不构成任何投资建议。涉及的财务数据为公开信息整理,市值 / 股价 / 批价等以发布当日实际行情为准。投资有风险,入市需谨慎。


一、烂 Prompt 长什么样

先看两个真实用户输入:

❌ 烂 Prompt v1

帮我分析一下贵州茅台。

输出结果:

贵州茅台是中国高端白酒龙头企业,拥有极强的品牌价值和稳定的现金流,建议长期关注。

这就是一段百度百科摘要,没有任何决策价值。

❌ 烂 Prompt v2

贵州茅台现在能买吗?给我买卖建议。

输出结果(合规模型直接拒答):

抱歉,我不能提供具体的股票买卖建议。

即使越狱成功,输出也是"建议逢低吸纳"这种不可验证的废话。

核心问题:模型没有数据、没有角色、没有输出结构,只能瞎编。


二、Prompt 三段式:角色 + 数据 + 输出规范

经过几十轮迭代,我收敛到一个固定结构:

┌─────────────────────────────┐
│  第 1 段:角色(Role)       │  → 锁定专业口吻
├─────────────────────────────┤
│  第 2 段:数据(Context)    │  → 喂真实财务 / 新闻
├─────────────────────────────┤
│  第 3 段:输出规范(Schema)│  → 强制 9 小节 + 免责声明
└─────────────────────────────┘

每一段都不能省。缺角色 → 输出像小白;缺数据 → 纯瞎编;缺输出规范 → 结构散乱。


三、第 1 段:角色设定

烂写法:

你是一个股票分析师。

好写法(茅台案例):

你是一家头部券商(国泰君安级别)A 股消费组的资深研究员,
深耕白酒行业 10 年,擅长从预收款(合同负债)、
经销商打款意愿、茅台批价三条线索判断高端白酒基本面。
你的研报要被基金经理直接看,所以只讲事实和推理,不讲套话。

关键差异

  • 锁定行业(白酒不是泛消费)
  • 锁定经验年限(10 年,会引用周期)
  • 锁定读者(基金经理,不是散户)
  • 锁定风格(只讲事实,拒绝套话)

这一段直接决定输出的"口吻",LLM 在后续 token 里会自动向这个画像靠拢。


四、第 2 段:结构化数据喂入

这是最容易被忽视的一段。没数据的 Prompt 再好也是瞎编

以茅台 2025Q1 为例,我们用代码块把数据喂给模型:

【公司基本面】
- 股票: 贵州茅台(600519.SH)
- 行业: 白酒 - 高端
- 市值: 约 1.95 万亿
- 当前股价: 1552 元(2025-04-30)

【2025Q1 财务】
- 营收: 514.4 亿(同比 +10.7%)
- 归母净利: 268.5 亿(同比 +11.6%)
- 毛利率: 92.6%(同比 +0.3pct)
- 预收款(合同负债): 95.1 亿(同比 -18.2%)⚠️

【经销商数据】
- 2025Q1 经销商打款进度: 约 28%(去年同期 35%)
- 茅台飞天批价: 2180 元(2024 年高点 3050 元,累计 -28.5%)

【近 30 日催化】
- 2025-04-20: 集团层面表态"不压货"
- 2025-04-15: 部分经销商反馈配额被砍 5%
- 2025-03-30: 茅台 1935 批价跌破 800 元

⚠️ 重点:预收款下滑 -18% 这种"反常数据"一定要加 ⚠️ 符号,LLM 会自动把它拎出来重点分析。这是一个实测非常有效的 trick。


五、第 3 段:输出规范(Schema)

不给输出结构,LLM 会随心所欲地写。我们强制 9 小节:

请按以下 9 小节输出研报,每节 150~250 字,不要空话:

1. 一句话结论(看多 / 中性 / 看空,附核心理由)
2. 公司画像(业务结构、护城河、同业比较)
3. 最新财务拆解(用【数据】里的 2025Q1 数据)
4. 核心矛盾点(把预收款 -18% 这个⚠️展开讲)
5. 行业 β(白酒库存周期、消费降级影响)
6. 估值(PE / PB / DCF 保守估算)
7. 三大风险(不要写"市场波动"这种废话)
8. 三大催化(具体事件 + 预计时间窗口)
9. 免责声明(必须包含)

禁止:
- 禁止给出具体买入价、卖出价
- 禁止预测未来股价
- 禁止使用"建议关注""审慎看好"这类无信息量的词
- 每小节必须有至少 1 个来自【数据】的具体数字

三个关键约束

  1. 字数范围:防止模型摸鱼(太短)或啰嗦(太长)
  2. 禁止项:比"请不要 XX"更有效的是列 ban 词清单
  3. 数据回引约束:强制每节引用【数据】里的数字 → 抑制幻觉

六、完整 Prompt 模板(可直接复用)

把上面三段拼起来,就是一份可以反复复用的研报 Prompt 模板:

# 角色
你是头部券商 A 股消费组资深研究员,深耕白酒行业 10 年...

# 数据(调用方按标的替换)
【公司基本面】...
【最新财务】...
【行业数据】...
【近 30 日催化】...

# 输出规范
请按 9 小节输出研报...

工程上把这段做成 Jinja2 模板,填充变量即可:

from jinja2 import Template

REPORT_PROMPT = Template("""
你是头部券商 A 股{{ sector }}组资深研究员,深耕 {{ sector }}行业 10 年,
擅长从 {{ key_indicators }} 三条线索判断{{ sector }}基本面...

【公司基本面】
- 股票: {{ stock_name }}({{ stock_code }})
- 行业: {{ sector }}
- 市值: {{ market_cap }}
- 当前股价: {{ price }}

【最新财务】
{{ financial_block }}

【近 30 日催化】
{{ news_block }}

请按 9 小节输出研报...
""")

prompt = REPORT_PROMPT.render(
    sector="白酒",
    key_indicators="预收款、经销商打款、批价",
    stock_name="贵州茅台",
    stock_code="600519.SH",
    ...
)

七、茅台案例的实际输出对比

以下表格为 Prompt 方法论范例,对比烂 / 好两种提示词的输出差异,不构成对贵州茅台或任何标的的投资建议

同样的数据,烂 Prompt vs 好 Prompt 输出摘要:

小节烂 Prompt 输出好 Prompt 输出
结论"建议关注茅台长期价值""中性偏谨慎:基本面稳健但预收款 -18% 预示渠道库存压力未释放"
财务"业绩稳健增长""Q1 营收 +10.7%、净利 +11.6%,但预收款从 116 亿降至 95 亿,意味着经销商打款意愿下降"
风险"市场波动、政策风险""1) 批价跌破 2200 元若失守 → 渠道恐慌抛售;2) 1935 批价跌破成本线 → 利润率压力;3) 消费降级下宴席场景替代率提升"

差距一目了然。好 Prompt 输出的内容,至少是一份能发到基金经理群里的研报雏形。

完整 9 小节范例见 👉 AI 研报 Prompt 茅台案例


八、踩坑总结(Prompt 工程专属)

坑 1:把数据写在 Prompt 结尾

LLM 对 Prompt 开头和结尾的 token 注意力最强,中间容易被"遗忘"。
解法:核心数据放在最后一个【】块里,紧贴输出规范。

坑 2:禁止项写成"尽量不要"

"尽量不要预测股价" → 模型照样预测。
解法:写死"禁止预测股价,违反此项输出视为无效"。

坑 3:小节标题用中文冒号 vs 英文冒号

中英混用会导致部分模型解析失败(尤其是小尺寸模型)。
解法:统一中文全角符号。

坑 4:温度设高了

研报类任务 temperature=0.3 比 0.7 稳定得多。
高温度适合创意写作,研报要可复现 → 低温度。


九、延伸:从单股研报到多智能体协作

单 Prompt 能写出一份还凑合的研报,但做不到:

  • 基本面分析师 vs 技术派 vs 新闻派多视角
  • 看多派 vs 看空派辩论
  • 风控独立审查

想要更深度的拆解,可以参考多智能体协作的实现思路:把本文的研报 Prompt 当作"基本面分析师"角色,再组合技术 / 新闻 / 情绪 / 风控等角色,形成完整 pipeline。在线方法论笔记可见 nbstockai.com(仅供学习交流)。


结语

Prompt 工程在金融垂类的核心不是"魔法咒语",而是工程化

  • 角色 → 定口吻
  • 数据 → 防幻觉
  • 规范 → 保结构

把这三件事做扎实,即使换模型(DeepSeek、千问、Claude)也能稳定输出。

如果你也在做金融 / 法律 / 医疗等强垂类 LLM 应用,欢迎评论区交流你迭代 Prompt 的心路历程。