# crazy-chenmilin/vlog architecture

> Architecture diagram of the GitHub repository crazy-chenmilin/vlog, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/crazy-chenmilin/vlog
- Repository: https://github.com/crazy-chenmilin/vlog

## Overview

知光是前后端分离的知识社区：用户登录后可发布和浏览知识内容、互动与搜索，也可围绕文章或全库进行 AI 问答。发布流程由前端创建草稿、申请预签名上传、直传资源并确认内容；RAG 请求经检索与编排后生成流式回答。README 明确了主要异步索引与关系同步能力。部分服务源码未提供，因此相关连接仅按文档描述呈现，不推断具体内部调用。

Main entry points: [`zhiguang_fe/zhiguang_fe-main/src/App.tsx`](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/App.tsx) (社区界面), [`zhiguang_be/src/main/java/com/tongji/llm/chat/RagQueryService.java`](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/chat/RagQueryService.java) (问答流编排), [`zhiguang_be/src/main/java/com/tongji/llm/searchService/RagRetrievalService.java`](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/searchService/RagRetrievalService.java) (RAG 检索), [`zhiguang_be/src/main/java/com/tongji/knowpost/api/KnowPostController.java`](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/api/KnowPostController.java) (知识内容接口)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["前端体验"]
  node_web["社区界面<br/>[App.tsx]"]
  node_webapi["API 客户端<br/>[apiClient.ts]"]
  node_authui["登录页面<br/>[LoginPage.tsx]"]
  node_ragui["RAG 对话<br/>[GlobalRagChat.tsx]"]
end

subgraph group_identity["身份与资料"]
  node_authapi["认证接口"]
  node_authsvc["认证服务<br/>[AuthService.java]"]
  node_profile["用户资料"]
end

subgraph group_content["知识内容"]
  node_postapi["知识内容接口"]
  node_postsvc["内容服务"]
  node_feed["Feed 服务"]
  node_storageapi["上传接口"]
  node_storage["对象存储服务"]
end

subgraph group_community["互动与发现"]
  node_comments["评论服务"]
  node_relations["用户关系服务"]
  node_counters["互动计数服务"]
  node_search["搜索服务<br/>[SearchService.java]"]
end

subgraph group_ai["智能问答"]
  node_ragapi["RAG 接口"]
  node_ragquery["问答流编排"]
  node_rewrite["问题改写"]
  node_retrieval["RAG 检索"]
  node_index["内容向量索引"]
  node_memory["对话记忆"]
  node_graph["关系图增强"]
end

node_user(("社区用户"))
node_objectstore[("S3 对象存储")]
node_es[("Elasticsearch")]
node_kafka["Kafka 事件流"]
node_model(("聊天与向量模型"))
node_neo4j[("Neo4j 图库")]
node_mysql[("MySQL")]
node_redis[("Redis")]

node_user -->|"使用"| node_web
node_web -->|"进入登录"| node_authui
node_authui -->|"提交认证"| node_webapi
node_webapi -->|"请求接口"| node_authapi
node_authapi -->|"处理认证"| node_authsvc
node_authsvc -->|"读写用户"| node_mysql
node_authsvc -->|"保存刷新令牌"| node_redis
node_web -->|"创建与浏览"| node_postapi
node_postapi -->|"处理内容"| node_postsvc
node_postsvc -->|"保存内容"| node_mysql
node_postapi -->|"申请上传信息"| node_storageapi
node_storageapi -->|"生成预签名"| node_storage
node_storage -->|"生成上传地址"| node_objectstore
node_web -->|"直传资源"| node_objectstore
node_postapi -->|"提供内容列表"| node_feed
node_feed -->|"读取内容"| node_mysql
node_web -->|"查看与编辑资料"| node_profile
node_web -->|"评论互动"| node_comments
node_web -->|"关注关系"| node_relations
node_web -->|"点赞收藏"| node_counters
node_web -->|"搜索内容"| node_search
node_search -->|"检索与建议"| node_es
node_postsvc -.->|"发布后异步事件"| node_kafka
node_kafka -.->|"同步搜索索引"| node_es
node_relations -.->|"关系事件"| node_kafka
node_kafka -.->|"聚合计数"| node_counters
node_ragui -->|"发送问题"| node_webapi
node_webapi -->|"请求问答"| node_ragapi
node_ragapi -->|"编排问答流"| node_ragquery
node_ragquery -->|"读取与保存对话"| node_memory
node_memory -->|"读写会话消息"| node_mysql
node_ragquery -->|"改写问题"| node_rewrite
node_rewrite -->|"生成独立问题"| node_model
node_ragquery -->|"检索证据"| node_retrieval
node_retrieval -->|"确保单篇索引"| node_index
node_index -->|"读写向量切片"| node_es
node_index -->|"获取文章正文"| node_objectstore
node_retrieval -->|"生成 HyDE 查询"| node_model
node_retrieval -->|"向量与关键词召回"| node_es
node_retrieval -.->|"获取关系上下文"| node_graph
node_graph -.->|"查询关系"| node_neo4j
node_ragquery -->|"生成流式回答"| node_model
node_ragquery -->|"SSE 回答"| node_ragui

