thaihai-swe/multi-source-qa-engine

GitHub: thaihai-swe/multi-source-qa-engine

一个集成了混合检索、多跳推理、幻觉检测及安全护栏的生产级多源问答引擎,旨在构建高可信度的智能问答系统。

Stars: 0 | Forks: 0

# 🤖 多源问答引擎 [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Code Quality](https://img.shields.io/badge/code%20quality-production-brightgreen.svg)](https://github.com) ## 📖 目录 - [概述](#overview) - [核心功能](#key-features) - [架构](#architecture) - [快速开始](#quick-start) - [安装说明](#installation) - [使用方法](#usage) - [CLI 命令](#cli-commands) - [配置](#configuration) - [系统能力](#system-capabilities) - [查询模式](#query-modes) - [评估与指标](#evaluation--metrics) - [安全与护栏](#safety--guardrails) - [文档](#documentation) - [项目结构](#project-structure) - [贡献指南](#contributing) ## 🎯 概述 **多源问答引擎** 是一个结合了以下特性的高级问答系统: - ⚡ **混合检索**(语义 + 关键词)以实现最佳检索效果 - 🧠 **多种推理模式**(simple, expand, multi-hop, agentic) - 📊 **综合评估**(RAGAS 指标、事实核查、幻觉检测) - 🛡️ **安全护栏**(PII 检测、偏见检测、毒性过滤) - 🔍 **Cross-Encoder 重排序**以提升精度 - 🎯 **MMR 多样性**以获取全面的答案 - 📚 **多源加载**(Wikipedia、URL、PDF、文本文件) **生产状态:** 95% 完成 - 所有核心功能均可正常运行的全功能系统 ## ✨ 核心功能 ### 🔍 高级检索 - **混合检索引擎**,结合语义(70%)和关键词(30%)并进行加权融合 - **Cross-Encoder 重排序**,改进相关性评分 - **MMR(最大边际相关性)**,实现结果多样化(λ=0.7) - **两阶段检索**(先广泛初搜,再精确重排) - **自适应分块**,通过父子层级结构提供最佳上下文 - **域守卫**,用于域外查询检测(阈值:0.35) - **段落高亮**,精确定位相关句子及其得分 ### 🧠 智能推理 - **4 种查询模式:** - `SIMPLE` - 直接检索并回答 - `EXPAND` - 查询扩展,生成 4 种语义变体 - `MULTIHOP` - 多跳推理,采用分解-检索-合成流程 - `AGENT` - 智能路由器,通过启发式规则选择最佳策略 - **意图分类**(混合模式:启发式 + 基于 LLM) - **自动模式选择**,基于查询复杂度和意图 - **自查询分解**,处理复杂的多方面查询 ### 📊 综合评估 - **RAGAS 框架**,包含 3 个核心指标: - 上下文相关性 - 答案相关性 - 忠实度 - **事实核查**,带有来源归属 - **幻觉检测**,提供详细报告 - **置信度评分**,评估答案可靠性 - **偏见检测**,用于公平性评估 ### 🛡️ 安全与防护 - **输入护栏:** - Prompt 注入检测 - PII(个人身份信息)脱敏 - 长度验证 - **输出护栏:** - 毒性过滤 - 偏见检测 - 有害内容预防 - **统一安全评估器**,提供风险评分 ### 🎨 生产级特性 - **LRU 缓存**,用于 Embedding(重复查询速度提升 50%) - **优雅降级**,在服务失败时维持运行 - **可观测性与监控**,提供详细指标 - **查询日志**,记录到 JSONL 以便审计追踪 - **动态温度控制**,根据查询类型调整 - **Token 追踪**,用于成本管理 ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Multi-Source QA Engine │ └─────────────────────────────────────────────────────────────┘ ┌────────────────┐ │ DATA SOURCES │ │ • Wikipedia │ │ • URLs │ │ • PDFs │ │ • Text Files │ └─────┬──────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 11-STEP QUERY PIPELINE │ ├─────────────────────────────────────────────────────────────┤ │ 1. Input Validation (Guardrails) │ │ 2. Intent Classification (Heuristic + LLM) │ │ 3. Self-Query Decomposition │ │ 4. Domain Safety Check │ │ 5. Execute Strategy (SIMPLE/EXPAND/MULTIHOP/AGENT) │ │ 6. Rerank & Diversify (Cross-Encoder + MMR) │ │ 7. Generate Answer (LLM with Dynamic Temperature) │ │ 8. Evaluate & Fact-Check (RAGAS + Fact Checker) │ │ 9. Output Validation & Safety (Guardrails) │ │ 10. Token Counting & Cost Tracking │ │ 11. Query Logging & Persistence │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ RAG RESPONSE │ │ • Answer with confidence score │ │ • Retrieved documents with citations │ │ • RAGAS metrics │ │ • Fact-check results │ │ • Safety assessment │ │ • Token usage & cost │ └─────────────────────────────────────────────────────────────┘ ``` ### 模块组织(12 个模块) ``` src/ ├── models/ # Data models (9 dataclasses, fully typed) ├── core/ # Query pipeline, RAG system, strategies ├── retrieval/ # 3 strategies + advanced features ├── generation/ # LLM-based answer generation ├── evaluation/ # RAGAS, fact-checking, hallucination detection ├── safety/ # Input/output guardrails, bias detection ├── reasoning/ # Intent, mode selection, query decomposition ├── prompts/ # LLM prompt templates ├── utils/ # Logger, validators ├── persistence/ # Query logging to JSONL ├── cli/ # Interactive CLI interface └── config/ # Configuration with 45+ parameters ``` ## 🚀 快速开始 ### 前置条件 - Python 3.8+ - OpenAI 兼容 API 端点(OpenAI、LM Studio、Ollama 等) ### 安装说明 ``` # 克隆仓库 git clone https://github.com/yourusername/multi-source-qa-engine.git cd multi-source-qa-engine # 运行 setup 脚本(创建 venv 并安装依赖) ./setup.sh # 或者手动: python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements.txt ``` ### 环境设置 在项目根目录下创建一个 `.env` 文件: ``` # 必需 OPEN_AI_API_KEY=your-api-key-here # 可选(显示默认值) OPEN_AI_API_BASE_URL=http://localhost:1234/v1 OPEN_AI_MODEL=llama-3.1-8b RAG_DATA_DIR=./json_data RAG_DB_PATH=./chroma_db ``` ### 运行系统 ``` # 启动交互式 CLI ./run.sh # 或者直接 python main.py ``` ### 首次查询示例 ``` ❓ > load wikipedia "Artificial Intelligence" ✅ Loaded 1 Wikipedia articles: Artificial Intelligence ❓ > query "What is machine learning?" 🤔 Processing query in SIMPLE mode... 📄 Answer: Machine learning is a subset of artificial intelligence that enables systems to learn and improve from experience without being explicitly programmed... 📊 Confidence: 0.92 | RAGAS Score: 0.88 ✅ No hallucinations detected ``` ## 💻 使用方法 ### 基本查询 ``` ❓ > query "What is the capital of France?" ``` ### 加载不同来源 ``` # 加载 Wikipedia 文章 ❓ > load wikipedia "Machine Learning" # 从 URL 加载 ❓ > load url https://example.com/article # 加载 PDF 文件 ❓ > load file ./documents/paper.pdf # 加载文本文件 ❓ > load file ./documents/notes.txt ``` ### 高级查询模式 ``` # Query expansion(生成 4 个变体) ❓ > expand "climate change effects" # Multi-hop reasoning(用于复杂问题) ❓ > multihop "Who was the president when World War II ended and what policies did they implement?" # Agentic mode(自主策略选择) ❓ > agent "Compare the economic policies of..." ``` ### 查看指标与分析 ``` # 显示 RAGAS metrics ❓ > metrics # 显示 fact-check 结果 ❓ > facts # 显示高亮 passages ❓ > passages # 显示 hallucination report ❓ > hallucination-report # 显示 bias detection report ❓ > bias-report # 显示 domain statistics ❓ > domain-stats # 显示 cache statistics ❓ > cache # 显示 system status ❓ > status ``` ## 📋 CLI 命令 ### 核心命令 | 命令 | 描述 | | ---------------------------- | ---------------------------- | | `load [collection]` | 加载 Wikipedia、URL 或文件 | | `query ` | 标准 RAG 查询 | | `sources` | 显示已加载来源 | | `history` | 显示对话历史 | | `metrics` | 显示 RAGAS 指标 | | `save [filename]` | 保存对话 | | `clear` | 清除历史 | ### 高级命令 | 命令 | 描述 | | ------------------ | ------------------------------ | | `expand ` | 查询扩展(4 种变体) | | `multihop ` | 多跳推理 | | `agent ` | 使用 Agentic RAG | ### 分析与诊断 | 命令 | 描述 | | ------------------------- | ------------------------------ | | `cache` | 显示缓存统计 | | `analyze-chunks ` | 分析最佳分块大小 | | `facts` | 显示事实核查结果 | | `passages` | 显示高亮段落 | | `hallucination-report` | 显示上一次幻觉报告 | | `bias-report` | 显示偏见检测报告 | | `domain-stats` | 显示域守卫配置 | | `observability` | 显示可观测性指标 | | `experiments` | 运行优化实验 | ### 系统信息 | 命令 | 描述 | | ----------- | ------------------------------------ | | `status` | 显示活动功能与配置 | | `help` | 显示帮助 | | `quit/exit` | 退出系统 | ## ⚙️ 配置 系统通过 `src/config.py` 和环境变量进行配置。主要配置如下: ### LLM 配置 ``` LLMConfig: - api_key: From OPEN_AI_API_KEY env var - api_base_url: From OPEN_AI_API_BASE_URL env var (default: http://localhost:1234/v1) - model_name: From OPEN_AI_MODEL env var (default: llama-3.1-8b) - temperature: 0.4 (dynamically adjusted by mode/intent) - max_tokens: 1000 - use_dynamic_temperature: True ``` ### 搜索配置 ``` SearchConfig: - semantic_weight: 0.7 # Weight for semantic search - keyword_weight: 0.3 # Weight for keyword search - max_results: 5 - enable_domain_guard: True - use_cross_encoder: True - use_mmr_diversity: True - mmr_lambda: 0.7 # 70% relevance, 30% diversity - embedding_cache_size: 1000 ``` ### 推理配置 ``` ReasoningConfig: - auto_mode_selection: True - query_expansion_count: 4 - enable_multihop: True - max_reasoning_steps: 3 ``` ### 评估配置 ``` EvaluationConfig: - enable_ragas: True - enable_fact_checking: True - enable_hallucination_detection: True - min_confidence_threshold: 0.6 - bias_check_threshold: 0.7 ``` ### 安全配置 ``` SafetyConfig: - enable_input_validation: True - enable_output_validation: True - toxicity_threshold: 0.7 - enable_pii_masking: True ``` ## 🎯 系统能力 ### 检索策略 1. **语义搜索策略** - 使用 sentence-transformers bi-encoder 生成 Embedding - 在向量空间中进行余弦相似度匹配 - 最适合概念性和上下文相关的查询 - 混合模式中的权重:70% 2. **关键词搜索策略** - BM25(Okapi 变体)算法 - 最适合精确词语匹配和词汇精度 - 适用于姓名、日期、技术术语、特定短语 - 混合模式中的权重:30% 3. **混合搜索策略**(默认) - 结合语义(70%)+ 关键词(30%) - 归一化加权融合并进行去重 - 针对不同查询类型的最佳整体性能 ### 查询处理智能 - **自动模式选择**,基于查询复杂度 - **意图分类**(事实型、分析型、比较型、开放式等) - **动态温度控制**(0.3-0.8,基于意图) - **基于置信度的结果扩展**(动态 Top-K) - **域相关性过滤** ### 答案生成 - **基于 LLM 的生成**,附带来源引用 - **动态 Prompt**,基于意图和模式 - **温度优化**,平衡准确性与创造性 - **Token 管理**与成本追踪 - **优雅降级**,在生成失败时维持运行 ## 🔧 查询模式 ### 1. SIMPLE 模式 **最适合:** 简单直接的事实性问题 ``` ❓ > query "What is Python?" ``` **流程:** - 单次检索 - 直接生成答案 - 快速高效 ### 2. EXPAND 模式 **最适合:** 需要全面覆盖、探索多个方面的问题 ``` ❓ > expand "benefits of renewable energy" ``` **流程:** - 生成 4 种查询变体 - 针对每种变体检索 - 合并并去重结果 - 更全面但速度较慢 **扩展示例:** - “可再生能源有哪些好处?” - “可再生能源如何帮助环境?” - “可再生能源的经济优势是什么?” - “我们为什么要使用可再生能源?” ### 3. MULTIHOP 模式 **最适合:** 需要多步推理的复杂问题 ``` ❓ > multihop "Who founded the company that built the iPhone and what role did they have?" ``` **流程:** - 将查询分解为子问题 - 为每个子问题执行检索 - 跨步骤链接推理 - 综合最终答案 **分解示例:** 1. “哪家公司制造了 iPhone?” 2. “谁创立了那家公司?” 3. “他们担任什么角色?” ### 4. AGENT 模式 **最适合:** 让系统智能地路由到最佳策略 ``` ❓ > agent "Compare Python and JavaScript programming languages" ``` **流程:** - 分析查询模式和关键词 - 通过启发式规则路由到最佳策略: - “compare/difference/vs” → MULTIHOP - 长查询(>15 个词)→ EXPAND - 其他情况 → SIMPLE - 功能完备的智能路由器 - ⚠️ 注意:使用的是模式匹配,而非完整的强化学习 ReAct ## 📊 评估与指标 ### RAGAS 指标 系统使用 **RAGAS**(检索增强生成评估)框架: 1. **上下文相关性** (0.0-1.0) - 衡量检索到的文档与查询的相关程度 - 目标:> 0.7 2. **答案相关性** (0.0-1.0) - 衡量答案对问题的回答程度 - 目标:> 0.8 3. **忠实度** (0.0-1.0) - 衡量答案基于来源内容的程度 - 目标:> 0.85 **示例输出:** ``` 📊 RAGAS Metrics: Context Relevance: 0.88 ✅ Answer Relevance: 0.92 ✅ Faithfulness: 0.90 ✅ Overall Score: 0.90 ``` ### 事实核查 - 从生成的答案中提取主张 - 根据源文档验证每个主张 - 提供详细的验证状态 ``` ✅ Verified: "Machine learning is a subset of AI" ✅ Verified: "It enables systems to learn from data" ⚠️ Unverified: "It was invented in 1950" ``` ### 幻觉检测 - 检测不受支持的陈述 - 识别与来源的矛盾之处 - 报告置信水平 ``` 🔍 Hallucination Report: Total Claims: 5 Supported: 4 (80%) Unsupported: 1 (20%) Confidence: Medium ``` ## 🛡️ 安全与护栏 ### 输入护栏 1. **Prompt 注入检测** - 检测操纵系统行为的尝试 - 阻止恶意 Prompt 2. **PII 检测与脱敏** - 识别电子邮件、电话号码、SSN、信用卡 - 自动脱敏敏感信息 3. **长度验证** - 强制执行最小/最大查询长度 - 防止滥用 ### 输出护栏 1. **毒性过滤** - 检测有毒、仇恨或冒犯性内容 - 阻止不当响应 2. **偏见检测** - 检查性别、种族、政治偏见 - 提供偏见评估分数 3. **有害内容预防** - 过滤危险指令 - 确保响应安全 ### 安全评分 每个查询都会收到一个**风险评分**(0.0-1.0): - **0.0-0.3:** 低风险 ✅ - **0.3-0.7:** 中风险 ⚠️ - **0.7-1.0:** 高风险 ❌ ## 📁 项目结构 ``` multi-source-qa-engine/ ├── main.py # Entry point ├── requirements.txt # Python dependencies ├── setup.sh # Setup script ├── run.sh # Run script ├── .env # Environment variables (create this) │ ├── src/ # Source code │ ├── models/ # Data models (9 dataclasses) │ │ ├── data_models.py # Core data structures │ │ └── enums.py # Enums (QueryMode, IntentType, etc.) │ │ │ ├── core/ # Core orchestration │ │ ├── rag_system.py # Main RAG orchestrator │ │ ├── query_pipeline.py # 11-step pipeline │ │ └── strategies.py # Strategy pattern implementation │ │ │ ├── retrieval/ # Retrieval components │ │ ├── strategies/ # Search strategies │ │ │ ├── semantic.py │ │ │ ├── keyword.py │ │ │ └── hybrid.py │ │ ├── hybrid_search.py # Hybrid search engine │ │ ├── reranker.py # Cross-encoder + MMR │ │ ├── chunker.py # Adaptive chunking │ │ ├── loader.py # Multi-source loading │ │ ├── domain_guard.py # Domain filtering │ │ └── passage_highlighter.py │ │ │ ├── generation/ # Answer generation │ │ ├── answer_generator.py │ │ └── llm_answer_generator.py │ │ │ ├── evaluation/ # Evaluation & metrics │ │ ├── ragas_evaluator.py │ │ ├── fact_checker.py │ │ ├── hallucination_detector.py │ │ └── observability.py │ │ │ ├── reasoning/ # Reasoning components │ │ ├── intent_classifier.py │ │ ├── mode_selector.py │ │ └── self_query_decomposer.py │ │ │ ├── safety/ # Safety & guardrails │ │ ├── guardrails.py # Input/output validation │ │ └── bias_detector.py # Bias detection │ │ │ ├── prompts/ # LLM prompts │ │ ├── generation.py # Answer generation prompts │ │ ├── retrieval.py # Retrieval prompts │ │ ├── reasoning.py # Reasoning prompts │ │ └── evaluation.py # Evaluation prompts │ │ │ ├── persistence/ # Data persistence │ │ └── __init__.py # JSON storage │ │ │ ├── utils/ # Utilities │ │ ├── logger.py # Logging │ │ └── validators.py # Validation │ │ │ ├── cli/ # CLI interface │ │ └── __init__.py # Interactive CLI │ │ │ └── config.py # Configuration │ ├── docs/ # Documentation │ └── AI_LEARNING_GUIDE.md # Complete learning guide │ ├── chroma_db/ # ChromaDB storage ├── json_data/ # Persisted data │ ├── query_logs.jsonl # Query logs │ └── temp_logs.json # Temporary logs │ └── .github/ └── copilot-instructions.md # GitHub Copilot config ``` ## 🔍 查询示例 ### 事实性问题 ``` ❓ > query "What is the speed of light?" ❓ > query "Who invented the telephone?" ❓ > query "When did World War II end?" ``` ### 分析性问题 ``` ❓ > expand "What are the causes of climate change?" ❓ > expand "How does photosynthesis work?" ``` ### 复杂多跳问题 ``` ❓ > multihop "Who directed the movie that won Best Picture in 2020 and what other films have they made?" ❓ > multihop "What is the capital of the country that borders France to the east?" ``` ### 比较分析 ``` ❓ > agent "Compare the advantages and disadvantages of solar vs wind energy" ❓ > agent "What are the differences between Python and JavaScript?" ``` ## 🚧 已知局限性 1. **Agent 模式** - 功能完备的启发式路由器,但非完整的基于 RL 的 ReAct(有待增强) 2. **性能** - 目前为同步 Pipeline,若使用异步执行有望实现 30-50% 的速度提升 3. **测试** - 单元测试覆盖率约 60%,缺少全面的集成测试 4. **错误处理** - 尚未在所有模块中完全标准化 5. **AgenticStrategy Bug** - 委托时缺少 config/client 的初始化(可能出现 AttributeError) ## 🛠️ 开发 ### 运行测试 ``` # 运行所有 tests pytest # 运行 with coverage pytest --cov=src # 运行特定 test file pytest tests/test_retrieval.py ``` ### 扩展系统 **添加新的检索策略:** . 在 `src/retrieval/strategies/` 中创建类 2. 继承 `SearchStrategy` 基类 3. 实现 `search()` 方法 4. 在策略工厂中注册 **添加新的评估指标:** 1. 在 `src/evaluation/` 中创建评估器 2. 实现评估逻辑 3. 集成到 `QueryPipeline` 中 ## 📈 性能基准 | 指标 | 值 | | -------------------------- | --------- | | 平均查询时间 (Simple) | ~2-3s | | 平均查询时间 (Expand) | ~8-10s | | 平均查询时间 (Multihop) | ~12-15s | | 缓存命中率 | ~40-50% | | 速度提升 (缓存后) | ~50% | | RAGAS 评分 (平均) | 0.85-0.90 | | 幻觉率 | <5% | ## 🤝 贡献指南 欢迎贡献代码!请遵循以下准则: 1. Fork 本仓库 2. 创建功能分支 3. 遵循代码风格进行更改 4. 为新功能编写测试 5. 提交 Pull Request **代码质量规则:** - 遵循 `.github/copilot-instructions.md` 中的重构指南 - 更新现有代码而不是创建重复代码 - 立即删除过时代码 - 确保所有新代码都集成到系统中 ## 📄 许可证 本项目采用 MIT 许可证授权 - 详情请参阅 LICENSE 文件。 ## 🙏 致谢 - **ChromaDB** - 向量数据库 - **Sentence-Transformers** - Embedding 模型 - **OpenAI** - LLM API - **RAGAS** - 评估框架 - **Rank-BM25** - 关键词搜索 - **NLTK** - 自然语言处理 ## 📞 支持 如有问题、疑问或功能请求: - 在 GitHub 上开启 Issue - 查看 [AI 学习指南](docs/AI_LEARNING_GUIDE.md) 获取详细解释 - 阅读 [架构文档](memories/repo/qa-engine-architecture.md) ## 🗺️ 路线图 ### 即将推出的功能 - [ ] 完善的 Agent 模式(ReAct 循环) - [ ] 异步/并行执行以提升性能 - [ ] 更多数据源(Google Drive、Notion 等) - [ ] Web UI 界面 - [ ] API 端点(REST/GraphQL) - [ ] 多语言支持 - [ ] 微调能力 - [ ] 高级缓存策略 - [ ] 分布式部署支持 **用 ❤️ 构建的生产级 AI 应用** *版本 4.0 | 最后更新:2026 年 2 月*
标签:AI问答系统, Clair, MMR, Petitpotam, PII检测, Python, RAG, RAGAS评估, 事实核查, 偏见检测, 关键词检索, 向量检索, 多源知识库, 多跳推理, 大语言模型应用, 安全护栏, 文本分块, 无后门, 机器学习工程, 检索增强生成, 毒性过滤, 混合搜索, 生产级, 语义搜索, 跨编码器重排序, 逆向工具, 问答引擎, 领域防护