A-share single-stock deep-dive multi-agent research workstation with three-tier trust isolation, FTS5 memory retrieval, dream loop introspection, and BYOM extensibility.
Project description
觀瀾 · Financial Analyst
One command. 24 AI agents. A 股深度研究.
Turn a 6-digit stock code into a 16-agent deep-dive report — fundamentals · technicals · whale signals · quant scores · bull/bear/risk debate — in ~10 minutes.
English · 中文
What is it · Features · Quick Start · Agents · Memory · Datasets · LLM
pip install financial-analyst==1.0.3 # 1 minute
financial-analyst # zero-config: wizard + backend + web UI + browser auto-opens
That's it. The first run: detects your config → runs the interactive wizard (LLM key + HF dataset pick) → starts the buddy backend on :9999 → starts the web UI on :5173 → opens your browser. Ctrl+C stops everything.
Power users: financial-analyst --tui for the terminal UI, or pick specific commands:
fa init # wizard only (LLM key + data pack)
fa report SH600519 # one-shot deep-dive (~10 min, no UI)
fa launch # explicit one-command launcher
💡 What Is It
A-share research workstation that thinks like a buy-side analyst.
Hand it a stock code; 14 specialized AI sub-agents run in 4 trust tiers:
Tier 1 (data, parallel) → Tier 2 (analysts, parallel) → Tier 3 (decision, serial) → Tier 4 (post-mortem)
───────────────────── ───────────────────────── ─────────────────────── ─────────────
quote · factors fundamental bull-advocate ─┐
model · news technical bear-advocate ─┤───→ writer introspector
F10 · overseas whale-sentiment risk-officer ┘
sector-rotation quant (single writer)
Out comes a markdown research report — rated, attributed, falsifiable. The report-writer is the only agent allowed to write report files. Untrusted news/F10 sources are JSON-schema-locked at Tier-1 (no prompt injection). Memory is markdown — edit a .md, next report uses it. FTS5 retrieval cuts prompt cost ~60%.
✨ Key Features
🎯 16-agent stock deep-diveHand it fa report SH600519
|
🌅 Morning brief (5-agent v2)Pre-market scan: overnight US + HK + VIX, A-share 异动, catalyst extraction, sector rotation, AI-written summary. fa brief
|
🌍 Overseas radar (v1.9.7)International transmission analysis: SPX/NDX/HSI/VIX/USDCNY → A-share follow-through judgment + actionable signals for tomorrow. fa overseas-radar
|
📈 Monthly mainline radar5-state industry-chain classifier (mainline / initiation / revival / decay / cold). Catches fa mainline
|
🧠 Pluggable memory24 per-agent memory dirs as markdown. Edit |
💤 Dream loop (self-improving)After each report, fa dream --since 30
|
🔌 4-provider LLM routing
financial-analyst # /model deepseek-reasoner
|
🧬 BYOM extensibilityDrop a See examples/ for FM cluster / CSV loader / TDX F10 patterns. |
⚡ Quick Start
A. PyPI (recommended, 1 minute)
pip install financial-analyst==1.0.3
cp .env.example .env # add DASHSCOPE_API_KEY (qwen default)
fa init # interactive wizard — pulls HF dataset
fa report SH600519 # first deep-dive
B. Source (development)
git clone https://github.com/jesson-hh/financial-analyst.git
cd financial-analyst
pip install -e ".[dev]"
pytest tests/ # 712 tests, ~8 min
🤖 The 25 Agents
| Tier | Agents | Role |
|---|---|---|
| Tier 1 (data) | quote-fetcher · factor-computer · model-predictor · news-reader · f10-reader · overseas-market-scanner · sector-rotation-analyzer | Parallel fetch + factor + read untrusted (JSON-schema-locked) |
| Tier 2 (analysts) | fundamental · technical · whale · quant | Per-perspective structured analysis |
| Tier 3 (decision) | bull-advocate · bear-advocate · risk-officer · report-writer | Debate then synthesize (only writer can persist) |
| Tier 4 (audit) | introspector | Post-mortem self-audit + memory proposals |
| Market | market-scanner · morning-brief-writer · catalyst-extractor (v1.9.7) · global-news-aggregator (v1.9.7) · macro-impact-analyzer (v1.9.7) · mainline-classifier · mainline-writer · intraday-reviewer | Cross-stock and macro pipelines |
| Meta | ask | Free-form Q&A via tool chain (31 buddy tools) |
Full DAG: docs/architecture/14_agents.md
🧠 Pluggable Memory
memories/
├── README.md # ← directory index, must-read
├── risk-officer/
│ ├── hard_rules.md # ← edit this → next report uses it
│ └── pitfalls.md # FTS5-retrieved (large file)
├── technical-analyst/
│ └── factor_insights.md
└── _shared/
└── playbook_V1_V10.md # cross-agent shared
Edit a markdown → next agent run picks it up. No restart, no rebuild.
# Persist a lesson via slash command in TUI:
> /lesson Mega-cap PE>50 + 60d return>30% usually means liquidity-game stock
# Or just write the file:
vim memories/risk-officer/hard_rules.md
See memories/README.md for the 24 dir index and design principles.
📊 Datasets
Three preset bundles on HuggingFace, fa init auto-pulls:
| Tier | Size | Stocks | 5min | Financials | F10 text | TDX zip | Repo |
|---|---|---|---|---|---|---|---|
| demo | ~155 MB | 300 (CSI300) | ❌ | ❌ | ❌ | ❌ | data-demo |
| lite | ~3 GB | 800 (CSI800) | ✅ ~7d | ✅ 735 MB | ✅ 1323 codes | ❌ | data-lite |
| full | ~14 GB | 5500+ (all A) | ✅ | ✅ | ✅ | ✅ 257 MB | data-full |
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="yifishbossman/financial-analyst-data-lite",
repo_type="dataset",
local_dir="~/.financial-analyst/data",
)
Two binary formats: Qlib .bin (time-series, [4-byte float32 start_idx] + [float32 array]) for OHLCV+factors; Parquet (columnar) for financials/events/F10/industry. Compatible with Microsoft Qlib and D.features() API directly.
🔌 LLM Providers
financial-analyst is a tool-heavy 24-agent system — Tier-1 calls buddy tools, Tier-2 joins cross-stock data, Tier-3 writes structured reports with [V#]/[F#] anchors, and report-writer is the only agent allowed to touch disk. Your LLM choice decides whether the swarm uses its tools or fabricates answers from training data.
Environment Variables
Set one provider's *_API_KEY in .env (the fa init wizard prompts for it). Defaults are loaded from config/llm.yaml.
| Variable | Required | Description |
|---|---|---|
DASHSCOPE_API_KEY |
for qwen (default) |
Aliyun Bailian — qwen3.5-plus / qwen3-coder-plus |
DEEPSEEK_API_KEY |
for deepseek |
deepseek-chat / deepseek-reasoner |
OPENAI_API_KEY |
for openai |
gpt-4o / gpt-4-turbo |
ANTHROPIC_API_KEY |
for anthropic |
claude-opus / claude-sonnet / claude-haiku |
TUSHARE_TOKEN |
No | A-share data; without it the system falls back to pytdx main-stations + Tencent realtime (free, no token) |
🎯 Recommended Models
| Tier | Examples | When to use |
|---|---|---|
| Best | deepseek-reasoner · claude-opus-4-7 · gpt-4o · qwen3-max (requires general endpoint) |
Tier-3 decision agents (bull / bear / risk-officer / report-writer / introspector), market-level swarms (overseas-radar / mainline / morning-brief writer) |
| Sweet spot (default) | qwen3.5-plus · qwen3-coder-plus · deepseek-chat |
Daily driver — reliable tool-calling at low cost; Tier-1 data agents + Tier-2 analysts run here |
| Avoid for agent use | claude-haiku-4-5 · qwen-flash · qwen-turbo · *-mini · small / distilled variants |
Tool-calling unreliable — agents skip D.features() / TDX-F10 lookups and hallucinate factor scores from training data instead of loading them from disk |
Default ships with qwen3.5-plus. Aliyun Bailian gives 1M free token credit on signup — roughly 150 stock-deep-dive reports before you pay anything.
Network Profiles
network_profile decides how each provider connects through Chinese network conditions (Clash fake-ip, MITM, etc.):
| Provider | Profile | Detail |
|---|---|---|
| qwen | domestic |
trust_env=False, direct to aliyuncs.com — bypasses Clash fake-ip (which routes to overseas nodes and 10s-timeouts) |
| deepseek · openai · openrouter | intl_clash |
Honours HTTPS_PROXY (default 127.0.0.1:7890) with verify=False — Clash MITMs HTTPS via its root cert |
| anthropic | litellm fallback | Anthropic SDK isn't OpenAI-compatible; the routing layer falls back to litellm |
Hot-Swap
> /model deepseek-reasoner # in TUI, no restart, in-flight session preserved
> /model qwen3-coder-plus # bare name resolves provider; or use provider/model form
> /model # list configured models
Or change the default_provider / default_model in config/llm.yaml. See docs/llm_routing.md for the multi-provider AsyncOpenAI client design.
🤝 Issues & Feedback
Personal project, single maintainer. File issues at github.com/jesson-hh/financial-analyst/issues.
- VERSIONING.md — N-2 LTS, semver policy
- docs/journey.md — bilingual build journey (empty repo → 440 alphas + 24 agents, ~2 weeks)
📄 License & Disclaimer
Apache 2.0. Research and educational purposes only. Drafts analyst-grade work product for review by qualified professionals. Does not make investment recommendations, execute transactions, or post to any ledger. You are responsible for compliance with applicable laws.
v1.0.3 · 2026-05-25 · made by @jesson-hh · bilingual zh/en
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file financial_analyst-1.0.3.tar.gz.
File metadata
- Download URL: financial_analyst-1.0.3.tar.gz
- Upload date:
- Size: 867.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a09d1e84a8fcf1cead21f5df853fc02be9a459a40f28d0e08e3b964441ef268
|
|
| MD5 |
7d1227080580b4e091c9e27ffb39ab92
|
|
| BLAKE2b-256 |
6891c8e8a1ba2026736ab37f0df96208e1a4d05c0f666cc1e2b941206c235293
|
Provenance
The following attestation bundles were made for financial_analyst-1.0.3.tar.gz:
Publisher:
pypi-release.yml on jesson-hh/financial-analyst
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
financial_analyst-1.0.3.tar.gz -
Subject digest:
9a09d1e84a8fcf1cead21f5df853fc02be9a459a40f28d0e08e3b964441ef268 - Sigstore transparency entry: 1629458901
- Sigstore integration time:
-
Permalink:
jesson-hh/financial-analyst@fa0d9cf53f5fcca23dd32169041e5aaabf53f855 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/jesson-hh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@fa0d9cf53f5fcca23dd32169041e5aaabf53f855 -
Trigger Event:
push
-
Statement type:
File details
Details for the file financial_analyst-1.0.3-py3-none-any.whl.
File metadata
- Download URL: financial_analyst-1.0.3-py3-none-any.whl
- Upload date:
- Size: 468.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0da5da722146bf485afa72886d15b9569f976d69e9fdee98cd000a58588d2117
|
|
| MD5 |
9b27dd10ccb6d92be1b69b9f3220255a
|
|
| BLAKE2b-256 |
3accfda6a0e24e5c2b6fb8a27dbece38799c749d6bd34c761f4086d4ba9bf6ba
|
Provenance
The following attestation bundles were made for financial_analyst-1.0.3-py3-none-any.whl:
Publisher:
pypi-release.yml on jesson-hh/financial-analyst
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
financial_analyst-1.0.3-py3-none-any.whl -
Subject digest:
0da5da722146bf485afa72886d15b9569f976d69e9fdee98cd000a58588d2117 - Sigstore transparency entry: 1629458913
- Sigstore integration time:
-
Permalink:
jesson-hh/financial-analyst@fa0d9cf53f5fcca23dd32169041e5aaabf53f855 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/jesson-hh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@fa0d9cf53f5fcca23dd32169041e5aaabf53f855 -
Trigger Event:
push
-
Statement type: