DeepSeek-R1(2025年1月发布,基于DeepSeek-V3的强化学习优化版本)是开源推理模型,性能媲美OpenAI o1,在数学、代码和复杂推理任务上出色。采用MoE架构(总671B参数,激活约37B),支持长链式思考(Chain-of-Thought, CoT),完美适合构建股票投资分析 Agent:实时获取行情、财务数据、新闻,进行多步推理,最终输出投资建议(如买入/卖出/持有 + 风险评估)。
此项目适用于A股/美股个人量化分析,支持私有化部署或API调用。Agent 可处理复杂查询,如“分析贵州茅台基本面和技术面,给出投资建议”。
1. 为什么选择 DeepSeek-R1 构建投资 Agent?
- 推理链强:自然生成长CoT,自验证、反思,适合多步金融分析(估值模型计算、风险评估、新闻情绪整合)。
- 开源商用:MIT许可,支持本地部署(Ollama/vLLM)或API(deepseek-reasoner,低成本:输入$0.55/百万tokens)。
- 优势对比:比V3更擅长结构化推理;社区已有多个股票Agent项目验证(如LangChain集成Yahoo Finance新闻分析)。
- 企业/个人适用:结合RAG(财务报告)减少幻觉;工具调用实现实时数据。
| 组件 | 作用 | 推荐实现 |
|---|---|---|
| LLM (DeepSeek-R1) | 核心推理 + 生成建议 | API 或 Ollama本地distill版 |
| 实时数据工具 | 获取行情/财务/新闻 | yfinance (美股) / Ashare (A股) |
| Agent框架 | 工具调用 + 多步推理 | LangChain / CrewAI |
| UI/部署 | 可视化交互 | Streamlit / Gradio |
2. 系统架构设计
Agent流程(ReAct式:Reason + Act循环):
- 用户查询:如“分析AAPL股票,考虑最新财报和新闻,给出建议”。
- 工具调用:获取实时价格、历史K线、财务指标、新闻。
- 推理链:DeepSeek-R1 多步思考(计算PE/PB、DCF估值、情绪分析、技术指标如MACD/RSI)。
- 输出:结构化报告(当前价、估值、风险、建议),带CoT解释。
- 高级:多Agent协作(数据Agent + 分析Agent + 风险Agent)。
支持A股(实时免费接口多)或美股(yfinance稳定)。
3. 落地实施步骤与完整代码示例
推荐框架:LangChain(工具集成简单) + Streamlit(Web UI)。
- 依赖安装:
Bash
pip install langchain langchain-community langchain-openai streamlit yfinance pandas plotly
# A股额外:pip install ashare # 或 adata
# 本地R1:ollama pull deepseek-r1:7b # distill版低资源
- 完整项目代码(Streamlit App,支持A股/美股切换):
Python
import streamlit as st
from langchain import hub
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import tool
from langchain_openai import ChatOpenAI # DeepSeek兼容OpenAI格式
import yfinance as yf
import pandas as pd
# A股用Ashare示例(需pip install ashare)
# from ashare import get_price
# DeepSeek API设置(或本地Ollama)
llm = ChatOpenAI(
base_url="https://api.deepseek.com",
api_key="your_deepseek_key",
model="deepseek-reasoner" # R1模型
)
# 工具1: 获取实时股票数据 (美股示例,支持AAPL等)
@tool
def get_stock_data(ticker: str, period: str = "1y"):
"""获取股票历史和实时数据,返回DataFrame摘要"""
data = yf.download(ticker, period=period)
latest = data.iloc[-1]
info = yf.Ticker(ticker).info
return f"最新价: {latest['Close']}, 市值: {info.get('marketCap')}, PE: {info.get('trailingPE')}\n历史数据摘要: {data.tail(5).to_string()}"
# 工具2: 获取财务指标
@tool
def get_financials(ticker: str):
"""获取公司财务报告关键指标"""
ticker_obj = yf.Ticker(ticker)
return ticker_obj.financials.to_string()[:2000] # 截断避免超token
# 工具3: 简单新闻搜索 (用yfinance新闻)
@tool
def get_news(ticker: str):
"""获取最新股票新闻"""
ticker_obj = yf.Ticker(ticker)
news = ticker_obj.news[:5]
return "\n".join([n['title'] + ": " + n['link'] for n in news])
# A股工具示例(替换以上)
# @tool
# def get_ashare_data(code: str): # 如 'sh600519' 贵州茅台
# df = get_price(code, frequency='1d', count=365)
# return df.tail(10).to_string()
tools = [get_stock_data, get_financials, get_news]
# ReAct Agent提示(强调推理链)
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # verbose显示CoT
# Streamlit UI
st.title("DeepSeek-R1 股票投资分析 Agent")
ticker = st.text_input("输入股票代码(如AAPL或sh600519)")
query = st.text_area("查询", "全面分析这只股票的基本面、技术面和新闻情绪,给出投资建议(买入/卖出/持有)和理由。")
if st.button("分析"):
full_query = f"股票: {ticker}\n查询: {query}\n使用工具获取实时数据,进行步步推理。"
with st.spinner("Agent思考中..."):
result = agent_executor.invoke({"input": full_query})
st.markdown("### 分析报告")
st.write(result["output"])
# 显示CoT(从verbose日志)
st.markdown("### 推理链细节")
st.code(st.session_state.get('agent_log', '无详细日志'))
# 捕获verbose日志(简化)
# 在实际中用callback捕获
- 运行:
Bash
streamlit run app.py
- A股适配:替换工具为Ashare/adata(免费实时,支持分钟线)。
4. 项目优化与注意事项
- 性能:本地用distill版(1.5B-70B)低显存运行;API支持streaming实时响应。
- 准确性:添加Rerank或多轮验证减少幻觉;整合RAG(Milvus存财报)。
- 风险:投资建议仅参考,非专业顾问;数据延迟视API。
- 扩展:加Plotly图表可视化;CrewAI多Agent(估值Agent + 新闻Agent)。
- 成本:DeepSeek API低价;全开源零成本。