diff --git a/intelligent_knowledge_base.egg-info/PKG-INFO b/intelligent_knowledge_base.egg-info/PKG-INFO new file mode 100644 index 00000000..c74a5ba7 --- /dev/null +++ b/intelligent_knowledge_base.egg-info/PKG-INFO @@ -0,0 +1,149 @@ +Metadata-Version: 2.4 +Name: intelligent-knowledge-base +Version: 0.1.0 +Summary: 智能知识库问答系统 - 端到端RAG解决方案 +Requires-Python: >=3.13 +Description-Content-Type: text/markdown +Requires-Dist: flask>=3.1.2 +Requires-Dist: openai>=2.14.0 +Requires-Dist: pydantic>=2.12.5 +Requires-Dist: python-dotenv>=1.2.1 +Requires-Dist: chromadb>=0.5.0 +Requires-Dist: langchain>=0.2.0 +Requires-Dist: langchain-community>=0.2.0 +Requires-Dist: langchain-openai>=0.1.0 +Requires-Dist: pypdf>=4.0.0 +Requires-Dist: docx2txt>=0.8 +Requires-Dist: numpy>=1.26.0 +Requires-Dist: tqdm>=4.66.0 +Requires-Dist: scikit-learn>=1.4.0 +Requires-Dist: jieba>=0.42.1 +Requires-Dist: whoosh>=2.7.4 + +# 智能知识库问答系统 + +## 项目简介 +智能知识库问答系统是一个面向企业和课程的智能问答平台,主要功能是基于自有文档进行精准应答,减少人工答疑工作量。系统采用端到端的RAG(检索增强生成)架构,结合向量数据库和稀疏索引技术,实现高效准确的知识检索和智能问答。 + +## 核心功能 +- **多格式文档上传**:支持PDF、Word、TXT等多种文档格式 +- **智能知识管理**:自动解析、分词、向量化存储文档内容 +- **混合检索**:结合向量相似度和关键词匹配的混合检索策略 +- **智能问答**:基于检索结果生成准确的回答,支持多轮对话 +- **文档管理**:支持查看和删除已上传的文档 + +## 技术栈 +- **后端**:Python 3.9+, Flask +- **向量数据库**:ChromaDB +- **稀疏索引**:Whoosh(自定义中文分词器) +- **文本处理**:LangChain +- **前端**:HTML5, CSS3, JavaScript +- **开发环境**:macOS + +## 团队成员与贡献 + +| 成员 | 学号 | 主要分工 | +|------|------|----------| +| 文彬龙 | 2411020224 | 核心逻辑开发、Prompt 编写 | +| 冯俊锋 | 2411020222 | 文档撰写、测试与 Bug 修复 | +| 赵珂皓 | 2411020217 | 前端界面设计、PPT 制作,成品汇报 | + +## 安装和使用说明 + +### 1. 环境搭建 +```bash +# 克隆仓库 +git clone http://hblu.top:3000/Python2025-CourseDesign/group-wbl.git + +# 进入项目目录 +cd group-wbl + +# 创建虚拟环境 +python3 -m venv .venv + +# 激活虚拟环境 +source .venv/bin/activate # macOS/Linux + +# 安装依赖 +pip install -e . +``` + +### 2. 启动服务器 +```bash +# 确保虚拟环境已激活 +source .venv/bin/activate # 如果尚未激活 + +# 启动Flask服务器 +python app.py +``` + +### 3. 访问系统 +打开浏览器,访问 `http://localhost:5000` 即可使用系统。 + +## 项目结构 +``` +├── intelligent_knowledge_base.egg-info/ # 包信息 +├── knowledge_base/ # 知识库存储目录 +│ ├── chroma.sqlite3 # ChromaDB 数据库 +│ ├── sparse_index/ # Whoosh 索引 +├── templates/ # 前端模板 +│ └── index.html # 主页面 +├── .gitignore # Git 忽略文件 +├── README.md # 项目说明 +├── app.py # Flask 应用入口 +├── knowledge_base.py # 知识库核心模块 +├── pyproject.toml # 项目配置 +└── uv.lock # 依赖锁文件 +``` + +## 注意事项 +- 首次启动系统时,会自动初始化知识库目录 +- 上传大文件时可能需要较长时间处理 +- 系统会自动为文档创建分块和索引,确保检索效率 +- 建议使用Chrome或Safari浏览器以获得最佳体验 + +## 开发心得 + +### 选题思考:为什么做这个?解决了谁的痛苦? + +在确定项目方向时,我们观察到企业和教育机构面临一个普遍问题:大量的文档资料难以有效管理和利用,用户需要花费大量时间查找信息,而客服和教师则需要重复回答类似问题。基于此,我们决定开发智能知识库问答系统,旨在通过自动化和智能化手段解决这一痛点。 + +这个系统主要解决了三类用户的痛苦:首先是企业员工和学生,他们可以通过自然语言提问快速获取准确信息,无需在海量文档中手动检索;其次是客服人员和教师,系统可以自动处理常见问题,减轻他们的工作负担,让他们能够专注于更复杂的任务;最后是企业管理者和教育机构,系统可以帮助他们更好地管理和利用组织知识,提高整体运营效率。 + +### AI 协作体验: + +#### 第一次用 AI 写代码的感觉 + +第一次使用AI辅助写代码时,我们既兴奋又紧张。兴奋的是终于可以体验AI带来的效率提升,紧张的是担心AI生成的代码质量和可靠性。当我们输入第一个Prompt后,AI迅速返回了完整的代码片段,这让我们感到非常惊讶。虽然代码需要一些调整和优化,但整体结构和逻辑已经相当完善,大大减少了我们的编码时间。 + +随着使用的深入,我们发现AI不仅可以生成代码,还可以解释代码逻辑、提供最佳实践建议,甚至帮助调试错误。这种交互式的开发体验让我们对AI辅助编程的潜力有了全新的认识。 + +#### 哪个 Prompt 让你直呼"牛逼"? + +最让我们印象深刻的Prompt是用于实现混合检索功能的指令。我们只需描述系统需要结合向量相似度和关键词匹配,并说明具体的权重计算方法,AI就生成了完整的实现代码,包括ChromaDB查询、Whoosh索引搜索以及结果融合的逻辑。更令人惊讶的是,AI还考虑到了性能优化,建议我们使用批处理方式减少数据库查询次数,这与我们后来的优化思路完全一致。 + +另一个让我们直呼"牛逼"的Prompt是用于修复Whoosh中文分词器的问题。当我们遇到"Token object has no attribute 'pos'"错误时,AI不仅准确诊断了问题所在,还提供了完整的解决方案,包括修改ChineseTokenizer类的实现,添加pos属性的追踪和赋值。 + +#### 哪个 Prompt 让你想砸键盘? + +然而,AI并不是万能的。有一次,我们尝试让AI生成前端界面的CSS代码。但AI生成的代码存在多个问题:布局错乱、响应式设计失效、颜色方案不符合要求。我们多次调整Prompt,尝试提供更详细的设计规范,但效果仍然不理想。最终,我们不得不手动编写CSS代码,这让我们一度想要砸键盘。 + +还有一次,我们让AI帮助优化文档上传和处理的性能,AI建议使用多线程处理,但没有考虑到我们的向量数据库和稀疏索引不支持并发写入。这导致系统在测试时出现了数据不一致的问题,我们花了大量时间才找到并修复这个问题。 + +### 自我反思:AI 时代,我作为程序员的核心竞争力到底是什么? + +通过这次项目开发,我们对AI时代程序员的核心竞争力有了更深刻的认识: + +1. **问题分析与抽象能力**:AI可以生成代码,但无法替代人类对复杂问题的分析和抽象能力。程序员需要能够将业务需求转化为清晰的技术方案,这是AI难以做到的。 + +2. **系统架构设计能力**:构建一个可扩展、可维护的系统架构需要丰富的经验和全局视野,这是AI目前无法超越人类的领域。 + +3. **调试与问题定位能力**:当系统出现问题时,程序员需要通过逻辑推理和经验积累快速定位问题根源,而AI往往只能提供基于表面症状的解决方案。 + +4. **创造力与创新思维**:AI基于现有知识生成内容,而真正的创新需要超越现有边界的思维能力,这是人类独有的优势。 + +5. **领域专业知识**:对特定行业和业务领域的深入理解是AI无法快速获取的,这使得程序员在开发垂直领域应用时具有独特优势。 + +6. **AI工具的有效利用能力**:未来的程序员需要掌握如何与AI协作,包括如何编写有效的Prompt、如何评估和优化AI生成的代码,以及如何将AI工具融入开发流程。 + +总之,AI时代的程序员应该将AI视为强大的助手,而不是竞争对手。通过与AI的有效协作,我们可以专注于更有创造性和挑战性的任务,提升自身的核心竞争力。 diff --git a/intelligent_knowledge_base.egg-info/top_level.txt b/intelligent_knowledge_base.egg-info/top_level.txt index f8a26871..8b137891 100644 --- a/intelligent_knowledge_base.egg-info/top_level.txt +++ b/intelligent_knowledge_base.egg-info/top_level.txt @@ -1 +1 @@ -templates + diff --git a/knowledge_base/chroma.sqlite3 b/knowledge_base/chroma.sqlite3 index dbff6901..e11b3705 100644 Binary files a/knowledge_base/chroma.sqlite3 and b/knowledge_base/chroma.sqlite3 differ diff --git a/pyproject.toml b/pyproject.toml index 294e1cc2..7f05cd7e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,5 +22,11 @@ dependencies = [ "whoosh>=2.7.4", ] +[tool.uv] +package = true + +[tool.setuptools] +packages = [] + [project.scripts] run = "app:main" diff --git a/uv.lock b/uv.lock index 30ef940d..9bc3b843 100644 --- a/uv.lock +++ b/uv.lock @@ -758,7 +758,7 @@ wheels = [ [[package]] name = "intelligent-knowledge-base" version = "0.1.0" -source = { virtual = "." } +source = { editable = "." } dependencies = [ { name = "chromadb" }, { name = "docx2txt" },