Skip to content

g457165949/codeanalyze

Repository files navigation

🤖 代码分析Agent系统

一个基于LangChainLangGraph构建的多Agent协作代码分析系统。该系统通过AI驱动的智能调度,协调多个专业化Agent完成复杂的代码分析任务。

✨ 特性

  • 🧠 AI智能调度: 通过AI理解用户意图,动态调度不同Agent
  • 🔍 代码搜索: 强大的代码搜索和查找功能
  • 📁 结构分析: 深度分析项目文件结构和技术栈
  • 🌲 AST分析: 基于AST的代码分析,生成调用图和依赖图
  • 🔬 质量诊断: 多维度代码质量检测和问题诊断
  • 🔧 自动修复: 基于诊断结果的智能代码修复
  • ⚙️ 工作流编排: 使用LangGraph进行复杂任务编排

🏗️ 系统架构

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   AI调度Agent   │────│   LangGraph      │────│   工作流编排    │
│  (智能协调)     │    │   工作流引擎     │    │   (任务管理)    │
└─────────────────┘    └──────────────────┘    └─────────────────┘
          │                       │                       │
          ▼                       ▼                       ▼
┌─────────────────────────────────────────────────────────────────┐
│                        专业化Agent集群                          │
├─────────────────┬─────────────────┬─────────────────┬──────────┤
│  🔍 代码查询    │  📁 目录扫描    │  🌲 AST分析     │ 🔬 质量诊断│
│  CodeQueryAgent │DirectoryScanner │  ASTAnalyzer   │Diagnostician│
│                 │     Agent       │     Agent      │    Agent   │
├─────────────────┴─────────────────┴─────────────────┴──────────┤
│                   🔧 代码修复Agent                              │
│                   CodeFixerAgent                              │
└─────────────────────────────────────────────────────────────────┘

🤖 Agent详细介绍

1. AI调度Agent (AISchedulerAgent)

职责: 系统的大脑,负责理解用户意图并智能调度其他Agent

  • 任务规划和分解
  • Agent间协调和结果整合
  • 动态执行策略调整

2. 代码查询Agent (CodeQueryAgent)

职责: 在代码库中进行高效搜索和内容查找

  • 文本搜索和正则表达式匹配
  • 符号查找和引用追踪
  • 文件内容读取和分析

3. 目录扫描Agent (DirectoryScannerAgent)

职责: 分析项目结构和组织方式

  • 生成目录树和文件统计
  • 技术栈检测和框架识别
  • 项目类型分析

4. AST分析Agent (ASTAnalyzerAgent)

职责: 进行静态代码分析和图表生成

  • AST解析和结构分析
  • 函数调用图生成
  • 类关系图构建
  • 集成Jedi和Rope工具

5. 代码诊断Agent (CodeDiagnosticianAgent)

职责: 多维度代码质量检测

  • 静态分析和风格检查
  • 安全漏洞检测
  • 性能问题识别
  • 可维护性评估

6. 代码修复Agent (CodeFixerAgent)

职责: 自动化代码问题修复

  • 基于诊断结果的自动修复
  • 代码格式化和规范化
  • 导入语句优化
  • 重构建议和实施

🚀 快速开始

1. 安装依赖

cd eagle-codeanalyze
pip install -r requirements.txt

2. 配置环境

复制环境变量模板:

cp .env.example .env

编辑 .env 文件,设置你的配置:

使用OpenAI模型:

LLM_PROVIDER=openai
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini

使用Qwen模型(阿里云灵积):

LLM_PROVIDER=qwen
QWEN_API_KEY=your_qwen_api_key_here
QWEN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
QWEN_MODEL=qwen-plus

3. 运行示例

# 运行演示模式
python main.py --demo

# 查看当前模型信息
python main.py --model-info

# 分析指定目录
python main.py --directory /path/to/your/project --request "分析代码质量"

# 保存分析报告
python main.py --directory . --request "全面分析" --save

💻 使用示例

命令行使用

# 基础分析
python main.py -d ./my_project -r "分析项目结构"

# 详细质量分析
python main.py -d ./my_project -r "检查代码质量,找出问题并修复" --save

# JSON格式输出
python main.py -d ./my_project -r "生成AST调用图" -o json

Python API使用

import asyncio
from main import CodeAnalyzer

async def analyze_my_project():
    analyzer = CodeAnalyzer()
    
    result = await analyzer.analyze_code(
        user_request="分析代码质量并生成改进建议",
        target_directory="./my_project",
        output_format="rich",
        save_report=True
    )
    
    print(f"分析完成: {result['success']}")
    print(f"执行时间: {result['execution_time']:.2f}秒")

# 运行分析
asyncio.run(analyze_my_project())

单独使用Agent

from agents import DirectoryScannerAgent, CodeDiagnosticianAgent

# 使用目录扫描Agent
scanner = DirectoryScannerAgent()
result = scanner.analyze_directory("./project")
print(f"发现 {result['statistics']['total_files']} 个文件")

