使用常见经典的大模型技术应用如CoT、prompt engineering、RAG、function calling 等的智能日志分析系统。
| technology | version | description |
|---|---|---|
| Django | 4.2.0+ | Web框架 |
| Django Ninja | 1.0.0+ | API框架 |
| ChromaDB | 0.4.0+ | 向量数据库 |
| LangChain | 0.1.0+ | LLM应用框架 |
| LlamaIndex | 0.10.0+ | 数据索引框架 |
| PyJWT | 2.8.0+ | JWT认证 |
| Sentence-Transformers | 2.2.0+ | 文本向量化 |
| Transformers | 4.30.0+ | 预训练模型 |
| PyTorch | 2.0.0+ | 深度学习框架 |
| Pandas | 2.0.0+ | 数据处理 |
| technology | version | description |
|---|---|---|
| Vue 3 | 3.5.18 | 前端框架 |
| Vite | 7.1.12 | 构建工具 |
| Pinia | 3.0.3 | 状态管理 |
| Vue Router | 4.5.1 | 路由管理 |
| Marked | 16.4.0 | Markdown渲染 |
| Highlight.js | 11.11.1 | 代码高亮 |
| KaTeX | 0.16.25 | 数学公式渲染 |
| 模型类型 | 模型名称 | 来源 | 用途 | 配置位置 |
|---|---|---|---|---|
| 嵌入模型 | all-MiniLM-L6-v2 | HuggingFace | 语义检索 | topklogsystem.py |
| 大语言模型 | DeepSeek | DeepSeek API | Chat,查询重写、重排序 | settings.py |
| 分词模型 | Jieba | Python库 | 中文分词 | hybrid_retrieval.py |
1.前置要求
- 操作系统:Linux / macOS / Windows (WSL2推荐)
- Python:3.8或更高版本
- Node.js:16.0或更高版本
- Conda:Anaconda或Miniconda
- 内存:建议8GB以上
- 硬盘:至少10GB可用空间
2.创建虚拟环境
# 创建名为 intelligent-analysis 的Python 3.10环境
conda create -n intelligent-analysis python=3.10 -y
# 激活环境
conda activate intelligent-analysis
# 验证Python版本
python --version # 应该显示 Python 3.10.x3.配置系统环境变量
方式一:命令行
# Linux/Mac
export AI_API_KEY="your_api_key_here"
export AI_MODEL_NAME="deepseek-chat"
# Windows PowerShell
$env:AI_API_KEY="your_api_key_here"
$env:AI_MODEL_NAME="deepseek-chat"方式二:直接修改 settings.py
打开 django_backend/deepseek_project/settings.py,修改:
# AI API 配置(用于快速响应)
AI_API_URL = 'https://api.deepseek.com/chat/completions'
AI_API_KEY = 'your_api_key_here' # 填入你的API Key
AI_MODEL_NAME = 'deepseek-chat'1.克隆项目
# 克隆代码仓库
git clone git fetch https://gitee.com/dai-mingjing/intelligent-data-analysis.git
cd intelligent-data-analysis1.安装Python依赖
# 确保已激活conda环境
conda activate intelligent-analysis
# 进入后端目录
cd django_backend
# 安装依赖包
pip install -r requirements.txt2.下载嵌入模型
由于常见的网络不稳定可能导致初始化 RAG 时无法获取到相关模型导致启动失败,需要先在本机上下载用于 RAG 的模型,然后直接移动到 WSL 的项目中。同时由于脚本无法灵活跨越 WSL 和本机的文件系统(每个人URL可能不同)以及模型太大无法 git 跟踪,所以需要手动进行这一步。
先在本地的 cmd 中执行:
# 安装依赖
pip install -U "huggingface_hub[cli]" transformers sentence-transformers
# 下载模型 all-MiniLM-L6-v2
huggingface-cli download sentence-transformers/all-MiniLM-L6-v2 --local-dir ./all-MiniLM-L6-v2将路径 C:\Users\<你的用户名>\.cache\huggingface\hub\models--sentence-transformers--all-MiniLM-L6-v2\snapshots\<一串东西> 下的所有东西传到 WSL 中项目指定目录 \data\django_backend\data\models\all-MiniLM-L6-v2
- 注:services.py 的 34 行附近的
_vector_system中设置的embedding_model就是这个模型的存放目录
3.初始化数据库
# 在 django_backend 目录下执行
# 清空旧数据(可选,首次安装跳过)
python scripts/clear_sessions.py
# 生成迁移文件
python manage.py makemigrations
# 应用数据库迁移
python manage.py migrate
# 删除向量存储目录(如果存在)
rm -rf data/vector_stores首次启动时,系统会自动构建向量索引
4.*配置工具系统API_key (可选)
不配置时系统将不会使用工具调用
在 /tool_system/api_config.py 中设置你的 api_key,完成后可测试是否配置成功:
python tool_system/test_all.py5.启动
python manage.py runserver 0.0.0.0:80001.安装依赖
# 进入前端目录
cd vue_frontend
# 安装依赖(使用npm)
npm install
# npm失败时使用
cnpm i
# 或使用yarn(如果已安装)
# yarn install
# 或使用pnpm(如果已安装)
# pnpm install2.启动
npm run dev# 激活conda环境
conda activate intelligent-analysis
# 进入后端目录
cd django_backend
# 启动Django开发服务器 (端口默认8000)
python manage.py runserver 0.0.0.0:8000新开一个终端窗口:
# 进入前端目录
cd vue_frontend
# 启动开发服务器 (端口默认8082)
npm run dev1.Django配置文件
django_backend/deepseek_project/settings.py
2.向量模型路径配置
检查 django_backend/deepseek_api/services.py:
# 确保embedding_model路径正确
embedding_model = HuggingFaceEmbeddings(
model_name="./data/models/all-MiniLM-L6-v2",
model_kwargs={'device': 'cpu'},
encode_kwargs={'normalize_embeddings': True}
)3.获取DeepSeek API密钥
- 访问 DeepSeek平台
- 注册并登录账号
- 充值(最低¥1元即可)
- 创建API密钥
- 复制密钥并配置到环境变量或settings.py
费用参考:
- 输入:¥0.001/千tokens
- 输出:¥0.002/千tokens
- ¥1元约可进行1000次对话
4.工具api_key配置
/tool_system/api_config.py
编辑 vue_frontend/src/api.js,确认后端API地址:
// 开发环境使用相对路径,生产环境配置完整URL
const BASE_URL = 'http://localhost:8000/api' // 根据实际后端端口修改编辑 vue_frontend/vite.config.js:
export default defineConfig({
plugins: [vue()],
server: {
port: 8082, // 前端端口
proxy: {
'/api': {
target: 'http://localhost:8081', // 后端地址
changeOrigin: true
}
}
}
})intelligent-data-analysis/
├── django_backend/ # Django后端
│ ├── data/ # 数据目录
│ │ ├── knowledge_base/ # 结构化知识库
│ │ │ ├── architecture/ # 架构知识
│ │ │ ├── experience/ # 经验知识
│ │ │ ├── fault_cases/ # 故障案例
│ │ │ ├── solutions/ # 解决方案
│ │ │ └── *.csv # 知识数据文件
│ │ ├── log/ # 日志文件(向量化源)
│ │ ├── models/ # 本地模型
│ │ │ └── all-MiniLM-L6-v2/ # 向量化模型
│ │ └── vector_stores/ # ChromaDB向量数据库
│ ├── deepseek_api/ # 核心API应用
│ │ ├── __init__.py
│ │ ├── admin.py # 管理后台配置
│ │ ├── api.py # API接口定义(1670行)
│ │ ├── apps.py # 应用配置(启动初始化)
│ │ ├── file_processors.py # 文件处理
│ │ ├── jwt_utils.py # JWT工具函数
│ │ ├── llm_client.py # LLM客户端
│ │ ├── models.py # 数据模型
│ │ ├── schemas.py # API数据结构
│ │ ├── services.py # 核心服务
│ │ ├── tools.py # 工具调用
│ │ ├── urls.py # 应用路由
│ │ ├── migrations/ # 数据库迁移文件
│ │ └── management/ # 管理命令
│ │ └── commands/
│ │ └── create_admin.py # 创建管理员
│ ├── deepseek_project/ # Django项目配置
│ │ ├── __init__.py
│ │ ├── asgi.py # ASGI配置
│ │ ├── settings.py # 项目设置
│ │ ├── urls.py # 项目路由
│ │ └── wsgi.py # WSGI配置
│ ├── rag_system/ # RAG检索系统
│ │ ├── __init__.py
│ │ ├── advanced_reranker.py # 高级重排序
│ │ ├── common.py # 通用数据结构
│ │ ├── data_integration.py # 数据整合
│ │ ├── enhanced_rag.py # 增强RAG引擎
│ │ ├── hybrid_retrieval.py # 混合检索
│ │ ├── rag_config.py # RAG配置
│ │ └── rag_logger.py # RAG日志
│ ├── tool_system/ # 工具调用系统
│ │ ├── __init__.py
│ │ ├── api_config.py # API配置
│ │ ├── integration.py # 系统集成
│ │ ├── test_all.py # 测试脚本
│ │ ├── core/ # 核心模块
│ │ │ ├── executor.py # 工具执行器
│ │ │ ├── manager.py # 工具管理器
│ │ │ ├── registry.py # 工具注册中心
│ │ │ └── tool.py # 工具基类
│ │ └── tools/ # 具体工具实现
│ │ ├── amap_tools.py # 高德地图工具
│ │ ├── analysis_tools.py # 分析工具
│ │ └── search_tools.py # 搜索工具
│ ├── scripts/ # 脚本目录
│ │ ├── clear_sessions.py # 清空会话
│ │ ├── create_admin.py # 创建管理员
│ │ ├── create_test_feedback_data.py
│ │ ├── quality_check.py # 质量检查
│ │ └── test_user_isolation.py # 测试用户隔离
│ ├── results/ # 结果输出目录
│ ├── db.sqlite3 # SQLite数据库
│ ├── debug.log # 调试日志
│ ├── manage.py # Django管理脚本
│ └── requirements.txt # Python依赖
├── vue_frontend/ # Vue前端
│ ├── src/
│ │ ├── assets/ # 静态资源
│ │ │ ├── highlight.css # 代码高亮样式
│ │ │ └── styles.css # 全局样式
│ │ ├── components/ # Vue组件
│ │ │ ├── AdminLogFileUpload.vue # 管理员上传
│ │ │ ├── ChatInput.vue # 聊天输入框
│ │ │ ├── ChatMessage.vue # 消息组件
│ │ │ ├── LogFileUpload.vue # 文件上传
│ │ │ └── SessionList.vue # 会话列表
│ │ ├── views/ # 页面视图
│ │ │ ├── AdminDashboard.vue # 管理员面板
│ │ │ ├── AdminLogin.vue # 管理员登录
│ │ │ ├── Chat.vue # 聊天页面
│ │ │ └── Login.vue # 用户登录
│ │ ├── api.js # API接口封装
│ │ ├── App.vue # 根组件
│ │ ├── main.js # 入口文件
│ │ ├── router.js # 路由配置
│ │ └── store.js # 状态管理
│ ├── public/ # 公共文件
│ ├── index.html # HTML模板
│ ├── package.json # 依赖配置
│ ├── vite.config.js # Vite配置
│ └── README.md
├── documents/ # 文档目录
│ ├── Django后端核心文件学习指南.md
│ ├── RAG系统与配置详解.md
│ ├── 工具系统指南.md
│ ├── JWT登录注册系统使用说明.md
│ ├── AI_API_配置说明.md
│ └── ...
└── README.md # 本文件
用户查询 → 查询重写 → 混合检索 → 高级重排序 → LLM生成 → 返回结果
↓
┌─────────┼─────────┐
↓ ↓ ↓
语义检索 BM25检索 元数据过滤
(0.6) (0.3) (0.1)
↓ ↓ ↓
└─────────┼─────────┘
↓
结果合并与去重
↓
高级重排序
┌─────────┼─────────┐
↓ ↓ ↓
语义匹配度 关键词覆盖 上下文相关性
(0.4) (0.3) (0.3)
日志文件(.csv/.txt/.md/.json)
↓
文档加载器
↓
文本分块
↓
向量化(all-MiniLM-L6-v2)
↓
ChromaDB存储
↓
向量检索 ←─── 用户查询
↓
重排序
↓
上下文构建
↓
LLM生成回答
CoT 思维链引导推理
Prompt Engineering 增强提示词
RAG 高效准确检索外部知识,减轻模型幻觉
Function Recalling 为LLM提供工具调用,降低响应不确定性
用户相关
- 用户注册:用户名、密码、邮箱注册
- JWT认证:基于令牌的安全认证,有效期7天
- 会话隔离:不同用户的会话完全隔离
- 密码安全:使用Django哈希加密
会话相关
- 多会话支持:每个用户可创建多个独立会话
- 历史记录:自动保存对话历史
- 会话重命名:支持自定义会话名称
- 会话删除:清理不需要的历史会话
- 用户管理:查看、编辑、删除用户
- 日志管理:批量上传日志文件
- 系统监控:查看系统使用统计
- 反馈分析:查看用户反馈数据
方式一:项目中处理
将新的日志文件放入 django_backend/data/log/ 目录:
# 支持的格式
- CSV文件:逐行处理
- TXT/MD文件:整文件处理
- JSON/JSONL文件:整文件处理删除django_backend/data/vector_stores,并重启后端,系统会自动向量化新文件
方式二:前端上传
在管理端的文件上传中直接选择文件,增量更新,无需直接操作项目文件
编辑 django_backend/data/knowledge_base/ 下的CSV文件:
fault_cases.csv:故障案例experience.csv:经验知识architecture.csv:架构信息solutions.csv:解决方案
CSV格式示例:
服务,级别,错误,消息,组件,原因
AuthService,ERROR,INVALID_TOKEN,Token校验失败,TokenValidator,JWT签名算法不匹配在 tool_system/tools/ 下创建新文件:
from tool_system.core.tool import Tool, ToolResult
class MyCustomTool(Tool):
def __init__(self):
super().__init__(
name="my_custom_tool",
description="我的自定义工具"
)
def execute(self, **kwargs) -> ToolResult:
# 实现工具逻辑
return ToolResult(
success=True,
data={"result": "执行结果"}
)
def get_schema(self) -> Dict[str, Any]:
return {
"type": "function",
"function": {
"name": self.name,
"description": self.description,
"parameters": {
"type": "object",
"properties": {
"param1": {"type": "string", "description": "参数1"}
},
"required": ["param1"]
}
}
}在 tool_system/integration.py 中注册:
from tool_system.tools.my_tools import MyCustomTool
def initialize_tools():
manager = get_tool_manager()
manager.register_tool(
MyCustomTool(),
category="custom",
tags=["自定义"],
enabled=True
)欢迎贡献代码、报告问题或提出建议!
- 描述问题现象
- 提供复现步骤
- 附上错误日志
- 说明环境信息
- Fork本仓库
- 创建功能分支
- 提交代码并编写测试
- 提交Pull Request
如有问题或建议,请通过以下方式联系:
-
邮箱:
zengyicydd@tju.edu.cn
gaocan@tju.edu.cn
yxy641121@gmail.com
daimingjing142857@tju.edu.cn
jsyy@tju.edu.cn -
Gitee Issues:提交问题到项目仓库