完善 README.md,添加项目简介、运行指南和开发心得
This commit is contained in:
parent
e25dff3734
commit
b95c9ffe29
3
.env.example
Normal file
3
.env.example
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
DEEPSEEK_API_KEY=your_deepseek_api_key_here
|
||||||
|
DEEPSEEK_BASE_URL=https://api.deepseek.com
|
||||||
|
FLASK_SECRET_KEY=your-secret-key-change-this-in-production
|
||||||
54
.gitignore
vendored
Normal file
54
.gitignore
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# Flask
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Database
|
||||||
|
*.db
|
||||||
|
*.sqlite
|
||||||
|
*.sqlite3
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*.tmp
|
||||||
|
git_config.txt
|
||||||
108
README.md
108
README.md
@ -1,57 +1,34 @@
|
|||||||
# 🧠 智能知识库问答系统
|
# 🧠 智能知识库问答系统
|
||||||
|
|
||||||
一个基于 Flask 的企业/课程智能问答系统,支持上传自有文档并进行精准问答,减少人工答疑成本。
|
## 简介
|
||||||
|
|
||||||
## ✨ 核心功能
|
这是一个基于 Flask 的企业/课程智能问答系统,支持上传自有文档并进行精准问答,减少人工答疑成本。
|
||||||
|
|
||||||
- 📚 **文档上传与管理**:支持上传 PDF、Word、TXT 等格式的文档,自动进行智能解析
|
**一句话介绍**:这个项目解决了企业和教育场景中大量重复性答疑的痛点,让用户上传文档后即可获得精准的 AI 问答服务。
|
||||||
- 🤖 **智能问答**:基于上传的文档内容,提供精准的问答服务
|
|
||||||
- 💾 **对话历史**:自动保存所有问答记录,方便回顾和查看
|
|
||||||
- 📱 **响应式设计**:完美支持桌面端和移动端访问
|
|
||||||
- 🎨 **美观界面**:现代化的 UI 设计,提供良好的用户体验
|
|
||||||
|
|
||||||
## 🚀 快速开始
|
## 如何运行
|
||||||
|
|
||||||
### 环境要求
|
1. **安装依赖**:`pip install -r requirements.txt`
|
||||||
|
2. **配置 Key**:复制 `.env.example` 为 `.env` 并填入 DeepSeek API Key
|
||||||
- Python 3.8+
|
3. **启动**:`python app.py`
|
||||||
- pip
|
|
||||||
|
|
||||||
### 安装步骤
|
|
||||||
|
|
||||||
1. **克隆项目**
|
|
||||||
```bash
|
|
||||||
git clone <repository-url>
|
|
||||||
cd 12
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **安装依赖**
|
|
||||||
```bash
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **配置环境变量**
|
|
||||||
|
|
||||||
创建 `.env` 文件并配置以下变量:
|
|
||||||
```env
|
|
||||||
OPENAI_API_KEY=your_openai_api_key_here
|
|
||||||
FLASK_SECRET_KEY=your_secret_key_here
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **初始化数据库**
|
|
||||||
```bash
|
|
||||||
python app.py
|
|
||||||
```
|
|
||||||
|
|
||||||
数据库会自动创建在项目根目录下的 `knowledge_base.db` 文件中。
|
|
||||||
|
|
||||||
5. **启动应用**
|
|
||||||
```bash
|
|
||||||
python app.py
|
|
||||||
```
|
|
||||||
|
|
||||||
应用将在 `http://localhost:5000` 启动。
|
应用将在 `http://localhost:5000` 启动。
|
||||||
|
|
||||||
|
## 功能列表
|
||||||
|
|
||||||
|
- [x] 文档上传与管理(支持 PDF、Word、TXT 格式)
|
||||||
|
- [x] 智能问答(基于上传的文档内容)
|
||||||
|
- [x] 对话历史保存
|
||||||
|
- [x] 响应式设计(支持桌面端和移动端)
|
||||||
|
- [x] 数据持久化(SQLite 数据库)
|
||||||
|
- [x] 错误处理和用户反馈
|
||||||
|
- [ ] 集成 LangChain 进行更强大的文档处理(待开发)
|
||||||
|
- [ ] 使用 ChromaDB 建立向量数据库(待开发)
|
||||||
|
- [ ] 支持更多文档格式(Excel、PPT 等)(待开发)
|
||||||
|
- [ ] 添加文档预览功能(待开发)
|
||||||
|
- [ ] 实现对话导出功能(待开发)
|
||||||
|
- [ ] 添加用户认证和权限管理(待开发)
|
||||||
|
|
||||||
## 📖 使用指南
|
## 📖 使用指南
|
||||||
|
|
||||||
### 1. 上传文档
|
### 1. 上传文档
|
||||||
@ -232,4 +209,43 @@ MIT License
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**享受智能问答带来的便利!** 🎉
|
## 👥 团队成员与贡献 (必填)
|
||||||
|
|
||||||
|
| 姓名 | 学号 | 主要贡献 (具体分工) |
|
||||||
|
|:---:|:---:|:---|
|
||||||
|
| 宋鹏淳 | 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 工具,聚焦于需求理解、问题解决、产品创新的 “价值创造者”。
|
||||||
|
文档解析的具体过程是怎样的?
|
||||||
|
如何保证问答系统的准确性和可靠性?
|
||||||
|
有哪些具体的技术挑战和解决方案?
|
||||||
Loading…
Reference in New Issue
Block a user