index.html 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>RAG管道测试可视化工具</title>
  7. <link rel="stylesheet" href="styles.css">
  8. <!-- Markdown渲染库 -->
  9. <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
  10. <!-- LaTeX公式渲染库 -->
  11. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
  12. <script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
  13. <script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"></script>
  14. </head>
  15. <body>
  16. <div class="container">
  17. <header class="header">
  18. <h1>🔍 RAG管道测试可视化工具</h1>
  19. <p class="subtitle">RAG链路各环节输入输出数据流转调试工具 + 专业性审查完整测试</p>
  20. </header>
  21. <!-- 功能切换Tab -->
  22. <section class="function-tabs">
  23. <button class="function-tab active" data-function="rag" onclick="switchFunction('rag')">
  24. 🔍 RAG召回测试
  25. </button>
  26. <button class="function-tab" data-function="native_rag" onclick="window.open('native_rag.html','_blank')">
  27. ⚡ Native RAG
  28. </button>
  29. <button class="function-tab" data-function="professional" onclick="switchFunction('professional')">
  30. 🎯 专业性审查测试
  31. </button>
  32. </section>
  33. <!-- 统一的测试输入区域 -->
  34. <section class="test-input-section">
  35. <h2 id="sectionTitle">🚀 RAG链路测试</h2>
  36. <div class="server-status" id="serverStatus">
  37. <span class="status-dot offline"></span>
  38. <span class="status-text">服务未连接</span>
  39. </div>
  40. <div class="input-area">
  41. <textarea id="testInput" placeholder="输入测试文本,点击执行RAG检索...&#10;&#10;示例:主要部件说明&#10;1、主梁总成&#10;主梁总成由主梁和导梁构成。主梁单节长12m,共7节,每节重10.87t..."></textarea>
  42. </div>
  43. <!-- 专业性审查类型选择器 -->
  44. <div class="review-type-selector" id="reviewTypeSelector" style="display: none;">
  45. <label>审查类型:</label>
  46. <label class="radio-label">
  47. <input type="radio" name="checkType" value="both" checked><span>全部审查</span>
  48. </label>
  49. <label class="radio-label">
  50. <input type="radio" name="checkType" value="non_parameter"><span>非参数审查</span>
  51. </label>
  52. <label class="radio-label">
  53. <input type="radio" name="checkType" value="parameter"><span>参数审查</span>
  54. </label>
  55. </div>
  56. <!-- Native RAG已移至独立页面 native_rag.html -->
  57. <!-- 动作按钮 -->
  58. <div class="action-buttons">
  59. <!-- RAG召回按钮 -->
  60. <button class="btn btn-primary" id="runRagBtn" onclick="runRAG()">
  61. <span class="btn-icon">▶</span> 执行RAG检索
  62. </button>
  63. <!-- 专业性审查按钮 -->
  64. <button class="btn btn-success" id="runProfessionalBtn" onclick="runProfessionalReview()" style="display: none;">
  65. <span class="btn-icon">▶</span> 执行专业性审查
  66. </button>
  67. <button class="btn btn-secondary" onclick="loadSampleData()" id="loadSampleBtn">加载历史数据</button>
  68. <button class="btn btn-secondary" onclick="clearAllData()">清空</button>
  69. </div>
  70. <div class="loading-overlay" id="loadingOverlay" style="display: none;">
  71. <div class="loading-spinner"></div>
  72. <p id="loadingText">正在执行RAG检索...</p>
  73. </div>
  74. </section>
  75. <!-- 文件上传区域 -->
  76. <section class="upload-section">
  77. <div class="upload-area" id="uploadArea">
  78. <div class="upload-icon">📁</div>
  79. <p>或拖拽JSON文件到此处查看历史数据</p>
  80. <input type="file" id="fileInput" accept=".json" hidden>
  81. </div>
  82. </section>
  83. <!-- 管道概览 -->
  84. <section class="pipeline-overview" id="pipelineOverview" style="display: none;">
  85. <h2>📊 管道概览</h2>
  86. <div class="overview-cards">
  87. <div class="overview-card">
  88. <div class="card-icon">⏱️</div>
  89. <div class="card-content">
  90. <span class="card-label">执行时间</span>
  91. <span class="card-value" id="totalTime">-</span>
  92. </div>
  93. </div>
  94. <div class="overview-card">
  95. <div class="card-icon">📝</div>
  96. <div class="card-content">
  97. <span class="card-label">处理阶段</span>
  98. <span class="card-value" id="stageCount">-</span>
  99. </div>
  100. </div>
  101. <div class="overview-card">
  102. <div class="card-icon">✅</div>
  103. <div class="card-content">
  104. <span class="card-label">执行状态</span>
  105. <span class="card-value" id="execStatus">-</span>
  106. </div>
  107. </div>
  108. </div>
  109. </section>
  110. <!-- 管道流程图 -->
  111. <section class="pipeline-flow" id="pipelineFlow" style="display: none;">
  112. <h2>🔄 管道流程</h2>
  113. <div class="flow-container" id="flowContainer">
  114. <!-- 动态生成流程节点 -->
  115. </div>
  116. </section>
  117. <!-- 详细数据面板 -->
  118. <section class="detail-panel" id="detailPanel" style="display: none;">
  119. <h2>📋 详细数据</h2>
  120. <div class="tabs">
  121. <button class="tab-btn active" data-tab="input">输入数据</button>
  122. <button class="tab-btn" data-tab="output">输出数据</button>
  123. <button class="tab-btn" data-tab="raw">原始JSON</button>
  124. </div>
  125. <div class="tab-content">
  126. <div class="tab-pane active" id="inputPane">
  127. <pre class="json-viewer" id="inputViewer"></pre>
  128. </div>
  129. <div class="tab-pane" id="outputPane">
  130. <pre class="json-viewer" id="outputViewer"></pre>
  131. </div>
  132. <div class="tab-pane" id="rawPane">
  133. <pre class="json-viewer" id="rawViewer"></pre>
  134. </div>
  135. </div>
  136. </section>
  137. <!-- 各阶段详情 -->
  138. <section class="stages-detail" id="stagesDetail" style="display: none;">
  139. <h2>🔬 各阶段详情</h2>
  140. <div class="accordion" id="stagesAccordion">
  141. <!-- 动态生成各阶段详情 -->
  142. </div>
  143. </section>
  144. <!-- Native RAG已移至独立页面 native_rag.html -->
  145. <!-- 专业性审查结果展示 -->
  146. <section class="professional-results" id="professionalResults" style="display: none;">
  147. <h2>📊 专业性审查结果</h2>
  148. <!-- RAG召回摘要 -->
  149. <div class="result-section">
  150. <h3>🔍 RAG召回摘要</h3>
  151. <div class="rag-summary" id="ragSummary">
  152. <!-- 动态生成 -->
  153. </div>
  154. </div>
  155. <!-- 审查结果列表 -->
  156. <div class="result-section">
  157. <h3>📋 审查结果详情</h3>
  158. <div class="review-results-list" id="reviewResultsList">
  159. <!-- 动态生成 -->
  160. </div>
  161. </div>
  162. </section>
  163. </div>
  164. <!-- 审查依据侧边栏 -->
  165. <div class="reference-sidebar" id="referenceSidebar">
  166. <div class="sidebar-header">
  167. <h3>📚 审查依据</h3>
  168. <button class="sidebar-close-btn" onclick="closeReferenceSidebar()">✕</button>
  169. </div>
  170. <div class="sidebar-content" id="sidebarContent">
  171. <!-- 动态加载Markdown内容 -->
  172. </div>
  173. </div>
  174. <div class="sidebar-overlay" id="sidebarOverlay" onclick="closeReferenceSidebar()"></div>
  175. <script src="app.js"></script>
  176. <script src="professional_review.js"></script>
  177. </body>
  178. </html>