跳转到正文

技术栈 ​

总览 ​

当前技术选型围绕四个目标展开:

  • 用 SQLite 支撑中小规模实验室业务,并保持可接受的检索能力。
  • 用 React + Vite 提供高密度业务界面。
  • 用 Redis 增强会话、限流和 SSE,同时允许降级。
  • 用 RDKit 和 Ketcher 支撑可选结构检索。
  • 用浏览器插件对接外部采购平台。
  • 用 Agent skill、CLI、MCP 和企业微信入口提供受控自动化访问。

后端 ​

FastAPI ​

  • 用途:提供 REST API、SSE、静态资源和运行时中间件。
  • 落点:app/main.py

SQLModel + SQLAlchemy ​

  • 用途:定义模型、DTO 和 SQLite 映射。
  • 落点:app/models/*.py

SQLite ​

JWT + PyJWT ​

  • 用途:登录认证。
  • 落点:app/core/auth.py
  • 模式:浏览器使用 HttpOnly Cookie,脚本或调试工具可使用 Bearer Token。
  • 实现:PyJWT 负责 HS256 / RS256 编解码,cryptography 提供 RSA 支持。

Redis ​

  • 用途:会话缓存、登录限流和 SSE pub/sub。
  • 落点:app/core/redis.py、app/services/sse_redis.py
  • 特点:具备降级能力,不可用时部分功能仍可继续。

Ruff ​

  • 用途:后端 lint。
  • 验证命令:ruff check app/

前端 ​

React 19 ​

  • 用途:页面和组件开发。
  • 落点:frontend/src/

TypeScript 5.9 ​

  • 用途:前端类型系统。

Vite 8 ​

  • 用途:前端构建与开发服务器。
  • 落点:frontend/

React Router DOM 7 ​

  • 用途:页面路由。
  • 落点:frontend/src/App.tsx

TanStack Query 5 ​

  • 用途:服务端数据缓存、请求状态和列表刷新。
  • 落点:frontend/src/main.tsx、frontend/src/api/client.ts、各业务页面的 useQuery 调用。

Zustand ​

  • 用途:认证状态、UI 状态和 SSE 状态。
  • 落点:frontend/src/store/

TanStack Table 8 + React Virtual ​

  • 用途:高密度列表和虚拟滚动。
  • 落点:frontend/src/components/ui/DataTable.tsx、frontend/src/hooks/useTableState.tsx

React Hook Form + Valibot ​

  • 用途:表单状态管理与输入校验。
  • 落点:frontend/src/lib/validationSchemas.ts、frontend/src/lib/formConfigs.tsx

前端公共资源映射 ​

  • 用途:为 RDKit 脚本、WASM 和本地字体生成带版本号的访问路径。
  • 落点:frontend/scripts/lib-assets.mjs、frontend/src/lib/staticAssets.ts
  • 触发方式:npm run dev 和 npm run build 会先执行 npm run generate:static-assets。

Tailwind CSS 4 + Radix UI ​

  • 用途:样式系统和基础无障碍组件。
  • 落点:frontend/src/components/ui/

实时通信与外围能力 ​

SSE ​

  • 用途:库存、订单和仪表盘的局部更新。
  • 后端:app/api/events.py、app/services/sse_manager.py
  • 前端:frontend/src/hooks/useSSE.ts、frontend/src/hooks/useListSSE.ts

浏览器插件 ​

  • 用途:采集外部购物车并导入系统。
  • 落点:browser-extension/
  • 关键桥接路径:/cart-import、reagentOrderAPI.create、consumableOrderAPI.create
  • 匹配分析接口:/api/cart-sync

结构检索 ​

  • 用途:按绘制结构或结构文本检索库存 CAS。
  • 后端:app/api/chem.py、app/models/compound_structure.py、app/services/structure_index.py
  • 前端:frontend/src/components/chem/StructureSearchDialog.tsx、frontend/src/api/structureSearchApi.ts
  • 边界:默认开启,可通过 CHEM_STRUCTURE_FEATURE_ENABLED=false 关闭。

OpenAI 兼容 LLM + PubChem ​

  • 用途:从实验步骤中提取具体试剂名称,并解析 CAS 候选后查询库存。
  • 后端:app/api/procedure_inventory_search.py、app/services/procedure_*.py
  • 前端:frontend/src/components/ProcedureInventorySearchButton.tsx、ProcedureInventoryAnalysisPanel.tsx
  • 边界:默认关闭,需同时配置 LLM_ENABLED、接口地址、API Key 和模型名称;公用账户不可用。

Sentry ​

  • 用途:可选的前后端错误与性能监控。
  • 后端:app/core/sentry_monitoring.py
  • 前端:frontend/src/lib/sentry.ts、frontend/vite.config.ts
  • 边界:DSN 为空时停用,默认不发送个人身份信息;构建凭据齐全时上传前端 source map。

Agent skill、CLI 与 MCP ​

  • 用途:为 Agent skill、脚本、企业微信智能机器人和微信客服提供受控命令面。
  • CLI 落点:lsm_cli/
  • MCP 落点:lsm_mcp/
  • 边界:Agent skill 直接复用 CLI;MCP 通过 CLI 子进程调用后端 API,不直接访问数据库。

企业微信入口 ​

  • 用途:通过企业微信智能机器人和微信客服处理库存、订单、常用货架、借用和归还。
  • 落点:robot/
  • 边界:写操作需要先确认,实际执行仍通过 MCP、CLI 和后端 API;文本中包含有效 CAS 时优先回到系统内 CAS 查询,低库存阈值复用后端常量。

文档与部署 ​

VitePress ​

  • 用途:当前 wiki。
  • 落点:wiki/

Docker + Nginx ​

  • 用途:部署后端、前端、Redis 和统一入口。
  • 落点:docker/、docker-compose.yml

技术选型之间的关系 ​

开发时最常接触的工具链 ​

场景工具
后端 lintruff check app/
前端 lintcd frontend && npm run lint
发布版本同步python scripts/release_version.py set <version> 或 ./scripts/bump-version.ps1 <version>
发布标签校验python scripts/release_version.py check v<version>
前端公共资源映射cd frontend && npm run generate:static-assets
wiki 本地开发cd wiki && npm run dev
wiki 构建cd wiki && npm run build
浏览器插件配置生成npm run build:extension
后端启动python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
前端启动cd frontend && npm run dev

发布版本脚本同步后端、CLI、前端、前端 lock 文件、运行时默认值、PubChem User-Agent、README 配置和浏览器插件版本。Wiki 的文档站包版本独立维护,不参与应用发布标签校验。

相关主题 ​

参考代码 ​

开源项目 · Apache-2.0 license