Go to file
2026-01-08 18:54:26 +08:00
__pycache__ http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
static http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
templates http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
uploads http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
.env.example 完善 README.md,添加项目简介、运行指南和开发心得 2026-01-08 18:54:26 +08:00
.gitignore 完善 README.md,添加项目简介、运行指南和开发心得 2026-01-08 18:54:26 +08:00
app.py http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
check_db.py http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
cleanup_db.py http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
knowledge_base.db http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
Project_Design.md http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
README.md 完善 README.md,添加项目简介、运行指南和开发心得 2026-01-08 18:54:26 +08:00
requirements.txt http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
test_document_read.py http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
test_output.txt http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00
test_read.py http://hblu.top:3000/Python2025-CourseDesign/SPC.git 2026-01-08 16:10:25 +08:00

🧠 智能知识库问答系统

简介

这是一个基于 Flask 的企业/课程智能问答系统,支持上传自有文档并进行精准问答,减少人工答疑成本。

一句话介绍:这个项目解决了企业和教育场景中大量重复性答疑的痛点,让用户上传文档后即可获得精准的 AI 问答服务。

如何运行

  1. 安装依赖pip install -r requirements.txt
  2. 配置 Key:复制 .env.example.env 并填入 DeepSeek API Key
  3. 启动python app.py

应用将在 http://localhost:5000 启动。

功能列表

  • 文档上传与管理(支持 PDF、Word、TXT 格式)
  • 智能问答(基于上传的文档内容)
  • 对话历史保存
  • 响应式设计(支持桌面端和移动端)
  • 数据持久化SQLite 数据库)
  • 错误处理和用户反馈
  • 集成 LangChain 进行更强大的文档处理(待开发)
  • 使用 ChromaDB 建立向量数据库(待开发)
  • 支持更多文档格式Excel、PPT 等)(待开发)
  • 添加文档预览功能(待开发)
  • 实现对话导出功能(待开发)
  • 添加用户认证和权限管理(待开发)

📖 使用指南

1. 上传文档

  • 点击左侧知识库面板的"📤 点击或拖拽上传文档"区域
  • 选择要上传的文档(支持 PDF、Word、TXT 格式)
  • 系统会自动解析文档内容并建立知识库索引

2. 提问

  • 在右侧聊天输入框中输入问题
  • 点击"发送"按钮或按 Enter 键提交问题
  • 系统会基于上传的文档内容提供精准答案
  • 答案会显示参考来源,包括文档名称和页码

3. 管理文档

  • 在知识库面板中查看所有已上传的文档
  • 点击"🗑️ 删除"按钮可以删除不需要的文档
  • 文档状态会显示处理进度(处理中/已完成)

4. 查看历史

  • 所有问答记录会自动保存
  • 刷新页面后会自动加载历史对话
  • 可以随时查看之前的问答内容

🎬 演示流程

场景 1课程答疑

  1. 准备阶段

    • 上传课程讲义 PDF 文件
    • 等待系统完成文档解析(约 2-3 秒)
  2. 提问演示

    • 输入:"这门课程的主要学习目标是什么?"
    • 系统返回基于讲义的答案,并标注参考页码
    • 继续提问:"如何完成期末作业?"
    • 系统提供详细的作业要求说明
  3. 效果展示

    • 展示答案的准确性和参考来源
    • 展示对话历史的保存和加载

场景 2企业文档查询

  1. 准备阶段

    • 上传公司规章制度文档
    • 上传产品说明书文档
  2. 提问演示

    • 输入:"公司的请假流程是怎样的?"
    • 系统从规章制度中提取相关内容
    • 输入:"产品 A 的保修期是多久?"
    • 系统从产品说明书中找到答案
  3. 效果展示

    • 展示多文档知识库的整合能力
    • 展示移动端的响应式设计

🛠️ 技术架构

后端技术栈

  • Flask:轻量级 Web 框架
  • SQLite:本地数据库,用于存储对话历史和文档信息
  • OpenAI API:提供智能问答能力
  • LangChain:文档处理和向量检索(计划中)
  • ChromaDB:向量数据库(计划中)

