Files
InsightReply/docs/ARCHITECTURE.md
zs 8cf6cb944b
Some checks failed
Extension Build & Release / build (push) Failing after 1m5s
Backend Deploy (Go + Docker) / deploy (push) Failing after 1m40s
Web Console Deploy (Vue 3 + Vite) / deploy (push) Has been cancelled
feat: 部署初版测试
2026-03-02 21:25:21 +08:00

190 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# InsightReply 系统架构 (Architecture Overview)
> 本文档描述 InsightReply 的整体技术架构、各组件职责与数据流。
---
## 一、架构全景图
```
┌─────────────────────────────────────────────────────────────────┐
│ 用户浏览器 (Chrome / Edge) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ X (Twitter) 页面 │ │
│ │ ┌──────────────┐ ┌──────────────────────────────┐ │ │
│ │ │ Content │ │ InsightReply Sidebar │ │ │
│ │ │ Script │───▶│ (Shadow DOM 隔离) │ │ │
│ │ │ - DOM 感知 │ │ - 策略选择 │ │ │
│ │ │ - 按钮注入 │ │ - 评论展示 │ │ │
│ │ │ - 数据提取 │ │ - 一键复制 │ │ │
│ │ └──────────────┘ └──────────┬───────────────────┘ │ │
│ └───────────────────────────────────┼─────────────────────┘ │
│ │ chrome.runtime │
│ ┌───────────────────────────────────┼─────────────────────┐ │
│ │ Background Service Worker │ │
│ │ - 消息中转 │ │
│ │ - JWT Token 管理 │ │
│ │ - API 请求代理 │ │
│ └───────────────────────────────────┼─────────────────────┘ │
└──────────────────────────────────────┼──────────────────────────┘
│ HTTPS
┌──────────────────────────────────────────────────────────────────┐
│ Nginx / Caddy (TLS 终结) │
└──────────────────────────────────────┬───────────────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│ Go 后端服务 (Docker Container) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Handler │─▶│ Service │─▶│Repository│─▶│ PostgreSQL │ │
│ │ (HTTP) │ │ (BizLogic│ │ (GORM) │ │ (Tailscale) │ │
│ └──────────┘ └────┬─────┘ └──────────┘ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ LLM Gateway │──▶ OpenAI / Claude / DeepSeek │
│ │ (Timeout + │ │
│ │ Breaker + │ │
│ │ Retry) │ │
│ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Radar Scheduler (定时任务) │ │
│ │ - Asynq (Redis Queue) │ │
│ │ - Nitter Scraper │ │
│ │ - 热度计算引擎 │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
```
---
## 二、分层架构 (Clean Architecture)
```
cmd/server/main.go ← 入口:配置加载、依赖注入、路由注册
├── internal/handler/ ← 表现层HTTP 请求解析 → 调用 Service → 返回 JSON
│ ├── ai_handler.go
│ ├── user_handler.go
│ └── common.go ← 统一 Response 工具函数
├── internal/service/ ← 业务层核心逻辑LLM 调用、热度计算、权限校验)
│ ├── ai_service.go
│ └── user_service.go
├── internal/repository/ ← 数据层:封装所有 SQL / GORM 操作
│ └── user_repository.go
├── internal/model/ ← 数据模型Go struct 定义
│ └── user.go
├── config/ ← 配置读取(环境变量 → 结构体)
├── pkg/ ← 跨模块共享工具包
└── prompts/ ← Prompt 模板文件 (规划中)
```
**调用链规则**`Handler → Service → Repository`,严禁跨层调用。
---
## 三、数据流
### 3.1 核心链路:用户生成评论
```mermaid
sequenceDiagram
participant U as 用户 (X 页面)
participant CS as Content Script
participant BG as Background SW
participant API as Go 后端
participant LLM as OpenAI
U->>CS: 点击 Insight 按钮
CS->>CS: 提取推文 DOM 数据
CS->>BG: chrome.runtime.sendMessage
BG->>API: POST /ai/generate (带 JWT)
API->>API: 验证 Token + Rate Limit
API->>LLM: ChatCompletion (含 Prompt)
LLM-->>API: 生成结果
API-->>BG: JSON 响应 (10 条候选)
BG-->>CS: sendResponse
CS->>U: Sidebar 展示评论
U->>U: 选择 → 一键复制 → 粘贴发布
```
### 3.2 雷达链路:后台监控推文 *(规划中)*
```mermaid
sequenceDiagram
participant SCH as Scheduler
participant Q as Asynq (Redis)
participant SC as Scraper Worker
participant NIT as Nitter 实例
participant DB as PostgreSQL
SCH->>Q: 定时投放抓取任务
Q->>SC: 消费任务
SC->>SC: Jitter 延迟 (1-5s)
SC->>NIT: HTTP GET (指纹轮换)
alt 正常响应
NIT-->>SC: HTML
SC->>SC: goquery 解析
SC->>DB: Batch UPSERT tweets
SC->>DB: 计算 heat_score
else 429/503
SC->>SC: 触发 Circuit Breaker
SC->>Q: 指数退避后重新入队
end
```
---
## 四、部署架构
```
Internet
┌────────┴────────┐
│ Nginx / Caddy │ ← TLS + 反代 → :8080
└────────┬────────┘
┌──────────────────┼──────────────────┐
│ Oracle ARM VPS │
│ 144.24.60.0 │
│ │
│ ┌────────────────────────────┐ │
│ │ Docker │ │
│ │ ├── insight-reply-server │ │
│ │ └── (未来: redis) │ │
│ └────────────────────────────┘ │
│ │
└──────────────────┼──────────────────┘
│ Tailscale VPN
┌────────────────┐
│ PostgreSQL │
│ 100.64.0.5 │
└────────────────┘
```
---
## 五、技术栈一览
| 层级 | 技术 | 版本 |
|------|------|------|
| **前端插件** | Vue 3 + Composition API | 3.5 |
| **样式** | Tailwind CSS | v4 |
| **打包** | Vite + CRXJS | 7.x |
| **后端** | Go (chi router) | 1.24 |
| **ORM** | GORM + pgx | 1.31 |
| **数据库** | PostgreSQL | 15+ |
| **LLM** | OpenAI (go-openai) | GPT-4o Mini |
| **任务队列** *(规划)* | Asynq (Redis) | - |
| **容器** | Docker + Docker Compose | 24.x |
| **CI/CD** | Gitea Actions | - |
| **VPN** | Tailscale | - |