# bourse
**Repository Path**: stonelab/bourse
## Basic Information
- **Project Name**: bourse
- **Description**: https://github.com/crisweb1994/bourse.git
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-25
- **Last Updated**: 2026-06-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Bourse
**让 AI 像顶级分析师一样研究股票 —— 而不是像 ChatGPT 那样编造数字**
一个开源的 AI 股票研究平台。9 个维度并行分析,6 位投资大师视角,实时流式输出。
支持 **A 股 / 美股 / 港股**,自带 SEC EDGAR / Yahoo Finance / 东方财富 / akshare 数据源。
[](#license)
[](https://nextjs.org/)
[](https://nestjs.com/)
[](https://www.typescriptlang.org/)
[](https://tailwindcss.com/)
[](#贡献)
[功能](#为什么是-bourse) ·
[快速开始](#快速开始) ·
[架构](#架构一图看懂) ·
[路线图](#路线图)
---
## 为什么是 Bourse
> 市面上大多数"AI 股票助手"是把 ChatGPT 套层皮:让模型自己算 PE、自己拍 RSI、自己猜营收。
> 数字幻觉随处可见,没法当严肃工具用。
Bourse 做了一个朴素但关键的架构选择:
| | 常见做法 | Bourse |
|---|---|---|
| 财务比率(PE / ROE / 毛利率…) | LLM 自己算 | **TypeScript 确定性计算**,结果注入 prompt |
| 技术指标(RSI / MACD / 布林带) | LLM 自己拍 | **TypeScript 精确计算**,LLM 只负责解读 |
| 同行对比 / 历史百分位 | LLM 一顿编 | **代码算出中位数和分位**,LLM 写结论 |
| 数据来源 | 全靠 web search | **真实 connector**:SEC EDGAR / Yahoo / 东财 / akshare |
| 引用链 | 没有或瞎编 | **每个 citation 强制带 `retrievedAt`** |
**一句话:代码负责"事实",LLM 只负责"判断"。** 这意味着分析的客观部分永远是准确、可复现、可审计的。
---
## 核心能力
### 9 维度并行分析
一次"综合分析",并行跑 9 个独立维度,互不阻塞,谁先好谁先显示:
| 维度 | 覆盖范围 |
|---|---|
| **基本面** | 商业模式 / 财务趋势 / 盈利质量 |
| **估值** | DCF / 反向 DCF / 相对估值 |
| **行业竞争** | 行业格局 / 护城河 / 竞争地位 |
| **风险** | 公司风险 / 宏观风险 / 监管合规 |
| **技术面** | 趋势 / 关键价位 / SMA·RSI·MACD·Bollinger |
| **情绪** | 分析师共识 / 机构动向 / 内部交易 |
| **情景** | 牛 / 基 / 熊三情景 + 概率 + 催化剂 |
| **组合** | 风险/期限/风格匹配 + 仓位建议 |
| **治理** | 股权结构 / 管理层激励 / ROIC 趋势 |
### 6 位投资大师视角
可选 persona 让分析带上特定流派的判断框架:
**巴菲特**(价值 + 护城河) · **芒格**(多元思维模型) · **伯里**(逆向 + 危机嗅觉)
**伍德**(颠覆式增长) · **达摩达兰**(学院派估值) · **格雷厄姆**(深度价值)
### 多市场原生支持
| 市场 | 数据源 | 特色能力 |
|---|---|---|
| **A 股** | 东方财富 / akshare 镜像 | 北向资金 / 龙虎榜 / 解禁 |
| **美股** | Yahoo Finance / SEC EDGAR XBRL | 10-K / 10-Q / Insider Trading |
| **港股** | Yahoo Finance | 通用财务 + 技术指标 |
### 实时 SSE 流式输出
不是等几分钟最后给你一段,而是边算边推:
```
section_start → report_chunk × N → report_complete → structured_data
→ citation × N → section_complete → ... → done
```
支持断线续传(`?afterSeq=N`)+ 15 秒心跳 + 部分维度失败时其余维度照常完成。
### 自由切换 AI Provider
- 内置 Anthropic(Claude)+ OpenAI / OpenAI-compatible(DeepSeek / Kimi / 智谱 / 通义 / 火山方舟…)
- 每个用户可独立配置自己的 API Key,平台不强绑供应商
- 三层模型路由(Primary 主分析 / Utility 结构化抽取)
### 还有
- **GitHub OAuth + JWT + CSRF** 全套就位
- **私部署模式** —— `AUTH_REQUIRED=false` 一键关闭登录,内网用
- **一键 Docker 部署** —— `docker compose up` 完事
---
## 快速开始
### ⚡ 2 分钟极速体验(推荐 · 无需 GitHub OAuth)
```bash
git clone https://github.com/crisweb1994/bourse.git && cd bourse
cp .env.example .env
# 编辑 .env:粘贴一个 AI key(Anthropic 或 OpenAI/OpenAI 兼容任选其一)
docker compose --profile app up -d --build
```
打开 `http://localhost:3000`,搜索 `AAPL` 或 `贵州茅台`,直接开跑。
默认 `AUTH_REQUIRED=false` —— 单用户模式,免登录、免 OAuth、免数据库手动初始化。
### 本地开发模式
```bash
docker compose up -d # 仅起 Postgres
pnpm install && cp .env.example .env # 粘贴 AI key
pnpm -F @bourse/api db:generate && db:push
pnpm dev # api :3001 + web :3000
```
### 多用户 / 生产部署
需要 GitHub OAuth 登录、跨子域 cookie、CORS 白名单等生产配置?
参考 [`.env.production.example`](.env.production.example) 里的完整环境变量说明。
---
## 架构一图看懂
```
┌─────────────────────────────────────────────┐
│ apps/web (Next.js 15) │
│ Editorial Refined UI · SSE 渲染 │
└────────────────────┬────────────────────────┘
│ JWT cookie + CSRF
┌────────────────────▼────────────────────────┐
│ apps/api (NestJS · :3001) │
│ Auth · Analysis 编排 · SSE · Prisma │
└────────────────────┬────────────────────────┘
│
┌────────────────────▼────────────────────────┐
│ packages/analysis (核心包 · FFI) │
│ │
│ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Snapshot │→ │ Compute │ │
│ │ fetch ×1 │ │ Ratios / 技术指标 │ │
│ │ 9 维共享 │ │ 红旗 / 同行 / 百分位│ │
│ └──────┬──────┘ └──────────┬──────────┘ │
│ │ 注入 prompt │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────┐ │
│ │ Dimensions × 9 (LLM 解读) │ │
│ └──────────────────┬───────────────┘ │
│ │ SSE │
│ ┌──────────────────▼───────────────┐ │
│ │ Personas (Buffett / Burry…) │ │
│ └──────────────────────────────────┘ │
└──────────────────────────────────────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
Yahoo Finance 东方财富 / akshare SEC EDGAR (XBRL)
```
**6 条硬不变式**(违反就是 bug):
1. **代码计算,LLM 判断** —— 数字一律由 TS 算出来注入 prompt
2. **fetch 一次** —— 9 维共享 snapshot,不重复打外部接口
3. **Snapshot 是值** —— 中间态不落库,只持久化用户可见结果
4. **Schema-first** —— 所有 public 类型先写 zod,TS 类型 `z.infer` 派生
5. **Provenance 必填** —— citation 强制带 `retrievedAt`
6. **Auth + CSRF** —— mutating endpoint 必须带 `x-csrf-token`
---
## 技术栈
| 层 | 技术 |
|---|---|
| **Frontend** | Next.js 15 (App Router) · React 19 · Tailwind CSS v4 · lucide-react · react-markdown · `@microsoft/fetch-event-source` |
| **Backend** | NestJS · Passport (GitHub OAuth) · JWT httpOnly · Prisma ORM · class-validator |
| **Database** | PostgreSQL 16 (Docker · port 5434) |
| **AI** | Anthropic SDK · OpenAI SDK · OpenAI-compatible 任意 provider |
| **Connectors** | Yahoo Finance · SEC EDGAR XBRL · 东方财富 · akshare 镜像 · Tavily |
| **Monorepo** | Turborepo · pnpm workspaces |
---
## 项目结构
```
stock-suggest/
├── apps/
│ ├── api/ NestJS backend (:3001) · 6 Prisma models
│ └── web/ Next.js 15 frontend (:3000)
└── packages/
├── analysis/ 核心包:connectors + compute + dimensions
│ + personas + workflows + snapshot + SSE 契约
└── shared-types/ 跨包枚举与类型
```
---
## 路线图
- [x] 9 维度并行分析 + COMPREHENSIVE workflow
- [x] 6 位投资大师 persona
- [x] A 股 / 美股 / 港股原生支持
- [x] SSE 流式 + 断线续传 + 部分失败容忍
- [x] 用户级 AI provider 自配
- [x] 用户级 Web Search adapter(Tavily / SearXNG)
- [ ] 多语言 UI(英文 / 日文)
- [ ] 移动端适配
- [ ] 自托管 LLM 评估(eval harness 已就绪,待 UI)
- [ ] 自定义维度 / 自定义 persona 编辑器
---
## 贡献
欢迎 issue / PR / RFC。提交前请确认改动不违反上文「6 条硬不变式」——
其中「代码计算,LLM 判断」与「Provenance 必填」是本项目的可信度底线,任何放宽需先开 issue 讨论。
特别欢迎的方向:
- 新 connector(券商 API / 财报数据源 / 另类数据)
- 新 persona(你心目中的投资大师)
- compute 层新指标(你觉得"代码该算却没算"的东西)
- prompt 优化 + eval 用例
---
## License
MIT.
---
**如果这个项目对你有帮助,欢迎 Star 支持一下。**
**你的 Star 是开源继续投入的最大动力。**