前端技术栈

  • HTML5:页面结构
  • CSS3:样式设计,包含响应式布局
  • JavaScript:交互逻辑和 API 调用

项目结构

12/
├── app.py                      # Flask 应用主文件
├── requirements.txt            # Python 依赖
├── Project_Design.md          # 项目设计文档
├── README.md                  # 项目说明文档
├── knowledge_base.db          # SQLite 数据库(自动生成)
├── templates/
│   └── index.html            # 前端页面模板
└── static/
    ├── style.css             # 样式文件
    └── script.js             # JavaScript 脚本

🔧 API 接口

上传文档

POST /api/upload
Content-Type: multipart/form-data

Body: file (文件)
Response: { id, name, status }

获取文档列表

GET /api/documents
Response: [{ id, name, status, chunks, created_at }]

删除文档

DELETE /api/documents/{doc_id}
Response: { success: true }

提问

POST /api/ask
Content-Type: application/json

Body: { question: "问题内容" }
Response: { answer, sources: [{ name, page }] }

获取对话历史

GET /api/conversations
Response: [{ id, question, answer, sources, created_at }]

🎨 界面特性

响应式设计

  • 桌面端>1024px双栏布局左侧知识库右侧聊天
  • 平板端768px-1024px单栏布局优化间距
  • 移动端<768px全屏显示垂直堆叠大按钮设计

交互反馈

  • Toast 通知系统,实时显示操作状态
  • 字符计数器,提示输入长度
  • 加载状态指示,提升用户体验
  • Emoji 图标,增强视觉识别

📝 注意事项

  1. API 密钥:确保正确配置 OpenAI API 密钥
  2. 文档格式:目前支持 PDF、Word、TXT 格式
  3. 问题长度:建议问题长度在 3-500 字之间
  4. 数据库:对话历史保存在本地 SQLite 数据库中
  5. 浏览器兼容:建议使用 Chrome、Firefox、Edge 等现代浏览器

🚧 未来规划

  • 集成 LangChain 进行更强大的文档处理
  • 使用 ChromaDB 建立向量数据库
  • 支持更多文档格式Excel、PPT 等)
  • 添加文档预览功能
  • 实现对话导出功能
  • 添加用户认证和权限管理
  • 支持多语言问答

📄 许可证

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request

📧 联系方式

如有问题或建议,请通过以下方式联系:

  • 提交 Issue
  • 发送邮件至your-email@example.com

👥 团队成员与贡献 (必填)

