10_RAG_Pipeline_Complete.py 32 KB

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