commit ae83b9d4d81239e805b66da94b490404a86a90b2 Author: 闫旭隆 <15945644+yan-xulong@user.noreply.gitee.com> Date: Wed Nov 12 10:27:56 2025 +0800 项目理解skill-v1 diff --git a/codebase_architecture_analyzer_v1.zip b/codebase_architecture_analyzer_v1.zip new file mode 100644 index 0000000..0494393 Binary files /dev/null and b/codebase_architecture_analyzer_v1.zip differ diff --git a/codebase_architecture_analyzer_v1/assets/report.md b/codebase_architecture_analyzer_v1/assets/report.md new file mode 100644 index 0000000..6a45729 --- /dev/null +++ b/codebase_architecture_analyzer_v1/assets/report.md @@ -0,0 +1,204 @@ +# {PROJECT_NAME} 架构分析报告 + +> 生成时间: {TIMESTAMP} +> 分析工具: Claude Code - Codebase Architecture Analyzer + +--- + +## 一、项目概览 + +### 1.1 基本信息 + +- **项目类型**: {PROJECT_TYPE} +- **主要语言**: {PRIMARY_LANGUAGE} ({PRIMARY_FILE_COUNT} 个文件) +- **次要语言**: {SECONDARY_LANGUAGE} ({SECONDARY_FILE_COUNT} 个文件) +- **代码规模**: 约 {TOTAL_LINES} 行代码 + +### 1.2 技术栈 + +**后端**: +{BACKEND_STACK} + +**前端**: +{FRONTEND_STACK} + +**数据库**: +{DATABASE_STACK} + +**基础设施**: +{INFRASTRUCTURE_STACK} + +### 1.3 子系统组成 + +{SUBSYSTEMS_LIST} + +--- + +## 二、系统架构 + +### 2.1 架构图 + +```mermaid +{SYSTEM_ARCHITECTURE_DIAGRAM} +``` + +### 2.2 子系统详情 + +{SUBSYSTEMS_DETAILS} + +### 2.3 通信机制 + +{COMMUNICATION_MECHANISMS} + +--- + +## 三、核心业务流程 + +### 3.1 识别的架构模式 + +**核心模式**: {DETECTED_PATTERN} + +{PATTERN_DESCRIPTION} + +### 3.2 业务流程图 + +```mermaid +{WORKFLOW_DIAGRAM} +``` + +### 3.3 执行单元清单 + +{EXECUTION_UNITS_LIST} + +### 3.4 关键决策点 + +{DECISION_POINTS} + +--- + +## 四、数据流分析 + +### 4.1 数据流序列图 + +```mermaid +{SEQUENCE_DIAGRAM} +``` + +### 4.2 核心数据模型 + +{DATA_MODELS_LIST} + +### 4.3 数据转换链路 + +{DATA_TRANSFORMATION_CHAIN} + +--- + +## 五、快速上手指南 + +### 5.1 环境要求 + +{ENVIRONMENT_REQUIREMENTS} + +### 5.2 安装步骤 + +```bash +{INSTALLATION_STEPS} +``` + +### 5.3 启动命令 + +```bash +{STARTUP_COMMANDS} +``` + +### 5.4 核心入口文件 + +{ENTRY_POINTS_LIST} + +--- + +## 六、代码位置索引 + +### 6.1 核心业务逻辑 + +{CORE_LOGIC_INDEX} + +### 6.2 API 端点 + +{API_ENDPOINTS_INDEX} + +### 6.3 数据模型定义 + +{DATA_MODELS_INDEX} + +### 6.4 配置文件 + +{CONFIG_FILES_INDEX} + +--- + +## 七、代码质量概览 + +### 7.1 统计指标 + +- 总文件数: {TOTAL_FILES} +- 代码行数: {CODE_LINES} +- 注释行数: {COMMENT_LINES} +- 空行数: {BLANK_LINES} + +### 7.2 目录结构树 + +``` +{DIRECTORY_TREE} +``` + +--- + +## 八、外部资源 + +### 8.1 文档链接 + +{DOCUMENTATION_LINKS} + +### 8.2 学术论文 + +{PAPERS_LIST} + +### 8.3 参考资料 + +{REFERENCES_LIST} + +--- + +## 九、注意事项 + +### 9.1 已知限制 + +{KNOWN_LIMITATIONS} + +### 9.2 待验证事项 + +{TODO_VERIFY} + +--- + +## 附录 + +### A. 依赖清单 + +{DEPENDENCIES_LIST} + +### B. 环境变量 + +{ENVIRONMENT_VARIABLES} + +### C. 分析方法 + +本报告基于以下方法生成: +- 静态代码分析(AST 解析) +- 配置文件解析 +- 目录结构分析 +- 模式匹配识别 + +所有结论均基于代码事实,标注了具体的文件位置以供验证。 diff --git a/codebase_architecture_analyzer_v1/assets/sequence.mermaid b/codebase_architecture_analyzer_v1/assets/sequence.mermaid new file mode 100644 index 0000000..47e697e --- /dev/null +++ b/codebase_architecture_analyzer_v1/assets/sequence.mermaid @@ -0,0 +1,24 @@ +sequenceDiagram + participant U as 用户 + participant F as {FRONTEND_NAME} + participant B as {BACKEND_NAME} + participant C as {CORE_LOGIC_NAME} + participant D as {DATABASE_NAME} + + U->>F: {USER_ACTION} + Note over F: {FRONTEND_PROCESSING} + + F->>B: {API_REQUEST}
{REQUEST_PAYLOAD} + Note over B: {BACKEND_PROCESSING} + + B->>C: {CORE_INVOCATION}
{INVOCATION_PARAMS} + Note over C: {CORE_PROCESSING} + + C->>D: {DATA_OPERATION} + D-->>C: {DATA_RESPONSE} + + C-->>B: {CORE_RESULT} + B-->>F: {API_RESPONSE} + + Note over F: {FRONTEND_RENDERING} + F-->>U: {USER_RESULT} diff --git a/codebase_architecture_analyzer_v1/reference/data-flow-analysis.md b/codebase_architecture_analyzer_v1/reference/data-flow-analysis.md new file mode 100644 index 0000000..ab3c0dc --- /dev/null +++ b/codebase_architecture_analyzer_v1/reference/data-flow-analysis.md @@ -0,0 +1,204 @@ +# Phase 4: 数据流追踪指南 + +**执行时间**:约 1-2 分钟 + +**目标**:追踪核心数据的转换链路 + +--- + +## ⚠️ 重要约束 + +**在调用 Task tool 时,必须在 prompt 开头包含以下约束:** + +``` +⚠️ 重要约束:本次分析只返回文本结果,禁止生成任何文件(.md, .txt 等)。 +所有 Mermaid 图表、数据模型清单、转换链路都应包含在你的文本回复中,不要使用 Write 或其他文件创建工具。 +``` + +**Explore agent 只返回文本结果,不要生成任何文件。** + +--- + +## 分析步骤 + +### 步骤 1: 识别核心数据模型 + +使用 Grep 工具搜索数据模型定义: + +#### Python 项目 + +```bash +# Pydantic 模型 +grep -r "class.*BaseModel" --include="*.py" + +# Dataclass +grep -r "@dataclass" --include="*.py" + +# SQLAlchemy 模型 +grep -r "class.*Base" --include="*.py" +``` + +#### TypeScript 项目 + +```bash +# Interface 定义 +grep -r "interface.*{" --include="*.ts" + +# Type 别名 +grep -r "type.*=" --include="*.ts" + +# Class 定义 +grep -r "export class" --include="*.ts" +``` + +#### Go 项目 + +```bash +# Struct 定义 +grep -r "type.*struct" --include="*.go" +``` + +### 步骤 2: 追踪数据转换 + +1. **定位数据入口** + - 从 API 端点的请求体开始 + - 识别请求参数的类型定义 + +2. **追踪转换链路** + - 读取每个业务函数的参数类型和返回值类型 + - 记录每次类型转换的代码位置 + - 识别数据验证、清洗、增强步骤 + +3. **标注关键转换点** + - 序列化/反序列化 + - 数据库 ORM 映射 + - DTO(Data Transfer Object)转换 + - 业务逻辑处理 + +### 步骤 3: 生成序列图 + +使用 `assets/sequence.mermaid` 模板生成 Mermaid 序列图。 + +**⚠️ sequenceDiagram 语法约束(版本 11.x)**: +- `alt/loop/par` 块必须正确配对 `end` +- 使用 `
` 换行 + +--- + +## 预期输出格式 + +### 1. Mermaid 序列图 + +```mermaid +sequenceDiagram + participant U as 用户 + participant F as Frontend + participant B as Backend + participant R as Researcher + participant W as Writer + + U->>F: 输入查询 "AI 发展趋势" + F->>B: POST /api/research
{query, depth: 3} + Note over B: 构造 ResearchTask + B->>R: invoke(ResearchTask) + R->>R: 搜索引擎调用 + R-->>B: SearchResults (10 个文档) + B->>W: 传递 SearchResults + W->>W: GPT-4 生成报告 + W-->>B: Report (2000 字) + B->>F: 返回 HTML + F->>U: 展示报告 +``` + +### 2. 数据模型清单 + +列出所有核心数据模型及其位置: + +``` +核心数据模型: +1. ResearchTask (models/task.py:8) + - 用途: 用户查询任务 + - 字段: query: str, depth: int, filters: Optional[List[str]] + +2. SearchResults (models/results.py:15) + - 用途: 搜索结果集合 + - 字段: documents: List[Document], total: int, timestamp: datetime + +3. Report (models/report.py:22) + - 用途: 最终生成的报告 + - 字段: content: str, score: float, metadata: Dict[str, Any] +``` + +### 3. 数据转换链路 + +``` +数据流转路径: +用户输入 (str) + → ResearchTask (构造于 backend/routes.py:42) + → SearchResults (返回于 agents/researcher.py:67) + → Report (生成于 agents/writer.py:89) + → HTML (渲染于 backend/routes.py:58) + → 前端展示 +``` + +--- + +## 分析技巧 + +### 1. 类型提示追踪 + +Python 示例: +```python +# 从函数签名追踪类型流转 +def process_query(task: ResearchTask) -> SearchResults: + # task 类型: ResearchTask + results = search_engine.search(task.query) + # results 类型: SearchResults + return results +``` + +TypeScript 示例: +```typescript +// 从接口定义追踪 +interface ApiRequest { + query: string; + depth: number; +} + +async function handleRequest(req: ApiRequest): Promise { + // req 类型: ApiRequest + const results = await research(req); + // results 类型: Report + return results; +} +``` + +### 2. ORM 映射识别 + +SQLAlchemy 示例: +```python +# 数据库模型 → Pydantic 模型 +class UserDB(Base): + __tablename__ = "users" + id = Column(Integer, primary_key=True) + +class UserSchema(BaseModel): + id: int + # 从 UserDB 转换到 UserSchema +``` + +### 3. DTO 转换模式 + +```python +# 请求 DTO → 领域对象 → 响应 DTO +RequestDTO → DomainModel → ResponseDTO +``` + +--- + +## 注意事项 + +1. **关注核心路径**:只追踪主要业务流程的数据转换,忽略辅助功能 +2. **最多 5 层深度**:避免追踪过深导致图表过于复杂 +3. **标注转换位置**:每次类型转换都记录文件名和行号 +4. **区分同步/异步**:在序列图中用实线(同步)和虚线(异步)区分 diff --git a/codebase_architecture_analyzer_v1/reference/examples.md b/codebase_architecture_analyzer_v1/reference/examples.md new file mode 100644 index 0000000..7513e08 --- /dev/null +++ b/codebase_architecture_analyzer_v1/reference/examples.md @@ -0,0 +1,452 @@ +# 使用示例 + +本文档提供实际使用场景的示例。 + +## 示例 1: 分析 Multi-Agent AI 项目 + +### 项目结构 + +``` +ai-research-assistant/ +├── frontend/ +│ ├── src/ +│ │ ├── components/ +│ │ └── main.tsx +│ └── package.json +├── backend/ +│ ├── app/ +│ │ ├── main.py +│ │ └── routes.py +│ └── requirements.txt +└── agents/ + ├── graph.py + └── nodes.py +``` + +### 用户操作 + +``` +用户: 理解项目 +``` + +### Skill 执行过程 + +#### Phase 1: 快速扫描 (30秒) + +``` +⏳ 正在扫描项目结构... + +✓ 检测到配置文件: + - backend/requirements.txt (Python) + - frontend/package.json (JavaScript) + +✓ 读取依赖: + - Python: fastapi, langgraph, openai + - JavaScript: react, typescript + +✓ 扫描目录: + - frontend/ (82 个 .tsx 文件) + - backend/ (45 个 .py 文件) + - agents/ (8 个 .py 文件) + +✓ 快速扫描完成 + +项目类型: AI 驱动的 Web 应用 +主语言: Python (后端 + AI) +次要语言: TypeScript (前端) +核心框架: FastAPI + LangGraph + React +架构: 前后端分离 + Multi-Agent +``` + +#### Phase 2: 系统架构分析 (2分钟) + +``` +⏳ 调用 Explore sub-agent 分析系统架构... + +[Sub-agent 执行] +- 搜索 API 端点: @app.post, @router. +- 发现端点: /api/research, /api/status +- 搜索 WebSocket: WebSocket( +- 发现: /ws 实时通信端点 +- 搜索数据库: Redis, PostgreSQL +- 发现: Redis 缓存, PostgreSQL 持久化 + +✓ 系统架构分析完成 + +识别出 3 个子系统: +├─ Frontend (frontend/) +│ ├─ 技术: React 18 + TypeScript +│ └─ 入口: src/main.tsx:1 +├─ Backend (backend/) +│ ├─ 技术: FastAPI + Python 3.11 +│ └─ 入口: app/main.py:1 +└─ Agent Layer (agents/) + ├─ 技术: LangGraph 0.2.5 + └─ 入口: graph.py:1 + +通信机制: +- Frontend → Backend: WebSocket (/ws) +- Frontend → Backend: HTTP POST (/api/research) +- Backend → Agent Layer: 直接调用 invoke() +- Agent Layer → Redis: 缓存中间结果 +- Agent Layer → PostgreSQL: 持久化数据 +``` + +**生成的架构图**: + +```mermaid +graph TB + User[用户] --> Frontend[前端
React + TypeScript] + Frontend -->|WebSocket /ws| Backend[后端 API
FastAPI] + Frontend -->|POST /api/research| Backend + Backend -->|invoke| AgentLayer[Agent 编排层
LangGraph] + AgentLayer -->|缓存| Redis[(Redis)] + AgentLayer -->|持久化| DB[(PostgreSQL)] + + style AgentLayer fill:#f9f,stroke:#333,stroke-width:3px +``` + +**代码位置索引**: +- Frontend 入口: `frontend/src/main.tsx:1` +- Backend 入口: `backend/app/main.py:1` +- API 定义: `backend/app/routes.py:42` +- Agent 调用: `backend/app/routes.py:58` + +#### Phase 3: 核心流程提取 (5分钟) + +``` +⏳ 检测到 agents/ 目录,正在深度分析 Multi-Agent 编排... + +⏳ 调用 Explore sub-agent 提取工作流... + +[Sub-agent 执行] +- 搜索 StateGraph 定义 +- 发现: agents/graph.py:23 +- 提取 Agent 节点: + * researcher (agents/nodes.py:45) + * writer (agents/nodes.py:78) + * reviewer (agents/nodes.py:112) +- 分析流转规则: + * researcher → writer (顺序) + * writer → reviewer (顺序) + * reviewer → researcher (条件: quality < 7) + * reviewer → END (条件: quality >= 7) + +✓ Multi-Agent 编排流程解析完成 + +识别出 3 个 Agent: +1. Researcher (agents/nodes.py:45) + - 职责: 调用搜索 API 收集资料 + - 输入: ResearchTask + - 输出: List[Document] + +2. Writer (agents/nodes.py:78) + - 职责: 基于资料生成报告 + - 输入: List[Document] + - 输出: Report + +3. Reviewer (agents/edges.py:12) + - 职责: 评估报告质量 + - 决策: quality < 7 → 返回 Researcher + quality >= 7 → 结束流程 +``` + +**生成的流程图**: + +```mermaid +stateDiagram-v2 + [*] --> Researcher: 用户查询 + Researcher --> Writer: 研究完成 + Writer --> Reviewer: 生成草稿 + Reviewer --> Researcher: 质量不足
评分 < 7 + Reviewer --> [*]: 质量通过 + + note right of Researcher + agents/nodes.py:45 + 调用 Tavily 搜索 API + 返回 List[Document] + end note + + note right of Writer + agents/nodes.py:78 + 基于搜索结果 + 调用 GPT-4 生成报告 + end note + + note right of Reviewer + agents/edges.py:12 + 评估报告质量 + 决定是否重新研究 + end note +``` + +#### Phase 4: 数据流追踪 (1分钟) + +``` +⏳ 追踪数据流... + +✓ 识别核心数据模型: + - ResearchTask (models/task.py:8) + - SearchResults (models/results.py:15) + - Report (models/report.py:22) + +✓ 数据转换链路: + 用户输入 (str) + → ResearchTask (models/task.py:8) + → SearchResults (agents/researcher.py:45) + → Report (agents/writer.py:78) + → HTML (backend/routes.py:65) +``` + +**生成的序列图**: + +```mermaid +sequenceDiagram + participant U as 用户 + participant F as Frontend + participant B as Backend + participant R as Researcher + participant W as Writer + + U->>F: 输入查询 "AI 发展趋势" + F->>B: POST /api/research
{query, depth: 3} + Note over B: 构造 ResearchTask + B->>R: invoke(ResearchTask) + R->>R: 调用搜索引擎 + R-->>B: SearchResults (10 文档) + B->>W: 传递 SearchResults + W->>W: GPT-4 生成报告 + W-->>B: Report (2000 字) + B->>F: 返回 HTML + F->>U: 展示报告 +``` + +#### Phase 5: 生成报告 (30秒) + +``` +⏳ 生成最终报告... + +✓ 分析完成! + +报告已保存: PROJECT_ARCHITECTURE.md + +核心发现: +- 采用 LangGraph 编排 Multi-Agent 工作流 +- 支持条件路由和循环优化 +- 数据流: 查询 → 搜索 → 写作 → 审核 → 报告 + +快速上手: +1. 安装依赖: pip install -r backend/requirements.txt +2. 配置环境: cp .env.example .env +3. 启动后端: cd backend && uvicorn app.main:app --reload +4. 启动前端: cd frontend && npm install && npm start +5. 访问: http://localhost:3000 +``` + +--- + +## 示例 2: 分析微服务项目 + +### 项目结构 + +``` +ecommerce-platform/ +├── docker-compose.yml +├── services/ +│ ├── api-gateway/ +│ ├── user-service/ +│ ├── order-service/ +│ └── notification-service/ +└── shared/ +``` + +### 用户操作 + +``` +用户: 分析代码库架构 +``` + +### 执行过程(简化版) + +``` +[30s] ✓ 检测到 docker-compose.yml + 识别为微服务架构 + 发现 4 个服务: api-gateway, user-service, order-service, notification-service + +[2min] ✓ 服务调用拓扑图已生成 + api-gateway → user-service (HTTP GET /users/:id) + api-gateway → order-service (HTTP POST /orders) + api-gateway → notification-service (HTTP POST /notify) + +[5min] ✓ 报告已保存: PROJECT_ARCHITECTURE.md +``` + +**生成的架构图**: + +```mermaid +graph TB + Client[客户端] --> Gateway[API Gateway
:8000] + + Gateway -->|GET /users/:id| UserSvc[User Service
:8001] + Gateway -->|POST /orders| OrderSvc[Order Service
:8002] + Gateway -->|POST /notify| NotifySvc[Notification Service
:8003] + + UserSvc --> UserDB[(User DB
PostgreSQL)] + OrderSvc --> OrderDB[(Order DB
PostgreSQL)] + + style Gateway fill:#ff6b6b + style UserSvc fill:#4ecdc4 + style OrderSvc fill:#45b7d1 + style NotifySvc fill:#f9ca24 +``` + +--- + +## 示例 3: 分析 ETL 数据管道 + +### 项目结构 + +``` +data-pipeline/ +├── pipeline.py +├── extractors/ +├── transformers/ +└── loaders/ +``` + +### 执行结果 + +``` +[30s] ✓ 检测到 ETL 模式 + 识别函数: extract_from_csv, transform_data, load_to_database + +[3min] ✓ 数据管道流程图已生成 +``` + +**生成的流程图**: + +```mermaid +flowchart LR + CSV[CSV 文件] --> Extract[Extract
提取数据] + Extract --> Clean[Clean
去重] + Clean --> Enrich[Enrich
添加元数据] + Enrich --> Validate[Validate
校验] + Validate --> DB[(PostgreSQL)] + Validate --> S3[(S3 存储)] +``` + +--- + +## 示例 4: 只分析特定模块 + +### 用户操作 + +``` +用户: 只分析 agents/ 目录的工作流编排 +``` + +### 执行过程 + +``` +✓ 限定分析范围: agents/ + +[跳过 Phase 1, Phase 2] + +[3min] ✓ 深度分析 agents/ 目录完成 + +识别出 LangGraph 编排: +- 3 个 Agent 节点 +- 2 个条件分支 +- 1 个循环优化路径 + +流程图已生成(仅包含 agents/ 的逻辑) +``` + +--- + +## 示例 5: 更新现有分析 + +### 场景 + +项目代码已更新,需要重新分析。 + +### 用户操作 + +``` +用户: 更新架构分析报告 +``` + +### 执行过程 + +``` +✓ 检测到已存在 PROJECT_ARCHITECTURE.md + +[对比文件时间戳] +- agents/graph.py 已修改(2 天前) +- backend/routes.py 未修改 + +⏳ 只重新分析有变更的部分... + +[2min] ✓ 增量分析完成 + - Agent 层新增 1 个节点: Optimizer + - 流程图已更新 + +✓ 报告已更新: PROJECT_ARCHITECTURE.md +``` + +--- + +## 最佳实践 + +### 1. 项目克隆后立即分析 + +```bash +git clone https://github.com/user/project.git +cd project +# 打开 Claude Code +``` + +``` +理解项目 +``` + +优势:快速建立项目全景认知。 + +### 2. 结合其他 Skills + +``` +理解项目,然后生成开发者入门文档 +``` + +先分析架构,再基于分析结果生成文档。 + +### 3. 针对性分析 + +``` +只分析后端的 API 路由和业务逻辑 +``` + +节省时间,聚焦关键部分。 + +--- + +## 故障排除示例 + +### 问题: 无法识别自定义框架 + +**场景**: 公司内部自研框架 + +**解决方案**: + +手动提示: + +``` +这个项目使用了内部框架 InternalFlow,它的工作流定义在 workflows/ 目录, +请分析 workflows/ 中的 YAML 文件来理解流程编排。 +``` + +--- + +## 更多示例 + +查看 `patterns.md` 了解各种架构模式的详细识别案例。 diff --git a/codebase_architecture_analyzer_v1/reference/knowledge.md b/codebase_architecture_analyzer_v1/reference/knowledge.md new file mode 100644 index 0000000..d351647 --- /dev/null +++ b/codebase_architecture_analyzer_v1/reference/knowledge.md @@ -0,0 +1,511 @@ +# 架构分析方法论 + +本文档提供代码库架构分析的核心方法论和最佳实践。 + +## 目录 + +- [1. 子系统边界识别](#1-子系统边界识别) +- [2. 工作流模式识别](#2-工作流模式识别) +- [3. 通信机制识别](#3-通信机制识别) +- [4. Mermaid 图表选择策略](#4-mermaid-图表选择策略) +- [5. 业务函数识别规则](#5-业务函数识别规则) + +--- + +## 1. 子系统边界识别 + +### 规则 1: 目录命名模式 + +通过目录名称识别子系统: + +| 目录模式 | 子系统类型 | 常见技术栈 | +|---------|-----------|-----------| +| `frontend/`, `ui/`, `web/`, `client/` | 前端子系统 | React, Vue, Angular | +| `backend/`, `api/`, `server/` | 后端子系统 | FastAPI, Express, Django | +| `agent/`, `agents/`, `workers/` | Agent 系统 | LangGraph, CrewAI, Celery | +| `services/` + 多个子目录 | 微服务集群 | Spring Boot, Go microservices | +| `database/`, `models/`, `schema/` | 数据层 | SQLAlchemy, Prisma | +| `shared/`, `common/`, `lib/` | 共享库 | 工具函数、类型定义 | + +### 规则 2: 独立配置文件识别 + +每个子系统通常有独立的配置文件: + +``` +frontend/ +├── package.json → 独立的 Node.js 项目 +├── tsconfig.json +└── vite.config.js + +backend/ +├── requirements.txt → 独立的 Python 项目 +├── pyproject.toml +└── Dockerfile +``` + +**识别方法**: +```bash +# 查找独立的依赖文件 +find . -name "package.json" -o -name "requirements.txt" -o -name "go.mod" +``` + +### 规则 3: Docker Compose 服务划分 + +分析 `docker-compose.yml` 识别服务边界: + +```yaml +services: + frontend: # 前端服务 + build: ./frontend + api: # API 服务 + build: ./backend + worker: # 后台任务 + build: ./worker + db: # 数据库 + image: postgres:15 +``` + +每个 service 通常对应一个独立的子系统。 + +--- + +## 2. 工作流模式识别 + +### 模式 1: Multi-Agent 编排 + +**特征**: +- 导入 `langgraph`, `crewai`, `autogen` +- 存在 `StateGraph()`, `Crew()`, `Sequential()` 调用 +- 使用 `add_node()`, `add_edge()` 方法 + +**提取方法**: + +1. **定位编排定义** + ```bash + grep -r "StateGraph\|Crew\|AutoGen" --include="*.py" + ``` + +2. **提取 Agent 节点** + ```python + # 示例代码 + graph = StateGraph(AgentState) + graph.add_node("researcher", research_agent) # Agent 1 + graph.add_node("writer", writing_agent) # Agent 2 + graph.add_node("reviewer", review_agent) # Agent 3 + ``` + +3. **分析状态流转** + ```python + graph.add_edge("researcher", "writer") # 顺序流转 + graph.add_conditional_edges("writer", should_revise, { + "revise": "researcher", # 条件分支 + "finish": END + }) + ``` + +**生成图表类型**: `stateDiagram-v2` + +--- + +### 模式 2: 数据管道(ETL/Pipeline) + +**特征**: +- 目录名包含 `pipeline`, `etl`, `workflow` +- 函数名包含 `extract`, `transform`, `load` +- 使用 Airflow, Prefect, Dagster 框架 + +**提取方法**: + +1. **识别管道阶段** + ```python + # 示例代码 + def run_pipeline(source): + raw = extract(source) # 阶段 1 + clean = transform(raw) # 阶段 2 + load(clean) # 阶段 3 + ``` + +2. **追踪数据转换** + - 输入:CSV 文件 + - → DataFrame (pandas) + - → 清洗后 DataFrame + - → PostgreSQL 表 + +**生成图表类型**: `flowchart LR` (从左到右) + +--- + +### 模式 3: 事件驱动架构 + +**特征**: +- 使用 `EventEmitter`, `event_bus`, `@subscribe` +- 发布订阅模式:`emit()`, `on()`, `subscribe()` +- 消息队列:RabbitMQ, Kafka, Redis Pub/Sub + +**提取方法**: + +1. **识别事件定义** + ```python + # 发布事件 + event_bus.emit("order_created", order) + ``` + +2. **识别订阅者** + ```python + @event_bus.on("order_created") + def handle_order(order): + send_confirmation(order) + + @event_bus.on("order_created") + def update_inventory(order): + inventory.decrease(order.items) + ``` + +**生成图表类型**: `graph TB` (显示发布-订阅关系) + +--- + +### 模式 4: 微服务调用链 + +**特征**: +- `docker-compose.yml` 中有多个 services +- 使用 `requests.get()`, `httpx.get()` 调用其他服务 +- gRPC 调用:`stub.MethodCall()` + +**提取方法**: + +1. **识别服务间调用** + ```python + # api-gateway 调用其他服务 + user = requests.get("http://user-service/users/{id}") + order = requests.post("http://order-service/orders", ...) + ``` + +2. **绘制调用拓扑** + - api-gateway → user-service + - api-gateway → order-service + - order-service → payment-service + +**生成图表类型**: `graph TB` (服务拓扑) + +--- + +### 模式 5: 传统分层架构(MVC) + +**特征**: +- 目录结构:`controllers/`, `services/`, `models/` +- 装饰器:`@app.route`, `@Controller` +- ORM 使用:SQLAlchemy, Sequelize + +**提取方法**: + +1. **识别三层结构** + - Controller: 处理 HTTP 请求 + - Service: 业务逻辑 + - Model: 数据模型 + +2. **追踪调用链** + ``` + routes.py (@app.route) + → UserService.create() + → User model + → Database + ``` + +**生成图表类型**: `graph TD` (分层图) + +--- + +## 3. 通信机制识别 + +### HTTP/REST API + +**搜索关键词**: +```bash +# 服务端 +grep -r "@app\.(get|post|put|delete)" --include="*.py" +grep -r "router\.(get|post)" --include="*.js" +grep -r "@RestController" --include="*.java" + +# 客户端 +grep -r "axios\.(get|post)" --include="*.js" +grep -r "requests\.(get|post)" --include="*.py" +grep -r "fetch(" --include="*.ts" +``` + +### WebSocket + +**搜索关键词**: +```bash +grep -r "WebSocket\|socket.io\|ws://" --include="*.{py,js,ts}" +``` + +### 消息队列 + +**搜索关键词**: +```bash +# RabbitMQ +grep -r "pika\|RabbitMQ" --include="*.py" + +# Kafka +grep -r "kafka\|KafkaProducer" --include="*.{py,java}" + +# Redis Pub/Sub +grep -r "redis.*publish\|redis.*subscribe" --include="*.py" +``` + +### gRPC + +**搜索关键词**: +```bash +grep -r "grpc\|\.proto" --include="*.{py,go,java}" +``` + +--- + +## 4. Mermaid 图表选择策略 + +根据识别到的模式选择合适的图表类型: + +| 场景 | 图表类型 | 适用情况 | +|------|---------|---------| +| 状态转换明显(Multi-Agent) | `stateDiagram-v2` | 有明确的状态节点和转换条件 | +| 顺序+条件流程(业务流程) | `flowchart TD` | 顺序执行 + if/else 分支 | +| 数据管道(ETL) | `flowchart LR` | 线性的数据转换流程 | +| 系统拓扑(微服务) | `graph TB` | 多个系统/服务的交互关系 | +| 时序交互(API 调用) | `sequenceDiagram` | 多个参与者的时序消息传递 | +| 并发任务 | `graph TB` + subgraph | 多个并行任务分组 | + +### 语法注意事项 + +**⚠️ Mermaid 语法约束(基于版本 11.x)**: +- **stateDiagram-v2**: 禁用 `--` 分隔符(会报错 "No such shape: divider") +- **stateDiagram-v2**: 不支持 `
` 标签 +- **sequenceDiagram**: `alt/loop/par` 块必须正确配对 `end` +- **所有类型**: 避免过深嵌套的控制结构 + +**stateDiagram-v2 限制**: +- ❌ 不支持 `
` 标签,使用 `note` 块代替 +- ❌ 不支持 `--` 分隔符 +- ❌ 标签文本避免 `!=`, `==` 等比较运算符 +- ✅ 复杂信息放在 `note right/left of NodeName` 块中 + +**flowchart/graph**: +- ✅ 可使用 `
` 换行 +- ✅ 支持富文本标签 +- ✅ 使用 `style` 设置节点颜色 + +### 示例:选择决策树 + +``` +检测到的特征: + ├─ 有状态变量 + 转换逻辑? + │ → 是:使用 stateDiagram-v2 + │ → 否:继续判断 + │ + ├─ 有多个参与者 + 时序消息? + │ → 是:使用 sequenceDiagram + │ → 否:继续判断 + │ + ├─ 线性数据转换? + │ → 是:使用 flowchart LR + │ → 否:继续判断 + │ + └─ 默认:使用 graph TB 或 flowchart TD +``` + +--- + +## 5. 业务函数识别规则 + +### 排除辅助函数 + +**规则**:以下函数不算业务逻辑 + +```python +# 1. 私有函数(下划线开头) +def _internal_helper(): + pass + +# 2. 工具函数 +def format_date(date): + pass + +def validate_email(email): + pass + +# 3. Getter/Setter +def get_user(): + pass + +def set_config(): + pass + +# 4. 过短的函数(< 5 行) +def simple_wrapper(): + return another_function() +``` + +### 识别业务函数 + +**特征 1:函数名包含业务关键词** + +```python +业务动词: +- process_*, handle_*, execute_*, run_* +- create_*, update_*, delete_* +- generate_*, analyze_*, calculate_* +- search_*, fetch_*, query_* +- build_*, transform_*, convert_* +``` + +**特征 2:处理核心数据模型** + +```python +# 函数参数或返回值包含核心数据类 +def process_order(order: Order) -> OrderResult: # ✓ 业务函数 + ... + +def format_string(s: str) -> str: # ✗ 工具函数 + ... +``` + +**特征 3:函数体较长(> 10 行)** + +通常业务逻辑较复杂,函数体较长。 + +**特征 4:调用外部服务或数据库** + +```python +def create_user(data): + user = User(**data) + db.session.add(user) # ✓ 数据库操作 + db.session.commit() + send_email(user.email) # ✓ 外部服务 + return user +``` + +--- + +## 6. 调用链追踪深度控制 + +### 最大深度策略 + +**问题**:递归追踪可能陷入无限循环 + +**解决方案**:限制最大深度 + +```python +MAX_DEPTH = 5 # 最多追踪 5 层 + +def trace_calls(func_name, current_depth=0): + if current_depth >= MAX_DEPTH: + return + + calls = extract_function_calls(func_name) + for call in calls: + trace_calls(call, current_depth + 1) +``` + +### 广度优先 vs 深度优先 + +**广度优先(BFS)**: +- 优先展示同一层级的所有函数 +- 适合识别并发任务 + +**深度优先(DFS)**: +- 优先追踪单一调用链 +- 适合追踪数据转换流程 + +**推荐**:对于流程分析,使用 **广度优先**。 + +--- + +## 7. 最佳实践 + +### ✅ 应该做的 + +1. **先宽后深** - 先了解整体结构,再深入细节 +2. **只读分析** - 不修改任何代码 +3. **标注位置** - 所有结论都附带文件:行号 +4. **可视化优先** - 用图表表达复杂关系 +5. **分阶段输出** - 边分析边展示进度 + +### ❌ 不应该做的 + +1. **不要臆测** - 所有结论必须基于代码事实 +2. **不要分析 node_modules/** - 跳过第三方依赖 +3. **不要暴露敏感信息** - 不读取 `.env`, `secrets.yaml` +4. **不要过度深入** - 不需要分析每一个辅助函数 +5. **不要修改代码** - 纯只读分析 + +--- + +## 8. 故障排除 + +### 问题 1: 找不到入口点 + +**症状**:无法识别主函数 + +**解决方案**: +```bash +# 多种方式查找 +grep -r "if __name__ == '__main__'" --include="*.py" +grep -r "@app.route\|@app.post" --include="*.py" +grep -r "func main()" --include="*.go" +ls -la | grep -i "main\|index\|app" +``` + +### 问题 2: 调用链太复杂 + +**症状**:函数调用超过 100 层 + +**解决方案**: +- 只追踪业务函数,忽略工具函数 +- 限制最大深度为 5 +- 聚焦核心路径(最常用的调用链) + +### 问题 3: 动态导入无法追踪 + +**症状**:Python 的 `importlib`, JavaScript 的 `require(variable)` + +**解决方案**: +- 结合运行时日志分析 +- 搜索字符串模式猜测可能的模块名 +- 在报告中标注"动态导入,无法静态分析" + +--- + +## 9. 工具推荐 + +### Python 项目 + +- `ast` 模块 - 解析 Python AST +- `radon` - 复杂度分析 +- `pydeps` - 依赖可视化 + +### JavaScript/TypeScript 项目 + +- `@typescript-eslint/parser` - 解析 TS AST +- `madge` - 依赖关系图 +- `dependency-cruiser` - 依赖验证 + +### Go 项目 + +- `go-callvis` - 调用图可视化 +- `gocyclo` - 圈复杂度 + +### 通用工具 + +- `tree` - 目录结构可视化 +- `tokei` - 代码统计 +- `cloc` - 代码行数统计 + +--- + +## 10. 参考资源 + +- **C4 模型**: 系统架构可视化的四层模型 +- **UML 类图**: 面向对象系统的标准表示 +- **事件风暴**: 领域驱动设计的建模方法 +- **架构决策记录 (ADR)**: 记录架构决策的最佳实践 diff --git a/codebase_architecture_analyzer_v1/reference/patterns.md b/codebase_architecture_analyzer_v1/reference/patterns.md new file mode 100644 index 0000000..4ce5294 --- /dev/null +++ b/codebase_architecture_analyzer_v1/reference/patterns.md @@ -0,0 +1,641 @@ +# 常见架构模式参考 + +本文档提供各种架构模式的识别方法和 Mermaid 模板。 + +## 目录 + +- [1. Multi-Agent 架构](#1-multi-agent-架构) +- [2. 微服务架构](#2-微服务架构) +- [3. 事件驱动架构](#3-事件驱动架构) +- [4. 数据管道(ETL)](#4-数据管道etl) +- [5. 分层架构(MVC)](#5-分层架构mvc) +- [6. CQRS 架构](#6-cqrs-架构) + +--- + +## 1. Multi-Agent 架构 + +### 模式 1.1: LangGraph 编排 + +**代码特征**: +```python +from langgraph.graph import StateGraph, END + +# 定义状态 +class AgentState(TypedDict): + query: str + data: List[str] + result: str + +# 创建图 +graph = StateGraph(AgentState) + +# 添加节点(Agent) +graph.add_node("researcher", research_agent) +graph.add_node("writer", writing_agent) + +# 添加边(流转规则) +graph.add_edge("researcher", "writer") +graph.add_conditional_edges( + "writer", + should_continue, + { + "continue": "researcher", + "end": END + } +) + +# 设置入口 +graph.set_entry_point("researcher") +``` + +**识别方法**: +1. 搜索 `from langgraph` 或 `StateGraph` +2. 提取所有 `add_node()` 调用 → Agent 清单 +3. 提取所有 `add_edge()` 和 `add_conditional_edges()` → 流转规则 +4. 读取每个 Agent 函数的实现 + +**Mermaid 模板**: +```mermaid +stateDiagram-v2 + [*] --> Researcher: 用户查询 + Researcher --> Writer: 数据收集完成 + Writer --> QualityChecker: 生成草稿 + + QualityChecker --> Researcher: 质量不足
评分 < 7 + QualityChecker --> [*]: 质量通过 + + note right of Researcher + 文件: agents/researcher.py:45 + 职责: 调用搜索 API 收集资料 + 输入: ResearchTask + 输出: List[Document] + end note + + note right of Writer + 文件: agents/writer.py:78 + 职责: 基于资料生成报告 + 输入: List[Document] + 输出: Report + end note +``` + +**关键信息提取**: +- Agent 名称 +- 文件位置(文件:行号) +- 职责描述 +- 输入/输出类型 +- 条件分支逻辑 + +--- + +### 模式 1.2: CrewAI 编排 + +**代码特征**: +```python +from crewai import Agent, Task, Crew + +# 定义 Agent +researcher = Agent( + role="Researcher", + goal="Collect comprehensive information", + tools=[search_tool] +) + +writer = Agent( + role="Writer", + goal="Write engaging articles", + tools=[writing_tool] +) + +# 定义任务 +research_task = Task( + description="Research AI trends", + agent=researcher +) + +writing_task = Task( + description="Write article based on research", + agent=writer +) + +# 创建 Crew +crew = Crew( + agents=[researcher, writer], + tasks=[research_task, writing_task], + process=Process.sequential +) +``` + +**识别方法**: +1. 搜索 `from crewai` 或 `Agent(` +2. 提取所有 `Agent()` 定义 +3. 提取所有 `Task()` 定义 +4. 分析 `Crew()` 的 process 类型(sequential/hierarchical) + +**Mermaid 模板**: +```mermaid +flowchart TD + Start([开始]) --> Task1[Research Task
Agent: Researcher] + Task1 --> Task2[Writing Task
Agent: Writer] + Task2 --> End([结束]) + + style Task1 fill:#e1f5ff + style Task2 fill:#fff4e1 +``` + +--- + +### 模式 1.3: AutoGen 多智能体 + +**代码特征**: +```python +from autogen import AssistantAgent, UserProxyAgent + +# 定义 Agent +assistant = AssistantAgent( + name="assistant", + llm_config={"config_list": config_list} +) + +user_proxy = UserProxyAgent( + name="user_proxy", + code_execution_config={"work_dir": "coding"} +) + +# 发起对话 +user_proxy.initiate_chat( + assistant, + message="Analyze this dataset" +) +``` + +**Mermaid 模板**: +```mermaid +sequenceDiagram + participant User as UserProxy + participant Asst as AssistantAgent + + User->>Asst: 发起任务 + Asst->>Asst: 生成代码 + Asst->>User: 返回代码 + User->>User: 执行代码 + User->>Asst: 反馈执行结果 + Asst->>User: 最终答案 +``` + +--- + +## 2. 微服务架构 + +### 模式 2.1: Docker Compose 微服务 + +**代码特征**: +```yaml +# docker-compose.yml +services: + api-gateway: + build: ./api-gateway + ports: + - "8000:8000" + + user-service: + build: ./services/user-service + environment: + - DATABASE_URL=postgres://... + + order-service: + build: ./services/order-service + + notification-service: + build: ./services/notification-service +``` + +```python +# api-gateway/routes.py +@app.post("/orders") +def create_order(order_data): + # 调用 user-service + user = requests.get(f"http://user-service:8001/users/{user_id}") + + # 调用 order-service + order = requests.post("http://order-service:8002/orders", json=order_data) + + # 调用 notification-service + requests.post("http://notification-service:8003/notify", json={ + "user_id": user_id, + "order_id": order["id"] + }) + + return order +``` + +**识别方法**: +1. 读取 `docker-compose.yml`,提取所有 services +2. 在每个服务的代码中搜索 `requests.get|post`, `httpx.` +3. 提取目标 URL,识别服务间调用关系 + +**Mermaid 模板**: +```mermaid +graph TB + Client[客户端] --> Gateway[API Gateway
:8000] + + Gateway -->|GET /users/:id| UserSvc[User Service
:8001] + Gateway -->|POST /orders| OrderSvc[Order Service
:8002] + Gateway -->|POST /notify| NotifySvc[Notification Service
:8003] + + UserSvc --> UserDB[(User DB
PostgreSQL)] + OrderSvc --> OrderDB[(Order DB
PostgreSQL)] + + style Gateway fill:#ff6b6b + style UserSvc fill:#4ecdc4 + style OrderSvc fill:#45b7d1 + style NotifySvc fill:#f9ca24 +``` + +**关键信息提取**: +- 服务名称 +- 端口号 +- 服务间调用关系(from → to) +- 数据库连接 + +--- + +### 模式 2.2: Kubernetes 微服务 + +**代码特征**: +```yaml +# k8s/user-service.yaml +apiVersion: v1 +kind: Service +metadata: + name: user-service +spec: + selector: + app: user-service + ports: + - port: 8001 +``` + +**识别方法**: +1. 查找 `k8s/`, `kubernetes/`, `.yaml` 文件 +2. 提取所有 `kind: Service` 定义 + +--- + +## 3. 事件驱动架构 + +### 模式 3.1: 事件总线(Event Bus) + +**代码特征**: +```python +# event_bus.py +class EventBus: + def __init__(self): + self._listeners = {} + + def on(self, event_name, handler): + self._listeners.setdefault(event_name, []).append(handler) + + def emit(self, event_name, data): + for handler in self._listeners.get(event_name, []): + handler(data) + +# handlers.py +@event_bus.on("order_created") +def send_confirmation_email(order): + email.send(order.customer_email, ...) + +@event_bus.on("order_created") +def update_inventory(order): + inventory.decrease(order.items) + +@event_bus.on("order_created") +def log_order(order): + logger.info(f"Order {order.id} created") + +# service.py +def create_order(order_data): + order = Order(**order_data) + db.save(order) + event_bus.emit("order_created", order) # 发布事件 +``` + +**识别方法**: +1. 搜索 `emit(`, `publish(`, `dispatch(` +2. 搜索 `@on(`, `@subscribe(`, `.on(` +3. 提取事件名称和对应的处理器 + +**Mermaid 模板**: +```mermaid +graph TB + OrderService[Order Service] -->|emit| Event[order_created 事件] + + Event --> Handler1[send_confirmation_email
handlers.py:15] + Event --> Handler2[update_inventory
handlers.py:28] + Event --> Handler3[log_order
handlers.py:42] + + Handler1 --> EmailSvc[Email Service] + Handler2 --> InventoryDB[(Inventory DB)] + Handler3 --> Logger[Logger] + + style Event fill:#ffd93d,stroke:#333,stroke-width:3px +``` + +--- + +### 模式 3.2: 消息队列(RabbitMQ/Kafka) + +**代码特征**: +```python +# producer.py +import pika + +connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) +channel = connection.channel() +channel.queue_declare(queue='tasks') + +def publish_task(task_data): + channel.basic_publish( + exchange='', + routing_key='tasks', + body=json.dumps(task_data) + ) + +# consumer.py +def callback(ch, method, properties, body): + task = json.loads(body) + process_task(task) + +channel.basic_consume( + queue='tasks', + on_message_callback=callback, + auto_ack=True +) +``` + +**Mermaid 模板**: +```mermaid +graph LR + Producer[任务生产者] -->|发布| Queue[(RabbitMQ
tasks 队列)] + Queue -->|消费| Consumer1[Worker 1] + Queue -->|消费| Consumer2[Worker 2] + Queue -->|消费| Consumer3[Worker 3] + + style Queue fill:#ff6b6b +``` + +--- + +## 4. 数据管道(ETL) + +### 模式 4.1: 顺序管道 + +**代码特征**: +```python +def run_pipeline(source_file): + # Step 1: Extract + raw_data = extract_from_csv(source_file) + + # Step 2: Transform + cleaned_data = remove_duplicates(raw_data) + enriched_data = add_metadata(cleaned_data) + validated_data = validate_schema(enriched_data) + + # Step 3: Load + load_to_database(validated_data) + load_to_s3(validated_data) +``` + +**Mermaid 模板**: +```mermaid +flowchart LR + CSV[CSV 文件] --> Extract[Extract
提取数据] + Extract --> Clean[Clean
去重] + Clean --> Enrich[Enrich
添加元数据] + Enrich --> Validate[Validate
校验] + Validate --> DB[(PostgreSQL)] + Validate --> S3[(S3 存储)] + + style Extract fill:#e1f5ff + style Clean fill:#fff4e1 + style Enrich fill:#e8f5e8 + style Validate fill:#ffe1e1 +``` + +--- + +### 模式 4.2: Airflow DAG + +**代码特征**: +```python +from airflow import DAG +from airflow.operators.python import PythonOperator + +dag = DAG('data_pipeline', schedule_interval='@daily') + +extract_task = PythonOperator( + task_id='extract', + python_callable=extract_data, + dag=dag +) + +transform_task = PythonOperator( + task_id='transform', + python_callable=transform_data, + dag=dag +) + +load_task = PythonOperator( + task_id='load', + python_callable=load_data, + dag=dag +) + +extract_task >> transform_task >> load_task +``` + +**Mermaid 模板**: +```mermaid +graph LR + Start([每日触发]) --> Extract[Extract Task] + Extract --> Transform[Transform Task] + Transform --> Load[Load Task] + Load --> End([完成]) +``` + +--- + +## 5. 分层架构(MVC) + +### 模式 5.1: 三层架构 + +**代码特征**: +```python +# routes.py (Controller 层) +@app.route("/users", methods=["POST"]) +def create_user(): + data = request.json + user = UserService.create(data) # 调用 Service 层 + return jsonify(user.to_dict()) + +# services/user_service.py (Service 层) +class UserService: + @staticmethod + def create(data): + # 业务逻辑 + if not validate_email(data["email"]): + raise ValueError("Invalid email") + + user = User(**data) # 使用 Model 层 + db.session.add(user) + db.session.commit() + return user + +# models/user.py (Model 层) +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + email = db.Column(db.String(120), unique=True) + name = db.Column(db.String(80)) +``` + +**Mermaid 模板**: +```mermaid +graph TD + Client[HTTP 客户端] -->|POST /users| Controller[Controller
routes.py] + + Controller --> Service[Service 层
user_service.py] + Service --> Model[Model 层
user.py] + Model --> DB[(Database)] + + Service --> Validator[验证器
validate_email] + + style Controller fill:#ff6b6b + style Service fill:#4ecdc4 + style Model fill:#45b7d1 +``` + +--- + +## 6. CQRS 架构 + +### 模式 6.1: 命令查询分离 + +**代码特征**: +```python +# commands/create_order.py (写操作) +class CreateOrderCommand: + def execute(self, order_data): + order = Order(**order_data) + write_db.save(order) + event_bus.emit("order_created", order) + +# queries/get_order.py (读操作) +class GetOrderQuery: + def execute(self, order_id): + return read_db.query(Order).filter_by(id=order_id).first() +``` + +**Mermaid 模板**: +```mermaid +graph TB + Client[客户端] + + Client -->|写操作| CommandHandler[Command Handler] + CommandHandler --> WriteDB[(Write DB
PostgreSQL)] + CommandHandler -->|发布事件| EventBus[Event Bus] + + Client -->|读操作| QueryHandler[Query Handler] + QueryHandler --> ReadDB[(Read DB
Redis/Elasticsearch)] + + EventBus -->|同步| ReadDB + + style CommandHandler fill:#ff6b6b + style QueryHandler fill:#4ecdc4 +``` + +--- + +## 7. 混合架构识别 + +### 示例:微服务 + 事件驱动 + CQRS + +**特征**: +- 多个独立服务(微服务) +- 服务间通过事件通信(事件驱动) +- 每个服务内部 CQRS(命令查询分离) + +**Mermaid 模板**: +```mermaid +graph TB + subgraph "Order Service" + OrderCmd[Command Handler] + OrderQuery[Query Handler] + OrderWriteDB[(Write DB)] + OrderReadDB[(Read DB)] + end + + subgraph "Inventory Service" + InvCmd[Command Handler] + InvQuery[Query Handler] + InvWriteDB[(Write DB)] + InvReadDB[(Read DB)] + end + + EventBus[Event Bus
RabbitMQ] + + OrderCmd --> OrderWriteDB + OrderCmd --> EventBus + OrderQuery --> OrderReadDB + + EventBus -->|order_created| InvCmd + InvCmd --> InvWriteDB + InvQuery --> InvReadDB + + style EventBus fill:#ffd93d +``` + +--- + +## 8. 模式识别决策树 + +``` +1. 检测 docker-compose.yml 或 k8s/ 目录 + → 是: 可能是微服务架构 + → 否: 继续 + +2. 检测 agents/ 目录 OR langgraph/crewai 导入 + → 是: Multi-Agent 架构 + → 否: 继续 + +3. 检测 emit/publish/subscribe + → 是: 事件驱动架构 + → 否: 继续 + +4. 检测 extract/transform/load 函数 + → 是: 数据管道架构 + → 否: 继续 + +5. 检测 routes/ + services/ + models/ + → 是: 分层架构(MVC) + → 否: 继续 + +6. 默认: 通用应用,分析主要调用链 +``` + +--- + +## 9. 使用建议 + +1. **不要生搬硬套** - 并非所有项目都符合标准模式 +2. **可以组合** - 一个项目可能同时使用多种模式 +3. **关注核心** - 识别最重要的架构特征 +4. **标注依据** - 在报告中注明识别依据(代码位置) + +--- + +## 10. 扩展阅读 + +- **Martin Fowler's Architecture Patterns**: https://martinfowler.com/architecture/ +- **Microservices Patterns**: https://microservices.io/patterns/ +- **Event Driven Architecture**: https://martinfowler.com/articles/201701-event-driven.html diff --git a/codebase_architecture_analyzer_v1/reference/quick-scan.md b/codebase_architecture_analyzer_v1/reference/quick-scan.md new file mode 100644 index 0000000..4b62774 --- /dev/null +++ b/codebase_architecture_analyzer_v1/reference/quick-scan.md @@ -0,0 +1,408 @@ +# 快速扫描指南 + +本指南提供项目快速扫描的详细步骤。 + +## 目标 + +在 30 秒内识别: +- 项目类型 +- 主要编程语言 +- 核心框架 +- 子系统组成 + +--- + +## 步骤 1: 运行技术栈检测脚本(推荐) + +**使用自动化脚本**: + +```bash +python ~/.claude/skills/codebase-architecture-analyzer/scripts/detect_tech_stack.py . +``` + +**脚本输出示例**: + +```json +{ + "project_path": "/path/to/project", + "stacks": [ + { + "language": "Python", + "frameworks": ["FastAPI", "LangGraph"], + "config_file": "pyproject.toml", + "version": "3.11" + }, + { + "language": "TypeScript", + "frameworks": ["React", "Next.js"], + "version": ">=18" + } + ], + "docker": { + "containerized": true, + "compose": true, + "services": ["backend", "frontend", "redis"] + } +} +``` + +**从输出提取信息**: + +- `stacks[].language` - 主要编程语言 +- `stacks[].frameworks` - 核心框架列表 +- `stacks[].version` - 语言/运行时版本 +- `docker.services` - Docker 服务列表(如果有) + +**脚本支持的语言**: +- Python (FastAPI, Django, Flask, LangGraph, CrewAI) +- JavaScript/TypeScript (React, Vue, Next.js, Express, NestJS) +- Go (Gin, Gorilla Mux, Fiber) +- Rust (Actix Web, Rocket, Axum) +- Java (Spring Boot, Quarkus) + +--- + +## 步骤 1.5: 分析依赖关系(可选,用于深度分析) + +**使用依赖分析脚本**: + +```bash +python ~/.claude/skills/codebase-architecture-analyzer/scripts/extract_dependencies.py . +``` + +**脚本输出示例**: + +```json +{ + "project_path": ".", + "analyses": [ + { + "language": "Python", + "files_analyzed": 45, + "total_imports": 23, + "third_party_imports": ["fastapi", "pydantic", "langchain", "openai"], + "declared_dependencies": ["fastapi", "pydantic", "langchain", "openai", "requests"], + "undeclared_usage": [], + "unused_dependencies": ["requests"] + }, + { + "language": "JavaScript/TypeScript", + "dependencies": ["react", "next", "tailwindcss"], + "dev_dependencies": ["typescript", "@types/react", "eslint"], + "total_dependencies": 6 + } + ] +} +``` + +**关键信息提取**: + +- `third_party_imports` - 实际使用的第三方包 +- `declared_dependencies` - 在配置文件中声明的依赖 +- `undeclared_usage` - **缺失的依赖**(代码中使用了,但未在 requirements.txt/pyproject.toml 中声明) +- `unused_dependencies` - **冗余的依赖**(声明了但代码中未使用) + +**使用场景**: + +✅ **推荐使用**(当满足以下条件时): +- 需要验证依赖完整性 +- 准备部署到生产环境 +- 项目有复杂的依赖关系 +- 发现依赖相关的 bug + +⚠️ **可跳过**(当满足以下条件时): +- 快速了解项目即可 +- 项目很小(< 10 个文件) +- 只关注整体架构 + +**输出解读**: + +1. **缺失依赖警告**:如果 `undeclared_usage` 不为空,说明需要更新 requirements.txt +2. **冗余依赖清理**:如果 `unused_dependencies` 不为空,可以移除不需要的依赖 +3. **依赖健康度**:`total_imports` vs `declared_dependencies` 的比例 + +--- + +## 步骤 2: 检测技术栈(手动方法) + +如果脚本无法运行或需要更详细分析,使用以下手动方法: + +### Python 项目 + +**识别文件**: +```bash +# 优先级从高到低 +1. pyproject.toml # 现代 Python 项目(Poetry/Hatch) +2. setup.py # 传统 Python 包 +3. requirements.txt # 依赖清单 +4. Pipfile # Pipenv 项目 +5. environment.yml # Conda 项目 +``` + +**提取信息**: +```bash +# 从 pyproject.toml 提取 +cat pyproject.toml | grep "python =" # Python 版本 +cat pyproject.toml | grep "\[tool.poetry.dependencies\]" -A 20 # 依赖 + +# 从 requirements.txt 提取 +cat requirements.txt | grep -E "fastapi|django|flask|langgraph" +``` + +--- + +### JavaScript/TypeScript 项目 + +**识别文件**: +```bash +1. package.json # Node.js 项目 +2. yarn.lock # Yarn 包管理 +3. pnpm-lock.yaml # pnpm 包管理 +4. tsconfig.json # TypeScript 配置 +``` + +**提取信息**: +```bash +# 从 package.json 提取 +cat package.json | grep "\"react\"\|\"vue\"\|\"express\"\|\"next\"" +``` + +--- + +### Go 项目 + +**识别文件**: +```bash +1. go.mod # Go modules +2. go.sum # 依赖锁文件 +``` + +**提取信息**: +```bash +cat go.mod | grep "require" -A 20 +``` + +--- + +### Rust 项目 + +**识别文件**: +```bash +1. Cargo.toml # Rust 项目配置 +2. Cargo.lock # 依赖锁文件 +``` + +--- + +### Java 项目 + +**识别文件**: +```bash +1. pom.xml # Maven 项目 +2. build.gradle # Gradle 项目 +``` + +--- + +## 步骤 3: 扫描目录结构 + +### 列出顶层目录 + +```bash +ls -d */ | head -20 +``` + +### 识别子系统模式 + +| 目录名 | 子系统类型 | +|-------|-----------| +| `frontend/`, `ui/`, `web/`, `client/` | 前端 | +| `backend/`, `api/`, `server/` | 后端 | +| `agents/`, `workers/` | Agent 系统 | +| `services/` + 多个子目录 | 微服务 | +| `src/components/` | React/Vue 组件 | +| `app/` | Next.js/Django 应用 | + +--- + +## 步骤 4: 检测关键配置文件 + +### Docker 相关 + +```bash +# docker-compose.yml → 多服务架构 +cat docker-compose.yml | grep "services:" -A 50 + +# Dockerfile → 容器化应用 +ls -la | grep Dockerfile +``` + +### 环境配置 + +```bash +# .env.example → 环境变量配置 +cat .env.example | grep -E "DATABASE_URL|REDIS_URL|API_KEY" +``` + +--- + +## 步骤 5: 识别项目规模 + +### 统计代码文件 + +```bash +# 统计各语言文件数量 +find . -type f -name "*.py" | wc -l +find . -type f -name "*.ts" -o -name "*.tsx" | wc -l +find . -type f -name "*.go" | wc -l +``` + +### 估算代码规模 + +```bash +# 使用 cloc(如果已安装) +cloc . --exclude-dir=node_modules,venv,.git +``` + +--- + +## 输出格式模板 + +``` +✓ 项目类型: [AI 研究助手 / Web 应用 / CLI 工具 / ...] +✓ 主语言: Python 3.11 (156 个文件) +✓ 次要语言: TypeScript (89 个文件) +✓ 核心框架: + - 后端: FastAPI 0.104.1 + - 前端: React 18.2.0 + - AI: LangGraph 0.2.5 +✓ 子系统: + - frontend/ (React + TypeScript) + - backend/ (FastAPI + Python) + - agents/ (LangGraph) +✓ 容器化: 是(docker-compose.yml) +✓ 代码规模: 约 12,500 行 +``` + +--- + +## 常见框架识别规则 + +### Python Web 框架 + +```python +依赖中包含: +- fastapi → FastAPI +- django → Django +- flask → Flask +- starlette → Starlette +- aiohttp → aiohttp +``` + +### Python AI 框架 + +```python +依赖中包含: +- langgraph → LangGraph +- crewai → CrewAI +- autogen → AutoGen +- langchain → LangChain +- transformers → Hugging Face +``` + +### JavaScript 框架 + +```json +dependencies 中包含: +- "react" → React +- "vue" → Vue.js +- "next" → Next.js +- "express" → Express.js +- "nestjs" → NestJS +``` + +--- + +## 快速判断项目类型 + +### CLI 工具 + +**特征**: +- 存在 `cli.py`, `main.py`, `cmd/` 目录 +- 依赖包含 `click`, `typer`, `argparse` +- `pyproject.toml` 中有 `[project.scripts]` + +### Web 应用 + +**特征**: +- 存在 `routes.py`, `views.py`, `app.py` +- 依赖包含 `fastapi`, `django`, `express` +- 存在 `assets/`, `static/` 目录 + +### AI/ML 项目 + +**特征**: +- 存在 `models/`, `agents/`, `pipelines/` +- 依赖包含 `tensorflow`, `pytorch`, `langchain` +- 存在 `notebooks/` 目录(Jupyter) + +### 数据工程项目 + +**特征**: +- 存在 `etl/`, `pipelines/`, `dags/` +- 依赖包含 `airflow`, `prefect`, `dbt` +- 存在 `sql/`, `queries/` 目录 + +--- + +## 故障排除 + +### 问题 1: 无法识别项目类型 + +**解决方案**: +1. 查看 README.md 的描述 +2. 搜索常见入口文件:`main.*`, `index.*`, `app.*` +3. 查看 git 提交历史:`git log --oneline | head -20` + +### 问题 2: 多语言混合项目 + +**解决方案**: +- 统计各语言文件数量,确定主次 +- 识别前后端分离:`frontend/` + `backend/` + +--- + +## 完整示例 + +```bash +# 1. 检测配置文件 +ls -la | grep -E "package.json|pyproject.toml|go.mod|Cargo.toml" + +# 输出: pyproject.toml, package.json (前后端分离项目) + +# 2. 读取 Python 依赖 +cat pyproject.toml | grep -A 30 dependencies + +# 输出: fastapi, langgraph, openai (AI Web 应用) + +# 3. 读取 JS 依赖 +cat package.json | grep -A 20 dependencies + +# 输出: react, typescript (React 前端) + +# 4. 扫描目录 +ls -d */ + +# 输出: frontend/, backend/, agents/, docs/ + +# 5. 统计代码 +find backend -name "*.py" | wc -l # 156 个文件 +find frontend -name "*.ts*" | wc -l # 89 个文件 + +# 最终识别结果: +✓ 项目类型: AI 驱动的 Web 应用 +✓ 主语言: Python (后端 + AI) +✓ 次要语言: TypeScript (前端) +✓ 核心框架: FastAPI + LangGraph + React +✓ 架构: 前后端分离 + Multi-Agent +``` diff --git a/codebase_architecture_analyzer_v1/reference/report-generation.md b/codebase_architecture_analyzer_v1/reference/report-generation.md new file mode 100644 index 0000000..9381a91 --- /dev/null +++ b/codebase_architecture_analyzer_v1/reference/report-generation.md @@ -0,0 +1,259 @@ +# Phase 5: 报告生成指南 + +**执行时间**:约 30 秒 + +**目标**:汇总所有分析结果,生成完整的架构分析报告 + +--- + +## 生成步骤 + +### 步骤 1: 收集所有分析结果 + +从前 4 个 Phase 收集以下信息: + +1. **Phase 1 - 快速扫描** + - 项目类型 + - 主要编程语言 + - 核心框架 + - 子系统列表 + - 代码规模 + +2. **Phase 2 - 系统架构** + - 系统架构 Mermaid 图 + - 子系统清单(名称、路径、技术栈、入口文件) + - 通信关系列表 + +3. **Phase 3 - 核心流程** + - 工作流 Mermaid 图(stateDiagram-v2 / flowchart) + - 执行单元清单(Agent / 服务 / 函数) + - 关键决策点 + +4. **Phase 4 - 数据流** + - 序列图 Mermaid + - 数据模型清单 + - 数据转换链路 + +### 步骤 2: 使用模板生成报告 + +使用 `assets/report.md` 模板,将收集的信息填充到相应章节。 + +### 步骤 3: 添加快速上手指南 + +从项目文件中提取以下信息: + +1. **环境要求** + - 从 README.md 或 pyproject.toml 提取 + - Python/Node.js 版本要求 + - 系统依赖(Docker、Redis 等) + +2. **安装步骤** + - 依赖安装命令 + - 环境变量配置 + - 数据库初始化 + +3. **启动命令** + - 开发环境启动命令 + - 生产环境部署命令 + - 测试运行命令 + +4. **核心入口文件** + - 主入口文件路径 + - 配置文件路径 + - 关键模块路径 + +### 步骤 4: 生成代码位置索引 + +汇总所有关键文件的位置: + +``` +代码位置索引: +├─ 入口文件 +│ ├─ 后端入口: backend/app/main.py:1 +│ └─ 前端入口: frontend/src/main.tsx:1 +├─ 核心模块 +│ ├─ Agent 编排: agents/graph.py:23 +│ ├─ 研究 Agent: agents/nodes.py:45 +│ └─ 写作 Agent: agents/nodes.py:78 +├─ API 端点 +│ ├─ 研究 API: backend/app/routes.py:42 +│ └─ WebSocket: backend/app/routes.py:58 +└─ 数据模型 + ├─ ResearchTask: models/task.py:8 + └─ Report: models/report.py:22 +``` + +### 步骤 5: 保存报告 + +将生成的报告保存到项目根目录: + +- **保存路径**: `PROJECT_ARCHITECTURE.md` + +--- + +## 报告结构模板 + +```markdown +# [项目名] 架构分析报告 + +> 生成时间: [YYYY-MM-DD HH:MM:SS] +> 分析工具: Claude Code - Codebase Architecture Analyzer + +--- + +## 一、项目概览 + +**项目类型**: [自动推断] +**主要语言**: [Python 3.11] +**核心框架**: [FastAPI + LangGraph] +**代码规模**: [156 个 Python 文件, 89 个 TypeScript 文件] + +**子系统**: +- frontend/ (React + TypeScript) +- backend/ (FastAPI + Python) +- agents/ (LangGraph) + +--- + +## 二、系统架构 + +### 2.1 架构图 + +```mermaid +[Phase 2 生成的 Mermaid 图] +``` + +### 2.2 子系统详情 + +[Phase 2 生成的子系统清单] + +### 2.3 通信机制 + +[Phase 2 生成的通信关系列表] + +--- + +## 三、核心业务流程 + +### 3.1 流程图 + +```mermaid +[Phase 3 生成的 Mermaid 图] +``` + +### 3.2 执行单元清单 + +[Phase 3 生成的 Agent/服务/函数清单] + +### 3.3 关键决策点 + +[Phase 3 识别的条件分支和路由规则] + +--- + +## 四、数据流分析 + +### 4.1 序列图 + +```mermaid +[Phase 4 生成的 Mermaid 序列图] +``` + +### 4.2 数据模型清单 + +[Phase 4 生成的数据模型列表] + +### 4.3 数据转换链路 + +[Phase 4 追踪的数据流转路径] + +--- + +## 五、快速上手指南 + +### 5.1 环境要求 + +- Python 3.11+ +- Node.js 18+ +- Docker (可选) + +### 5.2 安装步骤 + +```bash +# 1. 安装后端依赖 +pip install -r backend/requirements.txt + +# 2. 安装前端依赖 +cd frontend && npm install + +# 3. 配置环境变量 +cp .env.example .env +``` + +### 5.3 启动命令 + +```bash +# 启动后端 +cd backend && uvicorn app.main:app --reload + +# 启动前端 +cd frontend && npm start +``` + +### 5.4 核心入口文件 + +- 后端入口: `backend/app/main.py` +- 前端入口: `frontend/src/main.tsx` +- Agent 编排: `agents/graph.py` + +--- + +## 六、代码位置索引 + +[Phase 2-4 汇总的所有关键文件位置] + +--- + +## 附录:分析方法说明 + +本报告由 Claude Code 的 `codebase-architecture-analyzer` Skill 自动生成。 + +分析方法: +- Phase 1: 快速扫描(识别技术栈) +- Phase 2: 系统架构分析(Explore sub-agent) +- Phase 3: 核心流程提取(智能模式识别) +- Phase 4: 数据流追踪(类型追踪) +- Phase 5: 报告生成(本文档) +``` + +--- + +## 输出示例 + +执行完成后,向用户显示: + +``` +✓ 分析完成! + +报告已保存: PROJECT_ARCHITECTURE.md + +核心发现: +- 采用 LangGraph 编排 Multi-Agent 工作流 +- 支持条件路由和循环优化 +- 数据流: 查询 → 搜索 → 写作 → 审核 → 报告 + +快速上手: +1. 安装依赖: pip install -r requirements.txt +2. 配置环境: cp .env.example .env +3. 启动后端: uvicorn app.main:app --reload +4. 启动前端: cd frontend && npm start +``` + +--- + +## 注意事项 + +1. **Mermaid 图表检查**:确保所有 Mermaid 代码块语法正确 +2. **代码位置准确性**:所有文件路径和行号必须准确 +3. **快速上手可用性**:安装步骤必须可执行,不能遗漏关键步骤 +4. **避免敏感信息**:不要在报告中包含 `.env` 文件内容或 API 密钥 diff --git a/codebase_architecture_analyzer_v1/reference/system-analysis.md b/codebase_architecture_analyzer_v1/reference/system-analysis.md new file mode 100644 index 0000000..9af8ae9 --- /dev/null +++ b/codebase_architecture_analyzer_v1/reference/system-analysis.md @@ -0,0 +1,124 @@ +# Phase 2: 系统架构分析指南 + +**执行时间**:约 2 分钟 + +**目标**:识别子系统边界和通信机制 + +--- + +## ⚠️ 重要约束 + +**Explore agent 只返回文本结果,不要生成任何文件。** + +--- + +## 分析方法 + +使用 **Task tool** 调用内置的 **Explore sub-agent** 进行深度分析。 + +### 步骤 1: 启动 Task tool + +指定以下参数: +- `subagent_type: Explore` +- `description: "系统架构分析"` +- `prompt`: 包含下面的详细任务 + +### 步骤 2: Sub-agent 任务定义 + +``` +⚠️ 重要约束:本次分析只返回文本结果,禁止生成任何文件(.md, .txt 等)。 +所有 Mermaid 图表、清单、分析结论都应包含在你的文本回复中,不要使用 Write 或其他文件创建工具。 + +分析项目的子系统划分和通信机制: + +1. 子系统边界识别 + - 扫描顶层目录,识别 frontend/, backend/, agents/ 等模式 + - 查找独立配置文件(package.json, requirements.txt) + - 解析 docker-compose.yml 中的 services + +2. API 端点定位 + - 搜索:@app.(get|post|put|delete) + - 搜索:@router., app.route + - 提取端点路径和处理函数位置 + +3. 通信协议识别 + - HTTP: requests.get/post, axios, fetch + - WebSocket: WebSocket, socket.io + - 消息队列: RabbitMQ, Kafka, Redis pub/sub + - gRPC: grpc, .proto + +4. 数据库连接 + - PostgreSQL: psycopg2, SQLAlchemy + - Redis: redis.Redis + - MongoDB: pymongo + +输出格式: +- 子系统清单(名称、路径、技术栈、入口文件:行号) +- 通信关系(from → to, 协议, 端点) +- 生成 Mermaid graph TB 架构图(使用 `
` 换行) +``` + +### 步骤 3: 执行过程 + +1. **Explore sub-agent 自动执行**:使用 Glob、Grep、Read 工具搜索代码 +2. **接收结果**:sub-agent 返回分析报告 +3. **验证结果**:检查是否包含所有子系统和通信关系 + +--- + +## 预期输出格式 + +### 1. Mermaid 系统架构图 + +```mermaid +graph TB + User[用户] --> Frontend[前端
React + TypeScript] + Frontend -->|HTTP POST /api/research| Backend[后端 API
FastAPI] + Frontend -->|WebSocket /ws| Backend + Backend -->|invoke| AgentLayer[Agent 编排层
LangGraph] + AgentLayer -->|缓存| Redis[(Redis)] + AgentLayer -->|持久化| DB[(PostgreSQL)] + + style AgentLayer fill:#f9f,stroke:#333,stroke-width:3px +``` + +### 2. 代码位置索引 + +- Frontend 入口: `frontend/src/main.tsx:1` +- Backend 入口: `backend/app/main.py:1` +- API 定义: `backend/app/routes.py:42` +- Agent 调用: `backend/app/routes.py:58` + +### 3. 子系统清单 + +``` +识别出 3 个子系统: +├─ Frontend (frontend/) +│ ├─ 技术: React 18 + TypeScript +│ └─ 入口: src/main.tsx:1 +├─ Backend (backend/) +│ ├─ 技术: FastAPI + Python 3.11 +│ └─ 入口: app/main.py:1 +└─ Agent Layer (agents/) + ├─ 技术: LangGraph 0.2.5 + └─ 入口: graph.py:1 +``` + +### 4. 通信机制 + +``` +- Frontend → Backend: WebSocket (/ws) +- Frontend → Backend: HTTP POST (/api/research) +- Backend → Agent Layer: 直接调用 invoke() +- Agent Layer → Redis: 缓存中间结果 +- Agent Layer → PostgreSQL: 持久化数据 +``` + +--- + +## 注意事项 + +1. **配置文件优先**:优先解析 docker-compose.yml,它通常包含完整的服务拓扑 +2. **多种通信协议**:一个项目可能同时使用 HTTP、WebSocket、消息队列 +3. **入口文件定位**:确保记录每个子系统的主入口文件和行号 +4. **Mermaid 样式**:使用 `style` 语法突出显示核心子系统 diff --git a/codebase_architecture_analyzer_v1/reference/workflow-extraction.md b/codebase_architecture_analyzer_v1/reference/workflow-extraction.md new file mode 100644 index 0000000..7476f48 --- /dev/null +++ b/codebase_architecture_analyzer_v1/reference/workflow-extraction.md @@ -0,0 +1,582 @@ +# 工作流提取详细指南 + +本指南提供通用的工作流提取算法,适用于各种架构模式。 + +## ⚠️ 重要约束 + +**在调用 Task tool 时,必须在 prompt 开头包含以下约束:** + +``` +⚠️ 重要约束:本次分析只返回文本结果,禁止生成任何文件(.md, .txt 等)。 +所有 Mermaid 图表、清单、分析结论都应包含在你的文本回复中,不要使用 Write 或其他文件创建工具。 +``` + +**Explore agent 只返回文本结果,不要生成任何文件。** + +--- + +## 核心思想 + +**不预设架构类型,而是从代码中提取执行流程特征。** + +--- + +## 算法概览 + +``` +1. 定位入口点(CLI/Web/定时任务) +2. 提取函数调用链(递归追踪) +3. 识别业务函数(排除辅助函数) +4. 分析流程模式(顺序/分支/循环/并发) +5. 生成 Mermaid 图表 +``` + +--- + +## 步骤 1: 定位入口点 + +### 1.1 CLI 应用 + +**Python**: +```bash +grep -rn "if __name__ == '__main__'" --include="*.py" +grep -rn "@click.command\|@click.group" --include="*.py" +grep -rn "argparse.ArgumentParser" --include="*.py" +``` + +**示例**: +```python +# main.py:45 +if __name__ == "__main__": + main() # ← 入口函数 +``` + +**Go**: +```bash +grep -rn "func main()" --include="*.go" +``` + +--- + +### 1.2 Web 应用 + +**FastAPI/Flask**: +```bash +grep -rn "@app\.(get|post|put|delete)" --include="*.py" +grep -rn "@router\." --include="*.py" +``` + +**示例**: +```python +# routes.py:42 +@app.post("/api/research") # ← 入口点 +def research_endpoint(query: str): + ... +``` + +**Express.js**: +```bash +grep -rn "app\.(get|post)" --include="*.js" +grep -rn "router\." --include="*.js" +``` + +--- + +### 1.3 定时任务 + +**Celery**: +```bash +grep -rn "@celery.task\|@shared_task" --include="*.py" +``` + +**Airflow**: +```bash +grep -rn "DAG(" --include="*.py" +``` + +**Cron/APScheduler**: +```bash +grep -rn "@schedule\|@cron" --include="*.py" +``` + +--- + +### 1.4 消息消费者 + +**RabbitMQ/Kafka**: +```bash +grep -rn "basic_consume\|KafkaConsumer" --include="*.py" +``` + +**示例**: +```python +# consumer.py:25 +def callback(ch, method, properties, body): # ← 入口点 + process_message(body) +``` + +--- + +## 步骤 2: 提取函数调用链 + +### 2.1 读取入口函数 + +从步骤 1 识别的入口点开始: + +```python +# 示例:routes.py:42 +@app.post("/api/research") +def research_endpoint(query: str): + task = create_task(query) # 调用 1 + results = executor.run(task) # 调用 2 + return format_response(results) # 调用 3 +``` + +**提取调用清单**: +``` +research_endpoint +├── create_task +├── executor.run +└── format_response +``` + +--- + +### 2.2 递归追踪 + +读取 `executor.run` 的实现: + +```python +# executor.py:78 +def run(self, task): + data = self.fetch_data(task) # 调用 2.1 + processed = self.process(data) # 调用 2.2 + return self.finalize(processed) # 调用 2.3 +``` + +**更新调用树**: +``` +research_endpoint +├── create_task +├── executor.run +│ ├── fetch_data +│ ├── process +│ └── finalize +└── format_response +``` + +--- + +### 2.3 控制递归深度 + +**问题**: 可能陷入无限递归 + +**解决方案**: 限制最大深度 + +```python +MAX_DEPTH = 5 # 最多追踪 5 层 + +def trace_calls(func_name, depth=0): + if depth >= MAX_DEPTH: + return [] + + calls = extract_calls_from_function(func_name) + result = [] + + for call in calls: + result.append(call) + result.extend(trace_calls(call, depth + 1)) + + return result +``` + +--- + +## 步骤 3: 识别业务函数 + +### 3.1 排除辅助函数 + +**规则**: + +| 函数特征 | 是否保留 | +|---------|---------| +| 私有函数 `_helper()` | ❌ 排除 | +| 工具函数 `format_date()` | ❌ 排除 | +| Getter/Setter | ❌ 排除 | +| 函数体 < 5 行 | ❌ 排除 | +| 包含业务关键词 | ✅ 保留 | +| 调用数据库/外部 API | ✅ 保留 | +| 处理核心数据模型 | ✅ 保留 | + +--- + +### 3.2 业务关键词清单 + +```python +BUSINESS_KEYWORDS = [ + # 处理动词 + "process", "handle", "execute", "run", + + # CRUD 操作 + "create", "update", "delete", "query", "fetch", + + # 业务逻辑 + "calculate", "analyze", "generate", "transform", + "search", "filter", "validate", "verify", + + # 工作流 + "orchestrate", "coordinate", "schedule" +] +``` + +**示例判断**: +```python +✅ process_order() # 包含 "process" +✅ create_user() # 包含 "create" +✅ analyze_data() # 包含 "analyze" +❌ format_string() # 工具函数 +❌ _internal_helper() # 私有函数 +❌ get_config() # Getter +``` + +--- + +### 3.3 检测数据库/API 调用 + +**数据库调用**: +```python +def create_user(data): + user = User(**data) + db.session.add(user) # ✅ 数据库操作 + db.session.commit() + return user +``` + +**外部 API 调用**: +```python +def fetch_weather(city): + response = requests.get( # ✅ 外部 API + f"https://api.weather.com/{city}" + ) + return response.json() +``` + +**搜索模式**: +```bash +# 数据库 +grep -n "db\.session\|query(\|execute(" file.py + +# HTTP 请求 +grep -n "requests\.\|httpx\.\|fetch(" file.py +``` + +--- + +## 步骤 4: 分析流程模式 + +### 4.1 顺序流程 + +**代码特征**: +```python +def process(): + step1() + step2() + step3() +``` + +**识别**: 连续的函数调用,无分支 + +**生成图表**: `flowchart TD` (从上到下) + +--- + +### 4.2 条件分支 + +**代码特征**: +```python +def process(data): + if validate(data): + path_a() + else: + path_b() +``` + +**识别**: `if/else`, `match/case`, 三元运算符 + +**生成图表**: `flowchart TD` (带菱形决策节点) + +--- + +### 4.3 循环优化 + +**代码特征**: +```python +def optimize(data): + while not is_good_enough(data): + data = improve(data) + return data +``` + +**识别**: `while` + 条件判断 + +**生成图表**: `flowchart TD` (带循环边) + +--- + +### 4.4 状态机 + +**代码特征**: +```python +state = "init" + +if state == "init": + state = "processing" +elif state == "processing": + if condition: + state = "done" + else: + state = "error" +``` + +**识别**: 状态变量 + 状态转换逻辑 + +**生成图表**: `stateDiagram-v2` + +--- + +### 4.5 并发编排 + +**Python asyncio**: +```python +results = await asyncio.gather( + task1(), + task2(), + task3() +) +``` + +**JavaScript Promise.all**: +```javascript +const results = await Promise.all([ + fetchUser(), + fetchOrders(), + fetchProducts() +]); +``` + +**识别**: `asyncio.gather`, `Promise.all`, `WaitGroup` + +**生成图表**: `graph TB` + subgraph (并行任务分组) + +--- + +### 4.6 图编排(LangGraph) + +**代码特征**: +```python +graph = StateGraph(State) +graph.add_node("a", func_a) +graph.add_node("b", func_b) +graph.add_edge("a", "b") +graph.add_conditional_edges("b", router, { + "continue": "a", + "end": END +}) +``` + +**识别**: `add_node`, `add_edge`, `add_conditional_edges` + +**生成图表**: `stateDiagram-v2` + +--- + +## 步骤 5: 生成 Mermaid 图表 + +**⚠️ Mermaid 语法约束(版本 11.x)**: +- **stateDiagram-v2**: 禁用 `--` 分隔符,不支持 `
` +- **sequenceDiagram**: `alt/loop/par` 块必须正确配对 `end` +- **所有类型**: 使用 `
` 换行(stateDiagram-v2 除外) + +### 5.1 选择图表类型 + +```python +def select_diagram_type(flow_pattern): + if flow_pattern == "state_machine": + return "stateDiagram-v2" + + elif flow_pattern == "concurrent": + return "graph TB" # 带 subgraph + + elif flow_pattern == "sequential_with_conditions": + return "flowchart TD" + + elif flow_pattern == "linear_pipeline": + return "flowchart LR" + + else: + return "graph TB" # 默认 +``` + +--- + +### 5.2 生成状态图(Multi-Agent) + +**输入数据**: +```python +nodes = [ + {"name": "researcher", "file": "agents/nodes.py", "line": 45}, + {"name": "writer", "file": "agents/nodes.py", "line": 78} +] + +edges = [ + {"from": "researcher", "to": "writer"}, + { + "from": "writer", + "to": "researcher", + "condition": "quality < 7" + } +] +``` + +**生成代码**: +```python +def generate_state_diagram(nodes, edges): + mermaid = "stateDiagram-v2\n" + mermaid += f" [*] --> {nodes[0]['name']}\n" + + for edge in edges: + if "condition" in edge: + mermaid += f" {edge['from']} --> {edge['to']}: {edge['condition']}\n" + else: + mermaid += f" {edge['from']} --> {edge['to']}\n" + + # 添加注释 + for node in nodes: + mermaid += f"\n note right of {node['name']}\n" + mermaid += f" {node['file']}:{node['line']}\n" + mermaid += f" end note\n" + + return mermaid +``` + +--- + +### 5.3 生成流程图(顺序+分支) + +**输入数据**: +```python +steps = [ + {"name": "extract", "type": "process"}, + {"name": "validate", "type": "decision"}, + {"name": "transform", "type": "process"}, + {"name": "load", "type": "process"} +] + +connections = [ + {"from": "extract", "to": "validate"}, + {"from": "validate", "to": "transform", "condition": "valid"}, + {"from": "validate", "to": "error_handler", "condition": "invalid"} +] +``` + +**生成代码**: +```python +def generate_flowchart(steps, connections): + mermaid = "flowchart TD\n" + + # 定义节点 + for step in steps: + if step["type"] == "decision": + mermaid += f" {step['name']}{{{step['name']}}}\n" # 菱形 + else: + mermaid += f" {step['name']}[{step['name']}]\n" # 矩形 + + # 连接 + for conn in connections: + if "condition" in conn: + mermaid += f" {conn['from']} -->|{conn['condition']}| {conn['to']}\n" + else: + mermaid += f" {conn['from']} --> {conn['to']}\n" + + return mermaid +``` + +--- + +## 完整示例 + +### 示例代码 + +```python +# routes.py:42 +@app.post("/api/research") +def research_endpoint(query: str): + task = create_research_task(query) + results = execute_research(task) + return results + +# research.py:15 +def execute_research(task): + # 并发搜索 + search_results = asyncio.gather( + search_google(task.query), + search_arxiv(task.query) + ) + + # 生成报告 + if len(search_results) > 5: + report = generate_detailed_report(search_results) + else: + report = generate_summary(search_results) + + return report +``` + +--- + +### 提取结果 + +**入口点**: `research_endpoint` (routes.py:42) + +**调用链**: +``` +research_endpoint +├── create_research_task +└── execute_research + ├── search_google (并发) + ├── search_arxiv (并发) + └── generate_detailed_report OR generate_summary (条件) +``` + +**流程模式**: 顺序 + 并发 + 条件分支 + +--- + +### 生成 Mermaid 图 + +```mermaid +flowchart TD + Start([API 请求]) --> CreateTask[创建研究任务] + CreateTask --> Concurrent{并发搜索} + + Concurrent --> Google[搜索 Google] + Concurrent --> ArXiv[搜索 ArXiv] + + Google --> Merge[合并结果] + ArXiv --> Merge + + Merge --> Decision{结果数量} + Decision -->|> 5 篇| Detailed[生成详细报告] + Decision -->|≤ 5 篇| Summary[生成摘要] + + Detailed --> End([返回结果]) + Summary --> End +``` + +## 最佳实践 + +1. **先广度后深度** - 先了解整体流程 +2. **限制递归深度** - 避免无限循环 +3. **过滤辅助函数** - 只关注业务逻辑 +4. **标注代码位置** - 便于验证 +5. **可视化优先** - 图表比文字更直观 diff --git a/codebase_architecture_analyzer_v1/scripts/detect_tech_stack.py b/codebase_architecture_analyzer_v1/scripts/detect_tech_stack.py new file mode 100644 index 0000000..7350c8c --- /dev/null +++ b/codebase_architecture_analyzer_v1/scripts/detect_tech_stack.py @@ -0,0 +1,266 @@ +#!/usr/bin/env python3 +""" +技术栈检测脚本 + +用法: python detect_tech_stack.py [项目路径] + +输出: JSON 格式的技术栈信息 +""" + +import json +import sys +from pathlib import Path +from typing import Dict, List, Optional + + +def detect_python_stack(project_path: Path) -> Optional[Dict]: + """检测 Python 技术栈""" + result = {"language": "Python", "frameworks": [], "dependencies": []} + + # 查找配置文件 + pyproject = project_path / "pyproject.toml" + requirements = project_path / "requirements.txt" + setup_py = project_path / "setup.py" + + if pyproject.exists(): + content = pyproject.read_text(encoding='utf-8') + result["config_file"] = "pyproject.toml" + + # 检测 Python 版本 + if 'python = "^' in content: + version = content.split('python = "^')[1].split('"')[0] + result["version"] = version + + # 检测框架 + if "fastapi" in content.lower(): + result["frameworks"].append("FastAPI") + if "django" in content.lower(): + result["frameworks"].append("Django") + if "flask" in content.lower(): + result["frameworks"].append("Flask") + if "langgraph" in content.lower(): + result["frameworks"].append("LangGraph") + if "crewai" in content.lower(): + result["frameworks"].append("CrewAI") + + elif requirements.exists(): + content = requirements.read_text(encoding='utf-8') + result["config_file"] = "requirements.txt" + + # 检测框架 + for line in content.split('\n'): + line = line.strip().lower() + if line.startswith('fastapi'): + result["frameworks"].append("FastAPI") + elif line.startswith('django'): + result["frameworks"].append("Django") + elif line.startswith('flask'): + result["frameworks"].append("Flask") + elif line.startswith('langgraph'): + result["frameworks"].append("LangGraph") + + else: + return None + + return result + + +def detect_javascript_stack(project_path: Path) -> Optional[Dict]: + """检测 JavaScript/TypeScript 技术栈""" + package_json = project_path / "package.json" + + if not package_json.exists(): + return None + + result = {"language": "JavaScript/TypeScript", "frameworks": [], "dependencies": []} + + try: + import json as json_module + content = json_module.loads(package_json.read_text(encoding='utf-8')) + + # 检测框架 + deps = {**content.get("dependencies", {}), **content.get("devDependencies", {})} + + if "react" in deps: + result["frameworks"].append("React") + if "@types/react" in deps: + result["language"] = "TypeScript" + if "vue" in deps: + result["frameworks"].append("Vue.js") + if "next" in deps: + result["frameworks"].append("Next.js") + if "express" in deps: + result["frameworks"].append("Express.js") + if "@nestjs/core" in deps: + result["frameworks"].append("NestJS") + + # 检测 Node 版本 + if "engines" in content and "node" in content["engines"]: + result["version"] = content["engines"]["node"] + + except Exception as e: + print(f"Error parsing package.json: {e}", file=sys.stderr) + return None + + return result + + +def detect_go_stack(project_path: Path) -> Optional[Dict]: + """检测 Go 技术栈""" + go_mod = project_path / "go.mod" + + if not go_mod.exists(): + return None + + result = {"language": "Go", "frameworks": [], "dependencies": []} + + content = go_mod.read_text(encoding='utf-8') + + # 检测 Go 版本 + for line in content.split('\n'): + if line.strip().startswith('go '): + result["version"] = line.strip().split()[1] + break + + # 检测框架 + if "gin-gonic/gin" in content: + result["frameworks"].append("Gin") + if "gorilla/mux" in content: + result["frameworks"].append("Gorilla Mux") + if "fiber" in content: + result["frameworks"].append("Fiber") + + return result + + +def detect_rust_stack(project_path: Path) -> Optional[Dict]: + """检测 Rust 技术栈""" + cargo_toml = project_path / "Cargo.toml" + + if not cargo_toml.exists(): + return None + + result = {"language": "Rust", "frameworks": [], "dependencies": []} + + content = cargo_toml.read_text(encoding='utf-8') + + # 检测框架 + if "actix-web" in content: + result["frameworks"].append("Actix Web") + if "rocket" in content: + result["frameworks"].append("Rocket") + if "axum" in content: + result["frameworks"].append("Axum") + + return result + + +def detect_java_stack(project_path: Path) -> Optional[Dict]: + """检测 Java 技术栈""" + pom_xml = project_path / "pom.xml" + build_gradle = project_path / "build.gradle" + + if pom_xml.exists(): + result = {"language": "Java", "frameworks": [], "build_tool": "Maven"} + content = pom_xml.read_text(encoding='utf-8') + + # 检测框架 + if "spring-boot" in content: + result["frameworks"].append("Spring Boot") + if "quarkus" in content: + result["frameworks"].append("Quarkus") + + return result + + elif build_gradle.exists(): + result = {"language": "Java", "frameworks": [], "build_tool": "Gradle"} + content = build_gradle.read_text(encoding='utf-8') + + # 检测框架 + if "spring-boot" in content: + result["frameworks"].append("Spring Boot") + + return result + + return None + + +def detect_docker_usage(project_path: Path) -> Dict: + """检测 Docker 使用情况""" + docker_compose = project_path / "docker-compose.yml" + dockerfile = project_path / "Dockerfile" + + result = {"containerized": False, "services": []} + + if docker_compose.exists(): + result["containerized"] = True + result["compose"] = True + + # 简单解析 services + content = docker_compose.read_text(encoding='utf-8') + in_services = False + for line in content.split('\n'): + if line.strip() == "services:": + in_services = True + continue + if in_services and line.startswith(' ') and ':' in line and not line.strip().startswith('#'): + service_name = line.strip().rstrip(':') + if service_name and not service_name.startswith('-'): + result["services"].append(service_name) + + elif dockerfile.exists(): + result["containerized"] = True + result["compose"] = False + + return result + + +def main(): + # 获取项目路径 + if len(sys.argv) > 1: + project_path = Path(sys.argv[1]) + else: + project_path = Path.cwd() + + if not project_path.exists(): + print(f"Error: Path {project_path} does not exist", file=sys.stderr) + sys.exit(1) + + # 检测各种技术栈 + stacks = [] + + python_stack = detect_python_stack(project_path) + if python_stack: + stacks.append(python_stack) + + js_stack = detect_javascript_stack(project_path) + if js_stack: + stacks.append(js_stack) + + go_stack = detect_go_stack(project_path) + if go_stack: + stacks.append(go_stack) + + rust_stack = detect_rust_stack(project_path) + if rust_stack: + stacks.append(rust_stack) + + java_stack = detect_java_stack(project_path) + if java_stack: + stacks.append(java_stack) + + # 检测 Docker + docker_info = detect_docker_usage(project_path) + + # 输出结果 + result = { + "project_path": str(project_path), + "stacks": stacks, + "docker": docker_info + } + + print(json.dumps(result, indent=2, ensure_ascii=False)) + + +if __name__ == "__main__": + main() diff --git a/codebase_architecture_analyzer_v1/scripts/extract_dependencies.py b/codebase_architecture_analyzer_v1/scripts/extract_dependencies.py new file mode 100644 index 0000000..ad420ac --- /dev/null +++ b/codebase_architecture_analyzer_v1/scripts/extract_dependencies.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 +""" +依赖提取脚本 + +用法: python extract_dependencies.py [项目路径] + +输出: JSON 格式的依赖信息 +""" + +import ast +import json +import sys +from pathlib import Path +from typing import Dict, List, Set + + +def extract_python_imports(file_path: Path) -> Set[str]: + """从 Python 文件提取 import""" + imports = set() + + try: + with open(file_path, 'r', encoding='utf-8') as f: + tree = ast.parse(f.read(), filename=str(file_path)) + + for node in ast.walk(tree): + if isinstance(node, ast.Import): + for alias in node.names: + # 只保留顶层包名 + module = alias.name.split('.')[0] + imports.add(module) + + elif isinstance(node, ast.ImportFrom): + if node.module: + module = node.module.split('.')[0] + imports.add(module) + + except Exception as e: + print(f"Warning: Failed to parse {file_path}: {e}", file=sys.stderr) + + return imports + + +def analyze_python_project(project_path: Path) -> Dict: + """分析 Python 项目的依赖""" + all_imports = set() + file_count = 0 + + # 遍历所有 Python 文件 + for py_file in project_path.rglob("*.py"): + # 跳过虚拟环境和 node_modules + if any(part in py_file.parts for part in ['venv', 'env', '.venv', 'node_modules', '__pycache__']): + continue + + file_count += 1 + imports = extract_python_imports(py_file) + all_imports.update(imports) + + # 读取声明的依赖 + declared_deps = set() + + requirements_txt = project_path / "requirements.txt" + if requirements_txt.exists(): + for line in requirements_txt.read_text(encoding='utf-8').split('\n'): + line = line.strip() + if line and not line.startswith('#'): + # 去掉版本号 + dep = line.split('==')[0].split('>=')[0].split('~=')[0].strip() + declared_deps.add(dep) + + pyproject_toml = project_path / "pyproject.toml" + if pyproject_toml.exists(): + content = pyproject_toml.read_text(encoding='utf-8') + # 简单提取(不使用 toml 库) + in_deps = False + for line in content.split('\n'): + if '[tool.poetry.dependencies]' in line or '[project.dependencies]' in line: + in_deps = True + continue + if in_deps and line.strip().startswith('['): + break + if in_deps and '=' in line: + dep = line.split('=')[0].strip().strip('"') + if dep != 'python': + declared_deps.add(dep) + + # Python 标准库(部分常见的) + stdlib = { + 'os', 'sys', 'json', 'time', 'datetime', 'collections', 'itertools', + 'functools', 'pathlib', 're', 'math', 'random', 'typing', 'abc', + 'asyncio', 'logging', 'unittest', 'argparse', 'subprocess', 'io', + 'copy', 'pickle', 'sqlite3', 'http', 'urllib', 'email', 'uuid' + } + + # 区分第三方包和标准库 + third_party = all_imports - stdlib + + return { + "language": "Python", + "files_analyzed": file_count, + "total_imports": len(all_imports), + "third_party_imports": list(sorted(third_party)), + "declared_dependencies": list(sorted(declared_deps)), + "undeclared_usage": list(sorted(third_party - declared_deps)), + "unused_dependencies": list(sorted(declared_deps - third_party)) + } + + +def analyze_javascript_project(project_path: Path) -> Dict: + """分析 JavaScript 项目的依赖""" + package_json = project_path / "package.json" + + if not package_json.exists(): + return None + + try: + import json as json_module + content = json_module.loads(package_json.read_text(encoding='utf-8')) + + dependencies = content.get("dependencies", {}) + dev_dependencies = content.get("devDependencies", {}) + + return { + "language": "JavaScript/TypeScript", + "dependencies": list(dependencies.keys()), + "dev_dependencies": list(dev_dependencies.keys()), + "total_dependencies": len(dependencies) + len(dev_dependencies) + } + + except Exception as e: + print(f"Error parsing package.json: {e}", file=sys.stderr) + return None + + +def main(): + # 获取项目路径 + if len(sys.argv) > 1: + project_path = Path(sys.argv[1]) + else: + project_path = Path.cwd() + + if not project_path.exists(): + print(f"Error: Path {project_path} does not exist", file=sys.stderr) + sys.exit(1) + + results = [] + + # 分析 Python + python_result = analyze_python_project(project_path) + if python_result["files_analyzed"] > 0: + results.append(python_result) + + # 分析 JavaScript + js_result = analyze_javascript_project(project_path) + if js_result: + results.append(js_result) + + # 输出结果 + output = { + "project_path": str(project_path), + "analyses": results + } + + print(json.dumps(output, indent=2, ensure_ascii=False)) + + +if __name__ == "__main__": + main() diff --git a/codebase_architecture_analyzer_v1/skill.md b/codebase_architecture_analyzer_v1/skill.md new file mode 100644 index 0000000..2e554c5 --- /dev/null +++ b/codebase_architecture_analyzer_v1/skill.md @@ -0,0 +1,165 @@ +--- +name: codebase-architecture-analyzer +description: 用于理解开源项目。当用户说"理解项目"、"分析代码库"、"项目架构"、"梳理架构"时自动触发。自动识别技术栈、子系统边界、核心业务流程,生成 Mermaid 架构图和流程图。 +allowed-tools: [Read, Glob, Grep, Bash, Task] +--- + +# 代码库架构分析 Skill + +你是架构逆向工程专家,能从源代码反向推导系统架构和业务逻辑流程。 + +## 核心任务 + +- 📊 识别子系统边界(frontend/backend/agent/database) +- 🔄 追踪核心业务流程(工作流编排/数据管道/事件驱动) +- 📈 生成 Mermaid 架构图和流程图 +- 🧠 智能模式识别(Multi-Agent/微服务/分层架构) +- 📝 生成项目理解报告 + +--- + +## 执行流程 + +### ⚠️ 路径使用规范 + +所有脚本路径**必须使用波浪号 `~` 表示法**(跨平台兼容): + +```bash +export PYTHONIOENCODING=utf-8 && python ~/.claude/skills/codebase-architecture-analyzer/scripts/detect_tech_stack.py . +``` + +**说明**: +- `~/.claude/...` 在 Windows/macOS/Linux 均可正确解析 +- `export PYTHONIOENCODING=utf-8` 用于处理中文/emoji 输出 + +--- + +### Phase 1: 快速扫描 + +**目标**:识别项目类型和主要组成 + +**执行步骤**: +1. **运行技术栈检测脚本** + - 使用 Bash 工具执行:`export PYTHONIOENCODING=utf-8 && python ~/.claude/skills/codebase-architecture-analyzer/scripts/detect_tech_stack.py .` + - 脚本会输出 JSON 格式的技术栈信息(语言、框架、Docker 配置等) + - 解析 JSON 结果获取: + - 主要编程语言(Python/JavaScript/Go/Rust/Java) + - 核心框架(FastAPI/React/Django/LangGraph 等) + - Docker 服务配置 + +2. **分析依赖关系** + - 使用 Bash 工具执行:`export PYTHONIOENCODING=utf-8 && python ~/.claude/skills/codebase-architecture-analyzer/scripts/extract_dependencies.py .` + - 脚本会分析实际使用的依赖 vs 声明的依赖 + - 识别: + - 第三方依赖列表 + - 缺失的依赖声明(使用了但未声明) + - 未使用的依赖(声明了但未使用) + +3. **扫描目录结构** + - 使用 Glob 工具识别顶层目录(frontend/, backend/, agents/, services/ 等) + - 确认子系统边界 + +4. **统计代码规模** + - 使用 Bash 工具执行:`find . -type f -name "*.py" | wc -l`(针对主要语言) + - 估算项目规模 + +**详细指南**: `reference/quick-scan.md` + +--- + +### Phase 2: 系统架构分析 + +**目标**:识别子系统边界和通信机制 + +**执行步骤**: +1. **先读取详细指南**:使用 Read 工具读取 `~/.claude/skills/codebase-architecture-analyzer/reference/system-analysis.md` +2. **按照指南执行分析**:使用 Task tool 调用 Explore sub-agent 进行分析 + +**预期输出**: +- Mermaid graph TB 系统架构图 +- 子系统清单(名称、路径、技术栈、入口文件:行号) +- 通信关系列表 + +--- + +### Phase 3: 核心流程提取 + +**目标**:识别项目的核心业务逻辑编排 + +**执行步骤**: +1. **先读取详细指南**:使用 Read 工具读取 `~/.claude/skills/codebase-architecture-analyzer/reference/workflow-extraction.md` +2. **智能路由策略**:根据 Phase 1 的扫描结果自动选择分析重点 + - 检测到 agents/ + (langgraph/crewai/autogen) → Multi-Agent 工作流编排 + - 检测到 docker-compose.yml 多服务 → 微服务调用链 + - 检测到 airflow/workflow/pipeline → 数据管道流程 + - 检测到 EventEmitter/event_bus → 事件驱动流程 + - 其他 → 通用业务流程调用链 +3. **按照指南执行分析**:使用 Task tool 调用 Explore sub-agent 进行分析 + +**预期输出**: +- Mermaid 流程图(stateDiagram-v2 / flowchart TD) +- 执行单元清单(Agent/服务/函数,含文件:行号、职责、输入/输出) +- 关键决策点(条件函数、分支路径) + +--- + +### Phase 4: 数据流追踪 + +**目标**:追踪核心数据的转换链路 + +**执行步骤**: +1. **先读取详细指南**:使用 Read 工具读取 `~/.claude/skills/codebase-architecture-analyzer/reference/data-flow-analysis.md` +2. **按照指南执行分析**:使用 Task tool 调用 Explore sub-agent 进行分析 + +**预期输出**: +- Mermaid 序列图 +- 数据模型清单(名称、文件:行号、用途、字段) +- 数据转换链路 + +--- + +### Phase 5: 生成最终报告 + +**目标**:汇总所有分析结果,生成 Markdown 报告文件 + +**执行步骤**: +1. **先读取详细指南**:使用 Read 工具读取 `~/.claude/skills/codebase-architecture-analyzer/reference/report-generation.md` +2. **收集所有Phase的结果**:汇总 Phase 1-4 的分析数据 +3. **该阶段必须生成报告文件**:在项目根目录下创建真实的 `PROJECT_ARCHITECTURE.md`文件,并使用Write工具写入 + +**报告内容**: + +- 项目概览(Phase 1 结果) +- 系统架构(Phase 2 架构图 + 子系统详情) +- 核心业务流程(Phase 3 流程图 + 执行单元清单) +- 数据流分析(Phase 4 序列图 + 数据模型清单) +- 快速上手指南(环境要求、安装步骤、启动命令) +- 代码位置索引(所有关键文件清单) + +**完成后告知用户**: +``` +✅ 分析完成!报告已保存: PROJECT_ARCHITECTURE.md +``` + +--- + +## 方法论参考 + +执行过程中根据需要查阅以下文档: + +- **reference/knowledge.md** - 架构分析方法论(子系统识别规则、通信机制识别、Mermaid 图表选择策略、业务函数识别规则) +- **reference/patterns.md** - 常见架构模式参考(Multi-Agent、微服务、事件驱动、ETL、MVC、CQRS) +- **reference/examples.md** - 实际使用案例(5 个完整示例) + +--- + +## 注意事项 + +1. **只读分析** - 本 Skill 不会修改任何代码文件 +2. **敏感信息** - 不会在报告中暴露 `.env` 等敏感文件内容 +3. **私有仓库** - 不会访问网络,仅分析本地代码 +4. **自动跳过** - 自动跳过 node_modules, venv, .git 等常见依赖目录 + +--- + +现在开始分析当前项目。