跳转到正文

技术栈

总览

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

  • 用 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.pyapp/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.tsxfrontend/src/api/client.ts、各业务页面的 useQuery 调用。

Zustand

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

TanStack Table 8 + React Virtual

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

React Hook Form + Valibot

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

前端公共资源映射

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

Tailwind CSS 4 + Radix UI

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

实时通信与外围能力

SSE

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

浏览器插件

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

结构检索

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

OpenAI 兼容 LLM + PubChem

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

Sentry

  • 用途:可选的前后端错误与性能监控。
  • 后端:app/core/sentry_monitoring.py
  • 前端:frontend/src/lib/sentry.tsfrontend/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