Orchidea Intel
与 NSAA 是两个独立子项目:Intel 为 TypeScript 实现的上市企业分析服务,不依赖 NSAA 代码,也不作为 NSAA 的”产品化形态”。
上市企业分析服务:制造业价值投资评分 + 上下游图谱钻取 + 市场风向 + 大模型推荐。
- 后端:Express + TypeScript(
apps/api),默认http://127.0.0.1:4600 - 前端:React + Ant Design + ECharts(
apps/web),开发端口4180 - MCP:
mcp-server(35 个工具,供 Orchidea Desktop 等客户端调用)
快速开始
pnpm install
# 终端 1:API(4600)
pnpm dev:api
# 终端 2:Web(4180,/api 反向代理到 4600)
pnpm dev:web
生产模式(API 同端口托管 Web 构建产物):
pnpm build
node apps/api/dist/index.js
# 打开 http://127.0.0.1:4600
常用脚本
| 命令 | 说明 |
|---|---|
pnpm dev:api / pnpm dev:web | 开发模式 |
pnpm build | 构建 API 与 Web |
pnpm typecheck | 全量类型检查 |
pnpm --filter @orchidea-intel/api test | API 单元测试(vitest) |
node mcp-server/smoke.js | MCP 工具契约冒烟(需 API 已启动) |
scripts/healthcheck.sh | 部署后健康检查 |
环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
PORT | 4600 | API 端口 |
INTEL_HOST | 127.0.0.1 | 监听地址;容器内需设为 0.0.0.0 |
INTEL_WEB_DIST | apps/web/dist | Web 静态资源目录(存在 index.html 时启用托管) |
INTEL_API_TOKEN | 空 | 设置后 /api/* 需携带 X-API-Token 或 Authorization: Bearer(/api/health 豁免) |
INTEL_ALLOWED_ORIGINS | 本地端口 | CORS 白名单,逗号分隔;* 表示放行全部 |
INTEL_RATE_LIMIT_PER_MIN | 240 | 单 IP 每分钟 API 请求上限,0 关闭 |
INTEL_TRUST_PROXY | 空 | 设为 1 / true 时信任反向代理的 X-Forwarded-For(仅部署在可信代理后启用) |
INTEL_STORE_DIR | ~/.orchidea-intel/store | 行情/财报/推荐/报告等本地缓存根目录 |
INTEL_DB_PATH | $INTEL_STORE_DIR/intel.db | SQLite 报告库路径(推荐报告 / 复盘 / 归因;需 Node 22+) |
INTEL_CACHE_RETENTION_DAYS | 14 | 磁盘行情缓存保留天数(保留任务按 mtime 清理) |
INTEL_REC_RETENTION_DAYS / INTEL_REC_KEEP_MIN | 180 / 30 | 推荐快照保留天数与最少保留期数 |
INTEL_ARCHIVE_RETENTION_DAYS | 540 | 归档快照保留天数 |
PLATFORM_API_URL / PLATFORM_API_KEY | http://localhost:3000 / 空 | 平台存储接入地址与密钥(不可达时诚实降级) |
PLATFORM_TIMEOUT_MS | 2500 | 平台探测/请求超时;失败后 30s 负缓存,避免拖慢接口 |
INTEL_PROBE_TIMEOUT_MS | 1500 | 向量库/图库/SPARQL 探测超时;结果缓存 60s |
INTEL_LLM_BASE_URL / INTEL_LLM_API_KEY / INTEL_LLM_MODEL | 空 | 大模型直连配置(亦可用 DASHSCOPE_API_KEY / DEEPSEEK_API_KEY / OPENAI_API_KEY 或 Ollama) |
ORCHIDEA_INTEL_API_URL | http://localhost:4600 | MCP server 代理的 API 地址 |
ORCHIDEA_INTEL_TIMEOUT_MS | 15000 | MCP 单次上游请求超时 |
ORCHIDEA_INTEL_LONG_TIMEOUT_MS | 180000 | MCP 长任务(推荐生成 / AI 分析)超时 |
INTEL_RECOMMEND_FULL_SCAN | 1 | 推荐是否启用全市场逐批 LLM 预筛;0 回退到本地预筛前 48 只 |
INTEL_RECOMMEND_SCAN_BATCH | 60 | 全市场扫描单批送入大模型的股票数(20–200) |
INTEL_RECOMMEND_SCAN_TOP | 4 | 每批最多入选数量(1–10) |
INTEL_RECOMMEND_SCAN_CONCURRENCY | 4 | 扫描并发批次数(1–8,避免上游限流) |
INTEL_RECOMMEND_SHORTLIST | 24 | 批次汇总后进入最终推理的精选池上限(5–200) |
大模型(推荐 / AI 分析)通过 PUT /api/llm/config 或前端「大模型设置」配置,未配置时相关接口返回 available: false,不生成伪造行情或推荐。
数据来源(真实接口)
| 数据 | 来源 |
|---|---|
| 实时行情 / K 线 | 新浪财经 |
| 财务、北向、两融、分红、公告 | 东方财富数据中心 |
| 资讯 | 东方财富站内搜索 |
| 全市场目录 | 东方财富股票列表(磁盘缓存 + 内置兜底) |
缺失字段统一返回 null(而非 0),前端以 — 展示;数据时效见 /api/data-freshness 与顶栏时效条。
API 分组
/api/companies/*:企业列表、详情、评分追溯、行情、证据、公告/api/market/*:市场风向(全量 / 分页筛选)、市场分析/api/recommendations/*:明日推荐、下周推荐、任务状态、历史与回测/api/recommendations/:mode/review:推荐 vs 真实行情复盘(T+1/T+5)、差异归因、纠错建议/api/recommendations/:mode/reports:入库报告列表;/api/recommendations/reports/:id:单期报告与复盘/api/news、/api/announcements:资讯与公告检索/api/watchlist/*:自选股与阈值预警/api/watchlist/advice:自选股明日/下周买卖建议(评分 + K 线 + 实时行情)/api/watchlist/advice/report:自选股组合买卖建议分析报告(Markdown / HTML / JSON)/api/reports/*:分析报告、Markdown / HTML 导出/api/industry-chain/*、/api/conduction/*:行业链与传导/api/data-feeds、/api/data-freshness:资料接入与数据时效/api/maintenance/retention:推荐快照保留策略(GET 状态 / POST 执行,支持dryRun)/api/health、/api/metrics、/api/metrics/industry-chain:健康、请求指标与行业链覆盖审计- 前端「系统运维」页(
/ops):指标、行业链覆盖、调度器与锁状态、存储保留(支持 dryRun)、数据源采集方式
部署
Docker Compose(推荐):
cp .env.example .env # 至少设置 INTEL_API_TOKEN
docker compose up -d --build
# 默认宿主端口 4610(HOST_PORT 可覆盖),打开 http://127.0.0.1:4610
或直接使用镜像:
docker build -t orchidea-intel .
docker run -p 4600:4600 \
-e INTEL_API_TOKEN=your-token \
-v intel-data:/home/node/.orchidea-intel \
orchidea-intel
镜像为多阶段构建:构建 Web + API 后仅保留运行产物,使用非 root 用户 node 运行,内置 HEALTHCHECK。
MCP 接入
mcp-server/lib/tools.js 定义 35 个工具(企业检索、评分、行业链、量化信号、推荐与历史、资讯公告、长期判定、科学库、股票搜索、分页行情、自选、报告、传导、数据时效、存储保留、AI 分析、运行指标等)。在 Orchidea Desktop 的 mcp-registry/registry.mcp-servers.json 中已注册 orchidea-intel,所需权限含 intel:recommend:read、intel:watchlist:read、intel:reports:read。