click node_web "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/App.tsx"
click node_webapi "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/services/apiClient.ts"
click node_authui "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/pages/LoginPage.tsx"
click node_ragui "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/features/rag/components/GlobalRagChat.tsx"
click node_authapi "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/auth/api/AuthController.java"
click node_authsvc "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/auth/service/AuthService.java"
click node_profile "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/profile/service/ProfileService.java"
click node_postapi "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/api/KnowPostController.java"
click node_postsvc "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/service/KnowPostService.java"
click node_feed "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/service/KnowPostFeedService.java"
click node_storageapi "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/storage/api/StorageController.java"
click node_storage "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/storage/OssStorageService.java"
click node_comments "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/comment/service/CommentService.java"
click node_relations "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/relation/service/RelationService.java"
click node_counters "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/counter/service/CounterWriteService.java"
click node_search "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/search/service/SearchService.java"
click node_ragapi "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/api/KnowPostRagController.java"
click node_ragquery "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/chat/RagQueryService.java"
click node_rewrite "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/enhanceService/QueryRewriteService.java"
click node_retrieval "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/searchService/RagRetrievalService.java"
click node_index "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/searchService/RagIndexService.java"
click node_memory "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/memoryService/RagConversationMemoryService.java"
click node_graph "https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/graphService/GraphRelationQueryService.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web,node_webapi,node_authui,node_ragui toneBlue
class node_authapi,node_authsvc,node_profile,node_objectstore,node_es,node_neo4j,node_mysql,node_redis toneAmber
class node_postapi,node_postsvc,node_feed,node_storageapi,node_storage toneMint
class node_comments,node_relations,node_counters,node_search toneRose
class node_ragapi,node_ragquery,node_rewrite,node_retrieval,node_index,node_memory,node_graph,node_user,node_kafka,node_model toneIndigo
```

## Components

### 前端体验

- [社区界面](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/App.tsx): `zhiguang_fe/zhiguang_fe-main/src/App.tsx`
- [API 客户端](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/services/apiClient.ts): `zhiguang_fe/zhiguang_fe-main/src/services/apiClient.ts`
- [登录页面](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/pages/LoginPage.tsx): `zhiguang_fe/zhiguang_fe-main/src/pages/LoginPage.tsx`
- [RAG 对话](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_fe/zhiguang_fe-main/src/features/rag/components/GlobalRagChat.tsx): `zhiguang_fe/zhiguang_fe-main/src/features/rag/components/GlobalRagChat.tsx`

### 身份与资料

- [认证接口](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/auth/api/AuthController.java): `zhiguang_be/src/main/java/com/tongji/auth/api/AuthController.java`
- [认证服务](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/auth/service/AuthService.java): `zhiguang_be/src/main/java/com/tongji/auth/service/AuthService.java`
- [用户资料](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/profile/service/ProfileService.java): `zhiguang_be/src/main/java/com/tongji/profile/service/ProfileService.java`

### 知识内容

- [知识内容接口](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/api/KnowPostController.java): `zhiguang_be/src/main/java/com/tongji/knowpost/api/KnowPostController.java`
- [内容服务](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/service/KnowPostService.java): `zhiguang_be/src/main/java/com/tongji/knowpost/service/KnowPostService.java`
- [Feed 服务](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/service/KnowPostFeedService.java): `zhiguang_be/src/main/java/com/tongji/knowpost/service/KnowPostFeedService.java`
- [上传接口](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/storage/api/StorageController.java): `zhiguang_be/src/main/java/com/tongji/storage/api/StorageController.java`
- [对象存储服务](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/storage/OssStorageService.java): `zhiguang_be/src/main/java/com/tongji/storage/OssStorageService.java`

### 互动与发现

- [评论服务](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/comment/service/CommentService.java): `zhiguang_be/src/main/java/com/tongji/comment/service/CommentService.java`
- [用户关系服务](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/relation/service/RelationService.java): `zhiguang_be/src/main/java/com/tongji/relation/service/RelationService.java`
- [互动计数服务](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/counter/service/CounterWriteService.java): `zhiguang_be/src/main/java/com/tongji/counter/service/CounterWriteService.java`
- [搜索服务](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/search/service/SearchService.java): `zhiguang_be/src/main/java/com/tongji/search/service/SearchService.java`

### 智能问答

- [RAG 接口](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/knowpost/api/KnowPostRagController.java): `zhiguang_be/src/main/java/com/tongji/knowpost/api/KnowPostRagController.java`
- [问答流编排](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/chat/RagQueryService.java): `zhiguang_be/src/main/java/com/tongji/llm/chat/RagQueryService.java`
- [问题改写](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/enhanceService/QueryRewriteService.java): `zhiguang_be/src/main/java/com/tongji/llm/enhanceService/QueryRewriteService.java`
- [RAG 检索](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/searchService/RagRetrievalService.java): `zhiguang_be/src/main/java/com/tongji/llm/searchService/RagRetrievalService.java`
- [内容向量索引](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/searchService/RagIndexService.java): `zhiguang_be/src/main/java/com/tongji/llm/searchService/RagIndexService.java`
- [对话记忆](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/memoryService/RagConversationMemoryService.java): `zhiguang_be/src/main/java/com/tongji/llm/memoryService/RagConversationMemoryService.java`
- [关系图增强](https://github.com/crazy-chenmilin/vlog/blob/main/zhiguang_be/src/main/java/com/tongji/llm/graphService/GraphRelationQueryService.java): `zhiguang_be/src/main/java/com/tongji/llm/graphService/GraphRelationQueryService.java`

### Other components

- **社区用户**
- **S3 对象存储**
- **Elasticsearch**
- **Kafka 事件流**
- **聊天与向量模型**
- **Neo4j 图库**
- **MySQL**
- **Redis**

## Connections

- 社区用户 → 社区界面: 使用
- 社区界面 → 登录页面: 进入登录
- 登录页面 → API 客户端: 提交认证
- API 客户端 → 认证接口: 请求接口
- 认证接口 → 认证服务: 处理认证
- 认证服务 → MySQL: 读写用户
- 认证服务 → Redis: 保存刷新令牌
- 社区界面 → 知识内容接口: 创建与浏览
- 知识内容接口 → 内容服务: 处理内容
- 内容服务 → MySQL: 保存内容
- 知识内容接口 → 上传接口: 申请上传信息
- 上传接口 → 对象存储服务: 生成预签名
- 对象存储服务 → S3 对象存储: 生成上传地址
- 社区界面 → S3 对象存储: 直传资源
- 知识内容接口 → Feed 服务: 提供内容列表
- Feed 服务 → MySQL: 读取内容
- 社区界面 → 用户资料: 查看与编辑资料
- 社区界面 → 评论服务: 评论互动
- 社区界面 → 用户关系服务: 关注关系
- 社区界面 → 互动计数服务: 点赞收藏
- 社区界面 → 搜索服务: 搜索内容
- 搜索服务 → Elasticsearch: 检索与建议
- 内容服务 → Kafka 事件流: 发布后异步事件
- Kafka 事件流 → Elasticsearch: 同步搜索索引
- 用户关系服务 → Kafka 事件流: 关系事件
- Kafka 事件流 → 互动计数服务: 聚合计数
- RAG 对话 → API 客户端: 发送问题
- API 客户端 → RAG 接口: 请求问答
- RAG 接口 → 问答流编排: 编排问答流
- 问答流编排 → 对话记忆: 读取与保存对话
- 对话记忆 → MySQL: 读写会话消息
- 问答流编排 → 问题改写: 改写问题
- 问题改写 → 聊天与向量模型: 生成独立问题
- 问答流编排 → RAG 检索: 检索证据
- RAG 检索 → 内容向量索引: 确保单篇索引
- 内容向量索引 → Elasticsearch: 读写向量切片
- 内容向量索引 → S3 对象存储: 获取文章正文
- RAG 检索 → 聊天与向量模型: 生成 HyDE 查询
- RAG 检索 → Elasticsearch: 向量与关键词召回
- RAG 检索 → 关系图增强: 获取关系上下文
- 关系图增强 → Neo4j 图库: 查询关系
- 问答流编排 → 聊天与向量模型: 生成流式回答
- 问答流编排 → RAG 对话: SSE 回答
