# AstroResearch 天文科研辅助系统 AstroResearch 是一个基于 **Rust (Axum)** 后端与 **React (Vite + TypeScript)** 前端的天文文献一体化科研辅助系统。 --- ## 1. 功能概述 (Overview) AstroResearch 为天文领域的学者与研究人员提供一站式的文献管理与智能阅读解决方案,核心功能包括: - 🌌 **统一学术检索**:一键跨源检索 NASA ADS 与 arXiv 数据库,支持去重元数据卡片式展示。 - 📥 **智能双通道下载**:模拟浏览器请求头与延迟,自动绕过出版商防爬墙,官方 HTML 优先并支持 ar5iv 备用兜底。 - 📝 **结构化文献解析**:解析 HTML 或调用 MinerU (PDF 降级解析) 输出标准 GFM Markdown,对 LaTeX 公式实施占位符保护。 - 🗣️ **大模型双语翻译**:基于本地天文学词汇库 (Trie 树最长匹配) 构建翻译 Glossary,指导大模型进行公式级精准中英翻译。 - 🪐 **引文网络星系图**:基于 HTML5 Canvas 的高性能力导向拓扑渲染,双击节点支持引文深度探索。 - ✍️ **划词高亮与笔记**:在双语阅读器中自由划词、多色高亮并记录学术心得,数据与文献双向绑定。 --- ## 2. 快速启动 (Quickstart) ### 2.1 配置环境变量 将根目录下的 `.env.example` 复制并重命名为 `.env`: ```bash cp .env.example .env ``` 用编辑器打开填入你的 `ADS_API_KEY`、`LLM_API_KEY`、`QINIU_` 等第三方服务的认证 Token。 ### 2.2 运行服务 (Run) #### 方案一:本地开发调试模式 (Development Mode) 开发模式下分别启动后端 API 服务和前端 HMR 热更新服务: 1. **启动后端 (Rust Axum)**: ```bash cargo run ``` 后端服务默认运行在 `http://localhost:8000`,并会自动初始化本地 SQLite 数据库及运行 migrations 迁移。 2. **启动前端 (React Vite)**: ```bash cd dashboard npm install npm run dev ``` 前端开发服务器默认运行在 `http://localhost:5173`。前端的所有 `/api` 接口请求已配置反向代理,会自动转发到后端的 `8000` 端口。 #### 方案二:生产打包与单程序部署模式 (Production Mode) 生产模式下需要先编译前端静态文件,随后由后端进程统一托管分发: 1. **打包编译前端**: ```bash cd dashboard npm install npm run build ``` 静态资源将打包并输出在项目根目录下的 `dashboard/dist/` 目录。 2. **运行后端服务**: ```bash cd .. cargo run --release ``` 运行后直接访问 `http://localhost:8000` 即可使用,此时所有 React 网页和后台 API 均由 Rust 进程统一分发托管,无需额外启动 Vite。 --- ## 3. 技术文档结构 (Documentation Directory) 详细的技术和部署设计文档已集中整理至 `docs/` 目录: - 🏗️ **[架构设计](docs/architecture.md)**:包含系统宏观流程图与序列图。 - 🌐 **[API 接口规范](docs/api.md)**:后端 Axum 路由及 HTTP 接口格式。 - 🗄️ **[数据库设计](docs/database.md)**:SQLite 表结构、ER 图与索引优化。 - 🎨 **[视觉与交互设计](docs/design.md)**:高对比度浅色中文控制台、自研 Canvas 图谱引擎说明。 - 🛠️ **[排障指南](docs/troubleshooting.md)**:人机校验、解析失败等常见问题解法。 - 🚀 **[编译与部署指南](docs/deployment.md)**:单执行文件打包与发布流程。 - 🤝 **[参与贡献指南](docs/contributing.md)**:开发规范及单元测试。 --- ## 4. 目录组件 README 交叉引用 (Component READMEs) - 💻 **前端 React 控制台**:查看 [dashboard/README.md](dashboard/README.md) - ⚙️ **后端 Rust 源码**:参见 [src/README.md](src/README.md)