一个基于LangChain和LangGraph构建的多Agent协作代码分析系统。该系统通过AI驱动的智能调度,协调多个专业化Agent完成复杂的代码分析任务。
- 🧠 AI智能调度: 通过AI理解用户意图,动态调度不同Agent
- 🔍 代码搜索: 强大的代码搜索和查找功能
- 📁 结构分析: 深度分析项目文件结构和技术栈
- 🌲 AST分析: 基于AST的代码分析,生成调用图和依赖图
- 🔬 质量诊断: 多维度代码质量检测和问题诊断
- 🔧 自动修复: 基于诊断结果的智能代码修复
- ⚙️ 工作流编排: 使用LangGraph进行复杂任务编排
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AI调度Agent │────│ LangGraph │────│ 工作流编排 │
│ (智能协调) │ │ 工作流引擎 │ │ (任务管理) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ 专业化Agent集群 │
├─────────────────┬─────────────────┬─────────────────┬──────────┤
│ 🔍 代码查询 │ 📁 目录扫描 │ 🌲 AST分析 │ 🔬 质量诊断│
│ CodeQueryAgent │DirectoryScanner │ ASTAnalyzer │Diagnostician│
│ │ Agent │ Agent │ Agent │
├─────────────────┴─────────────────┴─────────────────┴──────────┤
│ 🔧 代码修复Agent │
│ CodeFixerAgent │
└─────────────────────────────────────────────────────────────────┘
职责: 系统的大脑,负责理解用户意图并智能调度其他Agent
- 任务规划和分解
- Agent间协调和结果整合
- 动态执行策略调整
职责: 在代码库中进行高效搜索和内容查找
- 文本搜索和正则表达式匹配
- 符号查找和引用追踪
- 文件内容读取和分析
职责: 分析项目结构和组织方式
- 生成目录树和文件统计
- 技术栈检测和框架识别
- 项目类型分析
职责: 进行静态代码分析和图表生成
- AST解析和结构分析
- 函数调用图生成
- 类关系图构建
- 集成Jedi和Rope工具
职责: 多维度代码质量检测
- 静态分析和风格检查
- 安全漏洞检测
- 性能问题识别
- 可维护性评估
职责: 自动化代码问题修复
- 基于诊断结果的自动修复
- 代码格式化和规范化
- 导入语句优化
- 重构建议和实施
cd eagle-codeanalyze
pip install -r requirements.txt复制环境变量模板:
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# 运行演示模式
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 jsonimport 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())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"
)from agents import AISchedulerAgent
from my_custom_agent import MyCustomAgent
# 创建调度器
scheduler = AISchedulerAgent()
# 注册自定义Agent
scheduler.register_agent("MyCustomAgent", MyCustomAgent())
# 使用扩展后的系统
result = await scheduler.orchestrate_analysis(
"使用我的自定义分析",
"./project"
)- 彩色表格和树状结构显示
- 进度条和状态指示
- 交互式结果展示
{
"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.pyeagle-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解析结果
- 渐进式结果展示
- Fork本项目
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启Pull Request
本项目采用MIT许可证 - 查看 LICENSE 文件了解详情。
如有问题或建议,请:
🎯 让AI帮助您更好地理解和改进代码!