🎯 项目目标:构建面向应急管理领域的智能问答系统(RAG + LLM)
利用大语言模型(LLM)与检索增强生成(RAG)技术,针对危化品企业、安全生产政策法规等问题,构建一个可支持应急管理决策的智能问答系统。
特点:
- 能理解自然语言问题
- 能综合结构化表格数据(Excel)与非结构化文本数据(Word、PDF)
- 输出准确、符合规范的自然语言答案
🧠 核心知识图谱
| 技术模块 | 作用 | 本项目使用 |
|---|---|---|
| RAG | 检索+生成,结合外部知识库提升准确性 | ✅ 核心技术 |
| Embedding模型 | 文本向量化,实现语义检索 | BGE-M3 |
| 向量数据库 | 存储向量并相似性搜索 | ChromaDB |
| LlamaIndex | 数据接入和索引构建框架 | ✅ 使用核心组件 |
| LLM(大语言模型) | 负责生成答案 | Qwen(API方式) |
📂 赛题数据结构
| 数据类型 | 数量 | 示例 | 处理方式 |
|---|---|---|---|
| 文本(Word / PDF) | 22 份 | 法律法规、行业标准 | RAG(已在Baseline中实现) |
| 表格(Excel) | 17 张 | 企业信息、设备记录 | Text-to-SQL / Pandas |
📌 赛题关键点与难点分析
✅ 要点:混合数据源问答
系统必须能够识别问题类型,并自动调用不同的数据源处理方式。
❗ 难点一:问题意图识别(Query Routing)
- 判断问题属于“文本查询”还是“数据统计”
- 甚至同一个问题可能包含两种意图,需要拆解
❗难点二:结构化数据查询(Text-to-SQL / Pandas Agent)
- 如何将自然语言转化为多表关联查询语句?
- 遵守赛题规则:不能合并表,必须动态关联
❗难点三:RAG优化
- 文本分块策略
- 检索准确率(可用重排序模型)
- Embedding模型与Prompt设计
📚 Baseline 概述(当前方案现状)
| 项目指标 | 状态 |
|---|---|
| 技术框架 | RAG + LlamaIndex |
| 数据使用 | 仅使用文本数据 |
| 模型调用 | 通过 API 调用 Qwen 与 BGE-M3 |
| 成绩预估 | 约 25.5 分(只解决文本类问题) |
| 优点 | 上手快、架构清晰、模块化便于升级 |
| 缺点 | 无法处理 Excel 表格数据,无法应对统计类问题 |
🔧 Baseline 核心流程(RAG 文本问答)
.load 文本数据 → 生成向量索引 → 构建检索引擎 → 对问题(问题集question.csv)进行检索+生成 → 输出answer.csv
关键文件:
main.py:主流程remote_embedding.py:Embedding模型封装+缓存机制local_llamaindex_llm.py:大语言模型调用封装
🤔 未来优化方向
| 改进方向 | 技术路径 | 预期提升 |
|---|---|---|
| ✅ 表格数据接入 | Text-to-SQL / Pandas Agent / LlamaIndex TableIndex | 能回答统计类问题 |
| ✅ 问题路由器 | LLM分类器 + Prompt模板 | 自动判断查询方式 |
| ✅ RAG策略优化 | Chunk策略 / 重排序模型 | 提升答案准确性 |
| ✅ 离线可部署模型 | 使用 xinference + 本地Qwen-7B/14B | 满足赛题要求 |
🎯 思考
- 如何判断一个问题属于文本查询还是表格查询?
- Text-to-SQL 实现能否做到多表动态关联?
- 如何设计一个统一的 QueryEngine 处理混合问题?
- RAG 的 chunk_size 和 overlap 如何影响召回效果?
- 如果换成本地模型部署,该如何替换 API 接口?
✅ 总结
Baseline 只是起点,它实现了 “文本问答” 的基本闭环。要想取得更高分或构建真正实用的应急管理智能助手,必须引入表格数据处理能力,并建立问题意图识别 + 多引擎协同的架构。