# MedRAG-Spotfire-VecSQL **Repository Path**: xiaoping1993/med-rag-spotfire-vec-sql ## Basic Information - **Project Name**: MedRAG-Spotfire-VecSQL - **Description**: 为医院提供基于向量数据库和传统数据库的检索查询的rag应用,提供智能问答效果,并能与spotfire专业分析软件集成并与之交互 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-14 - **Last Updated**: 2025-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI智能助手应用 基于Vue 3 + Vite + TailwindCSS + LangChain.js构建的智能AI助手应用,支持多模态对话、知识库检索、函数调用、数据可视化和会话管理。集成Milvus向量数据库和SQL Server关系型数据库,提供强大的语义搜索和结构化数据查询能力。 ## 功能特性 ### 🤖 智能对话系统 - 支持多种AI模型(Qwen3-14B、Gemma2等) - 流式输出,实时显示AI回复 - 多轮对话记忆,支持上下文理解 - 智能工具调用检测和执行 - 自动管理对话历史(保持最近20条消息) ### 🖼️ 多模态交互 - 支持拖拽上传图片文件 - 支持粘贴图片(Ctrl+V) - 图片预览和删除功能 - AI可分析图片内容并回答相关问题 - 支持文本+图片的复合输入 ### 🗄️ 知识库系统 - **语义知识库**:基于Milvus向量数据库 - 混合检索(语义向量+关键词匹配) - 密集向量搜索(语义相似度) - 稀疏向量搜索(BM25全文检索) - 精确过滤查询 - **结构化知识库**:基于SQL Server数据库 - 智能SQL查询生成 - 表结构信息查询 - 支持复杂关联查询 - 安全的查询执行 ### ⚡ 函数调用系统 - 内置函数调用管理器 - 支持自定义函数扩展 - 智能工具选择和参数生成 - 预置工具函数: - `show_table`: 自动显示表格数据 - `milvus_hybrid_search`: 混合检索 - `milvus_vector_search`: 向量搜索 - `milvus_text_search`: 全文检索 - `milvus_query`: 精确查询 - `sqlserver_smart_query`: SQL查询 - `sqlserver_table_info`: 表结构查询 ### 📊 数据可视化 - 智能表格组件,自动检测AI输出的表格数据 - 支持字段筛选和搜索 - 行选择和批量删除功能 - 数据编辑和确认更新 - 可拖拽调整的界面布局 - 实时数据更新 ### 🎯 会话管理系统 - 多会话支持,独立的历史记录 - 会话模式切换(普通对话/知识库模式) - 知识库选择和配置 - 前置筛选功能(支持EMPI数据导入) - 会话状态持久化 ### 🔧 系统配置 - 独立的提示词配置系统 - 知识库配置管理 - 多种对话模式: - 默认助手 - 数据分析师 - 创意助手 - 技术专家 - 教育导师 - 知识库模式 ## 技术栈 ### 前端技术 - **前端框架**: Vue 3 (Composition API) - **构建工具**: Vite - **样式框架**: TailwindCSS - **UI组件**: 自定义组件库 ### AI与后端技术 - **AI框架**: LangChain.js v0.3.29 - **AI模型**: Qwen3-14B (SiliconFlow API) - **向量数据库**: Milvus v2.x - **关系型数据库**: SQL Server - **文本向量化**: Qwen3-Embedding-4B ### 核心依赖 - **LangChain**: ^0.3.29 (重要:不要升级到v5+) - **@langchain/openai**: ^0.5.18 - **@zilliz/milvus2-sdk-node**: ^2.5.12 - **marked**: ^16.1.1 (Markdown渲染) - **dompurify**: ^3.2.6 (XSS防护) - **zod**: ^3.25.76 (数据验证) ## 环境要求 ### 基础环境 - Node.js >= 16.0.0 - npm >= 7.0.0 - Python 3.8+ (用于SQL Server API) ### 数据库服务 - **Milvus v2.x**: 向量数据库服务 - **SQL Server**: 关系型数据库(可选,用于结构化知识库) ### API服务 - **SiliconFlow API**: AI模型服务 - **SQL Server API**: 自定义Python API服务 ## 安装步骤 ### 1. 安装Milvus向量数据库 #### 使用Docker安装(推荐) ```bash # 下载并启动Milvus curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh bash standalone_embed.sh start ``` #### 验证Milvus安装 ```bash # 检查服务状态 curl http://localhost:19530/health ``` ### 2. 配置SQL Server API服务 #### 安装Python依赖 ```bash # 创建requirements.txt文件 cat > requirements.txt << EOF fastapi==0.104.1 uvicorn==0.24.0 pymssql==2.2.11 python-dotenv==1.0.0 EOF # 安装依赖 pip install -r requirements.txt ``` #### 构建可执行文件 ```bash # 使用PyInstaller构建 pyinstaller --onefile --clean --name sqlserver-api sqlserver_api.py ``` ### 3. 配置API密钥 在 `src/services/chatService.js` 和 `src/services/embeddingService.js` 中配置您的API密钥: ```javascript // SiliconFlow API配置 this.api_key = "your-siliconflow-api-key" ``` ### 4. 安装项目依赖 ```bash npm install ``` ### 5. 启动服务 #### 启动SQL Server API服务(如果使用结构化知识库) ```bash # 直接运行Python脚本 python sqlserver_api.py # 或运行编译后的可执行文件 ./sqlserver-api.exe ``` #### 启动前端开发服务器 ```bash npm run dev ``` 应用将在 http://localhost:3000 启动。 ## 构建部署 ### 开发环境 \`\`\`bash npm run dev \`\`\` ### 生产构建 \`\`\`bash npm run build \`\`\` ### 预览构建结果 \`\`\`bash npm run preview \`\`\` 构建后的静态文件将输出到 \`dist\` 目录,可直接部署到任何静态文件服务器。 ## 项目结构 ``` ai-assistant7/ ├── dist/ # 构建输出目录 ├── node_modules/ # 依赖包 ├── src/ │ ├── components/ # Vue组件 │ │ ├── ChatInterface.vue # 聊天界面组件 │ │ ├── SessionManager.vue # 会话管理组件 │ │ └── TableVisualization.vue # 表格可视化组件 │ ├── services/ # 业务服务层 │ │ ├── chatService.js # 聊天服务(AI对话) │ │ ├── embeddingService.js # 文本向量化服务 │ │ ├── functionCallManager.js # 函数调用管理器 │ │ ├── milvusFunctionTools.js # Milvus工具函数 │ │ ├── sqlServerFunctionTools.js # SQL Server工具函数 │ │ └── sessionManager.js # 会话管理器 │ ├── config/ # 配置文件 │ │ ├── knowledgeBaseConfig.js # 知识库配置 │ │ └── systemPrompts.js # 系统提示词配置 │ ├── App.vue # 主应用组件 │ ├── main.js # 应用入口 │ └── style.css # 全局样式 ├── index.html # HTML模板 ├── package.json # 项目配置和依赖 ├── package-lock.json # 依赖锁定文件 ├── vite.config.js # Vite构建配置 ├── tailwind.config.js # TailwindCSS配置 ├── postcss.config.js # PostCSS配置 ├── sqlserver-api.exe # SQL Server API可执行文件 └── README.md # 项目说明文档 ``` ### 核心文件说明 #### 服务层 (src/services/) - **chatService.js**: 核心聊天服务,处理AI对话、工具调用、流式输出 - **embeddingService.js**: 文本向量化服务,支持语义搜索 - **functionCallManager.js**: 统一函数调用管理器,支持多种工具函数 - **milvusFunctionTools.js**: Milvus向量数据库操作工具 - **sqlServerFunctionTools.js**: SQL Server数据库操作工具 - **sessionManager.js**: 会话状态管理,支持多会话和历史记录 #### 配置层 (src/config/) - **knowledgeBaseConfig.js**: 知识库配置,包含语义库和结构库定义 - **systemPrompts.js**: 系统提示词配置,支持多种对话模式 #### 组件层 (src/components/) - **ChatInterface.vue**: 聊天界面,支持多模态输入和流式输出 - **SessionManager.vue**: 会话管理界面,支持模式切换和知识库选择 - **TableVisualization.vue**: 数据可视化组件,支持表格展示和编辑 ## 使用指南 ### 基本对话 1. 在输入框中输入消息 2. 点击发送按钮或按Enter键 3. AI将流式返回回复 ### 图片上传 1. 点击图片图标选择文件 2. 或直接粘贴图片(Ctrl+V) 3. AI可分析图片内容 ### 会话管理 1. **新建会话**: 点击侧边栏"新建会话"按钮 2. **切换会话**: 点击会话列表中的任意会话 3. **删除会话**: 点击会话项右侧的删除按钮(默认会话不可删除) ### 知识库模式使用 #### 1. 启用知识库模式 1. 在左侧会话管理面板中选择"知识库模式" 2. 展开"语义库"或"结构库"分类 3. 勾选需要使用的知识库 #### 2. 语义知识库查询 支持多种查询方式: **混合检索**(推荐): ``` 查找胸痛相关的病历记录 搜索心脏手术的术前讨论 查询化疗知情同意书内容 ``` **精确过滤查询**: ``` 查询患者ID为P12345的所有文档 查找某个患者的出院小结 ``` #### 3. 结构化知识库查询 支持自然语言转SQL查询: ``` 查询张三患者的完整就医记录 统计心内科本月住院患者数量 分析高血压患者的用药模式 查询某患者的所有检验异常结果 ``` #### 4. 前置筛选功能 1. 点击"导入前置筛选"按钮 2. 系统将自动从Spotfire环境导入EMPI数据 3. 所有查询将自动应用筛选条件 ### 数据可视化 1. 向AI请求表格数据(如:"给我一个销售数据表") 2. 系统自动检测并显示表格组件 3. 可对数据进行筛选、删除、编辑操作 4. 支持拖拽调整界面布局 ### 切换对话模式 在会话管理面板中选择不同的对话模式: - **普通对话模式**: 基础AI对话功能 - **知识库模式**: 启用知识库检索功能 系统会自动根据选择的模式切换相应的提示词和工具函数。 ## API接口文档 ### SQL Server API接口 #### 基础信息 - **服务地址**: http://localhost:8000 - **协议**: HTTP POST - **内容类型**: application/json #### 执行SQL查询 ```http POST /execute Content-Type: application/json { "sql": "SELECT TOP 100 * FROM RVT_RDR_Medical_information WHERE PatientName = '张三'", "jdbcUrl": "jdbc:sqlserver://server:1433;databaseName=DB;username=user;password=pass;encrypt=false" } ``` **响应格式**: ```json { "success": true, "data": [ { "PatientID": "P001", "PatientName": "张三", "Sex": "男", "Birthday": "1980-01-01" } ], "rowCount": 1, "executionTime": "0.123s" } ``` #### 错误响应 ```json { "success": false, "error": "错误信息", "query": "原始SQL查询" } ``` ### Milvus API接口 #### 基础信息 - **服务地址**: http://localhost:19530 - **协议**: HTTP POST - **API版本**: v2 #### 混合搜索 ```http POST /v2/vectordb/entities/hybrid_search Content-Type: application/json { "collectionName": "medical_records_jiping2048", "search": [ { "data": [[0.1, 0.2, ...]], // 密集向量 "annsField": "dense_vector", "metricType": "IP", "groupByField": "PatientId", "limit": 15 }, { "data": ["查询文本"], // 稀疏向量 "annsField": "sparse_vector", "metricType": "IP", "groupByField": "PatientId", "limit": 15 } ], "rerank": { "strategy": "rrf", "params": {"k": 60} }, "limit": 15, "outputFields": ["Id", "Content", "PatientId", "DocumentType"] } ``` ### SiliconFlow API接口 #### 基础信息 - **服务地址**: https://api.siliconflow.cn/v1/ - **认证**: API Key #### 文本生成 ```http POST /chat/completions Authorization: Bearer sk-your-api-key Content-Type: application/json { "model": "Qwen/Qwen3-14B", "messages": [ { "role": "user", "content": "你好,请介绍一下自己" } ], "stream": true, "temperature": 0 } ``` #### 文本向量化 ```http POST /embeddings Authorization: Bearer sk-your-api-key Content-Type: application/json { "model": "Qwen/Qwen3-Embedding-4B", "input": "需要向量化的文本" } ``` ### 使用示例 #### JavaScript调用示例 ```javascript // SQL Server查询 const sqlQuery = "SELECT TOP 100 * FROM RVT_RDR_Medical_information WHERE PatientName = '张三'" const jdbcUrl = "jdbc:sqlserver://119.45.141.101:1433;databaseName=RVT_DSDB_RDR;username=jiping;password=jiping;encrypt=false" const result = await fetch('http://localhost:8000/execute', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ sql: sqlQuery, jdbcUrl: jdbcUrl }) }) const data = await result.json() console.log(data) // Milvus向量搜索 const searchRequest = { collectionName: "medical_records_jiping2048", data: [queryVector], // 2560维向量 annsField: "dense_vector", metricType: "IP", limit: 15, outputFields: ["Id", "Content", "PatientId", "DocumentType"] } const milvusResult = await fetch('http://localhost:19530/v2/vectordb/entities/search', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(searchRequest) }) ``` ## 自定义扩展 ### 添加新的函数调用 在 \`src/services/functionCallManager.js\` 中注册新函数: \`\`\`javascript this.registerFunction("your_function", { description: "函数描述", parameters: { param1: "参数说明" }, execute: (params, onFunctionCall) => { // 函数逻辑 return { result: "执行结果" } } }) \`\`\` ### 添加新的系统提示词 在 \`src/config/systemPrompts.js\` 中添加新的提示词: \`\`\`javascript export const systemPrompts = { // 现有提示词... your_mode: \`你的自定义系统提示词内容...\` } \`\`\` ## 开发注意事项 ### 版本兼容性 ⚠️ **重要**: 千万不要将LangChain升级到5.x版本,工具调用功能会出现异常! **推荐版本**: - `langchain`: ^0.3.29 - `@langchain/openai`: ^0.5.18 - `@zilliz/milvus2-sdk-node`: ^2.5.12 ### API配置 1. **SiliconFlow API**: 需要在 `chatService.js` 和 `embeddingService.js` 中配置有效的API密钥 2. **SQL Server API**: 需要Python环境和相关依赖包 3. **Milvus服务**: 需要确保Milvus v2.x服务正常运行 ### 数据库连接 - **Milvus**: 默认端口19530,使用RESTful API - **SQL Server**: 通过JDBC连接字符串配置 - **前置筛选**: 支持从Spotfire环境导入EMPI数据 ### 性能优化 - 历史消息自动限制为20条,避免上下文过长 - 工具调用采用优化的检测和执行流程 - 向量搜索支持批量处理和结果缓存 ## 常见问题 ### Q: 无法连接到Milvus服务 A: 检查Milvus服务是否正在运行: ```bash curl http://localhost:19530/health ``` ### Q: SQL Server API连接失败 A: 确保: 1. Python API服务正在运行(端口8000) 2. SQL Server数据库连接配置正确 3. JDBC驱动和依赖包已安装 ### Q: 模型响应很慢 A: 可以尝试: - 检查SiliconFlow API的网络连接 - 减少查询结果的limit数量 - 优化知识库查询条件 ### Q: 表格数据无法显示 A: 确保: 1. AI输出的是标准Markdown表格格式 2. 数据格式正确(数组对象) 3. show_table工具调用成功 ### Q: 知识库查询无结果 A: 检查: 1. 知识库是否正确选择和配置 2. Milvus集合是否存在数据 3. 查询条件是否过于严格 ### Q: 工具调用失败 A: 确保: 1. 模型支持工具调用功能 2. 工具参数格式正确 3. 相关服务(Milvus、SQL Server API)正常运行 ## 开发计划 ### 短期目标 - [ ] 支持更多AI模型提供商(OpenAI、Claude等) - [ ] 优化向量搜索性能 - [ ] 添加更多数据可视化图表类型 - [ ] 实现对话历史导出功能 ### 中期目标 - [ ] 添加语音输入/输出功能 - [ ] 实现深色模式主题 - [ ] 支持插件系统扩展 - [ ] 移动端适配优化 ### 长期目标 - [ ] 多租户支持 - [ ] 分布式部署方案 - [ ] 企业级安全认证 - [ ] 自动化运维工具 ## 贡献指南 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ## 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交 Issue - 发送邮件 - 微信群讨论 --- **注意**: 本项目仅供学习和研究使用,请遵守相关AI模型的使用条款。使用前请确保已获得相应的API访问权限。