# AI_search_bot **Repository Path**: yami0109/ai_search_bot ## Basic Information - **Project Name**: AI_search_bot - **Description**: 本项目基于 Qwen Agent 框架开发了一套一个RAG(检索增强生成)应用,针对保险领域的PDF、TXT文档构建智能问答系统,解决大模型幻觉和知识滞后问题。系统能够根据文档数量自适应选择检索方式,包含传统文件检索和Elasticsearch RAG检索两套技术方案,提供了从基础命令行到增强Web界面的多个版本,满足不同场景的使用需求。 - **Primary Language**: Python - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-03 - **Last Updated**: 2025-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Qwen Agent 保险助手项目总览 ## 项目介绍 本项目基于 Qwen Agent 框架开发了一套完整的保险知识问答AI助手系统,包含**传统文件检索**和**Elasticsearch RAG检索**两套技术方案,提供了从基础命令行到增强Web界面的多个版本,满足不同场景的使用需求。 ## 项目架构图 ``` Qwen Agent 保险助手系统 ├── 📁 传统文件检索方案 │ ├── qwen-agent-multi-files.py (基础版 - 命令行) │ ├── qwen-agent-multi-files-gui.py (标准版 - Web双模式) │ ├── qwen-agent-multi-files-gui-clean.py (简洁版 - Web优化) │ ├── qwen-agent-multi-files-gui-knowledge.py (增强版 - Web专业) │ └── ai_bot-1.py (图像生成增强版 - Web界面) ├── 📁 Elasticsearch RAG检索方案 │ ├── ai_bot-2.py (ES RAG版 - Web界面) │ ├── ai_bot-3.py (ES框架集成版 - 3.0) ⭐ │ ├── ai_bot-4.py (ES RAG + 网络搜索版 - Web界面) │ ├── ai_bot-5.py (ES RAG + 图像生成版 - Web界面) │ ├── ai_bot-6.py (静态资源优化版 - Web界面) │ ├── ai_bot-7.py (静态资源改进版 - Web界面) │ ├── ai_bot-8.py (Base64 图像嵌入版 - Web界面) │ ├── ai_bot-9.py (内联CSS版 - Web界面) │ ├── ai_search_bot.py (自适应检索版 - Web/CLI界面) │ ├── es_retrieval_tool.py (ES检索工具) │ ├── elasticsearch_insurance_search.py (ES完整搜索系统) │ ├── elasticsearch_simple_search.py (ES简化搜索系统) │ ├── index_and_search_docs.py (ES基础索引搜索-文本关键词检索方式) │ ├── index_and_search_docs-embedding.py (ES向量搜索) │ ├── elasticsearch_vector_search.py (ES向量搜索优化版) │ └── color_highlight_utils.py (颜色高亮工具) ├── 📁 Qwen Agent框架扩展 │ ├── qwen_agent/tools/elasticsearch_retrieval.py (ES检索工具扩展) │ ├── qwen_agent/memory/elasticsearch_memory.py (ES内存管理器) │ ├── qwen_agent/agents/elasticsearch_assistant.py (ES增强Assistant) │ └── qwen_agent/config/elasticsearch_config.py (ES配置管理) └── 📁 项目文档 ├── ReadMe/ (各版本技术文档) ├── elasticsearch_summary.md (ES项目总结) └── README_Elasticsearch.md (ES详细文档) ``` ## 技术方案对比 ### 搜索技术方案对比 | 特性对比 | 传统文件检索 | ES文本搜索 | ES向量搜索 | |----------|-------------|------------|------------| | **检索技术** | Qwen Agent内置 | Elasticsearch文本匹配 | Elasticsearch + 向量相似度 | | **搜索精度** | 基础匹配 | 高精度关键词匹配 | 语义理解匹配 | | **搜索速度** | 中等 | 毫秒级响应 | 秒级响应 | | **语义理解** | 有限 | 无 | 强 | | **扩展性** | 有限 | 高度可扩展 | 高度可扩展 | | **部署复杂度** | 简单 | 需要ES服务 | 需要ES+向量模型 | | **资源消耗** | 低 | 中等 | 高 | | **适用场景** | 小规模文档 | 精确关键词搜索 | 语义问答搜索 | ### ES搜索方案详细对比 | 文件名 | 搜索类型 | 技术特点 | 适用场景 | |--------|----------|----------|----------| | **index_and_search_docs.py** | 文本搜索 | 基础ES文本匹配 | 关键词精确搜索 | | **index_and_search_docs-embedding.py** | 向量搜索 | k-NN语义搜索 | 语义理解问答 | | **elasticsearch_vector_search.py** | 向量搜索优化 | 智能分块+混合搜索 | 生产级语义搜索 | | **elasticsearch_insurance_search.py** | 文本搜索增强 | 多字段+高亮显示 | 专业文档检索 | ### 版本功能对比矩阵 | 特性/版本 | 基础版 | 标准版 | 简洁版 | 增强版 | 图像增强版 | ES RAG版 | AI Bot 3.0 | ES+网络版 | ES+图像版 | 静态优化版 | Base64版 | 内联CSS版 | |-----------|--------|--------|--------|--------|------------|----------|------------|------------|------------|------------|------------|------------| | **交互方式** | 命令行单次 | Web+终端双模式 | Web界面 | Web界面 | Web界面 | Web界面 | Web+终端+统计 | Web界面 | Web界面 | Web界面 | Web界面 | Web界面 | | **连续对话** | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | **检索技术** | 内置检索 | 内置检索 | 内置检索 | 内置检索 | 内置检索 | Elasticsearch | ES框架集成 | Elasticsearch | Elasticsearch | Elasticsearch | Elasticsearch | Elasticsearch | | **知识库显示** | 调试信息 | ❌ | ✅ 简洁显示 | ✅ 详细显示 | ❌ | ❌ | ✅ 统计信息 | ❌ | ❌ | ❌ | ❌ | ❌ | | **LaTeX数学公式** | ❌ | ❌ | ❌ | ✅ 完整支持 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | **图像生成** | ❌ | ❌ | ❌ | ❌ | ✅ Pollinations AI | ❌ | ❌ | ❌ | ✅ Pollinations AI | ✅ Pollinations AI | ✅ Pollinations AI | ✅ Pollinations AI | | **网络搜索** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ Tavily | ❌ | ❌ | ❌ | ❌ | | **推荐对话** | ❌ | 3个基础 | 7个完整 | 7个+数学 | 3个图像相关 | 3个基础 | 6个专业 | 5个专业 | 5个专业 | 5个专业 | 5个专业 | 5个专业 | | **搜索精度** | 基础 | 基础 | 基础 | 基础 | 基础 | 高精度 | 高精度 | 高精度+网络 | 高精度 | 高精度 | 高精度 | 高精度 | | **搜索速度** | 中等 | 中等 | 中等 | 中等 | 中等 | 毫秒级 | 毫秒级 | 毫秒级+网络 | 毫秒级 | 毫秒级 | 毫秒级 | 毫秒级 | | **框架集成** | ❌ | ❌ | ❌ | ❌ | ❌ | 独立工具 | ✅ 深度集成 | 独立工具 | 独立工具 | 独立工具 | 独立工具 | 独立工具 | | **动态管理** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ 文件管理 | ❌ | ❌ | ❌ | ❌ | ❌ | | **模式切换** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ 运行时切换 | ❌ | ❌ | ❌ | ❌ | ❌ | | **流式输出** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | | **静态资源优化** | - | - | - | - | - | - | - | - | - | ✅ | ✅ | ✅ | | **Base64图像** | - | - | - | - | - | - | - | - | - | - | ✅ | ✅ | | **内联CSS** | - | - | - | - | - | - | - | - | - | - | - | ✅ | | **界面复杂度** | 无界面 | 中等 | 简洁 | 丰富 | 中等 | 中等 | 中等 | 中等 | 中等 | 中等 | 中等 | 中等 | | **资源占用** | 最低 | 中等 | 中等 | 较高 | 中等 | 高 | 高 | 高 | 高 | 高 | 高 | 高 | | **启动速度** | 最快 | 快 | 快 | 中等 | 快 | 中等 | 中등 | 中等 | 中等 | 中等 | 中等 | 中等 | **专业化程度** | 基础 | 通用 | 保险优化 | 保险专业 | 通用+图像 | 保险专业 | 保险专业+ | 保险专业+网络 | 保险专业+图像 | 保险专业+优化 | 保险专业+优化 | 保险专业+优化 | ## 核心技术栈 ### 共同技术基础 - **AI框架**: Qwen Agent - **大语言模型**: Qwen-Max / DeepSeek-V3 - **图像生成**: Pollinations AI - **文档处理**: 本地文件系统 / Elasticsearch - **工具集成**: 自定义工具 + 代码解释器 ### Elasticsearch RAG技术栈 - **搜索引擎**: Elasticsearch 7.x/8.x+ - **文档解析**: PyPDF2 (PDF) + 文本编码检测 - **检索工具**: 自定义ElasticsearchRetrievalTool - **向量模型**: Dashscope text-embedding-v4 (1024维) - **搜索类型**: 文本搜索 + 语义向量搜索 - **高亮显示**: ANSI颜色代码 + 终端渲染 - **批量索引**: Elasticsearch Bulk API ### 传统文件检索版本 #### 基础版 (qwen-agent-multi-files.py) - **纯Python**: 命令行交互 - **调试友好**: 详细的文档召回信息 - **模型切换**: 支持多种LLM配置 #### 标准版 (qwen-agent-multi-files-gui.py) - **Gradio WebUI**: Web图形界面 - **双模式**: GUI + TUI可选 - **服务化**: 完整的Web服务 #### 简洁版 (qwen-agent-multi-files-gui-clean.py) - **优化布局**: 简洁的UI设计 - **知识库可视化**: 文件列表显示 - **性能优化**: 轻量级配置 #### 增强版 (qwen-agent-multi-files-gui-knowledge.py) - **LaTeX渲染**: 完整数学公式支持 - **专业化**: 保险领域深度优化 - **增强UI**: 丰富的界面元素 #### 图像增强版 (ai_bot-1.py) - **图像生成能力**: 集成Pollinations AI图像生成服务 - **代码解释器**: 支持图像处理和展示 - **模型选择**: 使用DeepSeek-V3大语言模型 - **文档检索**: 支持本地文档检索和问答 - **双模式支持**: 提供Web界面和终端交互模式 ### Elasticsearch RAG检索版本 #### ES RAG版 (ai_bot-2.py) - **核心特点**: 集成Elasticsearch检索的智能助手 - **检索工具**: 使用自定义ElasticsearchRetrievalTool - **技术优势**: - 毫秒级搜索响应 - 高精度相关性排序 - 支持大规模文档库 - 专业的保险知识问答 #### AI Bot 3.0 (ai_bot-3.py) ⭐ - **核心特点**: qwen_agent框架深度集成Elasticsearch - **架构创新**: 扩展qwen_agent核心模块 - **技术优势**: - 框架级ES集成 - 动态文件管理 - 运行时模式切换 - 完整的内存管理 - 统计监控功能 - **扩展模块**: - ElasticsearchRetrieval (检索工具) - ElasticsearchMemory (内存管理) - ElasticsearchAssistant (增强助手) - ElasticsearchConfig (配置管理) #### ES+网络搜索版 (ai_bot-4.py) - **双检索能力**: 本地Elasticsearch检索 + Tavily网络搜索 - **智能优先级**: 优先检索本地知识库,无相关信息时再使用网络搜索 - **MCP集成**: 使用Tavily MCP工具进行网络搜索 - **专业问答**: 结合本地知识和网络信息提供专业回答 - **检索增强**: 高精度RAG (Retrieval-Augmented Generation) #### ES+图像生成版 (ai_bot-5.py~ai_bot-9.py) - **双功能集成**: Elasticsearch检索 + 图像生成能力 - **界面优化**: 自定义CSS样式,提升用户体验 - **会话管理**: 支持多用户会话历史管理 - **品牌定制**: "知乎直答"品牌界面设计 - **流式响应**: 支持逐步显示AI回答内容 #### 自适应检索版 (ai_search_bot.py) - **智能检索选择**: 根据文档数量自动选择检索方式 - **双模式支持**: 支持Web界面和命令行界面 - **BM25算法**: 使用BM25算法进行关键词匹配和召回 - **灵活配置**: 可配置文档阈值和强制检索方式 - **混合检索**: 结合本地检索和网络搜索 - **统一接口**: 为不同规模文档提供统一的检索接口 #### 静态资源优化版 (ai_bot-6.py) - **资源管理**: 优化静态资源(CSS、图片)加载方式 - **路径处理**: 使用绝对路径确保资源正确加载 - **界面增强**: 保留ai_bot-5的所有功能基础上优化资源管理 #### 静态资源改进版 (ai_bot-7.py) - **资源加载**: 使用标签方式加载CSS资源 - **路径优化**: 改进静态资源引用方式 - **功能继承**: 继承ai_bot-6的所有功能和优化 #### Base64图像嵌入版 (ai_bot-8.py) - **图像处理**: 使用Base64编码直接嵌入图像资源 - **资源独立**: 减少外部资源依赖,提高部署灵活性 - **兼容性**: 提高在不同环境下的显示兼容性 #### 内联CSS版 (ai_bot-9.py) - **样式优化**: 直接内联CSS样式,提高加载性能 - **Logo优化**: 添加Logo尺寸限制,确保界面一致性 - **资源整合**: 将CSS样式与HTML内容整合,简化部署 #### ES检索工具 (es_retrieval_tool.py) - **功能**: 自定义的Elasticsearch检索工具 - **特点**: - 覆盖Qwen Agent默认检索工具 - 支持PDF和TXT文档解析 - 智能文档分块和索引 - 批量索引优化 #### ES搜索系统 - **完整版** (elasticsearch_insurance_search.py): 功能完整的搜索系统 - **简化版** (elasticsearch_simple_search.py): 快速演示版本 - **基础索引** (index_and_search_docs.py): 基础文本索引和搜索 - **向量搜索** (index_and_search_docs-embedding.py): 语义向量搜索 - **向量优化版** (elasticsearch_vector_search.py): 优化的向量搜索系统 - **高亮工具** (color_highlight_utils.py): 终端彩色显示 ## 文件关系和工作流程 ### 传统检索方案工作流程 ``` 用户查询 → qwen-agent-multi-files-gui.py → Qwen Agent内置检索 → docs文件夹 → 生成回答 ``` ### Elasticsearch RAG方案工作流程 ``` 用户查询 → ai_bot-2.py → es_retrieval_tool.py → Elasticsearch索引 → 检索结果 → 生成回答 ↓ elasticsearch_insurance_search.py (文档索引和搜索) ↓ color_highlight_utils.py (结果高亮显示) ``` ### 图像增强版工作流程 (ai_bot-1.py) ``` 用户查询 → ai_bot-1.py → MyImageGen工具生成图像 → 代码解释器处理图像 → 结合文档信息 → 生成回答 ``` ### ES+网络搜索工作流程 (ai_bot-4.py) ``` 用户查询 → ai_bot-4.py → 本地Elasticsearch检索 ├── 有相关结果 → 生成回答 └── 无相关结果 → Tavily网络搜索 → 结合网络信息 → 生成回答 ``` ### ES+图像生成工作流程 (ai_bot-5.py~ai_bot-9.py) ``` 用户查询 → ai_bot-5.py → Elasticsearch检索 → 结合检索结果和图像生成工具 → 生成回答 ``` ### 核心文件关系图 ``` ai_bot-2.py (主程序) ├── 导入 es_retrieval_tool.py (ES检索工具) │ ├── 连接 Elasticsearch服务 │ ├── 索引 docs/ 文件夹文档 │ └── 执行智能检索 ├── 集成 MyImageGen (图像生成工具) ├── 使用 Qwen Agent框架 └── 提供 Web界面 (Gradio) ai_bot-1.py (图像增强版) ├── 自定义 MyImageGen 工具 │ ├── 调用 Pollinations AI 服务 │ └── 生成图像URL ├── 集成 code_interpreter 工具 ├── 使用 DeepSeek-V3 模型 └── 提供 Web+终端双模式 ai_bot-4.py (ES+网络搜索版) ├── 配置 Elasticsearch RAG │ ├── 连接本地ES服务 │ └── 索引 docs/ 文件夹文档 ├── 集成 tavily-mcp 网络搜索 ├── 使用 Qwen-Max 模型 └── 提供 Web界面 ai_bot-5.py~ai_bot-9.py (ES+图像生成优化系列) ├── 配置 Elasticsearch RAG │ ├── 连接本地ES服务 │ └── 索引 docs/ 文件夹文档 ├── 集成 MyImageGen 图像生成工具 ├── 使用 Qwen-Max 模型 ├── 提供 Web界面 ├── 逐步优化静态资源处理 └── 改进用户体验和界面设计 elasticsearch_insurance_search.py (独立搜索系统) ├── 使用 color_highlight_utils.py (颜色高亮) ├── 连接 Elasticsearch服务 ├── 索引 docs/ 文件夹文档 └── 提供命令行搜索界面 index_and_search_docs.py (基础ES搜索) ├── 连接 Elasticsearch服务 ├── 创建基础文本索引 ├── 批量索引文档 └── 执行文本匹配搜索 index_and_search_docs-embedding.py (向量搜索) ├── 连接 Elasticsearch + Dashscope ├── 创建向量索引 (dense_vector) ├── 生成文档向量 (text-embedding-v4) ├── 执行k-NN向量搜索 └── 语义相似度匹配 ``` ## 功能特性对比 ### 1. 图像生成工具 (所有版本) ```python @register_tool('my_image_gen') class MyImageGen(BaseTool): # 统一的图像生成实现 # 使用 Pollinations AI 服务 ``` ### 2. 知识库集成 #### 传统方案 (qwen-agent-multi-files-gui.py等) - **文档路径**: `./docs/` 文件夹 - **自动加载**: 遍历所有文档文件 - **检索方式**: Qwen Agent内置检索 #### Elasticsearch方案 (ai_bot-2.py) - **文档路径**: `./docs/` 文件夹 - **索引方式**: Elasticsearch批量索引 - **检索方式**: 全文搜索 + 相关性排序 - **检索增强**: 高精度RAG (Retrieval-Augmented Generation) ### 3. 系统指令演进 #### 基础版/标准版 ``` 你是一个乐于助人的AI助手。 在收到用户的请求后,你应该: - 首先绘制一幅图像,得到图像的url - 然后运行代码`request.get`以下载该图像的url - 最后从给定的文档中选择一个图像操作进行图像处理 ``` #### 简洁版/增强版 (保险专业化) ``` 当前可用的知识库包括: - 保险知识库ABC(主要知识库) - 平安商业综合责任保险 - 雇主责任险知识库 - 企业团体综合意外险 - 财产一切险知识库 - 装修保险知识库 请在回答保险相关问题时,优先使用保险知识库ABC中的信息。 ``` #### 图像增强版 (ai_bot-1.py) ``` 你是一个乐于助人的AI助手。 在收到用户的请求后,你应该: - 首先绘制一幅图像,得到图像的url, - 然后运行代码`request.get`以下载该图像的url, - 最后从给定的文档中选择一个图像操作进行图像处理。 用 `plt.show()` 展示图像。 你总是用中文回复用户。 ``` #### ES+网络搜索版 (ai_bot-4.py) ``` 你是一个AI助手。 请根据用户的问题,优先利用检索工具从本地知识库中查找最相关的信息。 如果本地知识库没有相关信息,再使用 tavily_search 工具从互联网上搜索,并结合这些信息给出专业、准确的回答。 ``` #### ES+图像生成版 (ai_bot-5.py~ai_bot-9.py) ``` 你是一个AI助手。 请根据用户的问题,优先利用检索工具从本地知识库中查找最相关的信息。 如果本地知识库没有相关信息,再使用 tavily_search 工具从互联网上搜索,并结合这些信息给出专业、准确的回答。 ``` ## 版本演进关系说明 ### ai_bot-4 到 ai_bot-5 的演进 ai_bot-5.py在ai_bot-4.py的基础上进行了以下增强: 1. **增加图像生成功能**:集成了[my_image_gen](file:///d:/AIWorkSpace/28-%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98%EF%BC%9AAI%E6%90%9C%E7%B4%A2%E7%B1%BB%E5%BA%94%E7%94%A8/CASE-AI%E6%90%9C%E7%B4%A2%E9%97%AE%E7%AD%94/qwen_agent/tools/image_gen.py#L23-L23)工具,支持根据用户描述生成图像 2. **界面优化**:使用自定义CSS样式,改进了界面视觉效果 3. **品牌定制**:采用"知乎直答"品牌设计,包括Logo和界面布局 4. **会话管理**:实现基于session_id的会话历史管理,支持多用户独立对话 5. **交互改进**:添加了侧边栏导航按钮和建议问题区域 ### ai_bot-5 到 ai_bot-6 的演进 ai_bot-6.py在ai_bot-5.py的基础上进行了静态资源管理优化: 1. **资源路径优化**:使用绝对路径管理静态资源(CSS、图片等) 2. **资源加载改进**:通过[allowed_paths](file:///d:/AIWorkSpace/28-%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98%EF%BC%9AAI%E6%90%9C%E7%B4%A2%E7%B1%BB%E5%BA%94%E7%94%A8/CASE-AI%E6%90%9C%E7%B4%A2%E9%97%AE%E7%AD%94/qwen_agent/gui/gradio_utils.py#L36-L36)参数授权静态资源访问 3. **文件组织**:将静态资源统一放在static目录下管理 4. **兼容性提升**:改进了资源引用方式,提高在不同环境下的兼容性 ### ai_bot-6 到 ai_bot-7 的演进 ai_bot-7.py在ai_bot-6.py的基础上进一步优化了静态资源加载: 1. **CSS加载方式改进**:使用标签方式引入CSS样式文件 2. **资源引用优化**:改进了静态资源的引用方式 3. **保持功能一致**:保留了ai_bot-6的所有功能和界面设计 ### ai_bot-7 到 ai_bot-8 的演进 ai_bot-8.py在ai_bot-7.py的基础上采用了Base64图像嵌入技术: 1. **图像处理优化**:使用Base64编码将图像直接嵌入到HTML中 2. **减少外部依赖**:降低对外部图像文件的依赖,提高部署灵活性 3. **兼容性增强**:提高在不同环境下的图像显示兼容性 ### ai_bot-8 到 ai_bot-9 的演进 ai_bot-9.py在ai_bot-8.py的基础上进行了CSS样式优化: 1. **内联CSS**:直接将CSS样式内容内联到页面中,减少外部文件依赖 2. **Logo优化**:添加了Logo尺寸限制CSS规则,确保界面一致性 3. **资源整合**:将CSS样式与HTML内容整合,简化部署流程 ## 使用场景推荐 ### 开发阶段 - **基础版**: 快速验证功能和调试 - **标准版**: 开发测试Web界面 - **ES简化版**: 测试Elasticsearch搜索功能 ### 生产部署 - **简洁版**: 一般保险咨询服务(小规模文档) - **增强版**: 专业保险计算和咨询(需要数学公式) - **图像增强版**: 需要图像生成和处理的场景 - **ES RAG版**: 大规模保险知识库(高精度搜索) - **ES+网络版**: 需要结合本地知识和网络信息的场景 - **ES+图像版系列**: 需要专业界面和图像生成功能的场景 - **自适应检索版**: 文档数量不确定或动态变化的场景 ### 特殊需求 - **数学公式**: 必须使用增强版 - **图像生成**: 推荐图像增强版或ES+图像版系列 - **资源受限**: 推荐基础版或简洁版 - **快速部署**: 推荐标准版或简洁版 - **高精度搜索**: 推荐ES RAG版 - **大规模文档**: 推荐ES RAG版 - **实时搜索**: 推荐ES RAG版 - **网络信息**: 推荐ES+网络版 - **动态文档**: 推荐自适应检索版 ### 技术选型建议 | 文档规模 | 搜索类型 | 推荐方案 | 推荐文件 | |----------|----------|----------|----------| | < 50个文档 | 关键词搜索 | 传统检索 | 简洁版/标准版 | | < 50个文档 | 语义搜索 | ES向量搜索 | index_and_search_docs-embedding.py | | 50-500个文档 | 关键词搜索 | ES文本搜索 | index_and_search_docs.py | | 50-500个文档 | 语义搜索 | ES向量搜索 | elasticsearch_vector_search.py | | > 500个文档 | 关键词搜索 | ES文本搜索 | elasticsearch_insurance_search.py | | > 500个文档 | 语义搜索 | ES向量搜索 | elasticsearch_vector_search.py | | 需要数学公式 | 任何 | 传统检索 | 增强版 | | 需要图像生成 | 任何 | 图像增强 | ai_bot-1.py 或 ai_bot-5~9 | | 需要网络信息 | 任何 | 网络增强 | ai_bot-4.py | | 文档数量动态变化 | 任何 | 自适应检索 | ai_search_bot.py | | 生产环境 | 语义搜索 | ES RAG集成 | ai_bot-2.py + es_retrieval_tool.py | ### 搜索方案选择流程图 ``` 开始 ├── 文档数量动态变化? │ ├── 是 → ai_search_bot.py │ └── 否 → 继续 ├── 需要图像生成? │ ├── 是 → ai_bot-1.py 或 ai_bot-5~9 │ └── 否 → 继续 ├── 需要网络信息? │ ├── 是 → ai_bot-4.py │ └── 否 → 继续 ├── 文档数量 < 50? │ ├── 是 → 需要语义理解? │ │ ├── 是 → index_and_search_docs-embedding.py │ │ └── 否 → 传统检索方案 │ └── 否 → 继续 ├── 需要语义理解? │ ├── 是 → elasticsearch_vector_search.py │ └── 否 → elasticsearch_insurance_search.py └── 需要Web界面集成? ├── 是 → ai_bot-2.py └── 否 → 独立搜索脚本 ``` ## 部署建议 ### 硬件要求 | 版本 | CPU | 内存 | 存储 | 网络 | |------|-----|------|------|------| | 基础版 | 2核 | 4GB | 10GB | 基础 | | 标准版 | 4核 | 8GB | 20GB | 中等 | | 简洁版 | 4核 | 8GB | 20GB | 中等 | | 增强版 | 8核 | 16GB | 30GB | 高速 | | 图像增强版 | 4核 | 8GB | 20GB | 高速 | | ES+网络版 | 4核 | 8GB | 20GB | 高速 | | ES+图像版系列 | 4核 | 8GB | 20GB | 高速 | ### 环境配置 ```bash # 必需环境变量 export DASHSCOPE_API_KEY="your_api_key" export TAVILY_API_KEY="your_tavily_api_key" # 仅ai_bot-4.py需要 # Python依赖 pip install qwen-agent gradio json5 # 文档准备 mkdir docs # 将保险文档放入docs文件夹 ``` ## 扩展开发指南 ### 添加新工具 ```python @register_tool('new_tool_name') class NewTool(BaseTool): description = '工具描述' parameters = [...] def call(self, params: str, **kwargs) -> str: # 工具实现 pass ``` ### 自定义界面 ```python class CustomWebUI(WebUI): def run(self, **kwargs): # 自定义界面实现 pass ``` ### 知识库扩展 - 支持多种文档格式 (PDF, DOCX, TXT, MD) - 可配置文档路径 - 支持向量数据库集成 ## Elasticsearch RAG实现详解 ### 核心技术实现 #### 1. 自定义检索工具 (es_retrieval_tool.py) ```python class ElasticsearchRetrievalTool(BaseTool): name = 'retrieval' # 覆盖默认检索工具 def call(self, params: str, **kwargs) -> str: # 1. 索引新文件 self._index_files(files) # 2. 执行ES搜索 response = self.client.search(index=self.index_name, body=search_body) # 3. 返回格式化结果 return json.dumps(results, ensure_ascii=False) ``` #### 2. 基础文本搜索 (index_and_search_docs.py) ```python # 创建基础索引 client.indices.create(index=index_name) # 文本匹配搜索 response = client.search( index=index_name, query={ "match": { "content": { "query": search_query, "operator": "and" # 精确匹配 } } } ) ``` #### 3. 向量语义搜索 (index_and_search_docs-embedding.py) ```python # 创建向量索引 client.indices.create( index=index_name, mappings={ "properties": { "content_vector": { "type": "dense_vector", "dims": 1024, "similarity": "cosine" } } } ) # 生成文档向量 embedding = client.embeddings.create( model="text-embedding-v4", input=text, dimensions=1024 ) # k-NN向量搜索 response = client.search( index=index_name, knn={ "field": "content_vector", "query_vector": query_vector, "k": 3 } ) ``` #### 2. 智能文档处理 - **PDF解析**: 使用PyPDF2提取文本 - **文本分块**: 按500字符分块,保持语义完整性 - **批量索引**: 使用Elasticsearch Bulk API提高性能 - **去重检查**: 避免重复索引相同文档 #### 3. 高精度搜索 - **多字段搜索**: 标题权重^3, 内容权重^2 - **模糊匹配**: 自动处理拼写错误 - **相关性排序**: 基于TF-IDF算法 - **结果高亮**: 彩色终端显示 ### 性能优势对比 | 指标 | 传统检索 | ES文本搜索 | ES向量搜索 | |------|----------|------------|------------| | **搜索速度** | 2-5秒 | <200ms | 1-3秒 | | **准确率** | 70-80% | 85-90% | 90-95% | | **语义理解** | 有限 | 无 | 强 | | **文档容量** | <100个 | 无限制 | 无限制 | | **并发支持** | 1-5用户 | 50+用户 | 20+用户 | | **内存占用** | 高 | 低 | 中等 | | **扩展性** | 有限 | 水平扩展 | 水平扩展 | | **部署成本** | 低 | 中等 | 高 | ### 实际测试结果 **测试查询**: "工伤保险和雇主险有什么区别?" **ES RAG结果**: - 🎯 找到12个相关文档 - ⚡ 响应时间: 163ms - 📊 最高相关度: 20.2042 - 🎨 关键词红色高亮显示 ## 项目优势 ### 技术优势 1. **双技术方案**: 传统检索 + Elasticsearch RAG 2. **渐进式架构**: 从简单到复杂的版本演进 3. **模块化设计**: 易于扩展和维护 4. **专业化定制**: 针对保险领域优化 5. **多场景适配**: 满足不同部署需求 6. **技术先进**: 集成最新的AI和搜索技术 ### 业务优势 1. **高精度问答**: ES RAG提供专业级搜索精度 2. **快速响应**: 毫秒级搜索响应时间 3. **可扩展性**: 支持大规模文档库 4. **用户友好**: 彩色高亮和直观界面 5. **部署灵活**: 多种部署方案可选 ## 未来规划 ### 短期目标 (1-3个月) - [ ] 优化ES RAG搜索算法 - [ ] 添加向量搜索支持 - [ ] 集成更多文档格式 - [ ] 完善Web界面 ### 中期目标 (3-6个月) - [ ] 添加用户认证系统 - [ ] 支持多租户部署 - [ ] 开发移动端应用 - [ ] API接口标准化 ### 长期目标 (6-12个月) - [ ] 集成多模态搜索 - [ ] 支持实时学习 - [ ] 智能推荐系统 - [ ] 企业级部署方案