姓名 学号 主要贡献 (具体分工)
宋鹏淳 2411020126 (组长) 核心逻辑开发、Prompt 编写
尹子林 2411020115 前端界面设计、PPT 制作
吴棋昊 2411020114 文档撰写、测试与 Bug 修复
开发心得 (Development Reflection)
  1. 选题思考 我选择开发智能知识库问答系统,源于两次真实经历带来的强烈共鸣。一次是课程学习中,面对几百页的 PDF 讲义,想快速找到某个知识点却只能逐页翻阅,浪费大量时间,面临着 “文档繁多但信息获取低效” 的痛点 —— 人工答疑成本高、信息查找耗时长、知识传递不精准。 市面上虽然有一些问答工具,但大多要么需要付费使用,要么不支持自有文档上传,无法满足个性化的知识查询需求。因此,我希望开发一个轻量、易用且精准的智能问答系统,让用户能通过上传自己的文档,快速获取针对性答案,同时自动保存对话历史方便回顾。这个项目的核心价值,就是把 “被动翻阅文档” 变成 “主动精准查询”,真正解决知识获取的效率问题,无论是用于课程答疑、企业文档查询,还是个人资料管理,都能显著降低沟通成本和时间成本。
  2. AI 协作体验 2.1 初体验 第一次用 AI 写代码的感觉,就像突然有了一个 “全能助手”,既惊喜又有些不适应。作为一名对 Flask 框架不算精通、对向量检索等 AI 相关技术更是陌生的开发者,原本以为这个项目至少需要一个月才能完成,尤其是文档解析、智能问答接口对接这些核心模块,光是查资料可能就要花大量时间。但当我让 AI 生成 Flask 项目骨架时,它不仅快速给出了完整的目录结构和主程序代码,还附带了详细的注释,甚至提醒了环境变量配置、数据库初始化等容易忽略的细节。 最让我意外的是 AI 对需求的理解能力 —— 我只是大概描述了 “支持 PDF、Word 文档上传并解析”,它就自动推荐了合适的解析库,还考虑到了大文件处理的分块逻辑。这种 “无需纠结基础实现,只需聚焦核心需求” 的开发模式,打破了我之前 “从零开始写每一行代码” 的固有思维,让我能把更多精力放在用户体验优化上,而不是陷入技术细节的泥潭。但初期也有明显的不适应,比如 AI 生成的代码中存在部分冗余逻辑,或者依赖版本不兼容,需要我逐一甄别和调整,这种 “信任与验证并存” 的过程,让我慢慢找到了与 AI 协作的节奏。 2.2 Prompt 交互 最牛 Prompt text 基于Flask框架设计一个文档上传与智能问答系统的后端接口要求1. 支持PDF、Word、TXT文件上传自动解析内容并存储2. 对接OpenAI API实现基于文档内容的问答返回答案时需标注参考文档名称和页码3. 提供文档增删查、对话历史查询接口4. 给出接口请求参数、响应格式示例,以及关键模块的代码实现(包含错误处理和数据验证)。 这也是我觉得最神奇的地方 —— 这个 Prompt 没有多余的描述却精准覆盖了项目后端的核心需求。AI 返回的结果不仅包含了上传、问答、文档管理等所有必要接口的代码还考虑到了文件格式验证、API 密钥配置、数据库模型设计等细节甚至给出了接口调用的示例。原本我以为需要拆分多个步骤逐步实现的功能AI 一次性就给出了完整且可运行的方案省去了我大量查阅文档和设计接口的时间。更意外的是它在代码中加入了异常捕获机制比如处理文件解析失败、API 调用超时等情况,这些都是我初期没有考虑到的点,极大提升了代码的健壮性。 最坑 Prompt / 交互: 最坑的一次交互是让 AI 实现 “文档解析并提取页码信息” 的功能。我当时的 Prompt 是 “实现 PDF 文档解析提取文本内容和对应的页码”AI 很快给出了使用 PyPDF2 库的代码。但实际测试时发现,代码虽然能提取文本,却无法准确对应页码 —— 比如多页 PDF 的文本会被合并成一个字符串,页码信息完全丢失。我反复运行代码,确认不是环境问题后,又去查看 PyPDF2 的官方文档,发现 AI 给出的代码中遗漏了遍历每一页并记录页码的关键逻辑只是简单读取了所有页面的文本。更麻烦的是当我指出这个问题后AI 第二次修改的代码虽然加入了页码记录,但却出现了文本乱码的情况,原因是没有处理 PDF 的编码格式。这次交互让我意识到AI 虽然能快速生成代码,但对于需要精准细节控制的功能,可能会遗漏关键步骤,尤其是涉及到特定库的具体使用场景时,不能完全依赖 AI 的输出,必须结合官方文档进行验证。 2.3 Bug 解决 印象最深的一个 Bug 是 AI 生成的 “对话历史保存” 功能出现数据重复存储的问题。具体表现为,每次提交问题后,数据库中会同时保存两条完全相同的对话记录,一条有 sources参考来源信息一条没有。我首先查看了 AI 生成的/api/ask接口代码发现问题出在逻辑处理上AI 在调用 OpenAI API 获取答案后,先执行了一次对话记录保存(此时 sources 还未解析完成),然后在解析完参考来源后,又执行了一次保存操作,导致重复插入。 为了定位问题我先打印了代码中的执行流程确认了两次db.session.add()调用的存在。接着查看代码结构,发现 AI 将 “保存对话” 和 “解析来源” 分成了两个独立的步骤,且没有添加判断条件。找到问题根源后,我对代码进行了修改:将两次保存操作合并,在解析完答案和参考来源后,一次性创建对话记录并保存到数据库中,删除了多余的保存逻辑。同时,我添加了事务处理,确保如果解析来源失败时,对话记录不会被部分保存。 这次经历让我明白AI 生成的代码可能存在逻辑冗余或流程设计不合理的问题,不能直接运行后就不管。遇到 Bug 时,需要先梳理代码的执行流程,定位问题所在,再结合业务逻辑进行修正。虽然 AI 能快速生成功能代码,但在流程优化和逻辑严谨性上,还需要开发者根据实际场景进行调整。
  3. 自我反思 3.1 离开 AI我还能写出这个吗 诚实地说,离开 AI我能写出这个项目但需要花费至少 3 倍以上的时间,而且功能会相对简陋。首先,在技术选型上,我原本只熟悉 Flask 的基础用法,对于对接 OpenAI API、文档解析库的选择比如 python-docx 处理 Word 文档、SQLite 数据库的模型设计等,都需要大量时间查阅资料。尤其是智能问答的核心逻辑 —— 如何将文档内容与用户问题关联起来,返回精准答案并标注来源,这部分涉及到文本分割、向量匹配等知识,我之前几乎没有接触过,没有 AI 的帮助,可能需要先花几周时间学习相关技术,才能开始实现。 其次,在代码实现上,比如响应式布局的 CSS 编写、JavaScript 的交互逻辑如文件拖拽上传、Toast 通知、接口的错误处理等AI 给出的代码虽然需要调整,但提供了完整的实现思路和基础框架。如果离开 AI我需要逐行编写这些代码还要解决跨浏览器兼容、移动端适配等细节问题效率会非常低。而且项目中的很多优化点比如对话历史的自动加载、输入长度限制、加载状态指示等都是 AI 在代码中主动加入的,若仅凭我自己的思考,可能会忽略这些提升用户体验的细节,最终的产品会显得粗糙。 所以AI 更像是一个 “加速器”它帮我跳过了基础实现的繁琐过程但核心的需求分析、功能设计、Bug 修复等环节,仍然需要我自己的判断和能力。 3.2 核心竞争力 AI 时代,程序员的核心竞争力不再是 “写出能运行的代码”,而是 “理解需求、掌控全局、解决复杂问题的能力”。AI 可以快速生成基础代码、实现常规功能,但它无法替代开发者对业务场景的深度理解 —— 比如这个智能知识库系统AI 能生成问答接口,但它不知道用户在上传大文件时需要分块处理,不知道企业用户需要多文档整合查询,不知道学生用户需要清晰的参考页码标注。这些基于实际使用场景的需求拆解和功能优化,才是产品能否真正解决用户痛苦的关键。 其次,是问题排查和逻辑优化的能力。正如之前遇到的重复存储 Bug、页码提取错误等问题AI 可能会生成有瑕疵的代码,但开发者需要具备快速定位问题、分析根源并给出最优解决方案的能力。这种能力源于对技术原理的理解、对代码逻辑的掌控,以及过往项目积累的经验,是 AI 短期内无法替代的。 另外创新思维和用户体验意识也至关重要。AI 生成的代码往往是基于常规方案的实现,而真正有竞争力的产品需要有差异化的亮点。比如这个项目中,我在 AI 生成的基础上增加了移动端的大按钮设计、对话历史的时间排序、文档处理进度的实时显示等功能这些都是从用户体验出发的创新优化。AI 无法主动产生这些基于用户需求的创新想法,只能在开发者的引导下实现。 最后持续学习和适应变化的能力。AI 技术在不断发展,新的工具、新的框架层出不穷,作为程序员,需要保持对新技术的敏感度,学会如何与 AI 高效协作,将 AI 作为提升效率的工具,而不是被技术淘汰。同时,要不断深化自己在特定领域的专业知识,比如 AI 时代,掌握数据分析、机器学习基础、业务逻辑梳理等能力,才能在复杂项目中发挥不可替代的作用。 总而言之AI 淘汰的是 “只会机械写代码” 的执行者,而真正有核心竞争力的程序员,是能借助 AI 工具,聚焦于需求理解、问题解决、产品创新的 “价值创造者”。 文档解析的具体过程是怎样的? 如何保证问答系统的准确性和可靠性? 有哪些具体的技术挑战和解决方案?