基于 DeepSeek API 的多维度股票分析系统,通过多头、空头、裁判三个角色的对话式分析,提供全面的投资参考。
- 三角色分析 - 多头、空头、裁判三方视角,全面分析
- 用户认证系统 - 支持用户注册、登录,保障数据安全
- 积分体系 - 基于积分的分析次数管理,1 次分析消耗 1 积分
- 历史记录 - 前端本地保存分析历史,方便回溯查看
- 实时流式输出 - Server-Sent Events 技术,实时显示分析过程
- 实时股票数据 - 集成东方财富 API,获取实时行情、K线和新闻
- 字节跳动风格 UI - 简洁现代的界面设计
- Markdown 渲染 - 支持格式化内容展示
- 随时终止 - 可随时停止分析过程
- 智能搜索 - 支持股票代码和名称搜索
- Node.js >= 20.0.0
- TypeScript 5.7
- Express 5.2
- MySQL 2
- DeepSeek API
- 东方财富 API
npm install复制环境变量模板:
cp .env.example .env编辑 .env 文件,填入配置信息:
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
PORT=3000
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=ai-stock
DB_PASSWORD=your_password
DB_NAME=ai-stock获取 API Key:访问 DeepSeek 平台 注册并创建
创建 MySQL 数据库:
CREATE DATABASE ai_stock CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;创建用户表:
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(255) NOT NULL COMMENT '密码(SHA256)',
`credits` int NOT NULL DEFAULT 10 COMMENT '积分',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;开发模式:
npm run dev生产模式:
npm run build
npm start- 浏览器访问:http://localhost:3000
- 注册账号或登录(注册默认获得 10 积分)
- 输入股票代码(如
sh600360)或股票名称(如华鲁恒升) - 点击"分析"按钮开始分析(消耗 1 积分)
- 点击右上角"历史记录",查看本地保存的分析记录
搜索支持:
- 股票代码:如
sh600360、sz000001 - 股票名称:如
华鲁恒升、贵州茅台
ai-stock/
├── src/
│ ├── api/
│ │ ├── request.ts # HTTP 请求封装
│ │ └── eastmoneyApi.ts # 东方财富 API 封装
│ ├── config/
│ │ └── prompts.ts # 三角色提示词配置
│ ├── db/
│ │ └── mysql.ts # MySQL 数据库连接池
│ ├── services/
│ │ ├── auth.ts # 用户认证服务
│ │ ├── deepseek.ts # DeepSeek API 客户端
│ │ ├── stockData.ts # 股票数据服务
│ │ └── analyzer.ts # 分析流程控制
│ ├── routes/
│ │ └── index.ts # API 路由
│ └── index.ts # 入口文件
├── public/
│ ├── index.html # 前端页面
│ └── assets/
│ ├── css/
│ │ └── style.css # 样式文件
│ └── js/
│ └── marked.min.js # Markdown 渲染库
├── dist/ # 编译输出目录
├── .env # 环境变量(需创建)
├── .env.example # 环境变量模板
├── tsconfig.json # TypeScript 配置
└── package.json # 项目配置
-
request.ts - 统一的 HTTP 请求客户端
- 提供 GET 和 getText 方法
- 自动超时控制(默认 10 秒)
- 统一错误处理
- 自动设置 User-Agent
-
eastmoneyApi.ts - 东方财富 API 封装
searchStock()- 股票搜索,支持代码和名称getQuote()- 获取实时行情数据getKLine()- 获取 K 线历史数据getNews()- 获取股票相关新闻
- mysql.ts - MySQL 连接池管理
- 配置连接池参数
- 提供数据库连接复用
- 统一数据库访问接口
-
auth.ts - 用户认证服务
- 用户注册与登录
- Token 生成与验证
- 积分管理(扣除、查询)
- Session 管理
-
stockData.ts - 股票数据服务
- 整合行情、K线、新闻数据
- 数据格式化和解析
- 提供统一的数据接口
-
analyzer.ts - 分析流程控制
- 协调三角色分析流程
- 管理对话历史
- 流式输出控制
-
deepseek.ts - DeepSeek API 客户端
- 流式对话接口
- 自动重试机制
- 错误处理
用户注册
请求体:
{
"username": "user123",
"password": "password123"
}响应:
{
"message": "注册成功"
}用户登录
请求体:
{
"username": "user123",
"password": "password123"
}响应:
{
"token": "xxxxxx",
"message": "登录成功"
}用户登出(需要认证)
请求头:
Authorization: Bearer <token>
响应:
{
"message": "登出成功"
}获取用户信息(需要认证)
请求头:
Authorization: Bearer <token>
响应:
{
"username": "user123",
"credits": 10
}开始股票分析,返回 Server-Sent Events 流(需要认证,消耗 1 积分)
请求头:
Authorization: Bearer <token>
请求体:
{
"query": "sh600360"
}或
{
"query": "华鲁恒升"
}响应事件类型:
start- 分析开始(包含 sessionId 和剩余积分)content- 内容片段done- 分析完成terminated- 已终止error- 错误信息
终止正在进行的分析(需要认证)
请求头:
Authorization: Bearer <token>
请求体:
{
"sessionId": "session_id"
}响应:
{
"success": true
}系统首先通过东方财富 API 获取以下数据:
- 实时行情 - 当前价格、涨跌幅、成交量等
- 历史 K 线 - 最近 30 天的价格走势数据
- 相关新闻 - 最新的股票相关新闻资讯
基于获取的数据,系统采用三轮对话式分析:
- 第一轮 - 多头发表看涨观点,空头发表看跌观点
- 第二轮 - 空头反驳多头观点,多头反驳空头观点
- 第三轮 - 裁判综合双方观点,给出客观分析和操作建议
每个角色都有严格的输出格式和分析维度,确保分析的全面性和专业性。
本项目采用以下架构设计:
- API 层(src/api/)- 负责外部数据获取
- 数据库层(src/db/)- 负责数据持久化
- 服务层(src/services/)- 负责业务逻辑处理
- 路由层(src/routes/)- 负责请求处理和协调
- 统一的 HTTP 客户端(
src/api/request.ts) - 自动超时和错误处理
- 可复用的请求配置
- 将所有东方财富 API 调用封装到
src/api/eastmoneyApi.ts - 清晰的接口定义
- 类型安全的返回值
- Token-based 认证机制
- Session 管理
- 积分体系
- 中间件保护路由
- 移除未使用的代码和变量
- 简化复杂逻辑
- 统一错误处理
- 修复构建脚本为跨平台命令
- 支持 macOS/Linux/Windows
- 不要将
.env文件提交到 Git 仓库 - 不要分享你的 API Key 和数据库密码
- 定期检查 DeepSeek API 使用情况和费用
- 合理设置用户初始积分
- 根据需要调整积分消耗策略
- 分析结果仅供参考,不构成投资建议
- 投资有风险,决策需谨慎
- 请结合多方信息做出投资判断
MIT