|
|
#!/usr/bin/env python3
|
|
|
# -*- coding: utf-8 -*-
|
|
|
"""
|
|
|
代码示例 10: RAG完整处理管道
|
|
|
展示从文档处理到智能问答的完整RAG流程
|
|
|
"""
|
|
|
|
|
|
import os
|
|
|
import time
|
|
|
import json
|
|
|
from datetime import datetime
|
|
|
from typing import List, Dict, Any, Optional
|
|
|
from hello_agents.tools import RAGTool
|
|
|
|
|
|
class RAGPipelineComplete:
|
|
|
"""RAG完整处理管道演示类"""
|
|
|
|
|
|
def __init__(self):
|
|
|
self.setup_rag_system()
|
|
|
|
|
|
def setup_rag_system(self):
|
|
|
"""设置RAG系统"""
|
|
|
print("📚 RAG完整处理管道演示")
|
|
|
print("=" * 60)
|
|
|
|
|
|
# 初始化RAG工具
|
|
|
self.rag_tool = RAGTool(
|
|
|
knowledge_base_path="./rag_pipeline_kb",
|
|
|
rag_namespace="complete_pipeline"
|
|
|
)
|
|
|
|
|
|
print("✅ RAG系统初始化完成")
|
|
|
|
|
|
# 显示系统配置
|
|
|
print(f"\n📊 系统配置:")
|
|
|
print(f" 知识库路径: ./rag_pipeline_kb")
|
|
|
print(f" 命名空间: complete_pipeline")
|
|
|
print(f" 支持格式: PDF, DOCX, TXT, MD, HTML, JSON")
|
|
|
|
|
|
def demonstrate_document_ingestion(self):
|
|
|
"""演示文档摄取过程"""
|
|
|
print("\n📥 文档摄取过程演示")
|
|
|
print("-" * 60)
|
|
|
|
|
|
print("🔍 文档摄取特点:")
|
|
|
print("• 📄 多格式文档支持")
|
|
|
print("• 🔄 MarkItDown格式转换")
|
|
|
print("• ✂️ 智能文档分块")
|
|
|
print("• 🎯 元数据提取")
|
|
|
|
|
|
# 演示不同类型文档的处理
|
|
|
print(f"\n1. 多格式文档处理:")
|
|
|
|
|
|
# 模拟不同格式的文档
|
|
|
documents = [
|
|
|
{
|
|
|
"content": """# 机器学习基础教程
|
|
|
|
|
|
## 第一章:机器学习概述
|
|
|
|
|
|
机器学习是人工智能的一个重要分支,它使计算机能够在没有明确编程的情况下学习和改进。
|
|
|
|
|
|
### 1.1 机器学习的定义
|
|
|
|
|
|
机器学习是一种数据分析方法,它自动化分析模型的构建。它是人工智能的一个分支,基于系统可以从数据中学习、识别模式并在最少人工干预的情况下做出决策的想法。
|
|
|
|
|
|
### 1.2 机器学习的类型
|
|
|
|
|
|
1. **监督学习**:使用标记的训练数据来学习映射函数
|
|
|
2. **无监督学习**:从未标记的数据中发现隐藏的模式
|
|
|
3. **强化学习**:通过与环境交互来学习最优行为
|
|
|
|
|
|
### 1.3 常见算法
|
|
|
|
|
|
- 线性回归
|
|
|
- 逻辑回归
|
|
|
- 决策树
|
|
|
- 随机森林
|
|
|
- 支持向量机
|
|
|
- 神经网络
|
|
|
|
|
|
## 第二章:数据预处理
|
|
|
|
|
|
数据预处理是机器学习流程中的关键步骤...
|
|
|
""",
|
|
|
"document_id": "ml_tutorial_chapter1",
|
|
|
"format": "markdown",
|
|
|
"metadata": {
|
|
|
"title": "机器学习基础教程",
|
|
|
"chapter": 1,
|
|
|
"author": "AI教学团队",
|
|
|
"difficulty": "beginner",
|
|
|
"estimated_reading_time": 15
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
"content": """深度学习技术报告
|
|
|
|
|
|
执行摘要:
|
|
|
本报告分析了深度学习在计算机视觉领域的最新进展。通过对比不同架构的性能,我们发现Transformer架构在多个任务上都表现出色。
|
|
|
|
|
|
主要发现:
|
|
|
1. Vision Transformer (ViT) 在图像分类任务上超越了传统CNN
|
|
|
2. CLIP模型实现了图像和文本的统一表示
|
|
|
3. 自监督学习方法显著减少了对标注数据的依赖
|
|
|
|
|
|
技术细节:
|
|
|
- 数据集:ImageNet-1K, COCO, OpenImages
|
|
|
- 评估指标:Top-1准确率, mAP, FID分数
|
|
|
- 计算资源:8x V100 GPU, 训练时间72小时
|
|
|
|
|
|
结论:
|
|
|
深度学习技术在计算机视觉领域持续快速发展,Transformer架构的引入为该领域带来了新的突破。建议在实际项目中优先考虑基于Transformer的模型。
|
|
|
|
|
|
附录:
|
|
|
详细的实验数据和代码实现请参考GitHub仓库。
|
|
|
""",
|
|
|
"document_id": "deep_learning_report",
|
|
|
"format": "text",
|
|
|
"metadata": {
|
|
|
"title": "深度学习技术报告",
|
|
|
"type": "technical_report",
|
|
|
"date": "2024-01-15",
|
|
|
"department": "AI研究部",
|
|
|
"confidentiality": "internal"
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
"content": """{
|
|
|
"api_documentation": {
|
|
|
"title": "机器学习API文档",
|
|
|
"version": "v2.1",
|
|
|
"base_url": "https://api.ml-platform.com/v2",
|
|
|
"endpoints": [
|
|
|
{
|
|
|
"path": "/models",
|
|
|
"method": "GET",
|
|
|
"description": "获取可用模型列表",
|
|
|
"parameters": {
|
|
|
"category": "模型类别 (classification, regression, clustering)",
|
|
|
"limit": "返回结果数量限制"
|
|
|
},
|
|
|
"response": {
|
|
|
"models": [
|
|
|
{
|
|
|
"id": "model_123",
|
|
|
"name": "RandomForest分类器",
|
|
|
"category": "classification",
|
|
|
"accuracy": 0.95,
|
|
|
"training_data_size": 10000
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
"path": "/predict",
|
|
|
"method": "POST",
|
|
|
"description": "使用指定模型进行预测",
|
|
|
"parameters": {
|
|
|
"model_id": "模型ID",
|
|
|
"data": "输入数据"
|
|
|
},
|
|
|
"response": {
|
|
|
"prediction": "预测结果",
|
|
|
"confidence": "置信度",
|
|
|
"processing_time": "处理时间(ms)"
|
|
|
}
|
|
|
}
|
|
|
],
|
|
|
"authentication": {
|
|
|
"type": "API Key",
|
|
|
"header": "X-API-Key",
|
|
|
"description": "在请求头中包含API密钥"
|
|
|
},
|
|
|
"rate_limits": {
|
|
|
"requests_per_minute": 100,
|
|
|
"requests_per_day": 10000
|
|
|
}
|
|
|
}
|
|
|
}""",
|
|
|
"document_id": "ml_api_docs",
|
|
|
"format": "json",
|
|
|
"metadata": {
|
|
|
"title": "机器学习API文档",
|
|
|
"version": "v2.1",
|
|
|
"type": "api_documentation",
|
|
|
"last_updated": "2024-01-20"
|
|
|
}
|
|
|
}
|
|
|
]
|
|
|
|
|
|
# 处理每个文档
|
|
|
for doc in documents:
|
|
|
print(f"\n处理文档: {doc['document_id']} ({doc['format']})")
|
|
|
|
|
|
result = self.rag_tool.execute("add_text",
|
|
|
text=doc["content"],
|
|
|
document_id=doc["document_id"],
|
|
|
**doc["metadata"])
|
|
|
print(f" 摄取结果: {result}")
|
|
|
|
|
|
# 显示文档统计
|
|
|
doc_stats = {
|
|
|
"字符数": len(doc["content"]),
|
|
|
"行数": doc["content"].count('\n') + 1,
|
|
|
"格式": doc["format"],
|
|
|
"元数据字段": len(doc["metadata"])
|
|
|
}
|
|
|
print(f" 文档统计: {doc_stats}")
|
|
|
|
|
|
# 演示批量文档处理
|
|
|
print(f"\n2. 批量文档处理:")
|
|
|
|
|
|
batch_documents = []
|
|
|
for i in range(3):
|
|
|
batch_doc = {
|
|
|
"content": f"""# 批量文档 {i+1}
|
|
|
|
|
|
这是第 {i+1} 个批量处理的文档。它包含了关于人工智能发展的重要信息。
|
|
|
|
|
|
## 主要内容
|
|
|
- AI技术趋势分析
|
|
|
- 行业应用案例
|
|
|
- 未来发展预测
|
|
|
|
|
|
## 详细描述
|
|
|
人工智能技术在过去几年中取得了显著进展,特别是在深度学习、自然语言处理和计算机视觉领域。
|
|
|
|
|
|
### 技术突破
|
|
|
1. 大语言模型的涌现
|
|
|
2. 多模态AI的发展
|
|
|
3. 自动化机器学习的普及
|
|
|
|
|
|
### 应用领域
|
|
|
- 医疗诊断
|
|
|
- 金融风控
|
|
|
- 智能制造
|
|
|
- 自动驾驶
|
|
|
|
|
|
这些技术的发展为各行各业带来了新的机遇和挑战。
|
|
|
""",
|
|
|
"document_id": f"batch_doc_{i+1}",
|
|
|
"metadata": {
|
|
|
"batch_id": "batch_001",
|
|
|
"sequence": i+1,
|
|
|
"topic": "artificial_intelligence",
|
|
|
"processing_date": datetime.now().isoformat()
|
|
|
}
|
|
|
}
|
|
|
batch_documents.append(batch_doc)
|
|
|
|
|
|
# 批量处理
|
|
|
start_time = time.time()
|
|
|
for doc in batch_documents:
|
|
|
result = self.rag_tool.execute("add_text",
|
|
|
text=doc["content"],
|
|
|
document_id=doc["document_id"],
|
|
|
**doc["metadata"])
|
|
|
print(f" 批量处理 {doc['document_id']}: {result}")
|
|
|
|
|
|
batch_time = time.time() - start_time
|
|
|
print(f" 批量处理耗时: {batch_time:.3f}秒")
|
|
|
|
|
|
# 获取摄取统计
|
|
|
stats = self.rag_tool.execute("stats")
|
|
|
print(f"\n📊 文档摄取统计: {stats}")
|
|
|
|
|
|
def demonstrate_chunking_strategies(self):
|
|
|
"""演示文档分块策略"""
|
|
|
print("\n✂️ 文档分块策略演示")
|
|
|
print("-" * 60)
|
|
|
|
|
|
print("🔍 分块策略特点:")
|
|
|
print("• 📏 基于语义的智能分块")
|
|
|
print("• 🔗 保持上下文连贯性")
|
|
|
print("• ⚖️ 平衡块大小和信息完整性")
|
|
|
print("• 🎯 优化检索效果")
|
|
|
|
|
|
# 演示不同分块策略
|
|
|
print(f"\n1. 分块策略对比:")
|
|
|
|
|
|
# 长文档示例
|
|
|
long_document = """# 人工智能发展史
|
|
|
|
|
|
## 引言
|
|
|
人工智能(Artificial Intelligence, AI)的发展历程可以追溯到20世纪50年代。从最初的符号主义方法到现代的深度学习,AI经历了多次重要的发展阶段。
|
|
|
|
|
|
## 第一阶段:符号主义时代(1950s-1980s)
|
|
|
### 起源与发展
|
|
|
1950年,阿兰·图灵发表了著名的论文《计算机器与智能》,提出了"图灵测试"的概念。这标志着人工智能研究的正式开始。
|
|
|
|
|
|
### 主要成就
|
|
|
- 1956年达特茅斯会议,正式提出"人工智能"概念
|
|
|
- 专家系统的发展,如MYCIN医疗诊断系统
|
|
|
- 逻辑推理和知识表示方法的建立
|
|
|
|
|
|
### 局限性
|
|
|
符号主义方法虽然在某些领域取得了成功,但面临着知识获取瓶颈和常识推理困难等问题。
|
|
|
|
|
|
## 第二阶段:连接主义复兴(1980s-2000s)
|
|
|
### 神经网络的回归
|
|
|
1986年,Rumelhart等人重新发现了反向传播算法,使得多层神经网络的训练成为可能。
|
|
|
|
|
|
### 重要突破
|
|
|
- 多层感知机的成功应用
|
|
|
- 卷积神经网络在图像识别中的应用
|
|
|
- 循环神经网络处理序列数据
|
|
|
|
|
|
### 技术限制
|
|
|
由于计算能力和数据量的限制,神经网络在这一时期的应用仍然有限。
|
|
|
|
|
|
## 第三阶段:深度学习革命(2000s-至今)
|
|
|
### 深度学习的兴起
|
|
|
2006年,Geoffrey Hinton等人提出了深度信念网络,开启了深度学习的新时代。
|
|
|
|
|
|
### 关键技术突破
|
|
|
- GPU并行计算的应用
|
|
|
- 大数据的可获得性
|
|
|
- 改进的训练算法和正则化技术
|
|
|
|
|
|
### 重大成就
|
|
|
- 2012年AlexNet在ImageNet竞赛中的突破性表现
|
|
|
- 2016年AlphaGo击败世界围棋冠军
|
|
|
- 2017年Transformer架构的提出
|
|
|
- 2020年GPT-3等大语言模型的出现
|
|
|
|
|
|
## 第四阶段:通用人工智能探索(2020s-未来)
|
|
|
### 当前趋势
|
|
|
- 多模态AI的发展
|
|
|
- 自监督学习方法的普及
|
|
|
- 神经符号结合的新方法
|
|
|
|
|
|
### 未来展望
|
|
|
人工智能正朝着更加通用、可解释和安全的方向发展。通用人工智能(AGI)的实现仍然是一个长期目标。
|
|
|
|
|
|
## 结论
|
|
|
人工智能的发展是一个螺旋上升的过程,每个阶段都有其独特的贡献和局限性。理解这一发展历程有助于我们更好地把握AI技术的未来方向。
|
|
|
|
|
|
## 参考文献
|
|
|
1. Turing, A. M. (1950). Computing machinery and intelligence.
|
|
|
2. Russell, S., & Norvig, P. (2020). Artificial Intelligence: A Modern Approach.
|
|
|
3. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning.
|
|
|
"""
|
|
|
|
|
|
# 添加长文档并观察分块效果
|
|
|
chunking_result = self.rag_tool.execute("add_text",
|
|
|
text=long_document,
|
|
|
document_id="ai_history_long",
|
|
|
title="人工智能发展史",
|
|
|
type="historical_overview",
|
|
|
chunking_strategy="semantic")
|
|
|
print(f"长文档分块结果: {chunking_result}")
|
|
|
|
|
|
# 演示不同分块大小的影响
|
|
|
print(f"\n2. 分块大小影响分析:")
|
|
|
|
|
|
# 搜索测试,观察分块对检索的影响
|
|
|
test_queries = [
|
|
|
"图灵测试是什么?",
|
|
|
"深度学习的关键技术突破",
|
|
|
"AlphaGo的意义",
|
|
|
"通用人工智能的未来"
|
|
|
]
|
|
|
|
|
|
for query in test_queries:
|
|
|
start_time = time.time()
|
|
|
results = self.rag_tool.execute("search",
|
|
|
query=query,
|
|
|
limit=3)
|
|
|
search_time = time.time() - start_time
|
|
|
print(f" 查询: '{query}' ({search_time:.4f}秒)")
|
|
|
print(f" 结果: {results[:120]}...")
|
|
|
|
|
|
# 演示结构化文档的分块
|
|
|
print(f"\n3. 结构化文档分块:")
|
|
|
|
|
|
structured_doc = """# 机器学习算法手册
|
|
|
|
|
|
## 监督学习算法
|
|
|
|
|
|
### 线性回归
|
|
|
**定义**: 线性回归是一种用于预测连续数值的算法。
|
|
|
**公式**: y = wx + b
|
|
|
**优点**: 简单易懂,计算效率高
|
|
|
**缺点**: 只能处理线性关系
|
|
|
**应用场景**: 房价预测、销售预测
|
|
|
|
|
|
### 逻辑回归
|
|
|
**定义**: 逻辑回归用于二分类问题。
|
|
|
**公式**: p = 1/(1+e^(-wx+b))
|
|
|
**优点**: 输出概率值,可解释性强
|
|
|
**缺点**: 对特征工程要求高
|
|
|
**应用场景**: 邮件分类、医疗诊断
|
|
|
|
|
|
### 决策树
|
|
|
**定义**: 基于特征进行分层决策的树形结构。
|
|
|
**算法**: ID3, C4.5, CART
|
|
|
**优点**: 可解释性强,处理非线性关系
|
|
|
**缺点**: 容易过拟合
|
|
|
**应用场景**: 信用评估、医疗诊断
|
|
|
|
|
|
## 无监督学习算法
|
|
|
|
|
|
### K-means聚类
|
|
|
**定义**: 将数据分为K个簇的聚类算法。
|
|
|
**步骤**: 初始化中心点 → 分配样本 → 更新中心点 → 重复
|
|
|
**优点**: 简单高效
|
|
|
**缺点**: 需要预设簇数
|
|
|
**应用场景**: 客户分群、图像分割
|
|
|
|
|
|
### 主成分分析(PCA)
|
|
|
**定义**: 降维算法,保留主要信息。
|
|
|
**原理**: 找到数据的主要变化方向
|
|
|
**优点**: 降低维度,去除噪声
|
|
|
**缺点**: 损失部分信息
|
|
|
**应用场景**: 数据可视化、特征提取
|
|
|
"""
|
|
|
|
|
|
structured_result = self.rag_tool.execute("add_text",
|
|
|
text=structured_doc,
|
|
|
document_id="ml_algorithms_handbook",
|
|
|
title="机器学习算法手册",
|
|
|
type="reference_manual",
|
|
|
structure="hierarchical")
|
|
|
print(f"结构化文档分块: {structured_result}")
|
|
|
|
|
|
# 测试结构化检索
|
|
|
structured_queries = [
|
|
|
"线性回归的优缺点",
|
|
|
"K-means聚类算法",
|
|
|
"PCA降维原理"
|
|
|
]
|
|
|
|
|
|
for query in structured_queries:
|
|
|
results = self.rag_tool.execute("search",
|
|
|
query=query,
|
|
|
limit=2)
|
|
|
print(f" 结构化查询 '{query}': {results[:100]}...")
|
|
|
|
|
|
def demonstrate_advanced_retrieval(self):
|
|
|
"""演示高级检索策略"""
|
|
|
print("\n🔍 高级检索策略演示")
|
|
|
print("-" * 60)
|
|
|
|
|
|
print("🔍 高级检索特点:")
|
|
|
print("• 🎯 多查询扩展(MQE)")
|
|
|
print("• 💭 假设文档嵌入(HyDE)")
|
|
|
print("• 🔄 混合检索策略")
|
|
|
print("• 📊 相关性重排序")
|
|
|
|
|
|
# 演示多查询扩展
|
|
|
print(f"\n1. 多查询扩展(MQE)演示:")
|
|
|
|
|
|
base_query = "如何提高机器学习模型的性能?"
|
|
|
print(f"原始查询: {base_query}")
|
|
|
|
|
|
# 模拟查询扩展
|
|
|
expanded_queries = [
|
|
|
"机器学习模型性能优化方法",
|
|
|
"提升ML模型准确率的技巧",
|
|
|
"模型调优和超参数优化",
|
|
|
"机器学习模型评估指标"
|
|
|
]
|
|
|
|
|
|
print(f"扩展查询:")
|
|
|
for i, query in enumerate(expanded_queries, 1):
|
|
|
print(f" {i}. {query}")
|
|
|
|
|
|
# 执行多查询检索
|
|
|
all_results = []
|
|
|
for query in [base_query] + expanded_queries:
|
|
|
results = self.rag_tool.execute("search",
|
|
|
query=query,
|
|
|
limit=3)
|
|
|
all_results.append((query, results))
|
|
|
print(f" 查询结果 '{query[:20]}...': {results[:80]}...")
|
|
|
|
|
|
# 演示假设文档嵌入(HyDE)
|
|
|
print(f"\n2. 假设文档嵌入(HyDE)演示:")
|
|
|
|
|
|
user_question = "什么是深度学习?"
|
|
|
print(f"用户问题: {user_question}")
|
|
|
|
|
|
# 生成假设答案
|
|
|
hypothetical_answer = """深度学习是机器学习的一个子领域,它使用多层神经网络来学习数据的复杂模式。深度学习模型通过多个隐藏层来提取数据的层次化特征表示。常见的深度学习架构包括卷积神经网络(CNN)、循环神经网络(RNN)和Transformer。深度学习在图像识别、自然语言处理、语音识别等领域取得了突破性进展。"""
|
|
|
|
|
|
print(f"假设答案: {hypothetical_answer[:100]}...")
|
|
|
|
|
|
# 使用假设答案进行检索
|
|
|
hyde_results = self.rag_tool.execute("search",
|
|
|
query=hypothetical_answer,
|
|
|
limit=5)
|
|
|
print(f"HyDE检索结果: {hyde_results[:120]}...")
|
|
|
|
|
|
# 对比直接查询结果
|
|
|
direct_results = self.rag_tool.execute("search",
|
|
|
query=user_question,
|
|
|
limit=5)
|
|
|
print(f"直接查询结果: {direct_results[:120]}...")
|
|
|
|
|
|
# 演示混合检索策略
|
|
|
print(f"\n3. 混合检索策略演示:")
|
|
|
|
|
|
complex_query = "比较监督学习和无监督学习的区别,并给出具体应用例子"
|
|
|
print(f"复杂查询: {complex_query}")
|
|
|
|
|
|
# 分解查询
|
|
|
sub_queries = [
|
|
|
"监督学习的定义和特点",
|
|
|
"无监督学习的定义和特点",
|
|
|
"监督学习的应用例子",
|
|
|
"无监督学习的应用例子",
|
|
|
"监督学习和无监督学习的区别"
|
|
|
]
|
|
|
|
|
|
print(f"查询分解:")
|
|
|
mixed_results = {}
|
|
|
for sub_query in sub_queries:
|
|
|
results = self.rag_tool.execute("search",
|
|
|
query=sub_query,
|
|
|
limit=2)
|
|
|
mixed_results[sub_query] = results
|
|
|
print(f" 子查询: {sub_query}")
|
|
|
print(f" 结果: {results[:80]}...")
|
|
|
|
|
|
# 演示相关性重排序
|
|
|
print(f"\n4. 相关性重排序演示:")
|
|
|
|
|
|
ranking_query = "神经网络训练过程"
|
|
|
print(f"排序查询: {ranking_query}")
|
|
|
|
|
|
# 获取初始结果
|
|
|
initial_results = self.rag_tool.execute("search",
|
|
|
query=ranking_query,
|
|
|
limit=8)
|
|
|
print(f"初始检索结果: {initial_results[:150]}...")
|
|
|
|
|
|
# 模拟重排序过程(基于多个因素)
|
|
|
print(f"重排序因素:")
|
|
|
print(f" • 语义相似度权重: 0.6")
|
|
|
print(f" • 文档新鲜度权重: 0.2")
|
|
|
print(f" • 文档权威性权重: 0.2")
|
|
|
|
|
|
# 最终排序结果
|
|
|
final_results = self.rag_tool.execute("search",
|
|
|
query=ranking_query,
|
|
|
limit=5)
|
|
|
print(f"重排序后结果: {final_results[:150]}...")
|
|
|
|
|
|
def demonstrate_intelligent_qa(self):
|
|
|
"""演示智能问答生成"""
|
|
|
print("\n🤖 智能问答生成演示")
|
|
|
print("-" * 60)
|
|
|
|
|
|
print("🔍 智能问答特点:")
|
|
|
print("• 🎯 问题理解和分类")
|
|
|
print("• 📚 上下文构建")
|
|
|
print("• 💡 答案生成和优化")
|
|
|
print("• 🔗 引用和溯源")
|
|
|
|
|
|
# 演示不同类型问题的处理
|
|
|
print(f"\n1. 不同类型问题处理:")
|
|
|
|
|
|
qa_examples = [
|
|
|
{
|
|
|
"question": "什么是机器学习?",
|
|
|
"type": "定义类问题",
|
|
|
"expected_approach": "提供清晰定义和基本概念"
|
|
|
},
|
|
|
{
|
|
|
"question": "如何选择合适的机器学习算法?",
|
|
|
"type": "方法类问题",
|
|
|
"expected_approach": "提供步骤和决策框架"
|
|
|
},
|
|
|
{
|
|
|
"question": "深度学习和传统机器学习有什么区别?",
|
|
|
"type": "比较类问题",
|
|
|
"expected_approach": "对比分析优缺点"
|
|
|
},
|
|
|
{
|
|
|
"question": "为什么神经网络需要激活函数?",
|
|
|
"type": "原理类问题",
|
|
|
"expected_approach": "解释技术原理和必要性"
|
|
|
},
|
|
|
{
|
|
|
"question": "在图像分类项目中应该使用哪种算法?",
|
|
|
"type": "应用类问题",
|
|
|
"expected_approach": "结合场景给出具体建议"
|
|
|
}
|
|
|
]
|
|
|
|
|
|
for example in qa_examples:
|
|
|
print(f"\n问题类型: {example['type']}")
|
|
|
print(f"问题: {example['question']}")
|
|
|
print(f"处理策略: {example['expected_approach']}")
|
|
|
|
|
|
# 执行问答
|
|
|
start_time = time.time()
|
|
|
answer = self.rag_tool.execute("ask",
|
|
|
question=example["question"],
|
|
|
limit=4)
|
|
|
qa_time = time.time() - start_time
|
|
|
|
|
|
print(f"回答 ({qa_time:.3f}秒): {answer[:200]}...")
|
|
|
|
|
|
# 演示上下文构建过程
|
|
|
print(f"\n2. 上下文构建过程演示:")
|
|
|
|
|
|
context_question = "如何防止神经网络过拟合?"
|
|
|
print(f"问题: {context_question}")
|
|
|
|
|
|
# 模拟上下文构建步骤
|
|
|
print(f"上下文构建步骤:")
|
|
|
print(f" 1. 问题分析 - 识别关键概念:过拟合、神经网络、防止方法")
|
|
|
print(f" 2. 相关文档检索 - 搜索相关技术文档")
|
|
|
print(f" 3. 上下文筛选 - 选择最相关的信息片段")
|
|
|
print(f" 4. 上下文排序 - 按相关性和重要性排序")
|
|
|
|
|
|
# 执行上下文构建
|
|
|
context_search = self.rag_tool.execute("search",
|
|
|
query="神经网络过拟合防止方法",
|
|
|
limit=6)
|
|
|
print(f" 检索到的上下文: {context_search[:180]}...")
|
|
|
|
|
|
# 生成最终答案
|
|
|
final_answer = self.rag_tool.execute("ask",
|
|
|
question=context_question,
|
|
|
limit=5)
|
|
|
print(f" 最终答案: {final_answer[:250]}...")
|
|
|
|
|
|
# 演示多轮对话支持
|
|
|
print(f"\n3. 多轮对话支持:")
|
|
|
|
|
|
conversation = [
|
|
|
"什么是卷积神经网络?",
|
|
|
"它主要用于什么任务?",
|
|
|
"相比传统方法有什么优势?",
|
|
|
"在实际项目中如何使用?"
|
|
|
]
|
|
|
|
|
|
print(f"模拟对话场景:")
|
|
|
for i, question in enumerate(conversation, 1):
|
|
|
print(f"\n 轮次 {i}: {question}")
|
|
|
|
|
|
# 在多轮对话中,后续问题可能需要前面的上下文
|
|
|
if i > 1:
|
|
|
context_query = f"卷积神经网络 {question}"
|
|
|
else:
|
|
|
context_query = question
|
|
|
|
|
|
answer = self.rag_tool.execute("ask",
|
|
|
question=context_query,
|
|
|
limit=3)
|
|
|
print(f" 回答: {answer[:150]}...")
|
|
|
|
|
|
# 演示答案质量评估
|
|
|
print(f"\n4. 答案质量评估:")
|
|
|
|
|
|
quality_question = "解释反向传播算法的工作原理"
|
|
|
print(f"评估问题: {quality_question}")
|
|
|
|
|
|
answer = self.rag_tool.execute("ask",
|
|
|
question=quality_question,
|
|
|
limit=5)
|
|
|
|
|
|
print(f"生成答案: {answer[:300]}...")
|
|
|
|
|
|
# 模拟质量评估指标
|
|
|
quality_metrics = {
|
|
|
"相关性": "高 - 答案直接回应了问题",
|
|
|
"准确性": "高 - 技术描述准确",
|
|
|
"完整性": "中 - 涵盖了主要概念",
|
|
|
"可读性": "高 - 结构清晰易懂",
|
|
|
"引用质量": "中 - 基于可靠来源"
|
|
|
}
|
|
|
|
|
|
print(f"质量评估:")
|
|
|
for metric, score in quality_metrics.items():
|
|
|
print(f" {metric}: {score}")
|
|
|
|
|
|
def demonstrate_performance_optimization(self):
|
|
|
"""演示性能优化"""
|
|
|
print("\n⚡ 性能优化演示")
|
|
|
print("-" * 60)
|
|
|
|
|
|
print("🔍 性能优化特点:")
|
|
|
print("• 🚀 检索速度优化")
|
|
|
print("• 💾 内存使用优化")
|
|
|
print("• 🎯 结果质量提升")
|
|
|
print("• 📊 系统监控")
|
|
|
|
|
|
# 演示检索性能测试
|
|
|
print(f"\n1. 检索性能测试:")
|
|
|
|
|
|
performance_queries = [
|
|
|
"机器学习基础概念",
|
|
|
"深度学习应用场景",
|
|
|
"神经网络训练技巧",
|
|
|
"数据预处理方法",
|
|
|
"模型评估指标"
|
|
|
]
|
|
|
|
|
|
total_time = 0
|
|
|
total_queries = len(performance_queries)
|
|
|
|
|
|
print(f"执行 {total_queries} 个查询的性能测试:")
|
|
|
|
|
|
for i, query in enumerate(performance_queries, 1):
|
|
|
start_time = time.time()
|
|
|
results = self.rag_tool.execute("search",
|
|
|
query=query,
|
|
|
limit=5)
|
|
|
query_time = time.time() - start_time
|
|
|
total_time += query_time
|
|
|
|
|
|
print(f" 查询 {i}: '{query}' - {query_time:.4f}秒")
|
|
|
|
|
|
avg_time = total_time / total_queries
|
|
|
print(f"\n性能统计:")
|
|
|
print(f" 总耗时: {total_time:.4f}秒")
|
|
|
print(f" 平均查询时间: {avg_time:.4f}秒")
|
|
|
print(f" 查询吞吐量: {1/avg_time:.2f} 查询/秒")
|
|
|
|
|
|
# 演示批量处理优化
|
|
|
print(f"\n2. 批量处理优化:")
|
|
|
|
|
|
batch_queries = [
|
|
|
"什么是监督学习?",
|
|
|
"什么是无监督学习?",
|
|
|
"什么是强化学习?",
|
|
|
"什么是深度学习?",
|
|
|
"什么是神经网络?"
|
|
|
]
|
|
|
|
|
|
# 单个处理
|
|
|
start_time = time.time()
|
|
|
individual_results = []
|
|
|
for query in batch_queries:
|
|
|
result = self.rag_tool.execute("search", query=query, limit=2)
|
|
|
individual_results.append(result)
|
|
|
individual_time = time.time() - start_time
|
|
|
|
|
|
print(f" 单个处理耗时: {individual_time:.4f}秒")
|
|
|
|
|
|
# 模拟批量处理(实际实现中可能有优化)
|
|
|
start_time = time.time()
|
|
|
batch_results = []
|
|
|
for query in batch_queries:
|
|
|
result = self.rag_tool.execute("search", query=query, limit=2)
|
|
|
batch_results.append(result)
|
|
|
batch_time = time.time() - start_time
|
|
|
|
|
|
print(f" 批量处理耗时: {batch_time:.4f}秒")
|
|
|
print(f" 性能提升: {((individual_time - batch_time) / individual_time * 100):.1f}%")
|
|
|
|
|
|
# 演示缓存机制
|
|
|
print(f"\n3. 缓存机制演示:")
|
|
|
|
|
|
cache_query = "机器学习算法分类"
|
|
|
|
|
|
# 第一次查询(无缓存)
|
|
|
start_time = time.time()
|
|
|
first_result = self.rag_tool.execute("search",
|
|
|
query=cache_query,
|
|
|
limit=3)
|
|
|
first_time = time.time() - start_time
|
|
|
print(f" 首次查询: {first_time:.4f}秒")
|
|
|
|
|
|
# 第二次查询(可能有缓存)
|
|
|
start_time = time.time()
|
|
|
second_result = self.rag_tool.execute("search",
|
|
|
query=cache_query,
|
|
|
limit=3)
|
|
|
second_time = time.time() - start_time
|
|
|
print(f" 重复查询: {second_time:.4f}秒")
|
|
|
|
|
|
if second_time < first_time:
|
|
|
speedup = (first_time - second_time) / first_time * 100
|
|
|
print(f" 缓存加速: {speedup:.1f}%")
|
|
|
|
|
|
# 演示系统监控
|
|
|
print(f"\n4. 系统监控:")
|
|
|
|
|
|
# 获取系统统计
|
|
|
system_stats = self.rag_tool.execute("stats")
|
|
|
print(f" 系统统计: {system_stats}")
|
|
|
|
|
|
# 模拟资源使用监控
|
|
|
resource_usage = {
|
|
|
"文档数量": "15个",
|
|
|
"索引大小": "约2.5MB",
|
|
|
"内存使用": "约128MB",
|
|
|
"平均响应时间": f"{avg_time:.4f}秒",
|
|
|
"成功率": "100%"
|
|
|
}
|
|
|
|
|
|
print(f" 资源使用情况:")
|
|
|
for metric, value in resource_usage.items():
|
|
|
print(f" {metric}: {value}")
|
|
|
|
|
|
def main():
|
|
|
"""主函数"""
|
|
|
print("📚 RAG完整处理管道演示")
|
|
|
print("展示从文档处理到智能问答的完整RAG流程")
|
|
|
print("=" * 80)
|
|
|
|
|
|
try:
|
|
|
demo = RAGPipelineComplete()
|
|
|
|
|
|
# 1. 文档摄取演示
|
|
|
demo.demonstrate_document_ingestion()
|
|
|
|
|
|
# 2. 分块策略演示
|
|
|
demo.demonstrate_chunking_strategies()
|
|
|
|
|
|
# 3. 高级检索演示
|
|
|
demo.demonstrate_advanced_retrieval()
|
|
|
|
|
|
# 4. 智能问答演示
|
|
|
demo.demonstrate_intelligent_qa()
|
|
|
|
|
|
# 5. 性能优化演示
|
|
|
demo.demonstrate_performance_optimization()
|
|
|
|
|
|
print("\n" + "=" * 80)
|
|
|
print("🎉 RAG完整处理管道演示完成!")
|
|
|
print("=" * 80)
|
|
|
|
|
|
print("\n✨ RAG管道核心特性:")
|
|
|
print("1. 📥 多格式文档摄取 - 支持PDF、DOCX、TXT、MD等")
|
|
|
print("2. ✂️ 智能文档分块 - 基于语义的分块策略")
|
|
|
print("3. 🔍 高级检索策略 - MQE、HyDE、混合检索")
|
|
|
print("4. 🤖 智能问答生成 - 上下文构建和答案优化")
|
|
|
print("5. ⚡ 性能优化 - 缓存、批量处理、监控")
|
|
|
|
|
|
print("\n🎯 技术优势:")
|
|
|
print("• 端到端处理流程")
|
|
|
print("• 多策略检索优化")
|
|
|
print("• 智能上下文构建")
|
|
|
print("• 高质量答案生成")
|
|
|
print("• 全面性能监控")
|
|
|
|
|
|
print("\n💡 应用场景:")
|
|
|
print("• 企业知识库问答")
|
|
|
print("• 技术文档助手")
|
|
|
print("• 学习辅导系统")
|
|
|
print("• 智能客服系统")
|
|
|
|
|
|
except Exception as e:
|
|
|
print(f"\n❌ 演示过程中发生错误: {e}")
|
|
|
import traceback
|
|
|
traceback.print_exc()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
main() |