# 使用代码诊断Agent
diagnostician = CodeDiagnosticianAgent()
result = diagnostician.analyze_quality("./project/main.py")
print(f"质量评分: {result['summary']['quality_score']}/100")

🛠️ 高级功能

自定义工作流

from core.workflow import CodeAnalysisWorkflow

# 创建自定义工作流
workflow = CodeAnalysisWorkflow()

# 运行完整分析
result = await workflow.run_analysis(
    user_request="进行全面的代码审计",
    target_directory="./large_project"
)

Agent注册和扩展

from agents import AISchedulerAgent
from my_custom_agent import MyCustomAgent

# 创建调度器
scheduler = AISchedulerAgent()

# 注册自定义Agent
scheduler.register_agent("MyCustomAgent", MyCustomAgent())

# 使用扩展后的系统
result = await scheduler.orchestrate_analysis(
    "使用我的自定义分析",
    "./project"
)

📊 输出格式

Rich格式输出

  • 彩色表格和树状结构显示
  • 进度条和状态指示
  • 交互式结果展示

JSON格式输出

{
  "success": true,
  "execution_time": 45.2,
  "completed_tasks": ["scan_directory", "diagnose_code"],
  "final_report": {
    "execution_summary": {...},
    "consolidated_findings": {...},
    "recommendations": [...]
  }
}

🧪 测试

运行测试套件:

# 安装测试依赖
pip install pytest pytest-asyncio

# 运行所有测试
python -m pytest tests/ -v

# 运行特定测试
python tests/test_agents.py

📁 项目结构

eagle-codeanalyze/
├── agents/                 # Agent实现
│   ├── code_query_agent.py
│   ├── directory_scanner_agent.py
│   ├── ast_analyzer_agent.py
│   ├── code_diagnostician_agent.py
│   ├── code_fixer_agent.py
│   └── ai_scheduler_agent.py
├── core/                   # 核心组件
│   ├── base_agent.py       # Agent基类
│   └── workflow.py         # LangGraph工作流
├── utils/                  # 工具函数
│   └── file_utils.py       # 文件处理工具
├── tests/                  # 测试文件
│   └── test_agents.py
├── output/                 # 输出目录
├── main.py                 # 主入口程序
├── config.py              # 配置文件
├── example.py             # 使用示例
└── requirements.txt       # 依赖列表

🔧 配置选项

基础配置

  • LLM_PROVIDER: LLM提供商 (openai 或 qwen)
  • OPENAI_API_KEY: OpenAI API密钥
  • QWEN_API_KEY: Qwen API密钥(阿里云灵积)
  • MAX_FILE_SIZE: 最大文件大小限制
  • MAX_FILES_PER_SCAN: 单次扫描最大文件数
  • EXCLUDE_PATTERNS: 忽略目录模式(可选,逗号分隔)

忽略目录配置

系统默认忽略以下常见目录:

  • 虚拟环境: venv, env, .venv, .env
  • 缓存目录: __pycache__, .pytest_cache, .mypy_cache
  • 版本控制: .git, .svn, .hg
  • 构建目录: build, dist, target, .next, .nuxt
  • 依赖目录: node_modules, vendor, bower_components
  • IDE配置: .idea, .vscode
  • 临时文件: tmp, temp, logs, coverage

自定义忽略目录: ``env EXCLUDE_PATTERNS=my_custom_dir,.custom_cache,special_build


### 高级配置
- `LANGSMITH_API_KEY`: LangSmith追踪(可选)
- `OUTPUT_DIR`: 输出目录路径
- `GRAPH_FORMAT`: 图表输出格式

## 🚧 扩展和自定义

### 创建自定义Agent

```python
from core.base_agent import BaseAgent
from langchain_core.tools import BaseTool

class MyCustomTool(BaseTool):
    name: str = "my_custom_tool"
    description: str = "我的自定义工具"
    
    def _run(self, input_text: str) -> dict:
        # 实现你的工具逻辑
        return {"result": "custom result"}

class MyCustomAgent(BaseAgent):
    def __init__(self):
        tools = [MyCustomTool()]
        super().__init__(
            name="MyCustomAgent",
            description="我的自定义Agent",
            tools=tools
        )
    
    async def execute(self, task: str, context: dict = None) -> dict:
        # 实现你的Agent逻辑
        return {"success": True, "result": "custom analysis"}

📈 性能优化

  • 使用文件大小限制避免处理超大文件
  • 并行处理多个文件分析
  • 缓存AST解析结果
  • 渐进式结果展示

🤝 贡献指南

  1. Fork本项目
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 开启Pull Request

📄 许可证

本项目采用MIT许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

  • LangChain - 强大的LLM应用框架
  • LangGraph - 图状态机工作流引擎
  • Rich - 美观的终端输出
  • AST - Python抽象语法树
  • Jedi - Python代码补全库

📞 支持

如有问题或建议,请:

  1. 查看FAQ
  2. 搜索现有Issues
  3. 创建新Issue描述问题

🎯 让AI帮助您更好地理解和改进代码!

About

用来分析代码使用

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages