本次提交包含完整的AI SOC(Security Operations Center)分析师平台,支持本地大模型和Claude API集成,实现端到端的安全威胁分析。 ## 🚀 主要功能 ### 后端架构 (FastAPI) - **多源数据接入**: 支持JSON/CSV格式安全告警数据上传 - **智能预处理**: 基于YAML配置的字段映射和实体提取 - **图分析引擎**: NetworkX驱动的攻击链图构建和分析 - **评分系统**: 实体和子图的多维度风险评分算法 - **LLM集成**: 支持多提供商(Claude、OpenAI、本地模型)的智能报告生成 - **API接口**: 完整的RESTful API (Swagger文档: /docs) ### 前端界面 (Vue 3 + TypeScript) - **拖拽上传**: 支持拖拽上传和实时预览 - **管道分析**: 可视化的数据处理管道状态 - **智能报告**: 动态生成的威胁分析报告和可视化 - **响应式设计**: 适配桌面和移动端的现代UI ### LLM智能分析 - **多模型支持**: qwen3(8B/32B)、deepseek-r1(70B)、Claude 4等 - **超时优化**: 分层超时配置(120s-600s)适配不同模型规模 - **内容清理**: 自动过滤模型思考过程,输出专业分析报告 - **中文优化**: 针对中文安全分析场景的prompt工程 ## 🛠️ 技术栈 **后端**: FastAPI + SQLAlchemy + NetworkX + 多LLM提供商 **前端**: Vue 3 + TypeScript + Naive UI + Tailwind CSS + Vite **数据处理**: YAML配置 + JSONPath表达式 **部署**: Docker支持 + 环境变量配置 ## 🐛 修复的关键问题 1. **LLM超时问题**: 实现前后端分层超时配置,支持大模型长时间推理 2. **报告格式化**: 修复Markdown渲染和换行符显示问题 3. **数据映射**: 统一前后端字段命名和数据结构映射 4. **时间格式**: 修复时间戳解析和中文本地化显示 5. **思考标签清理**: 自动过滤qwen模型的<think>标签 ## 📊 测试数据 包含完整的多阶段APT攻击场景测试数据: - 钓鱼邮件 → 恶意软件执行 → C2通信 - 云凭证窃取 → 资源探测 → 横向渗透 - 后门用户创建 → 权限提升 → 容器控制 ## 🔧 开发工具 - **模型切换**: switch_model.py 支持快速切换本地LLM模型 - **超时测试**: test_llm_timeout.py 验证不同模型性能 - **依赖安装**: install_llm_deps.py 自动安装LLM依赖 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
快速切换本地LLM模型
|
|
"""
|
|
import yaml
|
|
import sys
|
|
|
|
def switch_model(provider_name):
|
|
"""切换到指定的模型提供商"""
|
|
config_path = "configs/llm.yaml"
|
|
|
|
try:
|
|
# 读取配置
|
|
with open(config_path, 'r', encoding='utf-8') as f:
|
|
config = yaml.safe_load(f)
|
|
|
|
# 检查提供商是否存在
|
|
if provider_name not in config.get('providers', {}):
|
|
print(f"❌ 提供商 '{provider_name}' 不存在")
|
|
print("可用的提供商:")
|
|
for p in config.get('providers', {}):
|
|
model = config['providers'][p].get('model', '未知')
|
|
print(f" - {p}: {model}")
|
|
return False
|
|
|
|
# 更新配置
|
|
config['provider'] = provider_name
|
|
|
|
# 写回配置
|
|
with open(config_path, 'w', encoding='utf-8') as f:
|
|
yaml.dump(config, f, default_flow_style=False, allow_unicode=True)
|
|
|
|
model = config['providers'][provider_name].get('model', '未知')
|
|
print(f"✅ 已切换到 {provider_name}: {model}")
|
|
print("请重启后端服务生效: python3 run_backend.py")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"❌ 切换失败: {e}")
|
|
return False
|
|
|
|
def main():
|
|
print("🔄 AI SOC分析平台 模型切换工具")
|
|
print("=" * 40)
|
|
|
|
if len(sys.argv) != 2:
|
|
print("用法: python3 switch_model.py <provider_name>")
|
|
print()
|
|
print("快速选择:")
|
|
print(" python3 switch_model.py local # qwen3:latest (快速)")
|
|
print(" python3 switch_model.py local_powerful # qwen3:32b (高质量)")
|
|
print(" python3 switch_model.py local_deepseek # deepseek-r1:70b (最强推理)")
|
|
print(" python3 switch_model.py local_coder # qwen2.5-coder:32b (代码分析)")
|
|
print(" python3 switch_model.py claude # Claude 4 (需API key)")
|
|
return 1
|
|
|
|
provider = sys.argv[1]
|
|
success = switch_model(provider)
|
|
return 0 if success else 1
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main()) |