| intelligent_knowledge_base.egg-info | ||
| knowledge_base | ||
| templates | ||
| .env.example | ||
| .gitignore | ||
| app.py | ||
| knowledge_base.py | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
智能知识库问答系统
项目简介
智能知识库问答系统是一个面向企业和课程的智能问答平台,主要功能是基于自有文档进行精准应答,减少人工答疑工作量。系统采用端到端的RAG(检索增强生成)架构,结合向量数据库和稀疏索引技术,实现高效准确的知识检索和智能问答。
核心功能
- 多格式文档上传:支持PDF、Word、TXT等多种文档格式
- 智能知识管理:自动解析、分词、向量化存储文档内容
- 混合检索:结合向量相似度和关键词匹配的混合检索策略
- 智能问答:基于检索结果生成准确的回答,支持多轮对话
- 文档管理:支持查看和删除已上传的文档
技术栈
- 后端:Python 3.9+, Flask
- 向量数据库:ChromaDB
- 稀疏索引:Whoosh(自定义中文分词器)
- 文本处理:LangChain
- 前端:HTML5, CSS3, JavaScript
- 开发环境:macOS
团队成员与贡献
| 成员 | 学号 | 主要分工 |
|---|---|---|
| 文彬龙 | 2411020224 | 核心逻辑开发、Prompt 编写 |
| 冯俊锋 | 2411020222 | 文档撰写、测试与 Bug 修复 |
| 赵珂皓 | 2411020217 | 前端界面设计、PPT 制作,成品汇报 |
安装和使用说明
1. 环境搭建
# 克隆仓库
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. 启动服务器
# 确保虚拟环境已激活
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时代程序员的核心竞争力有了更深刻的认识:
-
问题分析与抽象能力:AI可以生成代码,但无法替代人类对复杂问题的分析和抽象能力。程序员需要能够将业务需求转化为清晰的技术方案,这是AI难以做到的。
-
系统架构设计能力:构建一个可扩展、可维护的系统架构需要丰富的经验和全局视野,这是AI目前无法超越人类的领域。
-
调试与问题定位能力:当系统出现问题时,程序员需要通过逻辑推理和经验积累快速定位问题根源,而AI往往只能提供基于表面症状的解决方案。
-
创造力与创新思维:AI基于现有知识生成内容,而真正的创新需要超越现有边界的思维能力,这是人类独有的优势。
-
领域专业知识:对特定行业和业务领域的深入理解是AI无法快速获取的,这使得程序员在开发垂直领域应用时具有独特优势。
-
AI工具的有效利用能力:未来的程序员需要掌握如何与AI协作,包括如何编写有效的Prompt、如何评估和优化AI生成的代码,以及如何将AI工具融入开发流程。
总之,AI时代的程序员应该将AI视为强大的助手,而不是竞争对手。通过与AI的有效协作,我们可以专注于更有创造性和挑战性的任务,提升自身的核心竞争力。