10_RAG_Pipeline_Complete.py 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 代码示例 10: RAG完整处理管道
  5. 展示从文档处理到智能问答的完整RAG流程
  6. """
  7. import os
  8. import time
  9. import json
  10. from datetime import datetime
  11. from typing import List, Dict, Any, Optional
  12. from hello_agents.tools import RAGTool
  13. class RAGPipelineComplete:
  14. """RAG完整处理管道演示类"""
  15. def __init__(self):
  16. self.setup_rag_system()
  17. def setup_rag_system(self):
  18. """设置RAG系统"""
  19. print("📚 RAG完整处理管道演示")
  20. print("=" * 60)
  21. # 初始化RAG工具
  22. self.rag_tool = RAGTool(
  23. knowledge_base_path="./rag_pipeline_kb",
  24. rag_namespace="complete_pipeline"
  25. )
  26. print("✅ RAG系统初始化完成")
  27. # 显示系统配置
  28. print(f"\n📊 系统配置:")
  29. print(f" 知识库路径: ./rag_pipeline_kb")
  30. print(f" 命名空间: complete_pipeline")
  31. print(f" 支持格式: PDF, DOCX, TXT, MD, HTML, JSON")
  32. def demonstrate_document_ingestion(self):
  33. """演示文档摄取过程"""
  34. print("\n📥 文档摄取过程演示")
  35. print("-" * 60)
  36. print("🔍 文档摄取特点:")
  37. print("• 📄 多格式文档支持")
  38. print("• 🔄 MarkItDown格式转换")
  39. print("• ✂️ 智能文档分块")
  40. print("• 🎯 元数据提取")
  41. # 演示不同类型文档的处理
  42. print(f"\n1. 多格式文档处理:")
  43. # 模拟不同格式的文档
  44. documents = [
  45. {
  46. "content": """# 机器学习基础教程
  47. ## 第一章:机器学习概述
  48. 机器学习是人工智能的一个重要分支,它使计算机能够在没有明确编程的情况下学习和改进。
  49. ### 1.1 机器学习的定义
  50. 机器学习是一种数据分析方法,它自动化分析模型的构建。它是人工智能的一个分支,基于系统可以从数据中学习、识别模式并在最少人工干预的情况下做出决策的想法。
  51. ### 1.2 机器学习的类型
  52. 1. **监督学习**:使用标记的训练数据来学习映射函数
  53. 2. **无监督学习**:从未标记的数据中发现隐藏的模式
  54. 3. **强化学习**:通过与环境交互来学习最优行为
  55. ### 1.3 常见算法
  56. - 线性回归
  57. - 逻辑回归
  58. - 决策树
  59. - 随机森林
  60. - 支持向量机
  61. - 神经网络
  62. ## 第二章:数据预处理
  63. 数据预处理是机器学习流程中的关键步骤...
  64. """,
  65. "document_id": "ml_tutorial_chapter1",
  66. "format": "markdown",
  67. "metadata": {
  68. "title": "机器学习基础教程",
  69. "chapter": 1,
  70. "author": "AI教学团队",
  71. "difficulty": "beginner",
  72. "estimated_reading_time": 15
  73. }
  74. },
  75. {
  76. "content": """深度学习技术报告
  77. 执行摘要:
  78. 本报告分析了深度学习在计算机视觉领域的最新进展。通过对比不同架构的性能,我们发现Transformer架构在多个任务上都表现出色。
  79. 主要发现:
  80. 1. Vision Transformer (ViT) 在图像分类任务上超越了传统CNN
  81. 2. CLIP模型实现了图像和文本的统一表示
  82. 3. 自监督学习方法显著减少了对标注数据的依赖
  83. 技术细节:
  84. - 数据集:ImageNet-1K, COCO, OpenImages
  85. - 评估指标:Top-1准确率, mAP, FID分数
  86. - 计算资源:8x V100 GPU, 训练时间72小时
  87. 结论:
  88. 深度学习技术在计算机视觉领域持续快速发展,Transformer架构的引入为该领域带来了新的突破。建议在实际项目中优先考虑基于Transformer的模型。
  89. 附录:
  90. 详细的实验数据和代码实现请参考GitHub仓库。
  91. """,
  92. "document_id": "deep_learning_report",
  93. "format": "text",
  94. "metadata": {
  95. "title": "深度学习技术报告",
  96. "type": "technical_report",
  97. "date": "2024-01-15",
  98. "department": "AI研究部",
  99. "confidentiality": "internal"
  100. }
  101. },
  102. {
  103. "content": """{
  104. "api_documentation": {
  105. "title": "机器学习API文档",
  106. "version": "v2.1",
  107. "base_url": "https://api.ml-platform.com/v2",
  108. "endpoints": [
  109. {
  110. "path": "/models",
  111. "method": "GET",
  112. "description": "获取可用模型列表",
  113. "parameters": {
  114. "category": "模型类别 (classification, regression, clustering)",
  115. "limit": "返回结果数量限制"
  116. },
  117. "response": {
  118. "models": [
  119. {
  120. "id": "model_123",
  121. "name": "RandomForest分类器",
  122. "category": "classification",
  123. "accuracy": 0.95,
  124. "training_data_size": 10000
  125. }
  126. ]
  127. }
  128. },
  129. {
  130. "path": "/predict",
  131. "method": "POST",
  132. "description": "使用指定模型进行预测",
  133. "parameters": {
  134. "model_id": "模型ID",
  135. "data": "输入数据"
  136. },
  137. "response": {
  138. "prediction": "预测结果",
  139. "confidence": "置信度",
  140. "processing_time": "处理时间(ms)"
  141. }
  142. }
  143. ],
  144. "authentication": {
  145. "type": "API Key",
  146. "header": "X-API-Key",
  147. "description": "在请求头中包含API密钥"
  148. },
  149. "rate_limits": {
  150. "requests_per_minute": 100,
  151. "requests_per_day": 10000
  152. }
  153. }
  154. }""",
  155. "document_id": "ml_api_docs",
  156. "format": "json",
  157. "metadata": {
  158. "title": "机器学习API文档",
  159. "version": "v2.1",
  160. "type": "api_documentation",
  161. "last_updated": "2024-01-20"
  162. }
  163. }
  164. ]
  165. # 处理每个文档
  166. for doc in documents:
  167. print(f"\n处理文档: {doc['document_id']} ({doc['format']})")
  168. result = self.rag_tool.execute("add_text",
  169. text=doc["content"],
  170. document_id=doc["document_id"],
  171. **doc["metadata"])
  172. print(f" 摄取结果: {result}")
  173. # 显示文档统计
  174. doc_stats = {
  175. "字符数": len(doc["content"]),
  176. "行数": doc["content"].count('\n') + 1,
  177. "格式": doc["format"],
  178. "元数据字段": len(doc["metadata"])
  179. }
  180. print(f" 文档统计: {doc_stats}")
  181. # 演示批量文档处理
  182. print(f"\n2. 批量文档处理:")
  183. batch_documents = []
  184. for i in range(3):
  185. batch_doc = {
  186. "content": f"""# 批量文档 {i+1}
  187. 这是第 {i+1} 个批量处理的文档。它包含了关于人工智能发展的重要信息。
  188. ## 主要内容
  189. - AI技术趋势分析
  190. - 行业应用案例
  191. - 未来发展预测
  192. ## 详细描述
  193. 人工智能技术在过去几年中取得了显著进展,特别是在深度学习、自然语言处理和计算机视觉领域。
  194. ### 技术突破
  195. 1. 大语言模型的涌现
  196. 2. 多模态AI的发展
  197. 3. 自动化机器学习的普及
  198. ### 应用领域
  199. - 医疗诊断
  200. - 金融风控
  201. - 智能制造
  202. - 自动驾驶
  203. 这些技术的发展为各行各业带来了新的机遇和挑战。
  204. """,
  205. "document_id": f"batch_doc_{i+1}",
  206. "metadata": {
  207. "batch_id": "batch_001",
  208. "sequence": i+1,
  209. "topic": "artificial_intelligence",
  210. "processing_date": datetime.now().isoformat()
  211. }
  212. }
  213. batch_documents.append(batch_doc)
  214. # 批量处理
  215. start_time = time.time()
  216. for doc in batch_documents:
  217. result = self.rag_tool.execute("add_text",
  218. text=doc["content"],
  219. document_id=doc["document_id"],
  220. **doc["metadata"])
  221. print(f" 批量处理 {doc['document_id']}: {result}")
  222. batch_time = time.time() - start_time
  223. print(f" 批量处理耗时: {batch_time:.3f}秒")
  224. # 获取摄取统计
  225. stats = self.rag_tool.execute("stats")
  226. print(f"\n📊 文档摄取统计: {stats}")
  227. def demonstrate_chunking_strategies(self):
  228. """演示文档分块策略"""
  229. print("\n✂️ 文档分块策略演示")
  230. print("-" * 60)
  231. print("🔍 分块策略特点:")
  232. print("• 📏 基于语义的智能分块")
  233. print("• 🔗 保持上下文连贯性")
  234. print("• ⚖️ 平衡块大小和信息完整性")
  235. print("• 🎯 优化检索效果")
  236. # 演示不同分块策略
  237. print(f"\n1. 分块策略对比:")
  238. # 长文档示例
  239. long_document = """# 人工智能发展史
  240. ## 引言
  241. 人工智能(Artificial Intelligence, AI)的发展历程可以追溯到20世纪50年代。从最初的符号主义方法到现代的深度学习,AI经历了多次重要的发展阶段。
  242. ## 第一阶段:符号主义时代(1950s-1980s)
  243. ### 起源与发展
  244. 1950年,阿兰·图灵发表了著名的论文《计算机器与智能》,提出了"图灵测试"的概念。这标志着人工智能研究的正式开始。
  245. ### 主要成就
  246. - 1956年达特茅斯会议,正式提出"人工智能"概念
  247. - 专家系统的发展,如MYCIN医疗诊断系统
  248. - 逻辑推理和知识表示方法的建立
  249. ### 局限性
  250. 符号主义方法虽然在某些领域取得了成功,但面临着知识获取瓶颈和常识推理困难等问题。
  251. ## 第二阶段:连接主义复兴(1980s-2000s)
  252. ### 神经网络的回归
  253. 1986年,Rumelhart等人重新发现了反向传播算法,使得多层神经网络的训练成为可能。
  254. ### 重要突破
  255. - 多层感知机的成功应用
  256. - 卷积神经网络在图像识别中的应用
  257. - 循环神经网络处理序列数据
  258. ### 技术限制
  259. 由于计算能力和数据量的限制,神经网络在这一时期的应用仍然有限。
  260. ## 第三阶段:深度学习革命(2000s-至今)
  261. ### 深度学习的兴起
  262. 2006年,Geoffrey Hinton等人提出了深度信念网络,开启了深度学习的新时代。
  263. ### 关键技术突破
  264. - GPU并行计算的应用
  265. - 大数据的可获得性
  266. - 改进的训练算法和正则化技术
  267. ### 重大成就
  268. - 2012年AlexNet在ImageNet竞赛中的突破性表现
  269. - 2016年AlphaGo击败世界围棋冠军
  270. - 2017年Transformer架构的提出
  271. - 2020年GPT-3等大语言模型的出现
  272. ## 第四阶段:通用人工智能探索(2020s-未来)
  273. ### 当前趋势
  274. - 多模态AI的发展
  275. - 自监督学习方法的普及
  276. - 神经符号结合的新方法
  277. ### 未来展望
  278. 人工智能正朝着更加通用、可解释和安全的方向发展。通用人工智能(AGI)的实现仍然是一个长期目标。
  279. ## 结论
  280. 人工智能的发展是一个螺旋上升的过程,每个阶段都有其独特的贡献和局限性。理解这一发展历程有助于我们更好地把握AI技术的未来方向。
  281. ## 参考文献
  282. 1. Turing, A. M. (1950). Computing machinery and intelligence.
  283. 2. Russell, S., & Norvig, P. (2020). Artificial Intelligence: A Modern Approach.
  284. 3. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning.
  285. """
  286. # 添加长文档并观察分块效果
  287. chunking_result = self.rag_tool.execute("add_text",
  288. text=long_document,
  289. document_id="ai_history_long",
  290. title="人工智能发展史",
  291. type="historical_overview",
  292. chunking_strategy="semantic")
  293. print(f"长文档分块结果: {chunking_result}")
  294. # 演示不同分块大小的影响
  295. print(f"\n2. 分块大小影响分析:")
  296. # 搜索测试,观察分块对检索的影响
  297. test_queries = [
  298. "图灵测试是什么?",
  299. "深度学习的关键技术突破",
  300. "AlphaGo的意义",
  301. "通用人工智能的未来"
  302. ]
  303. for query in test_queries:
  304. start_time = time.time()
  305. results = self.rag_tool.execute("search",
  306. query=query,
  307. limit=3)
  308. search_time = time.time() - start_time
  309. print(f" 查询: '{query}' ({search_time:.4f}秒)")
  310. print(f" 结果: {results[:120]}...")
  311. # 演示结构化文档的分块
  312. print(f"\n3. 结构化文档分块:")
  313. structured_doc = """# 机器学习算法手册
  314. ## 监督学习算法
  315. ### 线性回归
  316. **定义**: 线性回归是一种用于预测连续数值的算法。
  317. **公式**: y = wx + b
  318. **优点**: 简单易懂,计算效率高
  319. **缺点**: 只能处理线性关系
  320. **应用场景**: 房价预测、销售预测
  321. ### 逻辑回归
  322. **定义**: 逻辑回归用于二分类问题。
  323. **公式**: p = 1/(1+e^(-wx+b))
  324. **优点**: 输出概率值,可解释性强
  325. **缺点**: 对特征工程要求高
  326. **应用场景**: 邮件分类、医疗诊断
  327. ### 决策树
  328. **定义**: 基于特征进行分层决策的树形结构。
  329. **算法**: ID3, C4.5, CART
  330. **优点**: 可解释性强,处理非线性关系
  331. **缺点**: 容易过拟合
  332. **应用场景**: 信用评估、医疗诊断
  333. ## 无监督学习算法
  334. ### K-means聚类
  335. **定义**: 将数据分为K个簇的聚类算法。
  336. **步骤**: 初始化中心点 → 分配样本 → 更新中心点 → 重复
  337. **优点**: 简单高效
  338. **缺点**: 需要预设簇数
  339. **应用场景**: 客户分群、图像分割
  340. ### 主成分分析(PCA)
  341. **定义**: 降维算法,保留主要信息。
  342. **原理**: 找到数据的主要变化方向
  343. **优点**: 降低维度,去除噪声
  344. **缺点**: 损失部分信息
  345. **应用场景**: 数据可视化、特征提取
  346. """
  347. structured_result = self.rag_tool.execute("add_text",
  348. text=structured_doc,
  349. document_id="ml_algorithms_handbook",
  350. title="机器学习算法手册",
  351. type="reference_manual",
  352. structure="hierarchical")
  353. print(f"结构化文档分块: {structured_result}")
  354. # 测试结构化检索
  355. structured_queries = [
  356. "线性回归的优缺点",
  357. "K-means聚类算法",
  358. "PCA降维原理"
  359. ]
  360. for query in structured_queries:
  361. results = self.rag_tool.execute("search",
  362. query=query,
  363. limit=2)
  364. print(f" 结构化查询 '{query}': {results[:100]}...")
  365. def demonstrate_advanced_retrieval(self):
  366. """演示高级检索策略"""
  367. print("\n🔍 高级检索策略演示")
  368. print("-" * 60)
  369. print("🔍 高级检索特点:")
  370. print("• 🎯 多查询扩展(MQE)")
  371. print("• 💭 假设文档嵌入(HyDE)")
  372. print("• 🔄 混合检索策略")
  373. print("• 📊 相关性重排序")
  374. # 演示多查询扩展
  375. print(f"\n1. 多查询扩展(MQE)演示:")
  376. base_query = "如何提高机器学习模型的性能?"
  377. print(f"原始查询: {base_query}")
  378. # 模拟查询扩展
  379. expanded_queries = [
  380. "机器学习模型性能优化方法",
  381. "提升ML模型准确率的技巧",
  382. "模型调优和超参数优化",
  383. "机器学习模型评估指标"
  384. ]
  385. print(f"扩展查询:")
  386. for i, query in enumerate(expanded_queries, 1):
  387. print(f" {i}. {query}")
  388. # 执行多查询检索
  389. all_results = []
  390. for query in [base_query] + expanded_queries:
  391. results = self.rag_tool.execute("search",
  392. query=query,
  393. limit=3)
  394. all_results.append((query, results))
  395. print(f" 查询结果 '{query[:20]}...': {results[:80]}...")
  396. # 演示假设文档嵌入(HyDE)
  397. print(f"\n2. 假设文档嵌入(HyDE)演示:")
  398. user_question = "什么是深度学习?"
  399. print(f"用户问题: {user_question}")
  400. # 生成假设答案
  401. hypothetical_answer = """深度学习是机器学习的一个子领域,它使用多层神经网络来学习数据的复杂模式。深度学习模型通过多个隐藏层来提取数据的层次化特征表示。常见的深度学习架构包括卷积神经网络(CNN)、循环神经网络(RNN)和Transformer。深度学习在图像识别、自然语言处理、语音识别等领域取得了突破性进展。"""
  402. print(f"假设答案: {hypothetical_answer[:100]}...")
  403. # 使用假设答案进行检索
  404. hyde_results = self.rag_tool.execute("search",
  405. query=hypothetical_answer,
  406. limit=5)
  407. print(f"HyDE检索结果: {hyde_results[:120]}...")
  408. # 对比直接查询结果
  409. direct_results = self.rag_tool.execute("search",
  410. query=user_question,
  411. limit=5)
  412. print(f"直接查询结果: {direct_results[:120]}...")
  413. # 演示混合检索策略
  414. print(f"\n3. 混合检索策略演示:")
  415. complex_query = "比较监督学习和无监督学习的区别,并给出具体应用例子"
  416. print(f"复杂查询: {complex_query}")
  417. # 分解查询
  418. sub_queries = [
  419. "监督学习的定义和特点",
  420. "无监督学习的定义和特点",
  421. "监督学习的应用例子",
  422. "无监督学习的应用例子",
  423. "监督学习和无监督学习的区别"
  424. ]
  425. print(f"查询分解:")
  426. mixed_results = {}
  427. for sub_query in sub_queries:
  428. results = self.rag_tool.execute("search",
  429. query=sub_query,
  430. limit=2)
  431. mixed_results[sub_query] = results
  432. print(f" 子查询: {sub_query}")
  433. print(f" 结果: {results[:80]}...")
  434. # 演示相关性重排序
  435. print(f"\n4. 相关性重排序演示:")
  436. ranking_query = "神经网络训练过程"
  437. print(f"排序查询: {ranking_query}")
  438. # 获取初始结果
  439. initial_results = self.rag_tool.execute("search",
  440. query=ranking_query,
  441. limit=8)
  442. print(f"初始检索结果: {initial_results[:150]}...")
  443. # 模拟重排序过程(基于多个因素)
  444. print(f"重排序因素:")
  445. print(f" • 语义相似度权重: 0.6")
  446. print(f" • 文档新鲜度权重: 0.2")
  447. print(f" • 文档权威性权重: 0.2")
  448. # 最终排序结果
  449. final_results = self.rag_tool.execute("search",
  450. query=ranking_query,
  451. limit=5)
  452. print(f"重排序后结果: {final_results[:150]}...")
  453. def demonstrate_intelligent_qa(self):
  454. """演示智能问答生成"""
  455. print("\n🤖 智能问答生成演示")
  456. print("-" * 60)
  457. print("🔍 智能问答特点:")
  458. print("• 🎯 问题理解和分类")
  459. print("• 📚 上下文构建")
  460. print("• 💡 答案生成和优化")
  461. print("• 🔗 引用和溯源")
  462. # 演示不同类型问题的处理
  463. print(f"\n1. 不同类型问题处理:")
  464. qa_examples = [
  465. {
  466. "question": "什么是机器学习?",
  467. "type": "定义类问题",
  468. "expected_approach": "提供清晰定义和基本概念"
  469. },
  470. {
  471. "question": "如何选择合适的机器学习算法?",
  472. "type": "方法类问题",
  473. "expected_approach": "提供步骤和决策框架"
  474. },
  475. {
  476. "question": "深度学习和传统机器学习有什么区别?",
  477. "type": "比较类问题",
  478. "expected_approach": "对比分析优缺点"
  479. },
  480. {
  481. "question": "为什么神经网络需要激活函数?",
  482. "type": "原理类问题",
  483. "expected_approach": "解释技术原理和必要性"
  484. },
  485. {
  486. "question": "在图像分类项目中应该使用哪种算法?",
  487. "type": "应用类问题",
  488. "expected_approach": "结合场景给出具体建议"
  489. }
  490. ]
  491. for example in qa_examples:
  492. print(f"\n问题类型: {example['type']}")
  493. print(f"问题: {example['question']}")
  494. print(f"处理策略: {example['expected_approach']}")
  495. # 执行问答
  496. start_time = time.time()
  497. answer = self.rag_tool.execute("ask",
  498. question=example["question"],
  499. limit=4)
  500. qa_time = time.time() - start_time
  501. print(f"回答 ({qa_time:.3f}秒): {answer[:200]}...")
  502. # 演示上下文构建过程
  503. print(f"\n2. 上下文构建过程演示:")
  504. context_question = "如何防止神经网络过拟合?"
  505. print(f"问题: {context_question}")
  506. # 模拟上下文构建步骤
  507. print(f"上下文构建步骤:")
  508. print(f" 1. 问题分析 - 识别关键概念:过拟合、神经网络、防止方法")
  509. print(f" 2. 相关文档检索 - 搜索相关技术文档")
  510. print(f" 3. 上下文筛选 - 选择最相关的信息片段")
  511. print(f" 4. 上下文排序 - 按相关性和重要性排序")
  512. # 执行上下文构建
  513. context_search = self.rag_tool.execute("search",
  514. query="神经网络过拟合防止方法",
  515. limit=6)
  516. print(f" 检索到的上下文: {context_search[:180]}...")
  517. # 生成最终答案
  518. final_answer = self.rag_tool.execute("ask",
  519. question=context_question,
  520. limit=5)
  521. print(f" 最终答案: {final_answer[:250]}...")
  522. # 演示多轮对话支持
  523. print(f"\n3. 多轮对话支持:")
  524. conversation = [
  525. "什么是卷积神经网络?",
  526. "它主要用于什么任务?",
  527. "相比传统方法有什么优势?",
  528. "在实际项目中如何使用?"
  529. ]
  530. print(f"模拟对话场景:")
  531. for i, question in enumerate(conversation, 1):
  532. print(f"\n 轮次 {i}: {question}")
  533. # 在多轮对话中,后续问题可能需要前面的上下文
  534. if i > 1:
  535. context_query = f"卷积神经网络 {question}"
  536. else:
  537. context_query = question
  538. answer = self.rag_tool.execute("ask",
  539. question=context_query,
  540. limit=3)
  541. print(f" 回答: {answer[:150]}...")
  542. # 演示答案质量评估
  543. print(f"\n4. 答案质量评估:")
  544. quality_question = "解释反向传播算法的工作原理"
  545. print(f"评估问题: {quality_question}")
  546. answer = self.rag_tool.execute("ask",
  547. question=quality_question,
  548. limit=5)
  549. print(f"生成答案: {answer[:300]}...")
  550. # 模拟质量评估指标
  551. quality_metrics = {
  552. "相关性": "高 - 答案直接回应了问题",
  553. "准确性": "高 - 技术描述准确",
  554. "完整性": "中 - 涵盖了主要概念",
  555. "可读性": "高 - 结构清晰易懂",
  556. "引用质量": "中 - 基于可靠来源"
  557. }
  558. print(f"质量评估:")
  559. for metric, score in quality_metrics.items():
  560. print(f" {metric}: {score}")
  561. def demonstrate_performance_optimization(self):
  562. """演示性能优化"""
  563. print("\n⚡ 性能优化演示")
  564. print("-" * 60)
  565. print("🔍 性能优化特点:")
  566. print("• 🚀 检索速度优化")
  567. print("• 💾 内存使用优化")
  568. print("• 🎯 结果质量提升")
  569. print("• 📊 系统监控")
  570. # 演示检索性能测试
  571. print(f"\n1. 检索性能测试:")
  572. performance_queries = [
  573. "机器学习基础概念",
  574. "深度学习应用场景",
  575. "神经网络训练技巧",
  576. "数据预处理方法",
  577. "模型评估指标"
  578. ]
  579. total_time = 0
  580. total_queries = len(performance_queries)
  581. print(f"执行 {total_queries} 个查询的性能测试:")
  582. for i, query in enumerate(performance_queries, 1):
  583. start_time = time.time()
  584. results = self.rag_tool.execute("search",
  585. query=query,
  586. limit=5)
  587. query_time = time.time() - start_time
  588. total_time += query_time
  589. print(f" 查询 {i}: '{query}' - {query_time:.4f}秒")
  590. avg_time = total_time / total_queries
  591. print(f"\n性能统计:")
  592. print(f" 总耗时: {total_time:.4f}秒")
  593. print(f" 平均查询时间: {avg_time:.4f}秒")
  594. print(f" 查询吞吐量: {1/avg_time:.2f} 查询/秒")
  595. # 演示批量处理优化
  596. print(f"\n2. 批量处理优化:")
  597. batch_queries = [
  598. "什么是监督学习?",
  599. "什么是无监督学习?",
  600. "什么是强化学习?",
  601. "什么是深度学习?",
  602. "什么是神经网络?"
  603. ]
  604. # 单个处理
  605. start_time = time.time()
  606. individual_results = []
  607. for query in batch_queries:
  608. result = self.rag_tool.execute("search", query=query, limit=2)
  609. individual_results.append(result)
  610. individual_time = time.time() - start_time
  611. print(f" 单个处理耗时: {individual_time:.4f}秒")
  612. # 模拟批量处理(实际实现中可能有优化)
  613. start_time = time.time()
  614. batch_results = []
  615. for query in batch_queries:
  616. result = self.rag_tool.execute("search", query=query, limit=2)
  617. batch_results.append(result)
  618. batch_time = time.time() - start_time
  619. print(f" 批量处理耗时: {batch_time:.4f}秒")
  620. print(f" 性能提升: {((individual_time - batch_time) / individual_time * 100):.1f}%")
  621. # 演示缓存机制
  622. print(f"\n3. 缓存机制演示:")
  623. cache_query = "机器学习算法分类"
  624. # 第一次查询(无缓存)
  625. start_time = time.time()
  626. first_result = self.rag_tool.execute("search",
  627. query=cache_query,
  628. limit=3)
  629. first_time = time.time() - start_time
  630. print(f" 首次查询: {first_time:.4f}秒")
  631. # 第二次查询(可能有缓存)
  632. start_time = time.time()
  633. second_result = self.rag_tool.execute("search",
  634. query=cache_query,
  635. limit=3)
  636. second_time = time.time() - start_time
  637. print(f" 重复查询: {second_time:.4f}秒")
  638. if second_time < first_time:
  639. speedup = (first_time - second_time) / first_time * 100
  640. print(f" 缓存加速: {speedup:.1f}%")
  641. # 演示系统监控
  642. print(f"\n4. 系统监控:")
  643. # 获取系统统计
  644. system_stats = self.rag_tool.execute("stats")
  645. print(f" 系统统计: {system_stats}")
  646. # 模拟资源使用监控
  647. resource_usage = {
  648. "文档数量": "15个",
  649. "索引大小": "约2.5MB",
  650. "内存使用": "约128MB",
  651. "平均响应时间": f"{avg_time:.4f}秒",
  652. "成功率": "100%"
  653. }
  654. print(f" 资源使用情况:")
  655. for metric, value in resource_usage.items():
  656. print(f" {metric}: {value}")
  657. def main():
  658. """主函数"""
  659. print("📚 RAG完整处理管道演示")
  660. print("展示从文档处理到智能问答的完整RAG流程")
  661. print("=" * 80)
  662. try:
  663. demo = RAGPipelineComplete()
  664. # 1. 文档摄取演示
  665. demo.demonstrate_document_ingestion()
  666. # 2. 分块策略演示
  667. demo.demonstrate_chunking_strategies()
  668. # 3. 高级检索演示
  669. demo.demonstrate_advanced_retrieval()
  670. # 4. 智能问答演示
  671. demo.demonstrate_intelligent_qa()
  672. # 5. 性能优化演示
  673. demo.demonstrate_performance_optimization()
  674. print("\n" + "=" * 80)
  675. print("🎉 RAG完整处理管道演示完成!")
  676. print("=" * 80)
  677. print("\n✨ RAG管道核心特性:")
  678. print("1. 📥 多格式文档摄取 - 支持PDF、DOCX、TXT、MD等")
  679. print("2. ✂️ 智能文档分块 - 基于语义的分块策略")
  680. print("3. 🔍 高级检索策略 - MQE、HyDE、混合检索")
  681. print("4. 🤖 智能问答生成 - 上下文构建和答案优化")
  682. print("5. ⚡ 性能优化 - 缓存、批量处理、监控")
  683. print("\n🎯 技术优势:")
  684. print("• 端到端处理流程")
  685. print("• 多策略检索优化")
  686. print("• 智能上下文构建")
  687. print("• 高质量答案生成")
  688. print("• 全面性能监控")
  689. print("\n💡 应用场景:")
  690. print("• 企业知识库问答")
  691. print("• 技术文档助手")
  692. print("• 学习辅导系统")
  693. print("• 智能客服系统")
  694. except Exception as e:
  695. print(f"\n❌ 演示过程中发生错误: {e}")
  696. import traceback
  697. traceback.print_exc()
  698. if __name__ == "__main__":
  699. main()